Hi,
ich weise einem TreeNode.Data einen Pointer zu:
Delphi-Quellcode:
type
PDataRec = ^TDataRec; { RecordPointer }
TDataRec = record { Record for Node-Data }
Path: string;
{ To be extended }
end;
Mein Type (ist ein Record weil man weis ja nie ob noch was dazukommt.
Dann erzeuge ich den Child-Node aus einem Stream.
Im Stream steht zuerst die Textlänge. Dann wird anhand der Textlänge der Text vom Stream gelesen:
Delphi-Quellcode:
var
ChildNode : TTreeNode;
TextLength, HasChildren, ImageIndex, SelectedIndex : Integer;
NodeName : String;
pData : PDataRec;
new(pData);
TreeStream.Read(TextLength, SizeOf(Integer));
SetLength(pData^.Path, TextLength div 2);
TreeStream.Read(PWideChar(pData^.Path)^, TextLength);
//make new child node
ChildNode:= Tree.Items.AddChild(Node,NodeName);
ChildNode.ImageIndex := ImageIndex;
ChildNode.SelectedIndex := SelectedIndex;
ChildNode.HasChildren := Bool(HasChildren);
ChildNode.Data := pData;
Bei der OnDeletion Funktion vom TreeView mache ich dann:
Dispose(Node.Data)
Jedoch meldet mit FastMM Unicodestrings, die übrig bleiben.
Schätze einmal, dass es an der Zeile: TreeStream.Read(PWideChar(pData^.Path)^, TextLength); liegen wird, oder?