Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Stringgrid flimmert (https://www.delphipraxis.net/99285-stringgrid-flimmert.html)

Texas 10. Sep 2007 00:40


Stringgrid flimmert
 
Liste der Anhänge anzeigen (Anzahl: 1)
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
:gruebel:

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

Cyberbob 10. Sep 2007 00:43

Re: Stringgrid flimmert
 
Versuch mal
Delphi-Quellcode:
StringGrid1.DoubleBuffered := True
im OnCreate deines Formulars.

[EDIT]

Ich sehe grad, was du mit Flimmern meinst. Dein Programm scheint die Zellen immer wieder neu zu zeichnen. Hast du irgendwo ne Endlosschleife gebaut?
Ich würde mal schaun, wo er immer wieder reinspringt.
Hab jetzt hier kein Delphi installiert, sonst würde ich selbst mal testen!

Hansa 10. Sep 2007 01:40

Re: Stringgrid flimmert
 
Es ist keinerlei Abfrage auf Row und Col zu sehen. Kein Wunder, dass das "flimmert". DoubleBuffered oder ähnliches braucht man da normalerweise nicht.

raiguen 10. Sep 2007 09:29

Re: Stringgrid flimmert
 
Zitat:

Zitat von Hansa
Es ist keinerlei Abfrage auf Row und Col zu sehen. Kein Wunder, dass das "flimmert".

:roll: Quatsch... Das Flimmern hat damit nix zu tun! Ausserdem ist eine Abfrage schon dahingend vorhanden, als dass nach FixedRow bzw FixedCol ((gdFixed in State) unterschieden wird.

Das Flimmern kommt hier zustande:
Delphi-Quellcode:
 StringGrid1.Font.Color := ...
Klitzekleine Änderung, und das Flimmern hört auf:
Delphi-Quellcode:
 StringGrid1.Canvas.Font.Color := ...

Texas 10. Sep 2007 09:47

Re: Stringgrid flimmert
 
Besten Dank.

Währe ich nie drauf gekommen mit dem Canvas


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz