AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Nodes einer VirtualStringTree hinzufügen - aber schneller!

Nodes einer VirtualStringTree hinzufügen - aber schneller!

Ein Thema von Jim Carrey · begonnen am 5. Okt 2016 · letzter Beitrag vom 6. Okt 2016
 
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#13

AW: Nodes einer VirtualStringTree hinzufügen - aber schneller!

  Alt 5. Okt 2016, 23:15
Du machst ja scheinbar jetzt folgendes:

Delphi-Quellcode:
procedure TForm1.LoadNodes();
var
  NodeData: PNodeData;
  Node: PVirtualNode;
begin
  Node := vst.AddChild(nil);
  NodeData := vst.GetNodeData(Node);

  NodeData^ := TNodeData.Create(); // Hier führst du einen Konstruktor einer Klasse aus
end;
Da du in dem Beispiel oben (das jeanicke im übrigen auch so nur mit Generics gezeigt hat) ein Objekt instanziiert hast, musst du das dann auch wieder freigeben.

Also erstellt du dir einen EventHandler für das OnFreeNode Event des VST.

Delphi-Quellcode:
procedure TForm1.vstFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
var
  NodeData: PNodeData;
begin
  NodeData := vst.GetNodeData(Node);
  NodeData^.Free;
end;
Wenn du dazu noch ein Beispiel brauchst, dann sag bescheid. Dann schreib ich dir schnell eins oder schaue ob ich noch irgendwo eins finde.
Mich würde das auf jeden Fall interessieren Habe bisher nie mit so riesigen Datenmengen gearbeitet und deshalb immer nur AddChild verwendet, aber die Methode mit dem nachträglichen Initialisieren klingt interessant.
Ich werde mal so ein Beispiel aufbauen. Aber wie jeanicke es ebenfalls schon erwähnt hat, brauchst du eine entsprechende Datenstruktur aus der du dir die Daten dann beim Initialisieren ziehen kannst. Sei es eine Query oder eine eigene Klassenstruktur wo Objekte bspw. in einer ObjectList abgelegt sind.

Es ist etwas umständlicher zu programmieren, aber es zahlt sich bei der Geschwindigkeit und auch bei der Speicherauslastung aus. Besonders wenn man sehr viele Nodes hat die Children besitzen. Dann brauchst man bspw. die Children erst zu laden wenn der User explizit die Node aufklappen will.
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 07:01 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