Zum Inhalt springen

Delphi 5 + TDBGrid: Wie färbe ich Zellen?


Pointerman

Empfohlene Beiträge

Hallo!

Weiß jemand wie ich in einem TDBGrid einzelne Zeilen oder Zellen einfärben kann? Ganze Spalten bringen es nicht. Ein anderes Grid kommt, glaube ich auch nicht in Frage, weil schon zuviel Code dranängt. Wenn jemand ein tolles(kostenfreies) Grid kennt, das von TDBGrid abstammt und deshalb zu meinem Prog kompatibel ist kann sich auch zu Wort melden!

Danke im Voraus

Maart:confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das kannst du selber machen, benutz einfach das OnCustomDrawCell Event. Du bekommst ein Canvas und den Text der rein soll übergeben (wenn ich mich recht erinnere) und musst alles selbst zeichen. ungefähr so (aus dem Kopf):


Canvas.Brush.color:= clRed;

Canvas.Font.color:= clWhite;

Canvas.FloodFill(ARect); {Wird soweit ich mich 

erinnere auch übergeben}

Canvas.Textout(AText, X, Y); { AText ist der Text 

der rein soll (wird übergeben) und X, Y, die Koordinaten}

ADone:= True; { Dem Grid sagen, das diese Zelle 

schon fertig ist, sonst zeichenet das Grid die Zelle 

nochmal}

So ungefähr müsste es funktionieren.

eine andere Möglichkeit gibt es nicht einzelne Zellen oder Reihen zu färben

Link zu diesem Kommentar
Auf anderen Seiten teilen

@JesterDay

Danke, im Großen und Ganzen kam das schon einigermaßen hin. Ich hab es jetzt endlich!

Für alle die es interessiert:

Event: OnDrawColumnCell

Wie JesterDay sagte: man bekommt Rect übergeben und kann damit FloodFill(Rect)

ausführen. Ein Canvas (Tja, der kann was:D ) bekommt man nicht, aber ich hab einfach den vom Grid genommen. Ach, was soll das Geschwafel, hier ist der Code:


procedure TReiheFrm.OriginalGrdDrawColumnCell(Sender: TObject;

  const Rect: TRect; DataCol: Integer; Column: TColumn;

  State: TGridDrawState);

begin

   OriginalGrd.Canvas.Brush.Color := clred;

  if OriginalGrd.Columns[0].Field.AsInteger = 5 then

  begin

    OriginalGrd.Canvas.FillRect(Rect);

    if DataCol = 0

    then Originalgrd.Canvas.TextOut(Rect.Left, rect.Top, OriginalGrd.Columns[0].Field.AsString)

    else Originalgrd.Canvas.TextOut(Rect.Left, rect.Top, OriginalGrd.Columns[1].Field.AsString);

  end;

Ist zwar nicht alles so sauber, aber es funzt für meine düsteren Zwecke! ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...