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