So geht das aber nicht. Ein Grid kann man nicht einfach so mal eben einfärben, weil es sich eh neu zeichnet. Das DrawCell-Ereignis wird quasi ständig aufgerufen (Maus über das Grid, Fenster bewegen etc.). Und spätestens beim spontanen Neuzeichnen klappt die Logik nicht.
Du musst im Stringrid eine Abfrage einbauen:
Delphi-Quellcode:
Procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
If MustBeRed(aRow, aCol) Then
PaintRed(Rect)
Else
DontPaintRed(Rect)
End;
Die Funktion 'MustBeRed(aRow, aCol)' liefert True/False z.B. dann in Abhängigkeit von 'aRow' (gerade/ungerade) oder eben in Abhängigkeit irgendwelcher Daten in der Zelle 'StringGrid.Cells[aRow,aCol]' oder oder oder.
Um z.B. alle Zeilen rot zu färben, die in der 2.Spalte ein 'X' stehen zu haben, wäre die Funktion so:
Delphi-Quellcode:
Function TForm1.MostBeRed (aRow, aCol : Integer) : Boolean;
Begin
Result := (StringGrid.Cells[aRow,aCol] = 'X')
End;