Criando Documentos ActiveX ( Documentos Ativos) com o VB


O Visual Basic é uma ferramenta que encanta por sua facilidade e por sua flexibilidade. Com ele dispomos de um verdadeiro arsenal de soluções para as mais variadas situações. Os documentos Activex são um novo tipo de projeto presente desde a versão 5.0 que nos traz novas possibilidades , principalmente com o advento da Internet. 

Mas o que são os Documentos ActiveX (Documentos Ativos) ?

A palavra documento pode confundir um pouco e tornar o conceito dos Documentos ActiveX um tanto confuso. Enquanto um documento tradicional , como um documento do Word, é estático um Documento ActiveX não precisa necessariamente o ser. Usando o Visual Basic podemos criar uma aplicação completa com a semântica de um documento tradicional, tendo assim a funcionalidade da aplicação e a flexibilidade do comportamento de um documento.

Sendo mais direto : Os Documentos ActiveX são aplicações Visual Basic que têm o comportamento  de um documento , sendo que os mesmos são executados no interior de uma aplicação que os contém. (Internet Explorer, Microsoft Binder, etc...)

Quando você cria um projeto de um Documento ActiveX , você esta criando um "Documento" Visual Basic que pode estar contido em um Container ActiveX (Internet Explorer) . Ao compilar o Documento ActiveX criamos um arquivo Documento Visual Basic ( extensão .vbd) e o seu servidor correspondente , que pode ser um arquivo ActiveX DLL ou um arquivo EXE. Fazendo uma analogia com os documentos do Word , assim como um arquivo com extensão .doc esta para o arquivo Winword.exe um arquivo com extensão *.vbd está  está para o seu arquivo EXE ou DLL.

Uma aplicação de um Documento ActiveX consta portanto de duas partes: A aplicação servidora ( pode ser um EXE ou uma DLL)  da automação que gerencia e fornece o tipo do objeto documento e o documento propriamente dito. O comportamento do documento permite gerenciar a aplicação Visual Basic como um documento , incluindo ou modificando dados internos da aplicação e distribuindo cópias da mesma.

Algumas características muito importantes que os Documentos ActiveX possuem devem ser mencionadas :

  1. A compatibilidade com o objeto HyperLink permitindo assim solicitar a aplicação Container a exploração de outro documento ActiveX ou qualquer outra direção válida na Internet.
  2. O método AsyncRead , o que permite executar transferências assíncronas de dados permitindo a execução do código enquanto estamos fazendo um download/upload na Web.
  3. Criar aplicações complexas que serão executadas no Internet Explorer sem usar HTML.
  4. A persistência dos dados do documento entre diferentes execução.

A composição de um Documento ActiveX

Um Documento ActiveX criado com o Visual Basic é composto de um objeto UserDocument , de código , de módulos de código e de controles que são colocados no UserDocument.

Como os formulários , os objetos UserDocument são armazenados em arquivos textos que contém o código fonte e os valores das propriedades de um UserDocument e dos controles nele inseridos. Esses arquivos possuem a extensão .dob.

Se um UserDocument possuir controles com elementos gráficos(Bitmaps,etc...) que não podem ser armazenados em arquivos texto , eles são armazenados em arquivos com extensão .dox . (Lembra-se da extensão .frx)

Os arquivos .dob e .dox definem completamente a aparência e a interface (propriedades , eventos e métodos) . Já um Documento ActiveC compilado será composto de um arquivo ActiveX .EXE ou .DLL acompanhado de um arquivo .vbd.

Para visualizar um Documento ActiveX em uma aplicação Container como o Internet Explorer você deve navegar via arquivo .vbd. Assim para uma aplicação chamada "teste1.vbd" localizada no diretório c:\teste ser visualizada no IE , você deve digitar na caixa - Endereço - a seguinte URL :

file://c:\teste\teste1.vbd

Pode também usar o método NavigateTo do objeto HyperLink no interior de um Documento Activex. Para abrir o documento teste1.vbd temos:

Private Sub cmdProxima()

   UserDocument.HyperLink.NavigateTo "c:\teste\teste1.vbd"

End Sub

Documentos ActiveX e Controles ActiveX - Semelhanças

Os Documentos ActiveX em muito se assemelham aos Controles ActiveX , senão vejamos:

Os principais eventos dos objetos UserDocument

Os principais eventos que um Documento ActiveX podem exibir são listados , pela ordem,  a seguir com a indicação de quando ocorrem: 

  1. Initialize - Cada vez que se cria um objeto UserDocumet
  2. InitProperties - Ocorre somente se não armazenamos nenhuma propriedade com PropertyBag.
  3. ReadProperties - Ocorre se armazenamos alguma propriedade com o documento ActiveX.
  4. EnterFocus - Ocorre quando o documento ou qualquer controle que este contenha recebe o foco de entrada.
  5. ExitFocus - Ocorre quando o documento e todos os seu controles perdem o Foco.
  6. Resize - Ocorre cada vez que alteramos o tamanho da aplicação container.
  7. Scroll - Ocorre quando as barras laterais de deslocamento da aplicação container são  utilizadas. 
  8. Hide - Ocorre quando deixamos de  visualizar o documento.
  9. WriteProperties - Ocorre imediatamente antes do evento Terminate quando alteramos o valor da alguma propriedade.
  10. Terminate - Ocorre quando a aplicação container destrói o objeto.

Documentos ActiveX - DLL ou EXE

Como já vimos , os Documentos ActiveX precisam de um servidor de automação ActiveX , e, temos as opções de criar um Documento ActiveX DLL ou EXE.

Os documentos ActiveX DLL são executados no mesmo espaço de trabalho e subprocesso que a aplicação que os contém.

Os documenetos ActiveX EXE são executados em um espaço de trabalho diferente da aplicação que os contém.

A utilização de componentes no processo comporta um rendimento melhor , visto não ser necessário a troca de chamadas e parâmetros entre os processos. Já a vantagem de um servidor ActiveX EXE reside na possibilidade de fornecer , a partir de uma única aplicação , objetos a diversas aplicações clientes.

Determinando a aplicação que contém um Documento ActiveX

Como podemos ter diferentes aplicações que contém um documento ActiveX , podemos ter também características diferentes relacionadas a essas aplicações. Por isso é importante saber reconhecer , em tempo de execução , em que tipo de aplicação container estamos para habilitar diferentes tipos de funcionalidade.

Para reconhecer qual o tipo da aplicação container  (não podemos determinar a versão) , usamos a propriedade Parent e a função Typename. Assim temos a tabela abaixo:

Aplicação Container Retorno da função Typename
Janela IDE do Visual Basic Window
Internet Explorer 4.0 IWebBrowser
Office Binder Binder
Frame HTML no Explorer 4.0 HTMLFrameElemet
Internet Explorer 5.0 IWebBrowser2

A sintaxe usada é a seguinte:  TypeName(UserDocument.Parent)

Criando um Documento ActiveX

Bem , demorou mas chegou. Vamos mostrar na prática como criar um Documento ActiveX , passo a passo . Usaremos como aplicação container o Internet Explorer. Mãos a obra...

Inserindo outro Documento ActiveX ao projeto

Vamos incrementar nosso projeto incluindo outro Documento ActiveX. Você deve ter em mente que para visualizar um Documento ActiveX o método Show não pode ser utilizado pois quem determina quando exibir ou esconder um documento é aplicação container, o IE , para o nosso caso. Você deve navegar entre dois Documentos ActiveX e para fazer isto vai precisar usar o objeto HiperLink e o método Navigate. 

Private Sub cmdavancar_Click()
   Hyperlink.NavigateTo App.Path & "\segundo_documento.vbd"
End Sub

Observe que o projeto funcionar o documento devera estar no mesmo diretório onde você salvou o projeto. Ao executar o projeto o VB irá criar um arquivo .vbd temporário para cada Documento ActiveX do seu projeto. Estes arquivos sempre estarão no mesmo diretório onde o Visual Basic foi instalado. 

Propriedade da Etiqueta  Valor
Name lblCaption
Caption SegundoDocumento

Propriedade do Botão de comando Valor
Name cmdretorna
Caption Retorna
Private Sub cmdretorna_Click()
  UserDocument.Hyperlink.GoBack
End Sub

O método GoBack do objeto HiperLink irá retornar para o documento anterior no Navegador.

figura 1 - O documento ActiveX - PrimeiroDoc.vbd
Figura 2 - O segundo documento ActiveX - SegundoDocumento.vbd

Incluindo um Formulário no Projeto

Propriedades do Formulário Valor
Name frmAuxiliar
Caption Formulário Auxiliar
Private Sub cmdexibirForm_Click()
   frmAuxiliar.txtauxiliar.Text = txturl.Text
   frmAuxiliar.Show vbModal
End Sub

  ...