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: Zitieren
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 Zitieren
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! Zitieren
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 Zitieren
Empfohlene Beiträge
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.