Delphi,VirtualStringTree – 类(对象)而不是记录

前端之家收集整理的这篇文章主要介绍了Delphi,VirtualStringTree – 类(对象)而不是记录前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要为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);

>获取datasize holder并绑定到您的对象

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;

猜你在找的Delphi相关文章