Na ja, das erste problem besteht schon darin, wie die
dpr-Datei der Plugin-
DLL das Schliessen des Fensters mitbekommt. Hier wird es erstellt und angezeigt:
Delphi-Quellcode:
procedure TPlugin01.Execute(XMLString: string);
begin
inherited;
frmTestPlugin01 := TfrmTestPlugin01.Create(nil);
frmTestPlugin01.Label1.Caption := 'Testzeichenfolge: ' + XMLString;
frmTestPlugin01.Label2.Caption := 'Parenthandle: ' + IntToStr(Self.Parent);
frmTestPlugin01.Show;
end;
Wenn das Formular geschlossen wird, soll auch die Host-Anwendung darüber benachrichtigt werden und das Plugin entladen.
Ich verwende, wie im Tutorial eine Plugin-Klasse, die der Host-Anwendung und dem Plugin bekannt ist:
Delphi-Quellcode:
type
TEventNotification = (evnClose);
TEventAction = (evnContinue, evnAbort);
TPlugin = class(TObject)
private
FParent: THandle;
procedure SetParent(const Value: THandle);
public
constructor Create(aParent: THandle);
function GetName: string; virtual; stdcall; abstract;
function GetAuthor: string; virtual; stdcall; abstract;
function GetComment: string; virtual; stdcall; abstract;
function GetCaption: string; virtual; stdcall; abstract;
procedure Execute(XMLString: string); virtual; stdcall; abstract;
function EventHandler(EventNotification: TEventNotification): TEventAction; virtual; stdcall; abstract;
property Parent: THandle read FParent write SetParent;
end;
TLoadPlugin = function(Parent: THandle; var PlugIn: TPlugIn): Boolean;
implementation
{ TPlugIn }
constructor TPlugIn.Create(aParent: THandle);
begin
inherited Create;
FParent := aParent;
end;
procedure TPlugIn.SetParent(const Value: THandle);
begin
FParent := Value;
end;