| Autor |
Beitrag |
Chatfix
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Di 18.10.05 10:44
Hallo,
ich habe zwar gesucht weis aber nciht so recht nach wasu nd hab auch nix passendes gefunden, deshalb meine Frage.
Ich habe 9999 einträge in einem array dessen Typ ein Record ist und speichere diese per HandleStream.
Will ich diese einträge nun auslesen funktioniert das superschnell, ich will aber alle einträge in einem ListView und das hinzufügen per schleife (for to do) aus dem array dauert ewig.
Die ersten einträge gehen sper schnell und es wird immer langsamer...
hat einer eine idee an was das leigen könnte?
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
Martin1966
      
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: Di 18.10.05 11:02
Hallo
Die Listview hat den Ruf das sie sehr langsam ist. Rufst du ganz am Anfang bevor du die Items hinzufügst auch BeginUpdate auf und am Ende EndUpdate?
Lg Martin
|
|
Chatfix 
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Di 18.10.05 11:29
Also ich habe das ListView extra auf Visible := False gesetzt.
BeginUpdate und EndUpdate gibts bei mir nicht 
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
Martin1966
      
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: Di 18.10.05 11:46
Chatfix hat folgendes geschrieben: | BeginUpdate und EndUpdate gibts bei mir nicht  |
Das sind Methoden der Eigenschaft Items.
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Di 18.10.05 12:11
Ich würde den Virtualmode der TListView nehmen.
Im Inspector
Delphi-Quelltext 1:
| ListView.OwnerData := True; -- Delphi OH verwenden!!! |
Zur Laufzeit (nach dem LAden des Arrays)
Delphi-Quelltext 1:
| ListView.Items.Count := Length (MyArray); |
und den Event ListView.OnData setzen, z.B. so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm2.ListViewData(Sender: TObject; Item: TListItem); begin Item.Caption := MyRecord [Item.Index].Title; Item.SubItems.add (MyRecord [Item.Index].MoreText); Item.SubItems.add (MyRecord [Item.Index].AndMoreText); end; |
Damit kannst Du dann auch 100.000.000 Items in 1ms darstellen.
Bei 10000 Items könnte BeginUpdate/EndUpdate auch reichen. Aber der VirtualMode ist so elegant, weil z.B. die Darstellung sofort mit Änderungen in deinen Daten synchronisiert ist.
_________________ Na denn, dann. Bis dann, denn.
|
|
Martin1966
      
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: Di 18.10.05 12:15
Wow... danke für den Hinweis. Ich wusste gar nicht das es diese Eigenschaft gibt. 
_________________ Ein Nutzer der Ecke
|
|
Chatfix 
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Di 18.10.05 12:39
OK Vielen Dank, ich werde es mal ausprobieren!
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
|