Autor Beitrag
Chatfix
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Di 18.10.05 11:02 
Hallo :wink2:

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Di 18.10.05 11:46 
user profile iconChatfix hat folgendes geschrieben:
BeginUpdate und EndUpdate gibts bei mir nicht :?:

Das sind Methoden der Eigenschaft Items.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Di 18.10.05 12:11 
Ich würde den Virtualmode der TListView nehmen.
Im Inspector
ausblenden Delphi-Quelltext
1:
ListView.OwnerData := True; -- Delphi OH verwenden!!!					

Zur Laufzeit (nach dem LAden des Arrays)
ausblenden Delphi-Quelltext
1:
ListView.Items.Count := Length (MyArray);					

und den Event ListView.OnData setzen, z.B. so:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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
BeitragVerfasst: 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