sexta-feira, 6 de março de 2009

Abrindo documentos Word no Delphi

Quantas vezes você já pensou em como conseguiria abrir um documento do Word dentro da sua aplicação Delphi? Sim, eu sei, tem o RichEdit, mas e se o DOC possuir imagens? E a formatação de parágrafos, tabelas, auto-formas e todos os demais recursos que o Word oferece, sem chances de exibir num RichEdit, certo?

Bem, no Delphi há disponível um componente chamado OleContainer, o qual permite que através de um ActiveX a interface dos programas seja carregada a partir do prórprio formulário da sua aplicação, valendo não apenas para Word, mas para outros aplicativos como Excel, PowerPoint, etc.

Crie uma nova aplicação Delphi for Win32, arraste com componente Panel organizando sua propriedade Align para AlTop e dentro deste, adicione dois componentes Button, alterando o Caption destes para "Abrir Documento" e "Criar Documento". Na área ainda disponível do formulário, adicione um componente OleContainer da paleta System e altere sua propriedade Align para alClient, para que ele use todo o espaço do formulário. Arraste também para a tela da paleta Dialogs um componente OpenDialog e outro SaveDialog.

Realizando a codificação, adicionaremos o seguinte código ao evento OnClick do botão "Abrir Documento", no qual o diálogo de busca de documentos será executado e ao selecionar um documento, a aplicação do Word será criada através do componente OleContainer e o documento carregado.


procedure TForm1.btAbrirClick(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
Screen.Cursor := crHourGlass;
try
OleContainer1.CreateObjectFromFile(OpenDialog1.FileName, True);
OleContainer1.DoVerb(0);
finally
Screen.Cursor := crDefault;
end;
end;
end;


NOTA: Configure a propriedade Filter do OpenDialog permitindo apenas extensões relacionadas ao Word.

No botão "Criar Documento" adicione a lista de códigos a seguir, a qual é responsável por criar um novo objeto do tipo "Word Document" exibindo-o na tela e adicionando um texto a sua área.


procedure TForm1.btCriarClick(Sender: TObject);
begin
OleContainer1.CreateObject('Word.Document', False);
OleContainer1.AllowInPlace := True;
OleContainer1.DoVerb(ovPrimary);
OleContainer1.OleObject.Application.Selection.TypeText('Passagem do Texto para o Documento');
end;


Por último, precisamos que o documento também seja salvo quando saírmos do formulário, pois de nada adiantaria abrir o documento, permitir que alterações nele sejam feitas e não salvar as mesmas. Para isto, adicione ao evento OnDeactivate do OleContainer o seguinte código, que fará uma verificação relacionada ao nome do arquivo para identificar se o mesmo foi aberto ou criado, em seguida salva-o no computador.

procedure TForm1.OleContainer1Deactivate(Sender: TObject);
var
FileName : String;
begin
if OpenDialog1.FileName <> '' then
FileName := OpenDialog1.FileName
else
begin
if SaveDialog1.Execute then
FileName := SaveDialog1.FileName;
end;
if FileName <> '' then
self.OleContainer1.SaveAsDocument(OpenDialog1.FileName) ;
end;


NOTA: Configure a propriedade DefaultExt do SaveDialog para "*.doc". Configure também sua propriedade Filter.

Dessa forma, finalizo este post, deixando-lhe o desafio de criar aplicações Delphi integradas com demais ferramentas disponíveis em seu computador. Abraço e até o próximo post.

5 comentários:

Fernanda disse...

Olá fiz esse programinha, mas deu erro em criar erro =(OleContainer1.AllowInPlace := True;)

Unknown disse...

Boa tarde!
Fiz o programa da forma que vc disse e funcionou, só que o documento vem sem o "Botão Oficce" onde contém as opções de salvar, imprimir, enviar, etc. Como faço para que êle apareça.
Obrigado.

Unknown disse...

Excelente funcionou e serviu perfeitamente para o que eu precisava valeu!

Unknown disse...

Como faço para imprimir o documento pelo delphi já que o botão Arquivo não é exibido? Há essa possibilidade?

Wesley dos Santos Elbacha disse...

Muito bom! Obrigado pela dica, será útil para mim.