我不知道如何將數據分配給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