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/)
-   -   TDBAdvGrid flackert bei Query.Refresh (https://www.delphipraxis.net/169600-tdbadvgrid-flackert-bei-query-refresh.html)

Medium 31. Jul 2012 10:11

TDBAdvGrid flackert bei Query.Refresh
 
Aloah Gemeinde. Ich nutze das TMS TDBAdvGrid zur Anzeige einer Hand voll Daten aus meiner DB. Da sich diese Daten regelmäßig ändern, löse ich alle 2 Sekunden ein Refresh der zugrundeliegenden Query aus. Dabei zeichnet sich das Grid natürlich neu, aber es flackert verdammt unschön dabei. Insbesondere in der Titelzeile und der Rahmen fallen dabei sehr auf, was ich so ungerne lassen würde.

Bisherige Maßnahmen die ich versucht habe:
Delphi-Quellcode:
MyGrid.BeginUpdate;
Query.Refresh;
MyGrid.EndUpdate;
(*****************************************)
Query.DisableControls;
Query.Refresh;
Query.EnableControls;
(*****************************************)
LockControl(MyGrid, true); // http://www.swissdelphicenter.ch/torry/showcode.php?id=1301
Query.Refresh;
LockControl(MyGrid, false);
Und praktisch alle Kombinationen davon zusammen. Es flackert einfach munter weiter, und scheint sich nicht die Bohne von obigen Maßnahmen betroffen zu fühlen :(

Das Grid hat den Standardlook den es hat, wenn man es aufs Formular zieht, abgesehen vom OwnerDraw, da ich dort die Texte von Hand zentriert zeichne. Aber auch ohne besondere Kniffe:
Delphi-Quellcode:
procedure TfrmAuftraege.gOrdersCustomCellDraw(Sender: TObject; Canvas: TCanvas; ACol, ARow: Integer; AState: TGridDrawState; ARect: TRect; Printing: Boolean);
var
  s: String;
  w, h: Integer;
  c: TColor;
begin
  if (ARow = 0) or (ACol = 0) then Exit;
  s := gOrders.Cells[ACol, ARow];
  w := Canvas.TextWidth(s);
  h := Canvas.TextHeight(s);
  if Odd(ARow) then c := gOrders.Bands.PrimaryColor else c := gOrders.Bands.SecondaryColor;
  Canvas.Brush.Color := c;
  Canvas.FillRect(Rect(ARect.Left, ARect.Top, ARect.Right-1, ARect.Bottom-1));
  case gOrders.Columns[ACol].Alignment of
    taLeftJustify : Canvas.TextOut(ARect.Left+5,                               ARect.Top+(ARect.Bottom-ARect.Top-h) div 2, s);
    taRightJustify: Canvas.TextOut(ARect.Right-w-5,                            ARect.Top+(ARect.Bottom-ARect.Top-h) div 2, s);
    taCenter     : Canvas.TextOut(ARect.Left+(ARect.Right-ARect.Left-w) div 2, ARect.Top+(ARect.Bottom-ARect.Top-h) div 2, s);
  end;
end;
Was könnte ich dem Grid denn noch mal so versuchen in die Zeichenspeichen zu werfen?

himitsu 31. Jul 2012 10:18

AW: TDBAdvGrid flackert bei Query.Refresh
 
Delphi-Referenz durchsuchenDoubleBuffered mal ausprobiert?

(das des Grids, und/oder der From)

Medium 31. Jul 2012 10:49

AW: TDBAdvGrid flackert bei Query.Refresh
 
Ups, vergessen zu erwähnen. Ist bei mir immer an, erster Handgriff nach neuem Formular bzw. Kompos die es haben :)

RSE 8. Aug 2012 12:39

AW: TDBAdvGrid flackert bei Query.Refresh
 
Ich ziehe TextRect gegenüber TextOut immer vor, da es tatsächlich nur im Rect schreibt. Ansonsten werden die Trennlinien zwischen den Zellen ggf. mit beschriftet ;-)

Zur Frage: Was passiert, wenn du das Grid nicht selbst zeichnest, sondern die Standardmethoden machen lässt? Flackerts dann auch?

TiGü 8. Aug 2012 13:55

AW: TDBAdvGrid flackert bei Query.Refresh
 
Zitat:

Anmerkung: Einige Steuerelemente, wie z.B. TRichEdit, können sich nicht selbst in ein Bitmap zeichnen. Für solche Steuerelemente müssen Sie DoubleBuffered auf false setzen.
Ist das hier vielleicht auch der Fall?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:01 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