Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Sharky,
14. Dez 2004
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.
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Sharky,
14. Dez 2004
Eigentlich auch richtig :oops:
Durch das BeginUpDate wird ja das neu zeichnen unterbunden. Darum sollte das OnDraw beim füllen eh nicht aufgerufen wird.
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Sharky,
14. Dez 2004
Das ist schon klar.
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:
procedure TForm1.Button1Click(Sender: TObject);
var
myDrawCell : TDrawCellEvent;...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Sharky,
13. Dez 2004
Hai Hansa,
hast Du es schon einmal mit BeginUpdate / EndUpdate versucht? Das sollte man beim einfügen von großen Datenmengen immer verwenden.
procedure SGBeginUpdate (sg : TStringGrid);
var
ndx : Integer;
begin
for ndx := 0 to sg.RowCount-1 do
begin