mig*_*jek 4 delphi class delphi-7 virtualtreeview
我需要为VirtualStringTree节点使用类而不是记录.
我应该声明它是标准的(但在这种情况下是棘手的)方式:
PNode = ^TNode;
TNode = record
obj: TMyObject;
end;
//..
var
fNd: PNode;
begin
fNd:= vstTree.getNodeData(vstTree.AddChild(nil));
fNd.obj:= TMyObject.Create;
//..
Run Code Online (Sandbox Code Playgroud)
还是我应该直接使用TMyObject
?如果是这样 - 怎么样?!如何分配(构建)对象并释放它?
在此先感谢m.
小智 8
设置数据以保存对象
vstTree.NodeDataSize := SizeOf(TMyObject);
Run Code Online (Sandbox Code Playgroud)获取datasize holder并绑定到您的对象
vstTree.getNodeData(passed in interested node)^ := your object
Run Code Online (Sandbox Code Playgroud)
要么
vstTree.getNodeData(vstTree.AddChild(nil))^ := TMyObject.Create;
Run Code Online (Sandbox Code Playgroud)
或
使用vstTree.InsertNode方法
释放绑定对象连接OnFreeNode事件
vstTree.OnFreeNode := FreeNodeMethod;
Run Code Online (Sandbox Code Playgroud)
同
procedure TFoo.FreeNodeMethod(Sender: TBaseVirtualTree; Node: PVirtualNode);
var
P: ^TMyObject;
begin
P := Sender.getNodeData(Node);
if P <> nil then
begin
P^.Free;
P^ := nil; //for your safety or you can omit this line
end;
end;
Run Code Online (Sandbox Code Playgroud)