![]() |
TListview im Virtual Modus
Hi Delphianer
Ich befülle eine Lsitview mit ca 1000 Zeilen nun ist es sehr langsam. Ich habe gelesen das man vor dem befüllen ein BeginUpdate und danach ein EndUpdate setzen soll. Nun ist es aber trotzdem noch langsam. Danach hab ich bisschen gegoogelt und gelesen man könne ne Listview im VirtualModus verwenden indem man OwnerData auf True setzt. Leider wird die Listview jetzt aber nicht mehr befüllt. So hab ich es bisher gemacht mit dem Button Click.
Delphi-Quellcode:
wie muss ich das genau bewerkstelligen mit dem OwnerData damit das funktioniert?
procedure TForm1.BitBtn1Click(Sender: TObject);
var Li : TListItem; begin Li := Listview1.Items.Add; Li.Caption := 'Text Spalte 1'; Li.SubItems.Add('Text Spalte 2'); Li.SubItems.Add('Text Spalte 3'); Li.SubItems.Add('Text Spalte 4'); listview1.Items.b end; Grüsse Zodi |
AW: TListview im Virtual Modus
Aktuell schreibst du die Daten direkt in die ListView. Eine virtuelle Liste lebt aber davon, dass die Daten in einer extra Datenstruktur abgelegt werden. Also beispielsweise eine Klasse und jede Instanz davon in eine Liste. Und an dieser Liste bedient sich dann die virtuelle ListView.
|
AW: TListview im Virtual Modus
Hat wer ein beispiel ich bin noch Neuling.
Hab schon gegoogelt aber nichts gefunden was ich verstanden habe. |
AW: TListview im Virtual Modus
Dass das ListView so lahm ist, liegt auch stark an Delphis extrem schlechter Umsetzung der TSubItems mit einem TStrings-Erben.
Ich hab mir mal irgendwann einen TListItem-Erben geschrieben und einen dazugehörigen TSubItems-Erben, der alle Schreibzugriffe direkt an Windows weitergibt ohne sie selbst zu speichern. Man kann zwar nicht mehr lesend auf TListItem.SubItems.Strings[] zugreifen (braucht man oft auch nicht, könnte man aber threoretisch auch über WinAPI-Calls realisieren), dafür läuft das um ein Vielfaches schneller. Falls da Interesse besteht, kann ich das mal hochladen. Eine brauchbare Lösung zu TListGroups fehlt mir aber noch. |
AW: TListview im Virtual Modus
Wäre es nicht einfacher einfach eine Virtual String Tree zu nutzen?
|
AW: TListview im Virtual Modus
Ich denke auch, dass der
![]() Mit dem zeige ich auch Listen mit einigen 10.000 Einträgen ohne Probleme an. Das ist natürlich nur dann sinnvoll, wenn darin auch gefiltert werden kann. Dem User einfach nur so lange Listen hinknallen, in denen er dann durch scrollen muss, bringt wenig. |
AW: TListview im Virtual Modus
Moin, zumindest was zum spielen kommt hier, sicherlich updatefähig.
Delphi-Quellcode:
Grüße in die Rundeprocedure TForm1.Button1Click(Sender: TObject); var Li : TListItem; i : integer; begin Listview1.Clear ; ListView1.OwnerData := false; ListView1.Items.Count :=10; ListView1.OwnerData:= false; for i := 1 to 100 do begin Li := Listview1.Items.Add; Li.Caption := inttostr(i) end; end; procedure TForm1.Button2Click(Sender: TObject); var Li : TListItem; i : integer; begin Listview1.Clear ; ListView1.OwnerData := True; ListView1.Items.Count := 10000; ListView1.OwnerData:= true; // switch to virtualmode; for i := 1 to 100 do begin Li := Listview1.Items.Add; Li.Caption := inttostr(i) end; end; procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem); begin if Item <> nil then Item.Caption := Item.Index.ToString(); end; |
AW: TListview im Virtual Modus
Zitat:
|
AW: TListview im Virtual Modus
Zitat:
|
AW: TListview im Virtual Modus
Ich sehe bei den Scrollbalken im VST auch keinen Unterschied. Sowohl im Windows-Standard, als auch bei der Verwendung von VCL-Styles. Wo tritt das Problem denn auf?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 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