Esse artigo faz parte da revista Clube Delphi Edição 70. Clique aqui para ler todos os artigos desta edição

 

Atenção: por essa edição ser muito antiga não há arquivo pdf para download desta revista. Os artigos disponíveis somente em doc.

 

Open Tools API

Crie seus próprios plug-ins para o IDE do Delphi.

 

Se você já pensou: “o Delphi é tão bom, mas por que o IDE não tem mais essa funcionalidade para facilitar meu trabalho?”, certamente irá se identificar com o que a Open Tools API (OTA) permite fazer. De maneira rápida e fácil, podemos implementar desde simples itens no menu a poderosos assistentes com a função de automatizar a criação de formulários. Só dependemos de nossa criatividade e/ou necessidade para criar exemplares plug-ins e melhorar ainda mais a ferramenta de trabalho.

Hoje existem, diversos plugins, pagos e gratuitos, disponíveis na internet para download. Por exemplo, podemos citar o GExperts e o CnPack, que oferecem conjuntos de funcionalidades para aumentar ainda mais a produtividade do desenvolvedor. Neste artigo, você aprenderá a criar seus próprios plug-ins wizards para o IDE do Delphi, usando o OTA.

Um primeiro exemplo – “Hacking”

Antes de começarmos a utilizar a API do OTA, vamos ver como podemos acessar os objetos do IDE através de pacotes. Note que essa é uma maneira totalmente desaconselhada para a construção de plug-ins, pois existem meios que nos garantem uma maior confiabilidade em tal tarefa, principalmente no tocante a compatibilidade entre versões da ferramenta.

No Delphi, crie um pacote (File>New>Other>Package), adicione nele uma nova unit (File>New>Unit) e salve os arquivos como “HackingPackage.dpk” e “Hacking.pas”, respectivamente. Substitua o conteúdo de Hacking.pas pelo código da Listagem 1 e lembre-se que a declaração do método Register é case-sensitive.

Compile e instale seu pacote. Quando lhe for perguntado sobre a adição de uma referência à VCL, responda OK. Veja que conseguimos acessar facilmente os objetos internos do IDE e alterar algumas propriedades, como título e a cor do formulário principal. A seção finalization, da unit, que só poder ser delcarada se existir initialization, servirá para restaurarmos os valores antigos e liberarmos regiões alocadas da memória.

Agora, a menos que você queira continuar com a Ide do Delphi na cor vermelha, desinstale o pacote através de Component>Install Packages.

Mais uma vez, devemos analisar que essa técnia deve ser usada somente em situações extremas, e foi apresentada aqui apenas para fins didáticos. Como veremos, existem soluções muito mais elegantes para a construção de plug-ins.

Listagem 1. Código de Hacking.pas do projeto HackingPackage

unit Hacking;

 

interface

 

uses

  Forms, Graphics;

 

procedure Register;

 

implementation

 

var

  TituloAntigo: string;

  CorAntiga: TColor;

 

procedure Register;

begin

  TituloAntigo := Application.Title;

  Application.Title := 'Revista ClubeDelphi';

 

  CorAntiga := Application.MainForm.Color;

  Application.MainForm.Color := clRed;

end;

 

initialization

finalization

  Application.Title := TituloAntigo;

  Application.MainForm.Color := CorAntiga;

end.

Open Tools API e IOTAWizard

A Open Tools API, comumente chamada apenas de OTA, pode ser compreendida como um conjunto de ferramentas para a extensão do IDE. Sua infra-estrutura é baseada em interfaces e pacotes, ou seja, para registrar um plug-in que exerça determinada tarefa, é preciso apenas implementar a interface correspondente e compilar tudo em um pacote. Além disso, os plug-ins construídos poderá rolar tanto no Delphi quanto no C++ Builder, sem grandes problemas.

Dica: Para um bom entendimento deste artigo, é ideal que o leitor tenha conhecimento básico sobre o uso de interfaces. Para aprender mais sobre interfaces, consulte minha coluna no portal ClubeDelphi.

Uma outra saída para a construção de plug-ins seria através de DLLs, em vez de pacotes design-tima. Essas seriam declaradas no registro do Windows e carregadas pelo IDE, em sua inicialização. Contudo, pacotes são bem mais simples de implementar, de forma que não discutiremos o uso DLLs neste artigo.

Hoje, existem mais de 100 interfaces disponibilizadas pelo Delphi para a OTA. Essas, em sua grande maioria, estão localizadas na unit ToolsAPI.pas, em <DirDelphi>\Source\ToolsAPI\ToolsAPI.pas.

Todos os assistentes na OTA, sejam eles itens de menu ou criadores interativos de janela, são conhecidos como wizards (antigamente chamados de Experts). Para eles, existe uma super classe em comum, a IOTAWizard que sempre deve ser implementada. Vejamos a sua declaração:

 

IOTAWizard = interface(IOTANotifier)

   [‘ {B75COCEO – EEA6  - 11D1 – 9504 – 00608CCBF153}’ ]

   {Expert UI strings }

    function GetIDString: string;

    function GetName: string;

    function GetState: TWizardState;

    { Launch the AddIn }

    procedure Execute;

end;

 

Podemos notar a presença de quatro métodos: dois para identificação, um para reconhecimento de estado e outro para a execução propriamente dita. Veja, no quadro Métodos de IOTAWizard, a explicação para cada um deles.

Métodos de IOTAWizard

GetIDString: Todo wizard no IDE possuir um identificador único. Geralmente, a string segue o padrão: “nome_da_empresa_ou_do_autor.nome_do_wizard.”

 

GetName: Deve retornar um nome para o wizard que será usado, basicamente, como título no Object Repository e em mensagens de erro.

 

GetSatate: Retorna um Set que pode possuir os estados: wsEnabled e wsChecked. Utilizando em itens de menu.

 

Execute: Esse método é chamado sempre que o usuário seleciona a ação principal do wizard. No caso de Repository Wizards, isso significaria dar um duplo-clique sobre o ícone em questão.

Para nosso primeiro exemplo de OTA, vamos construir um wizard muito simples, que será adicionado ao menu Help do IDE. Mas, antes de começá-lo, abra o Environment Options (Tools>Environment Options), vá para até a aba Library e adicione a seguinte entrada à caixa Library path: “$(DELPHI)\Source\ToolsAPI”. Isso eliminará a necessidade de se adicionar uma referência a designide manualmente a cada novo package que acesse a OTA.

No Delphi, crie um novo pacote, adicione a ele uma nova unit e salve os arquivos como “HelloOTAPackage.dpk” e “HelloOTA.pas”, respectivamente. Adicione ToolsAPI e Dialogs à seção uses da unit e declare a classe da Listagem 2.

...
Quer ler esse conteúdo completo? Tenha acesso completo