TGUID进入TTreeNode.Data?

时间:2014-08-03 18:43:53

标签: delphi delphi-2010

我希望通过将TGUID放入其中来使用TTreeNode的Data(指针)属性。 有人知道如何实现这个目标吗?

这是代码的一部分,可能会帮助您了解我尝试做的事情。

if Assigned(trNode) then
begin
  trNode := tvMain.Items.Add(trNode, dmMain.qryTreeView.FieldByName('SomeColumn').Text);
  gID := StringToGUID(dmMain.qryTreeView.FieldByName('ID').Text);
  trNode.Data := //how do I do this?

2 个答案:

答案 0 :(得分:6)

处理此问题的最佳方法是从TTreeNode派生一个新类并为其提供一个TGUID数据成员,然后使用TTreeView.OnCreateNodeClass事件让TreeView创建您的实例类。这样,RTL会自动为您的guid值管理内存(并允许您以任何其他方式自定义节点)。要访问guid,您需要做的就是在需要时输入TTreeNode指针。例如:

type
  TMyTreeNode = class(TTreeNode)
  public
    Guid: TGuid;
  end;

procedure TMyForm.tvMainCreateNodeClass(Sender: TCustomTreeView; var NodeClass: TTreeNodeClass);
begin
  NodeClass := TMyTreeNode;
end;

trNode := tvMain.Items.Add(...);
TMyTreeNode(trNode).Guid := StringToGUID(...);

答案 1 :(得分:4)

TGUID是记录,因此动态分配它并将其地址存储到节点的数据中,如

var gID: PGUID;
begin
  New(gID);
  gID^ := StringToGUID(...);
  trNode.Data := gID;

记得在删除节点时用Dispose释放内存,否则你的内存会泄漏!