Um outro benefício que temos na utilização de DLL’s é a possibilidade de incluir formulários completos dentro das mesmas, criando assim uma biblioteca de interfaces. Isso é muito interessante para possibilitar que programas desenvolvidos em outras linguagens utilizem parte do nosso software através de chamadas às funções das DLL’s.

Para começar, inicie um novo projeto de DLL, através do menu File | New | Other e selecione o ícone da Dll Wizard. Agora para adicionar formulários a essa DLL basta clicar no botão New Form ou ir através do menu File | New | Form.

Inclua um formulário e deixe-o com a aparência conforme figura abaixo:

Imagem 

Figura 1. Interface do primeiro formulário

Simplesmente adicione um Label alterando a propriedade Caption para: Este é o Formulário 01 e adicione um botão com o Caption Fechar, de duplo clique nele e coloque: Close; A idéia desse formulário é mostrar como o mesmo pode ser chamado por qualquer outra aplicação, inclusive de outra linguagem. É um formulário simples, mas poderíamos ter algo com acesso a banco de dados ou outras ações.

Agora inclua um outro formulário, onde faremos a chamada através de uma função e retornaremos um valor inteiro. A aparência deve ser a seguinte:

Imagem 

Figura 2. Interface do segundo formulário

Coloque os Labels e mude os Captions conforme a Figura 2. Coloque um botão Fechar e seu código. Por último, mude o Name do Edit1 para edtIdade. Pronto, nossos formulários estão criados. Agora, na unit da DLL (library) temos que colocar o procedimento para chamar o primeiro formulário. Então, antes do begin, coloque o seguinte código:

 

procedure ChamarForm1; stdcall;

var

  Form1: TForm1;

begin

  try

    Form1 := TForm1.Create(Application);

    Form1.ShowModal;

  finally

    Form1.Free;

  end;

end;

 

Vale ressaltar a importância de sempre ter tratamento de exceções nos código em DLL’s. Continuando, colocaremos a função que chamará o segundo formulário e retornará um valor:

 

function ChamarForm2: Integer; stdcall;

var

  Form2:TForm2;

begin

  try

    Form2 := TForm2.Create(Application);

    Form2.ShowModal;

    try

      Result:= StrToInt(Form2.edtIdade.Text);

    except

      Result:=0;

    end;

  finally

    Form2.Free;

  end;

end;

 

Abaixo disso, precisamos exportar o procedimento e a função:

 

exports

  ChamarForm1,

  ChamarForm2;

 

 Antes de compilar é necessário adicionar Forms na cláusula Uses para que o objeto Application seja reconhecido. Então compile, pressionando CTRL+F9. Ok, a DLL está pronto. Agora vamos criar uma aplicação que use essa DLL.  Inicie uma nova aplicação no menu File | New Application Configura sua aparência conforme figura abaixo:

Imagem 

Figura 3. Interface da aplicação que usará a DLL

 

No código do botão Chamar Form1 coloque:

 

  ChamarForm1;

 

No código do botão Chamar Form2 coloque:

 

  Edit2.Text := IntToStr(ChamarForm2);

 

Mas, não podemos esquecer de declarar as funções e dizer onde elas estão. Antes do procedimento do primeiro botão, coloque as seguintes declarações:

 

procedure ChamarForm1; stdcall; external 'formularios.dll';

function ChamarForm2: Integer; stdcall; external 'formularios.dll';

 

Copie o arquivo *.dll para o mesmo diretório dessa aplicação. Pronto, agora você pode compilar e testar a aplicação chamando formulários que estão em uma DLL.

Essa é uma boa alternativa quando é necessário que programas desenvolvidos em outras linguagens chamem formulários criados no Delphi. Se você somente utiliza o Delphi, é recomendável usar Pacotes ao invés de DLL’s para armazenar formulários.