![]() |
TListView füllen dauert lange - Geht es auch schneller?
Hallo!
Ich habe mir einen Dialog gebastelt, in dem einige Elemente in einer ListView angezeigt werden. Beim Aufruf wird ein Array mit den Elemente an den Dialog übergeben, die ListView gefüllt und der Dialog angezeigt. Bei 70 Elemenenten dauert es schon ca. 2-3 Sekunden bis der Dialog nach dem Aufruf erscheint. Das ist natürlich keine Ewigkeit, stört die flüssige Bedienung aber trotzdem merklich. Bevor ich die Elemente Einfüge habe ich ListView.Items.BeginUpdate und anschließend EndUpdate ausgeführt, dies ändert jedoch nicht. Gibt es sonst eine möglichkeit das Füllen zu beschleunigen? Es kann ja nicht sein, dass ein moderner PC 3 Sekunden braucht um 70 Elemente in eine Liste zu schreiben... Ich bin für jeden Tipp dankbar. Gruß Ares |
Re: TListView füllen dauert lange - Geht es auch schneller?
Wie übergibst du die Elemente?
zeig mal den Codeschnipsel |
Re: TListView füllen dauert lange - Geht es auch schneller?
Tipp: virtuelle Liste :)
Die Daten in dem Array behalten, MeinListView.Items.Count setzen und nur in MeinListView.OnData ans Listview liefern. Damit werden die wirklich erst wenn Sie angezeigt werden müssen in TListItems verpackt. |
Re: TListView füllen dauert lange - Geht es auch schneller?
Du kannst dir ein TStrings erzeugen, da rein schreiben und das Ganze dann der ListBox mit Items.Assign zuweisen.
Ich hab allerdings keine Ahnung ob das schneller wäre. |
Re: TListView füllen dauert lange - Geht es auch schneller?
Ich häts auch so wie schubi gemacht, deswegen meine Frage.
|
Re: TListView füllen dauert lange - Geht es auch schneller?
Wäre das schneller? bin mir wie erwähnt nicht sicher.
Warum dauert das überhaupt? Am hinzufügen zu TStrings kanns net liegen, da muss doch die Lisbox noch irgendwie zwischenrein meeren, oder? |
Re: TListView füllen dauert lange - Geht es auch schneller?
Hallo!
Die Daten sehen so aus:
Delphi-Quellcode:
Gefüllt wird die ListView dann so:
TMyEnum = (mnOne, mnTwo);
TMyInfo = record str1: String; str2: String; num : TMyEnum ; end; TMyInfos= array of TMyInfo;
Delphi-Quellcode:
Ist der Code vielleicht zu kompliziert? Mir fällt allerdings nicht ein, was man großartig anders machen könnte...
procedure TMyDlg.fillListView(Infos: TMyInfos; AListView: TListView);
var i: Integer; newListItem: TListItem; begin AListView.Clear; AListView.Items.BeginUpdate; for i:=0 to length(Infos)-1 do begin newListItem := AListView.Items.Add; ; newListItem.Caption := Infos[i].str1; newListItem.SubItems.Add(Infos[i].str2); if (Infos[i].num=mnOne) then begin newListItem.SubItems.Add('One'); newListItem.Checked := true; end else begin newListItem.SubItems.Add('Two'); newListItem.Checked := false; end; end; AListView.Items.EndUpdate; end; |
Re: TListView füllen dauert lange - Geht es auch schneller?
guck dir mal den VirtualStringTree an, der wäre für sowas ideal
|
Re: TListView füllen dauert lange - Geht es auch schneller?
Infos private in der Form, dann virtuell, wie ich schon sagte:
Delphi-Quellcode:
Dadurch wird Infos nur noch dann verarbeitet, wenn die GUI die Anzeige verlangt (bzw. Du Funktionen wie sortieren etc. aufrufen würdest).
MyListView.OwnerData := true;
MyListView.Items.Count = Length(Infos); procedure TMyDlg.MyListViewData(Item: TListItem); begin if Item.Index>=Length(Infos) then Exit; Item.Caption := Infos[Item.Index].str1; Item.SubItems.Add(Infos[Item.Index].str2); if (Infos[Item.Index].num=mnOne) then begin Item.SubItems.Add('One'); Item.Checked := true; end else begin Item.SubItems.Add('Two'); Item.Checked := false; end; end; (PS: VirtualStringTree ist da doch schon eher Overkill, virtuell können auch normale Listen ;) ) |
Re: TListView füllen dauert lange - Geht es auch schneller?
Vesuch es damit:
Delphi-Quellcode:
ListView.ViewStyle := vsList;
// //die ListView mit Daten füllen // ListView.ViewStyle := vsReport; // oder was auch immer gebraucht wird |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:31 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