Atenção: esse artigo tem um vídeo complementar. Clique e assista!

Do que trata o artigo

Neste artigo será mostrado como usar a OTA (Open Tools API) para criar experts. Experts são extensões e plug-ins para o Delphi, que vão desde editores de código a organizadores de componentes.


Para que serve

Experts são extensões para Delphi com os mais variados objetivos. Eles visam diminuir o tempo que se gasta com tarefas repetitivas, como renomear componentes, trocar toda uma classe de componentes, organizar e formatar código, dar check-in ou check-out em um repositório de uma ferramenta de versionamento, backup dos fontes entre outros.


Em que situação o tema é útil

Sempre que existir a necessidade de fazer alguma tarefa repetitiva pode existir algum expert que auxilie. Se não existir pode ser feito um. Pode-se inclusive tornar o Delphi muito mais útil por meio de experts e vender assim produtos baseados em experts comerciais.

Resumo do DevMan

Este artigo abordará o básico de experts: quais as interfaces devem ser usadas, como implementá-las, como criar, como debugar, e como tornar o desenvolvimento de software mais ágil com a ajuda deles. Serão mostrados alguns experts para agilizar tarefas rotineiras do nosso dia – a – dia. Com isso você poderá não só criar experts para Delphi, mas para C++ Builder também. Eles auxiliam a economizar tempo e dinheiro automatizando tarefas, como deploy por exemplo.

Alguns experts estão tão consolidados na comunidade Delphi que se tornaram essenciais. Quem hoje ficaria sem o GExperts, ou o CNExperts? Sem contar os vários plug-ins que já vêm com o próprio Delphi, por exemplo a versão XE já vem com um plug-in para integração com o SVN.

Trabalhar com experts envolve criar bibliotecas (DLL ou BPL) que serão usadas pelo próprio Delphi e podem interagir com quase qualquer janela do Delphi, desde as janelas de código até as de edição de formulário. Para desenvolver essas bibliotecas é necessário implementar algumas interfaces que são pouco conhecidas e pouco documentadas do Delphi. É possível encontrar na internet material a respeito da OTA (Open Tools API), mas sempre em inglês, desatualizado e fragmentado.

Este artigo não visa documentar toda a OTA porque muitas páginas seriam necessárias para isso. O objetivo deste é apenas introduzir o leitor nas técnicas de criação de complementos para o IDE fazendo um extenso uso de interfaces, packages e POO. Para que não seja muito extenso e enfadonho assume-se que o leitor já está familiarizado com esses assuntos.

É um pré-requisito para o entendimento desse artigo um conhecimento sólido em criação de pacotes e BPLs e em interfaces e POO. Outro pré-requisito importante é o uso da versão Architect do produto, pois as versões inferiores não possuem o código fonte da ToolsAPI.pas.

É necessário compreender os perigos de criar partes do IDE do Delphi. Um acesso a um objeto destruído ou qualquer erro causará instabilidade. Por isso existe a necessidade de manter-se um bom programa de backup e / ou controle de versão e de se ativar o auto-save para as units. Há uma lista de interfaces que usaremos neste artigo, mas a Open Tools API tem muitas outras. Ler o código da unit ToolsAPI.pas e os comentários será essencial para seu aprendizado.

Ao se implementar várias interfaces muitos métodos necessitarão apenas existir, não precisando ser implementados com um corpo. Isso porque o Delphi pode já ter outras classes de wizards e plug-ins já registrados que implementam esses métodos e fazem alguma coisa. Além disso, muitas funções devem retornar string vazia ou qualquer outro valor padrão para que o Delphi decida automaticamente qual valor usar. Certos métodos são implementados apenas em wizards mais complexos.

Qualquer wizard ou expert para o Delphi deve ser registrado. Quando isso ocorre um objeto da classe que você criou é adicionado em uma lista de objetos do mesmo tipo ou interface. Isso quer dizer que nem todos os experts que você escrever substituirão funções do Delphi. Alguns se agregarão e executarão antes ou depois das funções nativas do Delphi, e mesmo assim, dependendo do tipo de Wizard, você pode escolher se o nativo do Delphi será usado ou não.

Muitas coisas o Delphi faz sozinho, sem usar nenhum wizard, os wizards são apenas “pontos de entrada/comunicação” com as funções do Delphi.

É interessante que alguns métodos de alguns tipos de interfaces da OTA nunca serão chamados pelo IDE. Isso acontece porque esses métodos foram reservados para uma implementação futura e estão aguardando o dia em que a equipe de desenvolvimento do Delphi fará implementações no IDE que chamem esses métodos. Vale salientar que a OTA nunca foi completamente documentada e que está em evolução. A cada versão do Delphi ela muda um pouco.

Existem mais de 100 interfaces na OTA, e elas são divididas em vários grupos. Não serão abordados todos os grupos nesse artigo, apenas:

Services à utilidades gerais providas pelo IDE do Delphi;

Notifiers à seguem o padrão Observer, servindo para notificar um expert da inclusão ou exclusão de um componente num editor de form, ou o caminho inverso, notificar o form de uma mudança no expert;

Modules à todo artefato criado pelo desenvolvedor no Delphi é um módulo. Units são módulos de um arquivo, forms são módulos de dois arquivos;

Creators à factorys responsáveis por criar alguma coisa. Neste artigo são mostrados criadores de módulos.

...

Quer ler esse conteúdo completo? Tenha acesso completo