![]() |
ListView bei ShowModal sehr langsam?
Hallo Leute!
Folgendes Problem: Ich habe ein Formular mit einer Kundenliste in einer ListView (vsReport). Dieses Formular rufe ich mittels einer public-function innerhalb der Unit aus dem Hauptprogamm auf:
Delphi-Quellcode:
Funktioniert prima soweit!
function TDk32KundenauswahlWnd.Kundenauswahl(var Kundendaten : TMyDbKundenDaten) : Byte;
begin Result := Self.Showmodal; Kundendaten := gActKundendaten; end; Aaaaaber... Wenn ich in der Listview einige Tausend Einträge habe, dann vergehen zwischen dem 'ShowModal'-Aufruf und dem auslösen des OnShow-Ereignisses der Form einige Sekunden!:( Je mehr Einträge in der ListView, umso größer die Verzögerung! Auf einem typischen NetBook mit Atom-Prozessor und 2 Gb Ram - und darauf muss es laufen - bei 4.000 Einträgen etwa 12 Sekunden! Die Daten werden NUR beim ERSTEN Aufruf des Formulars aus einer Datenbank eingelesen, was zu meiner Verwunderung sogar schneller geht (5-6 Sekunden bei 4.000 Einträgen), als das spätere wiederaufrufen des Formulars ohne neu befüllen der ListView!!!:? Zeige ich das Formular aber NonModal und benutze statt 'Close' 'Hide', so geht alles blitzschnell ohne spürbare Verzögerung!!!:shock: Eigentlich mus das Form aber Modal sein, damit der Benutzer keinen Mist bauen kann... Weiss irgendjemand Rat? |
AW: ListView bei ShowModal sehr langsam?
Verwende den 'virtual mode' vom TListView. Dann musst Du das ListView nicht mehr füllen. Das LV holt sich die Daten über das Event "OnGetData" (oder so) selbst.
Ich glaube, Du musst 'OwnerDraw' setzen irgendwie, und dann noch das o.g. Event implementieren und LV.Items.Count auf 1000000 setzen, z.B. ;-) Wupps, in 0.1 Sekunden ist alles da. |
AW: ListView bei ShowModal sehr langsam?
Danke für die Info!
Aber das Problem liegt ja nicht im befüllen der Liste!:| Wenn das Formular nach einem Close erneut mittels ShowModal angezeigt wird, entsteht die lange Wartezeit, OHNE dass die Liste neu gefüllt wird. Sie zeigt nur die "alten" Daten an, die vorher schon drin waren... Ich verstehe bzgl. der ListView den Unterschied zwischen "ShowModal / Close" und "Show / Hide" nicht!:roll: |
AW: ListView bei ShowModal sehr langsam?
Zitat:
Eine weitere Möglichkeit wäre, das modale Fenster dynamisch bei Bedarf zu erzeugen (nicht automatisch, wie es leider Standard ist). Dann hättest Du immer ein jungfreuliches Fenster mit leerem ListView und das Verhalten immer gleich (ohne Altlasten vom vorherigen Öffnen) |
AW: ListView bei ShowModal sehr langsam?
Besten Dank euch!:thumb:
Hab's anders gelöst. das Formular ist jetzt 'StayOnTop', die Public-Einsprungprozedur wartet nach dem 'show' in einer Schleife darauf, dass der Benutzer sich entscheidet und gibt dann die entprechenden Werte zurück.8-) Funzt eigentlich genau so, wie ein modales Fenster! Aber der Grund für die gewaltige Verzögerung ist mir nach wie vor schleierhaft...:? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:36 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