Einzelnen Beitrag anzeigen

günni0
(Gast)

n/a Beiträge
 
#7

AW: VirtualStringTree - zuweisen von RootNodeCount

  Alt 15. Apr 2018, 13:57
Zitat:
Tipp: Speichere deine Instanzen in einer TObjectList<T> ab. Somit brauchst du später nicht mehr auf den Tree zuzugreifen wenn du mit den Instanzen arbeiten willst.
Habe ich zum Glück schon so.

Ich denke ich bleibe dann dabei, dass ich initial beim Programmablauf meine Daten lade, die Klasseninstanzen erstelle, in die ObjectList packe und ganz zum Schluss RootNodeCount setze.
Wenn ich im Laufe des Programms eine Instanz / Node löschen muss, mache ich das so

Delphi-Quellcode:
Function ... GetNodeByIndex(iIndex : Integer) : PVirtualNode; // Quelle: siehe unten
begin
 Result := VST.GetFirst(True);
 while Assigned(Result) and (vst.AbsoluteIndex(Result) <> iIndex) do
  Result := Vst.GetNext(Result, True);
end;
// Was besser ist, Beitrag 7 oder 11, weiß ich nicht
// 7 : https://www.delphipraxis.net/963615-post7.html
// 11: https://www.delphipraxis.net/1220760-post11.html

procedure ...
var
 Node: PVirtualNode;
begin
 Node := GetNodeByIndex(2);
 if Assigned(Node) then
  VST.DeleteNode(Node);
end;
Damit wird auch gleich mein Eintrag aus der ObjectList gelöscht.
Danach kann ich mit meiner Prozedur ErstelleInstanz(2, True) wieder einen neuen Eintrag an Position 2 (absolut 3) hinzufügen

Delphi-Quellcode:
procedure ErstelleInstanz(InsertAtPosition: Integer = -1; SetRootCount: Boolean = True);
begin
 _UserData := TUserData.Create;
 _UserData.Index := _UserDataClasses.Count;

 _UserData.A := 1;
 _UserData.B := 2;
 ...
 ...

 if InsertAtPosition > -1 then
  _UserDataClasses.Insert(InsertAtPosition, _UserData)
 else
  _UserDataClasses.Add(_UserData);

 if SetrootCount then
  _VST.RootNodeCount := _UserDataClasses.Count;
end;
  Mit Zitat antworten Zitat