ich plage mich gerade etwas ab um Zellen in einem Stringgrid nach unterschiedlichen Kriterien einzufärben.
Hab da einige Beispiele gefunden und an sich klappt es ganz gut. Allerdings bin ich über unterschiedliche Codevarianten gestolpert und möchte nun wissen wie man korrekt mit solchen Events umgeht.
Als Beispiel mal ein TStringgrid.
Wird in Event auf das Objekt per Objektvariable zugegriffen oder über "Sender"
ZB
Code: Alles auswählen
procedure TfrmTracks.StringGrid1DrawCell(Sender: TObject; aCol,
aRow: Integer; aRect: TRect; aState: TGridDrawState);
var
ZellText:string;
begin
If (gdFixed in aState) then exit;
if (aCol = 3) then begin
stringgrid1.Canvas.Brush.Color := clYellow; //<-- auf den Stringgrid1 direkt zugreifen
stringgrid1.Canvas.Font.Color := clBlack;
stringgrid1.canvas.FillRect(arect);
ZellText := stringgrid1.Cells[aCol, aRow]; // Text der Zelle holen
StringGrid1.Canvas.TextOut(aRect.Left + 2, aRect.Top + 2, ZellText);
end;
end;
Code: Alles auswählen
procedure TfrmTracks.StringGrid1DrawCell(Sender: TObject; aCol,
aRow: Integer; aRect: TRect; aState: TGridDrawState);
var
ZellText:string;
grid: TStringGrid;
begin
grid := Sender as TStringGrid; //<--- den Sender casten
If (gdFixed in aState) then exit;
if (aCol = 3) then begin
grid.Canvas.Brush.Color := clYellow; // <---und ab hier über die gecastete variable zugreifen
grid.Canvas.Font.Color := clBlack;
grid.canvas.FillRect(arect);
ZellText := grid.Cells[aCol, aRow]; // Text der Zelle holen
grid.Canvas.TextOut(aRect.Left + 2, aRect.Top + 2, ZellText);
end;
end;
...oder ist es eh egal?
Wie ist das korrekt und sauber ?