Parte 1 – Criando o Host
Na parte 1 deste artigo tracei as linhas básicas para a implementação do Aplicativo Principal HOST – se ainda não o leu, será mais produtivo fazê-lo antes de continuar.
Criando um Plugin
O Plugin em si consiste em uma DLL que “exports” 2 entradas:
- function LoadPlugin(AAplication: IPluginApplication): IPluginItems;
- procedure UnloadPlugin;
A base para a criação do plugin é a unit: plugin.Service
LoadPlugin
“LoadPlugin” é utilizado quando o HOST inicia o plugin; O parâmetro IPluginApplication representa os serviços publicados no HOST disponíveis para assinatura pelos plugins. Assim todos os serviços que o HOST implementar deve se publicada para que sejam visíveis aos plugins.
Nos casos em que houver necessidades de estender os serviços publicados pelo HOST, IPluginApplication será a interface base publicada adicionada de novos serviços… IMyPluginApplication = interface( IPluginInterface) …
O Plugin registra-se à lista de plugins
IPluginItems – é uma lista de plugins disponíveis na DLL;
Para que IPluginItems seja populada o plugin poderá escolher entre os serviços padrões, aquele a que deseja assinar.
[code lang=”pascal”]
initialization
RegisterPlugin(TPluginMenuItemService.Create(TForm1,”,1, ‘Menu base de sample’));
[/code]
DoStart
Após a inicialização do LoadPlugin, ocorrerá um evento “DoStart” que inicializa cada um dos plugins da lista registrada. É neste momento que o plugin fará o pedido de assinatura no HOST… Tudo isto é feito internamente pelo objeto “TPluginMenuItemService” do exemplo.
[code lang=”pascal”]
procedure TPluginMenuItemService.DoStart;
begin
inherited;
PluginApplication.RegisterMenuItem(FMenuItemName, GetCaption, self);
end;
[/code]
Um esqueleto para um plugin de MenuItem
[code lang=”pascal”]
unit uMenuItemSimple;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
plugin.Interf, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
Vcl.ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
LabeledEdit1: TLabeledEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses plugin.Service, plugin.MenuItem, plugin.Control;
procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;
initialization
RegisterPlugin(TPluginMenuItemService.Create(TForm1,”,1, ‘Menu base de sample’));
finalization
end.
[/code]