Das Konzept und die Geschwindigkeit von VirtualStringTree führen über kurz oder lang nicht an dieser VCL-Komponente vorbei. Allerdings ist es etwas störend, wenn ein zu verwendendes Objekt aus den Properties z.B. auch der Text gelesen werden soll, jedes Mal in einen Record verpackt werden muss. Daher ist ein wenig Zeigerarithmetik ganz hilfreich, um innerhalb von VST direkt mit einem Objekt arbeiten zu können.
type
PNodeData = ^TMyObject;
TMyObject = class
private
FShowText: String;
public
property ShowText: String read FShowText write FShowText;
end;
...
// OnCreate des Formulars
vstObject.NodeDataSize:=SizeOf(TMyObject);
...
procedure TfrmMyObjectAnzeige.vstObjectGetText(Sender: TBaseVirtualTree; Node:
PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText:
WideString);
var obj: TMyObject;
begin
obj:= TMyObject(vstObject.GetNodeData(Node)^);
if Assigned(obj) then
begin
case Column of
0: CellText := obj.ShowText;
end;
end;
end;