假设我有这个节点数据记录:
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/