In TVirtualStringTree direkt mit Objekten arbeiten


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;