Lösung:
Delphi-Quellcode:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
MyRect :TRect;
begin
if (DataModule1.Query1['PLANUNGSTERMIN'] < Date) then
begin
MyRect := Rect;
DBGrid1.Canvas.Brush.Color := clred;
DBGrid1.Canvas.Font.Color := clred;
MyRect.Left := 1;
MyRect.Right := 10;
DBGrid1.DefaultDrawColumnCell(MyRect, DataCol, Column, State);
end;
end;
Sieht für mich irgendwie falsch aus!
Der Event wird für jede Zelle im Grid aufgerufen, zeichnet aber immer nur zwischen Pixel 1 und 10 (macht also für jede Spalte immer wieder das gleiche, solange die Bedingung in der Zeile zutrifft), was übrigens spätestens bei geänderten Metriken für die FixedColumn zu einem Problem werden kann.
Leider gibt es keinen Event, der aufgerufen wird, wenn die FixedColumn gezeichnet wird. Insofern ist es schon ein akzeptabler WorkAround, den Event einer anderen Spalte heranzuziehen - die Betonung liegt aber da auf
eine.
Die Breite der Indicator-Spalte steht übrigens in ColWidth[0].
Bei Brush.Color = clRed und Font.Color = clRed kann man auch gleich ein FillRect nehmen. Eventuell muss man das Rect dann vorher um 1 Pixel schrumpfen, um die Gitterlinien nicht zu übermalen.