![]() |
Treeview zur Laufzeit erzeugen und OnDeletion-Event steuern
Hallo,
erstelle eine Treeview-Klasse zur Laufzeit. Lese dann die Knoteneinträge aus einer INI-Datei, die Zusatzinformationen schreibe ich in eine separate Klasse, auf die dann die DATA-Eigenschaft des Knotens verweist. Nun möchte ich beim Beenden des Programms alle Klasseneinträge, auf die die DATA-Eigenschaft jedes Knotens verweist, freigeben. Leider wird die entsprechende Prozedur (DoDelete) nicht durchlaufen. Was mache ich falsch! Meine Codezeilen:
Delphi-Quellcode:
Setze ich mir nun einen Breakpoint innerhalb TProjectData.Destroy und TProjectData.DoDelete, so wird nur die Prozedur Destroy durchlaufen.
type
TTVExpandedEvent = procedure(Sender: TObject; Node: TTreeNode) of object; // Basisklasse zum Laden der Parameter aus der Ini-Datei // = Basisknoten / Ausgangspunkt aller Knoten TProjectData = class(TTreeView) constructor Create(AOwner: TComponent); override; destructor Destroy; override; private FUserOnDeletion: TTVExpandedEvent; procedure DoDelete(Sender: TObject; Node: TTreeNode); function GetOnDeletion: TTVExpandedEvent; procedure SetOnDeletion(Value: TTVExpandedEvent); procedure TreeFromIni(Tree: TTreeView; INI: TIniFile; Section: string; Expand: Boolean); function SetClassForTreeNode(aTree: TTreeView; aIniRefList: TStringList): boolean; public function LoadParamFromINIFile(aFile: string): boolean; //function SaveToParamINIFile: boolean; published property OnDeletion: TTVExpandedEvent read GetOnDeletion write SetOnDeletion; end; implementation //****************************************************************************** // ****** TProjectData-Klasse ******* //****************************************************************************** constructor TProjectData.Create(AOwner: TComponent); begin inherited Create(AOwner); try OnDeletion := DoDelete; except on E:Exception do begin ShowMessage('Create - ' + classname + ' - ' + E.Message); end; end; end; //****************************************************************************** destructor TProjectData.Destroy; begin inherited; end; //****************************************************************************** procedure TProjectData.DoDelete(Sender: TObject; Node: TTreeNode); begin if Assigned(FUserOnDeletion) then FUserOnDeletion(Self, Node); if Node.Data <> nil then begin //TProjectNode(Node.Data).Destroy; TProjectNode(Node.Data).Free; Node.Data := nil; end; end; //****************************************************************************** function TProjectData.GetOnDeletion: TTVExpandedEvent; begin Result := FUserOnDeletion; end; //****************************************************************************** procedure TProjectData.SetOnDeletion(Value: TTVExpandedEvent); begin FUserOnDeletion := Value; end; Bin für jede Hilfe sehr dankbar! Gruss Herbie |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 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