Ich bin dabei mit StringGrid.Objects zu experimentieren.
Jetzt habe ich ein kleines Test Form geschrieben und folgendes passiert.
wenn ich im OnDrawCell Ereignis eine if Abfrage habe dann flimmert das Grid
nehme ich es raus dann ist alles schön
Flimmert
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if (gdFixed in State) then begin
StringGrid1.Canvas.Brush.Color := clBtnFace;
StringGrid1.Font.Color := ClBlack;
StringGrid1.Canvas.FillRect(Rect);
StringGrid1.Canvas.TextOut(Rect.Left+1, Rect.Top+1, (StringGrid1.Cells[ACol,ARow]));
end else
begin
if assigned(StringGrid1.Objects[ACol, ARow]) then
StringGrid1.Canvas.Brush.Color := (StringGrid1.Objects[ACol,ARow] As TDataCell).CellColor ;
StringGrid1.Font.Color := ClWhite;
StringGrid1.Canvas.FillRect(Rect);
StringGrid1.Canvas.TextOut(Rect.Left+1, Rect.Top+1, (StringGrid1.Cells[ACol,ARow]));
end;
end;
Flimmert nicht
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
{ if (gdFixed in State) then begin
StringGrid1.Canvas.Brush.Color := clBtnFace;
StringGrid1.Font.Color := ClBlack;
StringGrid1.Canvas.FillRect(Rect);
StringGrid1.Canvas.TextOut(Rect.Left+1, Rect.Top+1, (StringGrid1.Cells[ACol,ARow]));
end else }
begin
if assigned(StringGrid1.Objects[ACol, ARow]) then
StringGrid1.Canvas.Brush.Color := (StringGrid1.Objects[ACol,ARow] As TDataCell).CellColor ;
StringGrid1.Font.Color := ClWhite;
StringGrid1.Canvas.FillRect(Rect);
StringGrid1.Canvas.TextOut(Rect.Left+1, Rect.Top+1, (StringGrid1.Cells[ACol,ARow]));
end;
end;
Als Anlage noch mal das Form