Delphi-PRAXiS
Seite 3 von 6     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   VirtualStringTree - Nodes hinzufügen (https://www.delphipraxis.net/179669-virtualstringtree-nodes-hinzufuegen.html)

Popov 24. Mär 2014 14:29

AW: VirtualStringTree - Nodes hinzufügen
 
@d7user1

Weil es mich interessierte, habe ich die 13000 Daten in ListView eingelesen, wobei ich das LV virtuell nutzte. Ist alles in 31 ms erledigt (inkl. lesen, sortieren, usw).

d7user1 24. Mär 2014 15:17

AW: VirtualStringTree - Nodes hinzufügen
 
hallo. genau das habe ich gestern auch einmal getan. die zeit weiß ich nicht mehr aber es war sehr schell. schneller als der VirtualStringTree.
das einzige was mich störte ist dass ich checkboxen gebraucht habe, ich die aber selbst nicht zeichnen kann. und ich bin sicher genau da, beim zeichnen der checkboxen, wird die listview wieder sehr langsam.

mein code ist momentan so weit angepasst dass das einlesen von 13000 dateien + diverses zeichnen von bestimmten nodes + dateigrößenbestimmung und datumsumwandung in etwa 450ms erledigt ist. dabei erledige ich das bestimmen der dateigröße und das umwandeln des dateidatums im OnGetText-Event statt wie zuvor beim erstellen der nodes.
beim erstellen der nodes dauert es 4 sekunden.
kleiner vergleich: dasselbe mit einer listview + checkboxen dauert etwa 25 sekunden.

DeddyH 24. Mär 2014 15:36

AW: VirtualStringTree - Nodes hinzufügen
 
Wie schon gesagt, Du könntest Dir auch mal das NextGrid anschauen, das ist IMO etwas einfacher zu handhaben als der VST. Die Versionen für Delphi 6 und 7 sind Freeware.

Popov 24. Mär 2014 17:38

AW: VirtualStringTree - Nodes hinzufügen
 
@d7user1

Ok, das ist u. U. mit etwas Arbeit verbunden, da die CheeckBoxes tatsächlich nicht gezeichnet werden. Aber das stellt sich die Frage was schneller ist - sich die Kenntnisse über eine neue Komponente aneignen oder CheckBoxen selber zeichnen.

Das Zeichnen selbst sollte kein großes Problem sein:
Delphi-Quellcode:
var
  DispRect : TRect;
begin
  DispRect := Item.DisplayRect(drIcon);

  with Sender as TListView do
    if Item.Checked then
      ImageList2.Draw(Canvas, DispRect.Left - 16, DispRect.Top, 1)
    else
      ImageList2.Draw(Canvas, DispRect.Left - 16, DispRect.Top, 0);
end;
In ImageList2 sind zwei 16x16 große Bitmaps mit, die für CheckBox An/Aus stehen. Den Rest, wie auch Checkbox Klick, muss man noch machen. Ist aber alles machbar.

d7user1 24. Mär 2014 18:02

AW: VirtualStringTree - Nodes hinzufügen
 
ich würde schon gerne weiter die listview benutzen. aber das mit dem bitmap zeichnen usw, ich habe es gerade ausprobiert, das ist mir ein wenig zu wackelig.

es gäbe sogar noch einen grund bei der listview zu bleiben:
wenn mein VirtualTreeView nicht genug nodes hat um dem scrollbalken anzuzeigen, dann bekommen meine nodes keine hintergdunfarbe (Brush).

ein manuelles VST.Refresh zeigt mir die farben an. aber ich habe keine ahnung wo ich diesen refresh hinsetzen muss.

edit: ich habe jetzt mal in GetImageIndex ein VST.Invalidate; gesetzt. das scheint zu funktionieren aber ob es schön ist weiß ich nicht.
damit es nicht ständig aufgerufen wird und somit prozessorzeit unnötig für nichts beansprucht wird eine boolsche variable gesetzt wenn es aufgerufen wurde.

Popov 24. Mär 2014 20:35

AW: VirtualStringTree - Nodes hinzufügen
 
Also bisher habe ich noch nicht mit Virtual ListView gearbeitet, ist im Grunde aber eine feine Sache, man muss nur die Daten auslagern. Das mit den Checkboxen ist Pech, da muss man eben selbst programmieren.

NextGrid und VST sehen verdammt gut aus, müssen aber installiert werden.

Vorausgesetzt also Virtual ListView ist nichts, auch NextGrid und VST nicht, eben aus den genannten Gründen, stellt sich die Frage nach dem Beispiel im Beitrag #17. Das ist kein Virtual ListView, arbeitet aber insoweit ähnlich, als das es zuerst komplett leer ist und erst beim Scrollen gefüllt wird. Es ist etwas langsamer, hat dafür aber CheckBoxen, da es eine normale ListView ist. Sollte also die Lösung für dein Problem sein.

d7user1 24. Mär 2014 21:56

AW: VirtualStringTree - Nodes hinzufügen
 
ich werde mir dein beispiel mal ansehen und mit meinem VST vergleichen.

meine "Dateien-lesen-funktion" braucht momentan für das lesen von C:\Windows rekursiv 6 sekunden. (95000 dateien)
die grafische darstellung dauert nur wenige millisekunden.

Popov 24. Mär 2014 22:06

AW: VirtualStringTree - Nodes hinzufügen
 
Nun, da ist nichts besonderes dran, bis auf, dass zuerst nur leere Items angelegt werden. Diese werden später JustInTime gefüllt.

d7user1 24. Mär 2014 22:12

AW: VirtualStringTree - Nodes hinzufügen
 
demnach sind 6 sekunden für ein verzeichnis wie C:\windows normal?

Popov 24. Mär 2014 22:36

AW: VirtualStringTree - Nodes hinzufügen
 
Also ich weiß nicht wie du auf die 6 Sekunden kommst. Ich hab gerade den Code geändert und ihn auch Unterverzeichnisse einbinden lassen. Dauer bei knapp 12000 Dateien im Windowsordner etwa 500 ms (komplett, einlesen und in LV ausgeben).


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 Uhr.
Seite 3 von 6     123 45     Letzte »    

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