类(对象)而不是记录
我需要为VirtualStringTree节点使用类而不是记录。
我应该宣布它是标准的(但在这种情况下 - 棘手)的方式:
PNode = ^TNode;
TNode = record
obj: TMyObject;
end;
//..
var
fNd: PNode;
begin
fNd:= vstTree.getNodeData(vstTree.AddChild(nil));
fNd.obj:= TMyObject.Create;
//..
或者我应该直接使用TMyObject
? 如果是这样 - 如何?! 如何分配(构建)对象并释放它?
在此先感谢米。
为保持对象设置数据大小
vstTree.NodeDataSize := SizeOf(TMyObject);
获取数据大小持有者并绑定到您的对象
vstTree.getNodeData(passed in interested node)^ := your object
要么
vstTree.getNodeData(vstTree.AddChild(nil))^ := TMyObject.Create;
要么
使用vstTree.InsertNode方法
释放绑定对象连接OnFreeNode事件
vstTree.OnFreeNode := FreeNodeMethod;
同
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;
您可以在收到节点数据后创建对象实例,如下所示:
fNd:= vstTree.getNodeData(vstTree.AddChild(nil));
fnd.obj := TMbyObject.Create;
或者你可以尝试直接分配它
Pointer(Obj) := vstTree.getNodeData(...);
你可以在OnFreeNode事件中释放你的对象。
链接地址: http://www.djcxy.com/p/5957.html