ACol und ARow werden doch übergeben. Da zieht man also von ARow 1 ab, schaut, ob es die Zelle wirklich gibt und ermittelt, was in Cells[<betreffende Spalte>, ARow - 1] steht. Das vergleicht man mit dem eigenen Wert... fertig.
Ich würde in der Zeichen-Routine mich auf das Zeichnen beschränken.
Das Ermitteln, wie die Zeile eingefärbt wird, würde ich in so einem Fall über einen separaten Aufruf machen, der mir dieses ermittelt.
Dann kann man den Code sogar weiterverwenden
Delphi-Quellcode:
procedure TForm2.GetSpecialState( Sender : TObject; ACol, ARow : integer; var SpecialState : Boolean );
begin
// Jetzt in den Daten suchen und schauen, ob es sich hier um einen SpecialState handelt
end;
procedure TForm2.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
SpecialState : Boolean;
begin
// Hier den SpecialState abfragen lassen
SpecialState := False;
GetSpecialState( Sender, ACol, ARow, SpecialState );
// Jetzt kann man den weiter behandeln
With (Sender as TStringGrid) do
begin
if (gdSelected in State) then
Canvas.Brush.Color:= clYellow
else if (gdFixed in State) then
Canvas.Brush.Color:= clBtnHighlight
else
if (ARow Mod 2 = 0) then // Hier muss ich ja meine Abfrage einbinden, damit er schaut ob 2 aufeinanderfolgenden Zeilen den gleichen inhalt haben.. Oder habe ich das ganze falsch verstanden?
Begin
canvas.Brush.Color:= clWhite;
Canvas.Font.Color:= clBlack;
end
else
Canvas.Brush.Color:= clBtnFace;
Canvas.Font.Color:= clBlack;
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, StringGrid1.Cells[ACol, ARow]);
end;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)