Quem nunca viu no menu Inserir de um aplicativo MS Office, por exemplo, a opção Objeto? Veja neste artigo como você pode implementar isso no Delphi, e como interagir com os objetos inseridos.
Para criar um aplicativo Ole Container no Delphi, coloque um componente OleContainer
(palheta System) em um formulário. Em seguida, selecione o componente
e clique com o botão direito do mouse para ativar seu menu de atalho,
o qual terá uma opção chamada "Insert Object". Quando você seleciona
esse comando, o Delphi
exibe a caixa de diálogo Inserir Objeto OLE padrão do Windows.
Essa caixa de diálogo permite que você escolha um dos aplicativos
servidores registrados no computador.
Uma vez que o objeto OLE esteja inserido no contêiner, o menu de atalho
do componente contêiner de controle terá vários outros
itens de menu personalizados. Os novos itens de menu incluem comandos para
mudar as propriedades do objeto OLE, inserir outro, copiar objeto existente
ou removê-lo.
A lista também inclui os verbos ou ações do objeto (como
Edit, Open ou Play).
Quando se tem um objeto OLE no
contêiner, o servidor correspondente será ativado para permitir
a edição do novo objeto. Assim que você fechar o aplicativo
servidor, o Delphi atualizará o objeto no contêiner e o apresentará,
até mesmo em tempo de projeto, no formulário do aplicativo Delphi
que está sendo
desenvolvido.
Se você examinar a descrição textual de um formulário
contendo um componente com um objeto dentro, notará uma propriedade
Data, que contém os dados reais do objeto OLE. Embora o programa cliente
armazene os dados do objeto, ele não sabe como manipular e apresentar
isso sem a ajuda do servidor correto (o qual deve estar disponível no
computador onde o programa é executado). Isso significa que o objeto
OLE está incorporado.
Para suportar totalmente documentos compostos, um programa deve fornecer um
menu e uma barra de ferramentas ou painel. Esses componentes extras são
importantes, pois a edição local implica em uma união
da interface com o usuário do cliente e do programa servidor. Quando
o objeto OLE é ativado no local, alguns dos menus suspensos da barra
de menus do aplicativo servidor são adicionados à barra de menus
do aplicativo contêiner.
A união de menu OLE é manipulada quase automaticamente pelo
Delphi. Você só precisa configurar os índices corretos
dos itens de menu do contêiner, usando a propriedade Grouplndex. Todo
item de menu com um número de índice ímpar é substituído
pelo elemento correspondente do objeto OLE ativo. Mais especificamente, os
menus suspensos File (0) e Window (4) (ou Arquivo e Janela, respectivamente)
pertencem ao aplicativo contêiner. Os menus suspensos Edit (1), View
(3) e Help (5) (ou Editar, Exibir e Ajuda, respectivamente, ou os grupos de
menus suspensos com esses índices) são obtidos pelo servidor
OLE. Um sexto grupo, chamado Object (ou Objeto) e indicado com o índice
2, pode ser usado pelo contêiner para exibir outro menu suspenso entre
os grupos Edit e View (Editar e Exibir), mesmo quando o objeto OLE está ativo.
O método InsertObjectDialog mostra uma caixa de diálogo de sistema,
mas não ativa automaticamente o objeto OLE:
procedure TForm.InserirObjeto1Click(Sender: TObject);
begin
if Olecontainer1.InsertobiectDialog then
OleContainerl.DoVerb (OleContainerl.PrifllarYverb)
end;
Tendo o objeto criado, você pode executar seu
verbo principal usando método DoVerb.
Quando a edição
local ativa um aplicativo servidor que exibe uma barra de ferramentas, a barra
de ferramentas desse servidor substitui a barra de ferramentas do contêiner,
a menos que você altere a propriedade Locked do painel em que a barra está,
obrigando o painel assim, a permanecer presente no aplicativo e não
ser substituído
por uma barra de ferramentas do servidor.
Um bom exemplo sobre interação de aplicativos com OLEContainer pode ser encontrado
no repositório do site, na áre de exemplos, pelo link (precisa estar logado):
http://www.activedelphi.com.br/modules.php?op=modload&name=Downloads&file=index&req=viewdownloaddetails&lid=471&ttitle=Automação
Abraços!
Valdomiro Farias de Andrade Júnior -
Analista de Sistemas
Contato: procompanysistemas@infonet.com.br
|