Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dispose: Pointer oder Object? (https://www.delphipraxis.net/128634-dispose-pointer-oder-object.html)

PeterPanino 4. Feb 2009 01:42

Re: Dispose: Pointer oder Object?
 
Zitat:

Zitat von himitsu
Hat die TreeView nicht ein Ereignis für NodeWirdFreigegeben? Also ich würde das Freigeben dann dort drin machen

Nein. TreeView hat nur ein Ereignis "OnDeletion", wenn ein Knoten gelöscht wird.

Delphi 2009 Hilfe: "TTreeView.OnDeletion Ereignis - Wird ausgelöst, wenn ein Knoten aus dem Baumdiagramm gelöscht wird."

Es gibt da leider offensichtlich keine Automatik zum Freigeben der angehängten Objekte. Ich muss das wohl in mainform.OnDestroy machen.

himitsu 4. Feb 2009 08:35

Re: Dispose: Pointer oder Object?
 
OnDelete würde doch auch reichen?

Delphi-Quellcode:
// TreeView.OnDeletion
Procedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
  Begin
    If Assigned(Node.Data) Then Dispose(PNoteRec(Node.Data));
  End;

New(NoteRecPtr);
NoteRecPtr.Caption := 'XYZ';
NoteRecPtr.ID     := 'XYZ';
NewNode := TV.Items.AddChildObject(TV.Items[0], 'XYZ', NoteRecPtr);

oder man überläßt die Speicherverwaltung komplett dem TreeView
Delphi-Quellcode:
// TreeView.OnAddition
Procedure TForm1.TreeView1Addition(Sender: TObject; Node: TTreeNode);
  Begin
    New(PNoteRec(Node.Data));
  End;

// TreeView.OnDeletion
Procedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
  Begin
    Dispose(PNoteRec(Node.Data));
  End;

NewNode := TV.Items.AddChild(TV.Items[0], 'XYZ');
PNoteRec(NewNode.Data).Caption := 'XYZ';
PNoteRec(NewNode.Data).ID     := 'XYZ';


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 Uhr.
Seite 2 von 2     12   

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