Allgemein zum VST:
Ich kann nur dazu raten das ganze generisch anzugehen und die Pointerspielerei nicht überall selbst zu machen...
Delphi-Quellcode:
TBaseVirtualTreeHelper = class helper for TBaseVirtualTree
public
function Get<T: class>(Node: PVirtualNode): T;
end;
{ TBaseVirtualTreeHelper }
function TBaseVirtualTreeHelper.Get<T>(Node: PVirtualNode): T;
var
ResultData: Pointer;
begin
ResultData := GetNodeData(Node);
if Assigned(ResultData) and (TObject(ResultData^) is T) then
Result := T(ResultData^)
else
Result := nil;
end;
Und dann in der Anwendung:
Delphi-Quellcode:
procedure TfrmDirectoryBrowser.vstDirectoryBrowserExpanding(Sender: TBaseVirtualTree; Node: PVirtualNode;
var Allowed: Boolean);
var
NodeData: TDirectory;
begin
Allowed := True;
NodeData := Sender.Get<TDirectory>(Node);
NodeData.LoadSubDirectories; // ggf. auf Assigned prüfen
end;
Ein weiterer großer Vorteil ist, dass du im Debugger sofort den Inhalt sehen kannst ohne aufzuklappen: