0
我需要向TVirtualStringTree插入一些新節點。我用UserData參數使用InsertNode方法。但樹不能顯示任何數據。我如何獲取GetText/FreeNode事件上的userdata?帶有UserData參數的InsertNode在TVirtualStringTree中
TMyData = record
Name: string;
size: Integer;
end;
PMyData = ^TMyData;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
begin
VirtualStringTree1.NodeDataSize := SizeOf(TMyData);
Randomize;
end;
procedure TForm2.Button1Click(Sender: TObject);
var
Data: PMyData;
Node: PVirtualNode;
begin
New(Data);
Data.Name := DateTimeToStr(now);
Data.size := Random(100);
Node := VirtualStringTree1.InsertNode(nil, amInsertAfter, Data);
end;
procedure TForm2.VirtualStringTree1FreeNode(Sender: TBaseVirtualTree; Node:
PVirtualNode);
var
Data: PMyData;
begin
Data := Sender.GetNodeData(Node);
Data.Name := '';
end;
procedure TForm2.VirtualStringTree1GetText(Sender: TBaseVirtualTree; Node:
PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText:
WideString);
var
Data: PMyData;
begin
Data := Sender.GetNodeData(Node);
case Column of
0: CellText := Data.Name;
1: CellText := IntToStr(Data.size);
end;
end;
實際上它取決於您存儲在VT節點中的內容。您可以存儲實際記錄,也可以將指針存儲到記錄中。如果將指針存儲到記錄中,則代碼是正確的,如果將實際記錄存儲在節點中,則該代碼不正確。將節點添加到樹中的代碼不在用戶的示例中,因此我們不知道用戶正在存儲什麼。而這其實可能是個問題! – 2011-05-18 10:43:16
@Cosmin代碼在那裏,請參閱Button1Click。他將指針作爲UserData參數傳遞給InsertNode。 – 2011-05-18 10:46:13
我現在看到它,OP正在存儲指向堆分配記錄的指針。 +1。 – 2011-05-18 10:48:53