![]() |
ListBox.SelectAll dauert etwas länger
Ich habe eine TListBox mit Style=lbVirtualOwnerDraw mit ca. 50k Einträgen.
Wenn ich ein SelectAll mache dauert das etwas länger, und wenn das SelectAll endlich fertig ist, werden die letzten Einträge der Liste angezeigt. Ich möchte aber erstens, dass das ohne merkliche Verzögerung abläuft und dass am Schluss die Einträge angezeigt werden, die vorher angezeigt wurden. Vorerst habe ich das so gelöst:
Delphi-Quellcode:
Das geht blitzartig und die Darstellung ist so, wie ich es möchte.
var i:integer;
begin i:=ListBox.TopIndex; ListBox.Visible:=false; // Bei vielen Einträgen dauert SelectAll etwas länger ListBox.SelectAll; ListBox.TopIndex:=i; ListBox.Visible:=true; end; Mir gefällt aber das .Visible:=false und ab Schluss Visible:=true nicht. Weiß jemand eine andere Lösung? |
AW: ListBox.SelectAll dauert etwas länger
Versuch es mal mit
Delphi-Quellcode:
ListBox.Items.BeginUpdate;
try // hier jetzt selektieren finally ListBox.Items.EndUpdate; end; |
AW: ListBox.SelectAll dauert etwas länger
Und wenn der Code von Sir Rufo keine Besserung bringt (die Items werden ja nicht verändert sondern nur selektiert, was im Hintergrund wahrscheinlich zig1000 Messages verursacht) dann vielleicht dies:
Delphi-Quellcode:
// von TeamB
procedure LockControl(c: TWinControl; lock: boolean); begin if (c = nil) or (c.Handle = 0) then exit; if lock then SendMessage(c.Handle, WM_SETREDRAW, 0, 0) else begin SendMessage(c.Handle, WM_SETREDRAW, 1, 0); RedrawWindow(c.Handle, nil, 0, RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN); end; end; LockControl(ListBox, True); try ListBox.SelectAll; ListBox.TopIndex:=i; finally LockControl(ListBox, False); end; |
AW: ListBox.SelectAll dauert etwas länger
Das Problem sind die 50k Einträge. Da Fehler an der Wurzel gepackt werden sollen, setze hier an: An deinem GUI-Konzept ist was faul, denn wer scrollt schon durch 50k Einträge?
|
AW: ListBox.SelectAll dauert etwas länger
Zitat:
funktioniert ganz hervorragend. Vielen Dank. |
AW: ListBox.SelectAll dauert etwas länger
Zitat:
Wenn die Entwickler auch dieser Meinung wären, dann 1) wären ListBoxen in ihrer Kapazität limitiert 2) gäbe es z.B. kein BeginnUpdate/EndUpdate, denn das wäre ja nicht nötig. Warum, deiner Meinung nach, wurde die Limitierung von max 32767 Einträgen, die bis Windows 98 galt, aufgehoben? Brauchst nicht anworten, das Problem ist gelöst. |
AW: ListBox.SelectAll dauert etwas länger
Zitat:
Es muß also nicht unbedingt das Ziehl gewesen sein die Beschränkung aufzuheben ... dieses kann ausversehn mitgekommen sein. :stupid: z.B. die Limitierung beim Memo wurde dadurch aufgehoben, daß man von einem (vermutlich) statischen 64 KB-Puffer weggegangen ist. :roll: |
AW: ListBox.SelectAll dauert etwas länger
Zitat:
Zitat:
Zitat:
|
AW: ListBox.SelectAll dauert etwas länger
Zitat:
MfG Dalai |
AW: ListBox.SelectAll dauert etwas länger
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:54 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