Integrando uma aplicação Delphi com um documento Microsoft Word para realizar a emissão de recibos de pagamentos:

1º Passo: modelo do recibo no Word
Criar um novo documento no Microsof Word e desenvolver o modelo do recibo de pagamento acrescentando campos de texto que serão substituídos por valores definidos na aplicação Delphi. O "Campo de Texto", indicado pela seta azul na Figura 1, encontra-se na barra de ferramentas formulários disponível na "Guia Desenvolvedor" na versão 2010 do Microsoft Word. Para mostrar a "Guia Desenvolvedor" na barra de menu do Word deve-se:
a) No menu Arquivo, clicar em Opções.
b) Na janela "Opções do Word", clicar em Personalizar Faixa de Opções e a seguir marcar a caixa Desenvolvedor em "Guias Principais".

Dois aspectos importantes devem ser observados na construção do modelo do recibo no Word:
1) Os campos de texto devem ser identificados na caixa "Indicador" da janela "Opções de formulário de texto" aberta através de um duplo clique do mouse sobre o respectivo campo. Na Figura 1 pode-se observar os nomes sugeridos para os campos de texto, na ordem: Pagador, Extenso, Referente, Valor, Tipo, Local e Assina. Estes nomes serão usados pelo Delphi para atribuir os valores dos componentes de entrada da interface da aplicação aos respectivos campos no documento Word.
2) Concluído o modelo do recibo ele deverá ser salvo na pasta da aplicação com o nome "RECIBO" do tipo "Modelo do Word" (RECIBO.dot).


Figura 1. Modelo do recido desenvolvido no Word.

2º Passo: desenvolvendo a aplicação Delphi
Criar uma nova aplicação no ambiente de desenvolvimento Delphi 7 através da opção do menu "File|New|Application..." e implementar o formulário principal como sugere a Figura 2.


Figura 2. Formulário principal da aplicação.

Relação dos componentes do formulário principal com a ordem sequencial, o nome do componente, a página da sua localização e as propriedades que devem ser alteradas com os seus respectivos valores.
1. Label pág. Standard 2. Edit pág. Standard 3. Label pág. Standard
Caption Valor: Name edValor Caption Pagador:
Left 10 Left 10 Left 10
Top 5 Top 19 Top 50
    Font negrito, azul    
    Text apagar    
    Width 100    
           
4. Edit pág. Standard 5. Label pág. Standard 6. Edit pág. Standard
Name edPagador Caption Referente a: Name edReferente
Left 10 Left 10 Left 10
Top 64 Top 95 Top 109
Text apagar     Text apagar
Width 430     Width 430
           
7. RadioGroup pág. Standard 8. GroupBox pág. Standard 9. Label pág. Standard
Name rgTipo Caption Cheque: Caption Banco:
Caption Pagamento: Left 150 Left 10
Left 10 Top 140 Top 24
Top 140 Height 70    
Items
 
Dinheiro
Cheque
Width
 
288
 
   
ItemIndex 0        
Columns 1        
Height 70        
Width 125        
           
10. Edit pág. Standard 11. Label pág. Standard 12. Edit pág. Standard
Name edBanco Caption Agência: Name edAgencia
Left 10 Left 105 Left 105
Top 38 Top 24 Top 38
Text apagar     Text apagar
Width 75     Width 75
           
13. Label pág. Standard 14. Edit pág. Standard 15. Label pág. Standard
Caption Conta: Name edConta Caption Local:
Left 200 Left 200 Left 10
Top 24 Top 38 Top 220
    Text apagar    
    Width 75    
           
16. Edit pág. Standard 17. Label pág. Standard 18. Edit pág. Standard
Name edLocal Caption Assina: Name edAssina
Left 10 Left 10 Left 10
Top 234 Top 265 Top 279
Text apagar     Text apagar
Width 430     Width 430
           
19. Button pág. Standard 20. BitBtn pág. Additional  
Name Button1 Kind bkClose    
Caption &Imprimir Caption &Fechar    
Left 125 Left 365    
Top 17 Top 17    

3º Passo: adicionando a unit "Um" ao projeto
O valor do recibo também será apresentado por extenso no documento. No artigo Valor Por Extenso: Delphi foi desenvolvida a unit "Um" com a função "valorPorExtenso" que recebe um valor do tipo real e retorna o extenso deste valor. Para utilizar a unit citada neste projeto deve-se:
a) Fazer o download em http://www.pb.utfpr.edu.br/omero/Delphi/Artigos/Um.rar e extrair a unit na pasta do projeto.
b) Adicionar a unit ao projeto através da opção do menu "Project|Add to project..."

4º Passo: implementação
a) Fazer referência as unit's "ComObj" e "Um" no início da implementation do formulário da aplicação como mostra a Listagem 1. A unit "ComObj" disponibiliza a função CreateOleObject utilizada para criar uma instância do aplicativo Microsoft Word. Já a unit "Um" oferece a função valorPorExtenso para retornar um valor monetário por extenso.

Listagem 1. Fazendo referência as units "ComObj" e "Um".

uses ComObj, Um;

b) No evento "onClick" do botão "Imprimir" o aplicativo Microsoft Word é aberto com um novo documento, criado a partir do modelo do recibo, e os componentes de entrada são atribuidos aos respectivos campos de formulário como mostra a Listagem 2.

Listagem 2. Evento "onClick" do botão "Imprimir".

procedure TForm1.Button1Click(Sender: TObject);
var WApp: variant; // variável associada ao aplicativo Microsoft Word
    WDoc: variant; // variável associada ao documento criado no Word
    path: string;
     vlr: real;
begin
// verifica se o Microsoft Word já está aberto
  if (VarIsEmpty(WApp))
     then WApp := CreateOleObject('Word.Application');

  path := ExtractFilePath(Application.ExeName);
// cria um documento no Word a partir do modelo do recibo
  WDoc := WApp.Documents.Open(path + 'RECIBO.dot');
  WApp.Visible := True;

  try
    vlr := StrToFloat(edValor.Text);
// move os componentes de entrada da aplicacao Delphi
// para os campos de texto do recibo no Microsoft Word
    WDoc.FormFields.Item('Valor').Result := Format('%m', [vlr]);
    WDoc.FormFields.Item('Pagador').Result := edPagador.Text;
    WDoc.FormFields.Item('Referente').Result := edReferente.Text;
    WDoc.FormFields.Item('Extenso').Result := valorPorExtenso(vlr);
    WDoc.FormFields.Item('Referente').Result := edReferente.Text;
    WDoc.FormFields.Item('Local').Result := edLocal.Text;
    WDoc.FormFields.Item('Assina').Result := edAssina.Text;
    if (rgTipo.ItemIndex = 0) // pagamento em dinheiro
       then WDoc.FormFields.Item('Tipo').Result :=
              'Pagamento em Dinheiro.'
    else // pagamento com cheque
      WDoc.FormFields.Item('Tipo').Result :=
        'Pagamento efetuado com o Cheque do Banco: ' +
        edBanco.Text + ', Agência: ' + edAgencia.Text + ', Conta: ' +
        edConta.Text + '.';
  except
  end;
end;

Aspectos importantes da codificação apresentada na Listagem 2:
1) A variável "WApp" recebe uma instância do aplicativo Microsoft Word através da instrução: WApp := CreateOleObject('Word.Application');
2) A variável "WDoc" recebe o documento criado no Word a partir do modelo salvo na pasta da aplicação através da instrução: WDoc := WApp.Documents.Open(path + 'RECIBO.dot');
3) Os valores dos componentes de entrada na interface são atribuídos aos respectivos campos de texto no documento Word através de instruções, como por exemplo:
WDoc.FormFields.Item('Valor').Result := Format('%m', [vlr]);
WDoc.FormFields.Item('Pagador').Result := edPagador.Text;
WDoc.FormFields.Item('Extenso').Result := valorPorExtenso(vlr);


Executando a aplicação deve-se informar todos as informações relacionadas ao recibo: valor (R$), nome do pagador, finalidade do recibo, tipo do pagamento (em dinheiro ou cheque), local do pagamento e o nome de quem assina, como mostra o exemplo apresentado na Figura 2.


Figura 2. Ilustrando a execução da aplicação.

Pressionando o botão "Imprimir" os dados de entrada serão atribuídos aos respectivos campos texto no recibo criado no Word como mostra a Figura 3.


Figura 3. Documento criado no Word com os valores atribuidos pela aplicação Delphi.

Obrigado e um abraço.

Prof. Omero Francisco Bertol (http://www.pb.utfpr.edu.br/omero/)
Apliicações Delphi (http://www.pb.utfpr.edu.br/omero/Delphi/Exercicios.htm)
Download da Aplicação (http://www.pb.utfpr.edu.br/omero/Delphi/Artigos/Recibo.rar)