加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 10:12:49 所属栏目:大数据 来源:网络整理
导读:我需要为VirtualStringTree节点使用类而不是记录. 我应该声明它是标准的(但在这种情况下是棘手的)方式: PNode = ^TNode;TNode = record obj: TMyObject;end;//..var fNd: PNode;beginfNd:= vstTree.getNodeData(vstTree.AddChild(nil));fNd.obj:= TMyObject
我需要为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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读