![]() |
Re: Hydra 3.0 Plugin
Ah, so geht es. Ich hatte auch FPlugin fälschlicherweise nicht als IPluginInterface deklariert.
Jetzt fehlt mir nur noch, wie man vom Plugin auf eine Methode der Hostanwendung zugreifen kann. Das habe ich noch nicht so ganz verstanden. Das geht wahrscheinlich auch wieder über Interfaces. Aber wie mache ich das Interface im Plugin bekannt? Danke schon mal für deine hervorragende Hilfe. |
Re: Hydra 3.0 Plugin
Zitat:
Das Interface in beiden einbinden. Im Host also
Delphi-Quellcode:
type
TForm1 = class(TForm, ICanClosePlugin)
Delphi-Quellcode:
Im Demobeispiel "SelfClose" ist ein ausprogrammiertes Beispiel, wie man vom Plugin auf den Host zugreift.
Im Plugin dann (Host as ICanClosePlugin).Machewas
Hier lauert eine kleine Falle. Das Plugin darf nicht als Antwort zerstört werden, da ja dann das Programm nicht weis, wohin zurück. Deshalb wird hier Close erst angemeldet und später über einen Timer realisiert. Gruß Peter |
Re: Hydra 3.0 Plugin
Hm, da hab eich noch eine Lücke irgendwo.
Interface:
Delphi-Quellcode:
Host:
type
IPluginInterface = interface(IHYVisualPlugin) ['{D728C6B3-837B-4D40-AE99-A8FBD71D7CE8}'] function GetName: String; function GetVersionString: String; function GetVersionMajor: Cardinal; function GetVersionMinor: Cardinal; function GetAuthor: String; function GetComment: String; function GetDescription: String; end; IHostInterface = interface ['{1BA2CA86-4EED-411C-ABA1-D1BD1F6B3E96}'] function GetID: Cardinal; end;
Delphi-Quellcode:
Plugin:
type
TMainForm = class(TForm, IHostInterface) HYModuleManager1: THYModuleManager; pnlPluginArea: TPanel; btnLoadPlg: TButton; btnUnloadPlg: TButton; Memo1: TMemo; procedure btnUnloadPlgClick(Sender: TObject); procedure HYHydraAction1Execute(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure btnLoadPlgClick(Sender: TObject); private { Private declarations } FPluginForm: IHYVisualPlugin; FPlugin: IPluginInterface; function GetID: Cardinal; public { Public declarations } end; // ...; // ...; function TMainForm.GetID: Cardinal; begin Result := 42; end;
Delphi-Quellcode:
Aber da bekomme ich eine AV. Im Plugin muss noch was fehlen.
procedure THydraVisualPlugin.Button1Click(Sender: TObject);
begin ShowMessage(IntToStr((FHost as IHostInterface).GetID)); end; Ich werde mir das Beispiel noch mal angucken, aber erst morgen, jetzt ist Feierabend. ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz