我需要为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;