Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi VirtualTreeView - Freigabe der Daten (https://www.delphipraxis.net/120020-virtualtreeview-freigabe-der-daten.html)

Viktorii 4. Sep 2008 14:20


VirtualTreeView - Freigabe der Daten
 
Hallo.
Wenn ich bei VirtualTreeView Daten wieder freigeben möchte, steht dazu in der Doku:

Zitat:

Bei Strings reicht es auch, die Variable auf
einen Leerstring zu setzen.
Wie mache ich das, wenn mein Record auch Integer, Boolean usw. enthält?
Vielen Dank

STS301 4. Sep 2008 14:23

Re: VirtualTreeView - Freigabe der Daten
 
entweder .free oder integer:= 0; boolean := false;..

DeddyH 4. Sep 2008 14:25

Re: VirtualTreeView - Freigabe der Daten
 
Du übergibst die Daten ja als Zeiger und solche werden mit Dispose freigegeben.

[edit] Nachtrag: Dispose, wenn sie mit New angelegt wurden, bei GetMem mit FreeMem freigeben. [/edit]

Viktorii 4. Sep 2008 15:24

Re: VirtualTreeView - Freigabe der Daten
 
Da stehe ich jetzt aber etwas auf dem Schlauch....


Erst definier ich mir mein Record:
Delphi-Quellcode:
  PTreeData = ^TTreeData;
  TTreeData = record
                Tag              : Integer;
                Conflict         : Boolean;
                Column           : array[0..6] of string;
              end;


Dann mach ich mir ein paar Nodes mit den Daten mit dieser Funktion:
Delphi-Quellcode:
function TVirtualStringTreeBFInfo.AddVSTStructure(AVST     : TCustomVirtualStringTree;
                                                  ANode    : PVirtualNode;
                                                  ARecord  : TTreeData): PVirtualNode;
var
  pData : PTreeData;

begin
  Result := AVST.AddChild(ANode);
  pData := AVST.GetNodeData(Result);
  Avst.ValidateNode(Result, False);

  pData^.Conflict := ARecord.Conflict;
  pData^.Tag := ARecord.Tag;
  pData^.Column[0] := ARecord.Column[0];
  pData^.Column[1] := ARecord.Column[1];
  pData^.Column[2] := ARecord.Column[2];
  pData^.Column[3] := ARecord.Column[3];
  pData^.Column[4] := ARecord.Column[4];
  pData^.Column[5] := ARecord.Column[5];
  pData^.Column[6] := ARecord.Column[6];

end;
Ich habe also weder new noch getmem genutzt.

:?: :?:

Hawkeye219 4. Sep 2008 15:46

Re: VirtualTreeView - Freigabe der Daten
 
Hallo Viktorii,

für die Freigabe der Daten genügt es in deinem Fall, den Record in der Behandlungsroutine für das Ereignis OnFreeNode zu finalisieren:

Delphi-Quellcode:
procedure TVirtualStringTreeBFInfo.AVSTFreeNode (
            Sender : TBaseVirtualTree;
            Node  : PVirtualNode
          );
var
  Data : PTreeData;
begin
  Data := Sender.GetNodeData(Node);
  Finalize (Data^);
end;
Nur wenn der Record Zeiger auf Speicherbereiche enthält, die du manuell angefordert hast, musst du diesen Speicher vor dem Finalisieren auch manuell wieder freigeben.

Gruß Hawkeye

generic 4. Sep 2008 15:54

Re: VirtualTreeView - Freigabe der Daten
 
Normal brauchst du nicht freigeben, es sei den du nutzt Zeiger Typen.
Also Strings und alles was von TObject vererbt ist.

Schau die mal das Stammtischvideo zum VST an.
Dort zeige ich mit dem FastMM / VST die Tricks.

ralfiii 8. Sep 2008 14:29

Re: VirtualTreeView - Freigabe der Daten
 
Zitat:

Zitat von generic
... Stammtischvideo ...

?? Wo ??

DeddyH 8. Sep 2008 14:33

Re: VirtualTreeView - Freigabe der Daten
 
Hier


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz