Jef*_*eff 2 delphi pointers virtualtreeview tvirtualstringtree
假设我有这个节点数据记录:
Type
PPerson = ^TPerson;
TPerson = record
Name: String;
Age: Integer;
SomeBool: Boolean;
end;
Run Code Online (Sandbox Code Playgroud)
要填充我的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:
Run Code Online (Sandbox Code Playgroud)
现在,虽然这很好用,但我想简化它,所以每当我向记录添加新字段时,我都不会修改AddToTree方法.
所以我尝试了这个:
Procedure AddToTree(Person: TPerson);
Begin
VT.AddChild(nil,@Person);
End;
Run Code Online (Sandbox Code Playgroud)
这个编译,但似乎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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
941 次 |
| 最近记录: |