AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ListView bei ShowModal sehr langsam?

Ein Thema von cs.rumpelstilzchen · begonnen am 29. Sep 2011 · letzter Beitrag vom 6. Okt 2011
Antwort Antwort
Benutzerbild von cs.rumpelstilzchen
cs.rumpelstilzchen

Registriert seit: 16. Sep 2004
Ort: NRW
72 Beiträge
 
Delphi XE4 Professional
 
#1

ListView bei ShowModal sehr langsam?

  Alt 29. Sep 2011, 18:10
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:
function TDk32KundenauswahlWnd.Kundenauswahl(var Kundendaten : TMyDbKundenDaten) : Byte;
begin
  Result := Self.Showmodal;
  Kundendaten := gActKundendaten;
end;
Funktioniert prima soweit!

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!!!

Eigentlich mus das Form aber Modal sein, damit der Benutzer keinen Mist bauen kann...

Weiss irgendjemand Rat?
Der weiß, daß er nichts weiß, wie alle anderen auch nichts wissen.
Nur weiß er, was die anderen und auch er selbst noch lernen müssen.
(Novalis 1772 - 1801)
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#2

AW: ListView bei ShowModal sehr langsam?

  Alt 29. Sep 2011, 19:56
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.
Das Bild hängt schief.
  Mit Zitat antworten Zitat
Benutzerbild von cs.rumpelstilzchen
cs.rumpelstilzchen

Registriert seit: 16. Sep 2004
Ort: NRW
72 Beiträge
 
Delphi XE4 Professional
 
#3

AW: ListView bei ShowModal sehr langsam?

  Alt 30. Sep 2011, 11:53
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!
Der weiß, daß er nichts weiß, wie alle anderen auch nichts wissen.
Nur weiß er, was die anderen und auch er selbst noch lernen müssen.
(Novalis 1772 - 1801)
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#4

AW: ListView bei ShowModal sehr langsam?

  Alt 30. Sep 2011, 12:12
Sie zeigt nur die "alten" Daten an
Die in VirtualMode ja nicht drin sind und somit bei erneutem Öffnen keine Probleme machen können.

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)
  Mit Zitat antworten Zitat
Benutzerbild von cs.rumpelstilzchen
cs.rumpelstilzchen

Registriert seit: 16. Sep 2004
Ort: NRW
72 Beiträge
 
Delphi XE4 Professional
 
#5

AW: ListView bei ShowModal sehr langsam?

  Alt 6. Okt 2011, 11:36
Besten Dank euch!

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.

Funzt eigentlich genau so, wie ein modales Fenster!

Aber der Grund für die gewaltige Verzögerung ist mir nach wie vor schleierhaft...
Der weiß, daß er nichts weiß, wie alle anderen auch nichts wissen.
Nur weiß er, was die anderen und auch er selbst noch lernen müssen.
(Novalis 1772 - 1801)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:29 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