【发布时间】:2016-11-24 16:58:37
【问题描述】:
我有一个 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;
但我想了解我做错了什么。
【问题讨论】:
-
V5.2.2 不是最新版本。从 V6 开始,TVirutalNode 具有通用的辅助方法来添加或设置避免类型转换的节点。
-
好点@JoachimMarder。我只看过 soft-gems 网页,而不是 jam soft...
标签: delphi delphi-xe2 virtualtreeview tvirtualstringtree