Die Zuweisung von OnDrawCell() kannst du ruhig im Object Inspector vornehmen - und einmal genügt auch. Außerdem kannst du beiden StringGrids die gleiche Routine zuweisen, wenn du eine kleine Änderung machst. Und das Neuzeichnen könnte so funktionieren:
Delphi-Quellcode:
// ...
procedure TForm1.FormCreate(Sender: TObject);
begin
farbe := clYellow;
end;
procedure TForm1.StringGridDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
if not Odd(ARow) and not (gdFixed in State) then
// so funktioniert der shared event handler
with Sender as TStringGrid do
begin
Canvas.Brush.Color := farbe;
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
end;
end;
procedure TForm1.Farbe1Click(Sender: TObject);
begin
with ColorDialog1 do
if Execute then
farbe := Color;
// Neuzeichnen bei nächster Gelegenheit
StringGrid1.Invalidate;
StringGrid2.Invalidate;
end;
end.
Getippt und nicht getestet.
Grüße vom marabu