AGB  ·  Datenschutz  ·  Impressum  







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

TListview im Virtual Modus

Ein Thema von Zodi · begonnen am 26. Apr 2020 · letzter Beitrag vom 28. Apr 2020
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Zodi
Zodi

Registriert seit: 19. Jul 2017
Ort: Berlin
47 Beiträge
 
Delphi XE7 Ultimate
 
#1

TListview im Virtual Modus

  Alt 26. Apr 2020, 17:22
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:
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;
wie muss ich das genau bewerkstelligen mit dem OwnerData damit das funktioniert?

Grüsse Zodi
Pascal
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#2

AW: TListview im Virtual Modus

  Alt 26. Apr 2020, 17:23
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.
  Mit Zitat antworten Zitat
Benutzerbild von Zodi
Zodi

Registriert seit: 19. Jul 2017
Ort: Berlin
47 Beiträge
 
Delphi XE7 Ultimate
 
#3

AW: TListview im Virtual Modus

  Alt 26. Apr 2020, 17:37
Hat wer ein beispiel ich bin noch Neuling.
Hab schon gegoogelt aber nichts gefunden was ich verstanden habe.
Pascal
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.081 Beiträge
 
Delphi 2009 Professional
 
#4

AW: TListview im Virtual Modus

  Alt 26. Apr 2020, 22:44
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.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#5

AW: TListview im Virtual Modus

  Alt 26. Apr 2020, 23:03
Wäre es nicht einfacher einfach eine Virtual String Tree zu nutzen?
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
885 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TListview im Virtual Modus

  Alt 27. Apr 2020, 08:26
Ich denke auch, dass der Virtual String Tree mittelfristig hier die bessere Lösung wäre. Der erfordert zwar etwas Einarbeitung, aber es sind gute Beispiele dabei, bei denen man "abschreiben" kann. Der ist nicht nur schnell, sondern auch sehr flexibel und hat ne Menge Features, die man nach und nach kennen lernen kann, wenn man möchte.

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.
The angels have the phone box.
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#7

AW: TListview im Virtual Modus

  Alt 27. Apr 2020, 09:42
Moin, zumindest was zum spielen kommt hier, sicherlich updatefähig.

Delphi-Quellcode:

procedure 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;
Grüße in die Runde
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.456 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: TListview im Virtual Modus

  Alt 28. Apr 2020, 10:05
Ich denke auch, dass der Virtual String Tree mittelfristig hier die bessere Lösung wäre.
Man möge bedenken, dass das optisch dann nicht das ist was man gerne hätte. Ich selber (Nein manche Kunden) haben das Problem, dass bei dem Dinge die Rollbalken anders aussehen wie das Rest des Programms.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: TListview im Virtual Modus

  Alt 28. Apr 2020, 11:17
Man möge bedenken, dass das optisch dann nicht das ist was man gerne hätte. Ich selber (Nein manche Kunden) haben das Problem, dass bei dem Dinge die Rollbalken anders aussehen wie das Rest des Programms.
Solange man sich an die Systemstandards hält, sollte es da keine Probleme geben. Bei uns sehen die genauso aus wie in anderen Programmen und unseren Programmen ansonsten auch.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
885 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: TListview im Virtual Modus

  Alt 28. Apr 2020, 11:31
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?
The angels have the phone box.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:50 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