Delphi Plugin – Publicando o Plugin no Menu do HOST (Parte 3)

Parte 1 – Criando o Host | Parte 2 – Criando o Plugin

Registrando MenuItem no Host

No artigo anterior foi apresentado o exemplo de um plugin que assina o serviço de Menu do Host chamando o método:

[code]
PluginApplication.RegisterMenuItem(‘mnPlugins’, ‘Meu menu que adiciona um plugin’, self as IPluginMenuItem);
[/code]

 

Ao receber a chamada ao método do PluginApplication.RegisterMenuItem o host deverá coletar informações sobre o plugin bem como executar ações para disponibilizar o recurso solicitado.

Tratando-se de MenuItem, a implementação do host será criar o item de menu no local adequado para que seja visível ao usuário.

Um exemplo de como criar o item de menu no host:

 

[code lang=”pascal”]

// um item de menu para guardar a interface que o plugin assina
TPluginMenuItemInterf = class(TMenuItem)
protected
FProc: TProc<TObject>; // anonimous
procedure DoClick(Sender: TObject);
public
PluginMenuItem: IPluginMenuItem;
constructor Create(AOwner: TComponent; AProc: TProc<TObject>); overload;
end;

// implementação no TPluginManager -> para criar um item de menu no host
procedure TPluginManager.NewMenuItem(AMainMenu: TMainMenu;
ADefaultMenu: TMenuItem; const APath, ACaption: string;
ADoExecute: IPluginMenuItem; AProc: TProc<TObject>);
var
it: TPluginMenuItemInterf;
itClient: TMenuItem;
begin
inc(itCount);
// procura o menu para mostrar
itClient := AMainMenu.FindItem(APath);
if itClient = nil then
itClient := ADefaultMenu; // se nao encontrou pega um padrao

if not assigned(AProc) then
AProc := (
procedure(Sender: TObject)
begin
with TPluginMenuItemInterf(Sender) do
PluginMenuItem.DoClick(0);
end);

// cria o menu
it := TPluginMenuItemInterf.Create(AMainMenu, AProc);
it.Name := ‘mnPlugin_’ + formatDatetime
(‘hhmmsszzz_’ + intToStr(itCount), now);
it.PluginMenuItem := ADoExecute;
it.Caption := (it.PluginMenuItem as IPluginMenuItem).GetCaption;
// adiciona o menu na lista
itClient.Add(it);

end;

[/code]

 

Pensando em facilitar a integração no HOST é possível registrar o componente na aba do Delphi – Arrastar e soltar o componente TPluginManager no formulário principal do HOST.

PluginManager

Explorando código padrão para o evento do TPluginManager.RegisterMenuItem  irá notar que já foi implementado as funcionalidades para inserir o plugin no menu do aplicativo. Caso deseje mudar o comportamento do evento padrão, basta implementar o evento do componente com funcionalidade personalizadas…

 

Fontes: Código base para o Plugin

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *