私はTVirtualStringTree(バージョン5.2.2)を持っており、レコードの代わりにノードオブジェクトを追加する必要があります。TVirtualStringTree - レコードの代わりにオブジェクトを追加
質問: Delphi, VirtualStringTree - classes (objects) instead of recordsに記載されている回答はすでに見ていますが、機能していません。
FObjLst.Add(lNode);
とツリーに追加:
var iPos: Integer;
lNode: PVirtualNode;
ldata: TNodeElem;
begin
FTreeView.BeginUpdate;
for iPos := 0 to FObjLst.Count -1 do
begin
lNode := FTreeView.AddChild(nil);
lData := TNodeElem(FObjLst[iPos]);
FTreeView.getNodeData(lNode)^ := lData;//E2015 Operator not aplicable to this operand type
FTreeView.ValidateNode(lNode,False);
end;
FTreeView.EndUpdate;
end;
procedure VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex;
TextType: TVSTTextType; var CellText: UnicodeString);
var
Data: TNodeElem;
begin
Data := FTreeView.GetNodeData(Node);
CellText := Data.LogMessage;
end;
TNodeElem = class
public
LineTimeS, LogMessage, MethName: String;
LineDate,LineTime: TDateTime;
LineDateTime: TDateTime;
ElemType: TLogLineType;//ordinal type
....
end;
これらのノードはTObjectListをに追加されているように私は、ツリーのノードに追加する
オブジェクトがあります私はE2015 Operator not aplicable to this operand type errorを得る。それは私が私のようなオブジェクトのメンバーにレコードとして追加することができます知っている...おそらく私がここに欠けているものを、非常に単純なもの
です:
TNode = record
obj: TMyObject;
end;
が、私は私は何を理解したいです間違っている。
V5.2.2は最新バージョンではありません。 V6から始めるTVirutalNodeには、タイプキャストを避けるノードを追加または設定するための汎用ヘルパーメソッドがあります。 –
良い点@JoachimMarder。私は柔らかい宝石のウェブページだけを見てきました。柔らかいジャムではありません... – RBA