![]() |
Re: Stringgrid spät anzeigen bzw. füllen
Moin Hansa,
habe dir doch ein Beispiel geliefert, da bist du leider nicht drauf eingegangen schade MfG Thorsten |
Re: Stringgrid spät anzeigen bzw. füllen
Moin, moin,
also Hansa Du bist auf dem Holzweg - Eiche :mrgreen: Mit einfach mal was auf Nil setzten ist das nicht getan. Du kannst Dir ein Grid ableiten und das OnPaint Ereignis solange blockieren, wie der Update läuft. Also letzlich die Routine in einer If Abfrage solange nicht ausführen solange Dein Ipdate läuft und am Ende rufst Du Paint nochmal auf. Ohne Komponentenableitung geht es meines Wissens nach nicht den Flaschenhals Windows Bildakutalisierung zu umgehen. Ansonsten höre auf dne Hai, den Sharky hat den anderen Flaschenhals, die fürchterlich langsamen Stringlisten ins Echolot genommen indem er Dir Begin- und Endupdate Routinen zugeschwemmt hat. Möge der Tag Kekse gute Laune und viele Lösungen bringen // Martin |
Re: Stringgrid spät anzeigen bzw. füllen
Zitat:
BeginUpdate macht aber nichts anderes als dafür zu sorgen das, in diesem Fall das SG, nicht neugezeichnet wird bis das EndUpdate aufgerufen wird. Genau dies ist nämlich das Nadelöhr beim Füllen von TStringListen, TListViews usw. Aber Du kannst ja beide genannten Möglichkeiten kombinieren:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var myDrawCell : TDrawCellEvent; begin myDrawCell := StringGrid1.OnDrawCell; // Event "merken" StringGrid1.OnDrawCell := nil; // Kein OnDrawCell SGBeginUpdate(StringGrid1); // Füllen des StringGrids mit Daten SGEndUpdate(StringGrid1); StringGrid1.OnDrawCell := myDrawCell; // gemerketes Event zuweisen end; |
Re: Stringgrid spät anzeigen bzw. füllen
Kurze Zwischenfrage : setze ich OnDrawCell auf nil, so tut sich absolut nichts. Ich kann es genau so gut weglassen. :shock:
|
Re: Stringgrid spät anzeigen bzw. füllen
Zitat:
Durch das BeginUpDate wird ja das neu zeichnen unterbunden. Darum sollte das OnDraw beim füllen eh nicht aufgerufen wird. |
Re: Stringgrid spät anzeigen bzw. füllen
Ich habe eben mal etwas gespielt: Ein StringGrid mit 5 Spalten und 10.000 Zeilen.
Ohne BeginUpdate / EndUpdate dauert das füllen jeder Zelle mit einem festen String ca. 140 ms. Mit BeginUpdate nur noch ca. 50ms. Ob ich das OnDrawCell "deaktiviere" macht keinen Unterschied wenn BeginUpDate verwendet wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz