Artigo Clube Delphi 71 - Open Tools API

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (0)  (0)

Criando novos assistentes para o Object Repository.

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

imagem_pdf.jpg

Open Tools API

Parte II – Criando novos assistentes para o Object Repository

 

Se você utiliza o Delphi há algum tempo, provavelmente já deve ter feito uso do BDE para acessar o seu banco de dados. Nesse momento, alguns devem estar se lembrando de como era fácil e rápido construir um novo formulário de acesso a dados, através do velho conhecido, o Form Wizard.

Existem ainda outros assistentes muito úteis em nosso ambiente, como o Application Wizard, o COM Object Wizard, o Web Server Application e o próprio New Component. Esses nos ajudam a economizar muito tempo no desenvolvimento e, às vezes, tornam-se indispensáveis.

Seria então possível criar nossos próprios assistentes construtores de formulários? Assim, poderíamos aproveitar ao máximo o tempo de nossos desenvolvedores em implementação de regras de negócio, não em atividades repetitivas e desnecessárias.

 

Interagindo com o Object Repository

Na primeira parte do artigo (edição 70), aprendemos a disponibilizar nossos wizards para o usuário final através do menu principal do Delphi. Vimos também que podemos utilizar NTA para acessar os objetos nativos do IDE, como o MainMenu e a ToolBar. Contudo, quando falamos de assistentes criadores de janela, ou de projeto, logo pensamos no Object Repository.

Mais uma vez, a única diferença em nossa classe será o conjunto de interfaces implementadas. Para suportar o repositório, o nosso meio de comunicação com o ambiente será através de IOTARepositoryWizard. Vamos analisá-la em mais detalhes, conforme o código a seguir:

 

IOTARepositoryWizard = interface(IOTAWizard)

  ['{B75C0CE1-EEA6-11D1-9504-00608CCBF153}']

  function GetAuthor: string;

  function GetComment: string;

  function GetPage: string;

  function GetGlyph: Cardinal;

 

Seus métodos bastante descritivos pedem como resposta o nome do autor, um comentário, o título da aba e o ícone do wizard. Note que esses são os mesmos campos do diálogo Add To Repository (botão direito no Form Designer>Add to Repository).

Nossa intenção será colocar um wizard qualquer no repositório para entendermos a técnica. Você já deve ter reparado que os ícones dessa janela às vezes mudam, ao clicarmos em New. Isso acontece porque os wizards registrados no Object Repository podem ser de dois tipos: criadores de formulário (só aparecem quando existir um projeto ativo) ou de projeto (sempre aparecem).

Por esse motivo, vamos ter de informar ao IDE também qual é o tipo de wizard, através de sua interface correspondente: IOTAFormWizard ou IOTAProjectWizard. Para reforçar o que vimos até agora, vamos construir um simples Hello World, que será adicionado ao Object Repository.

Crie um novo pacote (File>New>Other>Package), adicione a ele uma nova unit (File>New>Unit) e salve-os como “RepositoryPackage.dpk” e “RepHelloWorld.pas”, respectivamente. Substitua, então, o código da unit pelo da Listagem 1.

 

Listagem 1. Código do exemplo Hello World no Object Repository

unit RepHelloWorld;

 

interface

 

uses ToolsAPI, Dialogs;

 

type

  TRepositoryHello = class(TNotifierObject,

    IOTAWizard, IOTAFormWizard,

    IOTARepositoryWizard)

  public

    //IOTAWizard

    procedure Execute;

    function GetIDString: string;

    function GetName: string;

    function GetState: TWizardState;

 

    //IOTARepositoryWizard

    function GetAuthor: string;

    function GetComment: string;

    function GetGlyph: Cardinal;

    function GetPage: string;

  end;

 

procedure Register;

 

implementation

 

{ TRepositoryHello }

 

procedure TRepositoryHello.Execute;

begin

  ShowMessage('Hello World!!');

end;

 

function TRepositoryHello.GetAuthor: string;

begin

  Result := 'SEU NOME';

"

A exibição deste artigo foi interrompida :(
Este post está disponível para assinantes MVP

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?