delphi - 无需手动设置每个字段值即可将数据写入 PVirtualNode

标签 delphi pointers virtualtreeview tvirtualstringtree

假设我有这个节点数据记录:

Type
  PPerson = ^TPerson;
  TPerson = record
   Name: String;
   Age: Integer;
   SomeBool: Boolean;
  end;

要填充我的 VirtualStringTree,我会这样做:

Procedure AddToTree(Person: TPerson);
Var
 Node: PVirtualNode;
 Data: PPerson;
Begin
 Node := VT.AddChild(nil);
 Data := VT.GetNodeData(Node);
 Data.Name := Person.Name;
 Data.Age  := Person.Age;
 Data.SomeBool := Person.SomeBool;
End;

Procedure TMyForm.MyButtonClick(Sender: TObject);
Var
 Person: TPerson;
Begin
 Person.Name := 'Jeff';
 Person.Age := 16;
 Person.SomeBool := False;
 AddToTree(Person);

End:

现在,虽然这工作得很好,但我想简化它,所以每当我向记录添加新字段时,我都不需要修改 AddToTree 方法。

所以我尝试了这个:

Procedure AddToTree(Person: TPerson);
Begin
 VT.AddChild(nil,@Person);
End;

这编译了,但是 PVirtualNode 似乎没有得到数据,因为我的 VT 没有显示任何东西,当中断 OnGetText 事件时,我看到变量为空。

我做错了什么? :)

最佳答案

记录支持赋值运算符:

procedure AddToTree(const Person: TPerson);
var
  Node: PVirtualNode;
  Data: PPerson;
begin
  Node := VT.AddChild(nil);
  Data := VT.GetNodeData(Node);
  Data^ := Person;
end;

关于delphi - 无需手动设置每个字段值即可将数据写入 PVirtualNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6961182/

相关文章:

c - 如何将固定值传递给指针?

delphi - TV虚拟字符串树。如何拖放到ROOT级别?

delphi - VirtualTreeView 在单元格中嵌入按钮

Delphi:GR32 将带有 alpha 的 PNG 绘制到 TBitmap32 上,而不清除其内容

android - 使用 Delphi XE5 连接到特定的 Wifi 网络进行 Android 应用程序开发

delphi - VCL 样式 - 减小了客户端表单大小

delphi - 免费报告 : how to format If-Then

c - 为什么 strcpy 会触发全局变量的段错误?

delphi - 我应该如何在Virtual TreeView中更新节点?

c++ - 什么时候应该动态或自动实例化对象?