Pointerman Geschrieben 15. Januar 2003 Geschrieben 15. Januar 2003 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:
geloescht_JesterDay Geschrieben 15. Januar 2003 Geschrieben 15. Januar 2003 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
Pointerman Geschrieben 17. Januar 2003 Autor Geschrieben 17. Januar 2003 @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!
geloescht_JesterDay Geschrieben 17. Januar 2003 Geschrieben 17. Januar 2003 Originally posted by Pointerman @JesterDay Danke, im Großen und Ganzen kam das schon einigermaßen hin. Ich hab es jetzt endlich! Muss wohl daran liegen, dass ich schon lange kein Standart-Grid mehr verwendet hab
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden