Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.662 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Application.CreateForm in einem Thread

  Alt 10. Mai 2017, 07:18
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:
vstpointer.png
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat