![]() |
TreeNode Data, New & Dispose mit String
Hi,
ich weise einem TreeNode.Data einen Pointer zu:
Delphi-Quellcode:
Mein Type (ist ein Record weil man weis ja nie ob noch was dazukommt.
type
PDataRec = ^TDataRec; { RecordPointer } TDataRec = record { Record for Node-Data } Path: string; { To be extended } end; 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:
Bei der OnDeletion Funktion vom TreeView mache ich dann:
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;
Delphi-Quellcode:
Jedoch meldet mit FastMM Unicodestrings, die übrig bleiben.
Dispose(Node.Data)
Schätze einmal, dass es an der Zeile: TreeStream.Read(PWideChar(pData^.Path)^, TextLength); liegen wird, oder? |
Re: TreeNode Data, New & Dispose mit String
Mir ist gerade etwas eingefallen, was klappen könnte:
Delphi-Quellcode:
Finalize(PDataRec(Node.Data)^);
Dispose(Node.Data); |
Re: TreeNode Data, New & Dispose mit String
Super! Danke!
Und weg sind die Mem-Leaks! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:46 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