Parte 1 – Criando o Host | Parte 2 – Criando o Plugin | Parte 3 – Item de Menu
Os artigos anteriores mostrei como o plugin assina à um item de menu do aplicativo host. Agora é a vez de um plugin que assina ao serviço de janela, permitindo que seja embutido (embedded) como um componente da janela.
Criar o Plugin
- Criar um projeto DLL em branco;
- Adicionar ao projeto um FORM a ser inserido no formulário do aplicativo HOST;
- Incluir as UNITs: plugin.Service, plugin.Control no FORM;
- na Seção Initialization registrar o Plugin na lista de plugins disponíveis na DLL:
RegisterPlugin(TPluginControlService.create(TForm1,1,0,'my control embedded'));
- Copiar a DLL do projeto para a pasta de “Plugins” do aplicativo HOST;
Exemplo:
[code lang=”pascal”]
{$R *.dfm}
uses plugin.Service, plugin.Control;
……..
initialization
RegisterPlugin(TPluginControlService.create(TForm1,9999,1,’my control embedded’));
finalization
end.
[/code]
Inserindo o Plugin em uma janela do HOST
- Se o projeto HOST ainda não tem recurso para suportar plugin – arrastar o componente TPluginManager para o formulário principal;
- Escolher um formulário onde deseja inserir o plugin controle (embedded) – arrastar um TPanel para o local onde o plugin será inserido, para estabelecer a área a ser ocupada pelo plugin (interno no plugins ele executa Align=alClient no formulário);
- Incluir na uses a UNIT no formulário: plugin.Manager (a mesma utilizada pelo component TPluginManager);
- No evento OnShow do formulário fazer chamada ao Manager do plugin para encontrar o plugin ser incorporado:
GetPluginManager.EmbedControl(Panel1.Handle,9999,1);
Observando os parâmetros da procedure
TPluginManager.EmbedControl(AParentHandle: THandle; AControlID, AControlType: Int64);
cabe considerar:
- AParentHandle -> é o handle do TPanel onde o plugin será incorporado;
- AControlID -> é um identificador para carregar um determinado plugin em específico – identifica o ID da janela que irá consumir o plugin (valor fixo nos dois lados);
- AControlType -> um ID para separar os vários plugins que uma mesma janela pode consumir;
Quando chama
GetPluginManager.EmbedControl(Panel1.Handle,9999,1); deve inserir no Panel1 um plugin de controle identificado por 9999 que contenha serviços do tipo 1; <a href="https://github.com/amarildolacerda/helpers/tree/master/plugin">Ver código de exemplo</a>