Ich habe einen TVirtualStringTree (Version 5.2.2) und ich muss zu seinen Knoten Objekte anstelle von Datensätzen hinzufügen.TVirtualStringTree - Objekt anstelle von Datensatz hinzufügen
Ich habe bereits die Antworten auf die Frage zur Verfügung gestellt: Delphi, VirtualStringTree - classes (objects) instead of records aber sie funktionieren nicht.
Objekte I des Baumes Knoten hinzufügen möchten sind wie
TNodeElem = class
public
LineTimeS, LogMessage, MethName: String;
LineDate,LineTime: TDateTime;
LineDateTime: TDateTime;
ElemType: TLogLineType;//ordinal type
....
end;
diese Knoten zu einem TObjectList hinzugefügt werden:
FObjLst.Add(lNode);
und dem Baum hinzugefügt:
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;
Ich bekomme eine E2015 Operator not aplicable to this operand type error. Es ist wahrscheinlich etwas extrem einfach, was ich hier fehlt ...
Ich weiß, dass ich es als ein Datensatz mit einem Objekt Mitglied wie hinzufügen:
TNode = record
obj: TMyObject;
end;
aber ich möchte verstehen, was ich bin falsch machen.
V5.2.2 ist nicht die neueste Version. Beginnend mit V6 hat TVirutalNode generische Hilfsmethoden, um den Knoten hinzuzufügen oder zu setzen, der Typumwandlungen vermeidet. –
Guter Punkt @JoachimMarder. Ich habe nur auf der Soft-Gems-Webseite geschaut, nicht auf Jam-Soft ... – RBA