Registriert seit: 6. Jul 2010
167 Beiträge
Delphi XE3 Professional
|
Wie ziehe ich eine farbige Linie in einem DBGrid / DrawColumnsCell-Event?
25. Nov 2021, 10:56
Wie ziehe ich eine farbige Linie in einem DBGrid / DrawColumnsCell-Event?
Dieses Event wird - so ich es richtig verstanden habe-, zellen-weise und von der Reihenfolge her Zeile für Zeile durchlaufen.
Ich möchte in meinem Grid bunte Hintergründe und Linien haben. Das soll sich jeweils auf Zeilen oder Zeilengruppen beziehen.
Dabei sollen die Zeilen je nach Inhalt bunt hinterlegt sein oder aber einzelne horizontale Rahmenlinien bunt gemalt.
Für den Hintergrund klappt das wunschgemäß, für die Linie hingegen nicht.
Der Hintergrund wird wunschgemäß quer durchgezogen, die Rahmen-Linie wird hingegen nur für die erste Zelle gezeichnet.
Hier sind Details:
DBGrid_TraDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
Var ......
....
// so klappt es für den Hintergrund, eine neue Woche wird erkannt: aufgrund einer Zelleninformation
if woche_ <> woche_temp then begin
woche_temp:=woche_;
If farbe = clwhite then farbe := clBlue // $00E7F2FF // wechselt mit der Woche
else farbe := clWhite;
// die oben zugewiesene "farbe" wird außerhalb des Zellen-Blocks als Hintergrund gesetzt und färbt mir wie gewollt die ganze Zeile ein, soweit so gut:
Canvas.Brush.Color := farbe; // Hintergrundfarbe wird zugewiesen
Dieselbe Übung möchte ich jetzt gerne mit der Linie tun. Ich kann dort meine Zelleninformation abfragen und auch den Rahmen der Zelle einfärben:
if Monatswechsel then begin // das sollte die Linie durchziehen, zeichnet aber nur die erste Zelle
Canvas.Pen.Color := $00243C79; // $005180F5; // Linienfarbe für die Monatstrennung
Canvas.Pen.Width := 5; // Stärke der Linie, erzeugt einen Ballon am Zeilenbeginn
Canvas.MoveTo(Rect.Left,Rect.Top);
Canvas.LineTo(Rect.Right,Rect.Top); // zeichnet eine rote Linie an die Oberkante und damit unter das alte Monat
end; //_______________________ Ende zur Monaterkennung
Was mir fehlt, ist ein Befehl außerhalb der Zellenschleife, der analog "Canvas.Brush.Color := farbe;" nicht den Hintergrund, sondern den oberen Rand des Rechtecks ALLER Rechtecke dieser Zeile setzt.
Also ich kratze mich mit der linken Hand am rechten Ohr, weil ich etwas bräuchte wie:
"Canvas.Rect.TopAllerRechtecke...."
Natürlich kann es so etwas nicht geben, daher meine Frage:
Wie zeichne ich eine einzelne bunte, horizontale Linie über alle Zellen einer Zeile?
Danke allen, die sich die Mühe gemacht haben, die Frage überhaupt zu verstehen. Und noch mehr jenen, die mir die Lösung verraten.
|