![]() |
VirtualTreeView und Freigabe
Moin,
sorry mal wieder für eine Dummy-Frage: Ich habe in meinem Programm unter anderen ein VirtualTreeView mit 500 Einträgen. Wenn ich mein Programm beende muss ich dann alles wieder freigeben ? Und wenn ja - so:
Delphi-Quellcode:
Gruss
var
Data: PTreeData; i: integer; begin for i := 0 to VST.Count -1 do begin Data := VST.GetNodeData(Node); if Assigned(Data) then Data.FCaption:=''; end; end; Hans |
AW: VirtualTreeView und Freigabe
Der Record selbst wird automatisch freigegeben.
Aber wenn der Record auf Strings, dynamische Arrays, Objekte, Interfaces referenziert oder auf weitere Daten verweist, muss man sich um deren Freigabe selbst kümmern. Dafür gibt es das Ereignis OnFreeNode:
Delphi-Quellcode:
procedure TMyForm.MyTreeFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
begin var lData := PTreeData(Sender.GetNodeData(Node)); lData.MyString := nil; lData.MyArray := nil; lData.MyObject.Free; lData.MyInterface := nil; end; |
AW: VirtualTreeView und Freigabe
Wenn der Record via Generics vom VST behandelt wird, dann sollten die managed Typen darin von alleine freigegeben werden. (Interfaces, Strings, dynamische Arrays, Variants und CustomManagedRecords, außer natürlich von Objekt-Instanzen)
Erstellst du den Speicher (z.B. ![]() Alternativ, anstatt Records eben mit DatenObjekten ... ich glaub der VST hatte irgendwo sowas, wie ein OwnsObjects. |
AW: VirtualTreeView und Freigabe
Zitat:
Delphi-Quellcode:
Um was sich System.Finalize alles kümmert, kannst du in der
procedure ...VTVFreeNode(pmSender: TBaseVirtualTree; pmNode: PVirtualNode);
var data: PTreeData; begin data := pmSender.GetNodeData(pmNode); if data <> Nil then Finalize(data^); end; ![]() ![]() Bis bald... Thomas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 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