gpt4 book ai didi

delphi - TVirtualStringTree - 添加对象而不是记录

转载 作者:行者123 更新时间:2023-12-03 15:51:39 29 4
gpt4 key购买 nike

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

我已经查看了该问题提供的答案: Delphi, VirtualStringTree - classes (objects) instead of records但他们不工作。

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

  TNodeElem = class
public
LineTimeS, LogMessage, MethName: String;
LineDate,LineTime: TDateTime;
LineDateTime: TDateTime;
ElemType: TLogLineType;//ordinal type
....
end;

这些节点被添加到 TObjectList 中:

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;

我得到一个 E2015 Operator not aplicable to this operand type error 。这可能是我在这里缺少的非常简单的东西......

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

TNode = record
obj: TMyObject;
end;

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

最佳答案

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;

关于delphi - TVirtualStringTree - 添加对象而不是记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38498492/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com