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.
Confira outros conteúdos:
![autor](http://www.devmedia.com.br/imagens/fotoscolunistas/image002-2.jpg)
Perguntas frequentes
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
![linkedin](https://cdn-icons-png.flaticon.com/512/174/174857.png)
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
![linkedin](https://cdn-icons-png.flaticon.com/512/174/174857.png)
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
![linkedin](https://cdn-icons-png.flaticon.com/512/174/174857.png)
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.