我不知道如何将数据分配给VirtualStringTree中的节点。我需要为树控件的InitNode事件中的Node的Data属性指定一个记录对象的指针。但是,我得到一个'所需的指针类型'编译时错误。如何将数据分配给InitNode事件中的VirtualStringTree节点
type
TDiagData = record
DiagID: Integer;
DiagName: String;
Selected: Byte;
end;
PDiagData = ^TDiagData;
var
FDiagDataList: TObjectList;
c: Integer; // used as an iterator for the list // incremented in vst1InitNode
procedure Btn1Click;
var
DiagData : PDiagData;
begin
try
FDiagDataList := TObjectList.Create; // TODO: Move this to form constructor
for c := 1 to 10 do
begin
New(DiagData);
DiagData.DiagID := c;
DiagData.DiagName := Format('Diag# %d', [c]);
FDiagDataList.Add(DiagData);
end;
c := 0;
vst1.NodeDataSize := SizeOf(TDiagData);
vst1.RootNodeCount := 10; // test
finally
// FDiagDataList.Free; //TODO: Move this to form destructor
end
end;
procedure vst1InitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode;
var InitialStates: TVirtualNodeInitStates);
var
DiagData: PDiagData;
begin
DiagData = TDiagData(FDiagDataList.Items[c]); // FDiagDataList is a TObjectlist
Node.Data^ := DiagData; // <--- this is not working ..
// The error is: Pointer type required.
Inc(c);
end;
我需要将数据分配给InitNode事件中的节点,但不知道如何分配它。
我可以猜到编译器错误是什么,但要说教,请问编辑问题以包含编译器错误。我其实认为你在这里有两个明显的错误。但是你最好告诉我们他们是什么。 – 2014-10-29 14:49:00
'DiagData:= Sender.GetNodeData(Node); DiagData.DiagID:= ...'或'DiagData:= Sender.GetNodeData(Node); DiagData ^:= FDiagDataList.Items [c]'但什么是'c'? – TLama 2014-10-29 14:49:14
@TLama:是的,它的工作原理! – 2014-10-29 14:51:44