Planeta Delphi - Artigo | Delphi e OpenOffice(BROffice) - Parte 1...
Delphi e OpenOffice(BROffice) - Parte 1
Vamos inicar um novo passeio; um passeio diferente, um passeio pelo mundo do software de código aberto. Abro esse artigo, não querendo dar a idéia de que será algo original. Mas de apresentar a idéia da comunicação OLE entre aplicações Delphi e a família de documentos BrOffice (ou OpenOffice - Writer, Calc, Base e Impress). Porque estou querendo dar ênfase a essa idéia? Simples! o Sistema da empresa onde trabalho, comunica-se tranquilamente com a família Microsoft Office, porém um de nossos clientes resolveu adotar a família BrOffice para sua empresa, e o mais cômico disso tudo, foi porque eu que os incentivei. Mas não tinha idéia de que a parte da comunicação seria tão complexa, mais complexa do que pegar e rodar uma macro no Office e rapidamente obter as propriedades que poderiam ser acessadas e as incorporar em nosso aplicativo.
A minha idéia não é nem um pouco original, mas como falei, ela é interessante porque nos remete a um novo aprendizado, e muitas vezes deixamos de implementar algo, já que a quantidade de informação é rara ou, o trabalho cobrará suas dívidas em relação ao tempo perdido, tornando-o muito oneroso, tanto para sua empresa como para os clientes. Mas o mais importante de tudo é tomar a iniciativa e seguir em frente.
Leio muitos artigos escritos em revistas de programação e sites relacionados ao Delphi e raramente vejo uma referência dando crédito aos que nos ensinaram e que nos possibilitaram dar os ponta-pés iniciais no assunto; nesse caso, gostaria de ressaltar o documento escrito por Sérgio Hernandes que está hospedado no site www.broffice.org e pode ser obtido no seguinte endereço: http://ooomacros.org/dev.php#133853. Uma segunda referênca que poderá lhe dar uma luz é o livro chamado: OpenOffice.org Macros Explained do escritor Andrew Pitonyak de 2004 (velho, mas todo que é velho é importante para nossas vidas).
III - OBSERVAÇÕES IMPORTANTES
Não será apresentado detalhes pertinentes ao uso dos aplicativos, isto é, como salvar, abrir e editar arquivos ou executar comandos de compilação. Esses são pressupostos necessários para os que estão interessados nesse assunto.
IV – PROBLEMAS
No caso de encontrar erros nos procedimentos, favor relatar. Não sou dono da verdade, portanto as críticas construtivas serão bem-vindas. Não darei atenção para qualquer crítica ríspida, pois trato todos com respeito.
V – APLICATIVOS
Delphi 7 ou qualquer versão superior e também a Suite BrOffice - estou usando a versão 3.1 com o Builder 9420 - Instalação Padrão.
VI - DIREITOS DE CÓPIA
Assunto autorizado somente para o site www.PlanetaDelphi.com.br. Esse conteúdo não pode ser copiado ou re-linkado sem prévia autorização do seu autor ou do responsável pelo site, nesse caso Sr. Felipe Monteiro. Toda a cópia e re-linkagem sem autorização prévia e por escrito dos responsáveis mencionados anteriormente, estarão sujeitas aos termos da lei de pirataria.
Delphi e BrOffice
Iniciando as aplicações do pacote
IMPORTANTE: sempre declarar na seção USES a Unit ComObj para todos os exemplos apresentados.
Para que possamos executar as diversas aplicações do pacote BrOffice, faremos uso basicamente de um procedimento chamado LoadComponentFromURL que recebe 4 parâmetro e segue este formato: LoadComponentFromURL(sURL, sFrame, FlagDeBusca, Array); As tabelas abaixo, apresentam os valores permitidos para cada um dos parâmetros.
Tabela 1 - URL – String – Primeiro Parâmetro
Tabela 2 - Frames – Segundo Parâmetro
Flag de Busca - Terceiro Parâmetro
É um valor constate que define o algoritmo que será usado para encontra o quadro de destino. Use o valor 0 nesse parâmetro para cancelar.
Array – Quarto Parâmetro
Nesse parâmetro são passados parâmetros para o descritor de mídia do arquivo, definindo diversar propriedades para o carregamento.
Executando os diversos Frames - Criando o nosso primeiro aplicativo
Não esqueça que o BROffice deve estar instalado.
Nesse aplicativo, vamos simplesmente fazer com que o nosso programa execute um dos programas BROffice que o usuário desejar executar. Execute o Delphi, crie uma nova aplicação e no form adicione um componente radiogroup contendo os nomes das aplicações (factory´s) na propriedade itens, uma variável pública chamada aplicação e um botão. Conforme a figura abaixo.
Vamos escrever algum código agora. No evento onClick do radiogroup edite o seguinte código:
0 : Aplicacao := '';
1 : Aplicacao := 'private:factory/scalc';
2 : Aplicacao := 'private:factory/swriter';
3 : Aplicacao := 'private:factory/swriter/web';
4 : Aplicacao := 'private:factory/swriter/GlobalDocument';
5 : Aplicacao := 'private:factory/sdraw';
6 : Aplicacao := 'private:factory/smath';
7 : Aplicacao := 'private:factory/simpress';
8 : Aplicacao := 'private:factory/schart';
9 : Aplicacao := '.component:Bibliography/View1';
Para o evento onClick do botão, edite o seguinte código:
BrOffice, Desktop, Executar : Variant;
if RadioGroup1.ItemIndex <> 0 then
BrOffice := CreateOleObject('com.sun.star.ServiceManager');        //1ª Linha
Desktop  := BrOffice.CreateInstance('com.sun.star.frame.Desktop'); //2ª Linha
Executar := Desktop.LoadComponentFromURL(Aplicacao, '_blank', 0,   //3ª Linha
BrOffice  := Unassigned;
Desktop  := Unassigned;
Executar := Unassigned;
{Atente para as letras maísculas e minúsculas. Se a palavra frame por exemplo
for colocada em maiúscula, uma exceção lhe será apresentada.}
Vou fazer agora um pequeno detalhemento do que foi feito no evento onclick do botão. Veja que foram declaradas três variáveis do tipo Variant – São elas: BrOffice, Desktop e Executar. A variant BROffice é a inicialização, muito parecido com a chamada do Office, ao invés de chamar por exemplo 'Excel.Application' estará chamando um elemento chamado Service Manager do módulo 'com.sun.star'. Já a variável Desktop criar uma instância contendo os elementos comuns da plataforma; a variável Executar será encarregada de ser uma referência a aplicação, isto quer dizer que, quando clicar no botão para executar o programa desejado, por exemplo o Calc, Executar terá todo o conjunto de módulos pertinentes ao Calc, a partir dele, poderemos acessar as propriedades de Pastas, Planilhas e Células.
Por fim, vemos declaradas as três variáveis mencionadas anteriormente, porém recebendo a atribuição de Unassigned. Estamos somente limpando as variáveis, mais nada.