TVirtualStringTree - 添加对象而不是记录

RBA*_*RBA 4 delphi virtualtreeview delphi-xe2 tvirtualstringtree

我有一个 TVirtualStringTree(版本 5.2.2),我需要添加它的节点对象而不是记录。

我已经看过这个问题的答案: Delphi,VirtualStringTree - 类(对象)而不是记录,但它们不起作用。

我想添加到树节点的对象就像

  TNodeElem = class
  public
    LineTimeS, LogMessage, MethName: String;
    LineDate,LineTime: TDateTime;
    LineDateTime: TDateTime;
    ElemType: TLogLineType;//ordinal type
....
  end;
Run Code Online (Sandbox Code Playgroud)

这些节点被添加到 TObjectList 中:

FObjLst.Add(lNode);
Run Code Online (Sandbox Code Playgroud)

并添加到树中:

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;
Run Code Online (Sandbox Code Playgroud)

我得到一个E2015 运算符不适用于此操作数类型错误。这可能是我在这里遗漏的非常简单的东西......

我知道我可以将其添加为具有对象成员的记录,例如:

TNode = record
 obj: TMyObject;
end;
Run Code Online (Sandbox Code Playgroud)

但我想了解我做错了什么。

kam*_*ami 5

function AddItem(Item: TNodeElem): PVirtualNode;
begin
  Result := FTreeView.InsertNode(nil, amAddChildLast, Item);
end;

function GetItem(Node: PVirtualNode): TNodeElem;
var
  NodeData: Pointer;
begin
  Result := nil;
  if not Assigned(Node) then
    exit;
  NodeData := FTreeView.GetNodeData(Node);
  if Assigned(NodeData) then
    Result := TNodeElem(NodeData^);
end;
Run Code Online (Sandbox Code Playgroud)