AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TListView füllen dauert lange - Geht es auch schneller?
Thema durchsuchen
Ansicht
Themen-Optionen

TListView füllen dauert lange - Geht es auch schneller?

Ein Thema von Ares · begonnen am 24. Apr 2007 · letzter Beitrag vom 24. Apr 2007
Antwort Antwort
Seite 1 von 2  1 2      
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#1

TListView füllen dauert lange - Geht es auch schneller?

  Alt 24. Apr 2007, 13:54
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
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#2

Re: TListView füllen dauert lange - Geht es auch schneller?

  Alt 24. Apr 2007, 13:56
Wie übergibst du die Elemente?

zeig mal den Codeschnipsel
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#3

Re: TListView füllen dauert lange - Geht es auch schneller?

  Alt 24. Apr 2007, 13:57
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.
  Mit Zitat antworten Zitat
Schubi

Registriert seit: 4. Nov 2003
Ort: Happurg (Nürnberg)
331 Beiträge
 
Delphi 2006 Professional
 
#4

Re: TListView füllen dauert lange - Geht es auch schneller?

  Alt 24. Apr 2007, 13:58
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.
Christian Schubert
Ich fange gerade erst an, den Umfang meiner Ahnungslosigkeit zu begreifen...
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#5

Re: TListView füllen dauert lange - Geht es auch schneller?

  Alt 24. Apr 2007, 14:09
Ich häts auch so wie schubi gemacht, deswegen meine Frage.
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Schubi

Registriert seit: 4. Nov 2003
Ort: Happurg (Nürnberg)
331 Beiträge
 
Delphi 2006 Professional
 
#6

Re: TListView füllen dauert lange - Geht es auch schneller?

  Alt 24. Apr 2007, 14:25
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?
Christian Schubert
Ich fange gerade erst an, den Umfang meiner Ahnungslosigkeit zu begreifen...
  Mit Zitat antworten Zitat
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#7

Re: TListView füllen dauert lange - Geht es auch schneller?

  Alt 24. Apr 2007, 14:53
Hallo!

Die Daten sehen so aus:

Delphi-Quellcode:
TMyEnum = (mnOne, mnTwo);

TMyInfo = record
  str1: String;
  str2: String;
  num : TMyEnum ;
end;

TMyInfos= array of TMyInfo;
Gefüllt wird die ListView dann so:

Delphi-Quellcode:
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;
Ist der Code vielleicht zu kompliziert? Mir fällt allerdings nicht ein, was man großartig anders machen könnte...
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#8

Re: TListView füllen dauert lange - Geht es auch schneller?

  Alt 24. Apr 2007, 14:55
guck dir mal den VirtualStringTree an, der wäre für sowas ideal
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#9

Re: TListView füllen dauert lange - Geht es auch schneller?

  Alt 24. Apr 2007, 14:57
Infos private in der Form, dann virtuell, wie ich schon sagte:

Delphi-Quellcode:
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;
Dadurch wird Infos nur noch dann verarbeitet, wenn die GUI die Anzeige verlangt (bzw. Du Funktionen wie sortieren etc. aufrufen würdest).

(PS: VirtualStringTree ist da doch schon eher Overkill, virtuell können auch normale Listen )
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 11. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#10

Re: TListView füllen dauert lange - Geht es auch schneller?

  Alt 24. Apr 2007, 15:05
Vesuch es damit:
Delphi-Quellcode:
ListView.ViewStyle := vsList;
//
//die ListView mit Daten füllen
//
ListView.ViewStyle := vsReport; // oder was auch immer gebraucht wird
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  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 01:20 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