Einzelnen Beitrag anzeigen

schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#1

TreeNode Data, New & Dispose mit String

  Alt 27. Jan 2010, 09:22
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?
Delphi 2010, Update 4 & 5
  Mit Zitat antworten Zitat