You are on page 1of 24

Criando Controles ActiveX no Visual Basic

O que é ActiveX ?

Inicie o seu Visual Basic versão 5 ou versão 6 e clique na opção File->New


Project. Você verá a seguinte tela sendo exibida:

Você agora tem a opção de criar projetos do tipo ActiveX EXE , ActiveX DLL ,
ActiveX Control , ActiveX Document DLL e ActiveX Document EXE . Nem sempre foi
assim...

Tudo começou com a tecnologia OLE ( leia o artigo: OLE Conceitos ) e evoluiu para
ActiveX . Assim , o termo para descrever a capacidade dos objetos se comunicar
uns com os outros é ActiveX , e , os documentos que usavam OLE são chamados
agora de documentos ActiveX. A tecnologia ActiveX é um padrão que rege a
interação e a comunicação entre os objetos de uma aplicação.

No Visual Basic , no início tinhamos as VBX - Visual Basic eXtensions -


componentes de 16 bits fornecidos por terceiros que acrescentavam funcionalidades
a linguagem Visual Basic expandindo-a e permitindo que muitas tarefas pudessem
ser realizadas.

Enquanto que as VBXs eram DLLs que atuavam pela definição de suas
propriedades pela invocacão de seus métodos as OCXs trabalham com o
encapsulamento , como prega a OOP - Object Oriented Programming. Os VBXs
eram simplesmente arquivos que ficavam livres no seu disco rígido já as OCXs são
objetos que precisam ser registrados.

Quando você usava uma VBX , acrescentava-a na barra de ferramentas e após a


compilação do seu projeto com geração do seu EXE precisava fornecer a VBX junto
pois o EXE iria referenciar a VBX usada. Ao usar as OCX elas precisam ser
registradas para o Windows poder saber que elas existem.
Os controles ActiveX consistem em diversas interfaces que apontam para funções e
objetos. Se o controle for uma DLL os ponteiros serão passados diretamente entre
o aplicativo e a ActiveX.

O problema de segurança que envolve os controles ActiveX , quando usados na


internet , pode ser contornado pela alteração do nível de segurança do seu
navegador não permitindo o download dos controles diretamente em sua máquina
ou através da autenticação dos controles ActiveX.

Os controles ActiveX

Assim como você usa um controle Combobox ou um Listbox você pode criar
controles personalizados para poder reutilizar em seus aplicativos. Os controles
ActiveX são basicamente módulos de classe com uma interface visual.

Criar um controle ActiveX no VB 5/6 é como criar um aplicativo padrão com um


módulo de classe, lembrando que você precisa criar um repositório para o controle
pois os controles ActiveX não podem existir sozinhos.

Vamos mostrar passo a passo como criar um controle ActiveX . Criaremos um


controle simples baseado em uma classe. Primeiro iremos criar a classe e depois
criaremos a versão ActiveX dessa classe.

OOP - criando a Classe : Cálculo do valor resultante de uma


aplicação financeira

(Leia artigo sobre introdução a OOP e criaçao de classes - Criando Classes no


Visual Basic .)

Já definimos nosso objetivo : criaremos uma classe para calcular os juros de uma
aplicação financeira. Primeiro devemos definir as variáveis envolvidas nesse
processo, então vejamos: Queremos calcular o valor resultante de uma aplicação
de um certo valor a uma taxa de juros especifica por um período de tempo
determinado. Logo podemos definir as seguintes variáveis:

nPrazo - variável que indica o prazo da aplicação

cValor - variável que indica o valor aplicado

cMontante - variável que indica o valor dos acumulado pela aplicação no período

nJuros - variável que indica a taxa de juros praticada

A fórmula usada para calcular o valor resultante da aplicação será:

cMontante = cValor + ( cValor * nJuros * nPrazo )

Aqui usamos a fórmula para cálculo dos juros simples ( J = C * i * n ) e


somamos o resultado com o valor aplicado para obter o resultado final. Lembrando
que a taxa e o prazo devem estar nas mesmas unidades: para taxa diaria o prazo
deve ser informado em dias, para taxa mensal o prazo deverá estar em meses.

Vamos agora gerar o código para nossa classe. Para melhor esclarecimentos sobre
classes leia o artigo - Criando classes no Visual Basic .
• Inicie um novo projeto e insira um módulo de classe para este projeto.
• A seguir insira o código abaixo no seu módulo de classe:

Código do Módulo de classe

• Definindo as variáveis

Option Explicit

Public nPrazo as integer


Public Valor as Currency
Public Montante as Currency

Private nJuros as currency

As variáveis visíveis em todo o projeto são : nPrazo , cValor , cMontante


(Declaradas como Públicas)

A variável visível somente pelo código dentro da classe : nJuros ( declarada como
Privada )

• Código para aceitar o valor da propriedade Juros do aplicativo que foi


chamado

Property Let Juros(i)

if i > 1 then
nJuros = i/100
else
nJuros = i
endif

End Property
• Código para enviar a propriedade Juros ao aplicativo

Property Get Juros()


Juros = nJuros
End Property
• Código para aceitar o valor da propriedade Prazo do aplicativo que foi
chamado

Property Let Prazo(n)


nprazo = n
End Property
• Código para enviar a propriedade Prazo ao aplicativo

Property Get Prazo()


Prazo = nPrazo
End Property
• Código para calcular o valor resultante

Public Sub Calcula()


Dim ctemp as Currency
ctemp = Valor
ctemp = ctemp + ( Juros * Prazo * cTemp )
Montante = cTemp

End Sub

Usando a Classe criada

Para usar a classe criada no seu projeto faça o seguinte:

1. No formulário do projeto insira três caixas de texto , 4 labels e um botão de


comando e retângulo Shape ,como a seguir:

Os valores exibidos pelas caixas de texto são os valores mínimos para uma
aplicação. Ela funciona assim : Voce fornece os valores nas caixas de texto e clica
no botão Calcula que usando a classe criada devolve o resultado exibindo-o na label
dentro do retângulo.

Após executar o aplicativo e fornecer valores teremos algo parecido como:

Voilá , nossa classe funciona !!!! (Também com essa complexidade de código ... )

Criando o controle ActiveX


Bem , você pode estar se perguntando - "Pra que tudo isto ??? " ou " Cadê o
controle ActiveX ??? ". Calma...

Agora vamos criar realmente o nosso controle baseado na classe anteriormente


criada. Vamos lá ...

1. Crie um EXE padrão no VB


2. Agora selecione a opção File -> Add Project e selecione ActiveX Control -
como na figura a seguir:

3. Você vai obter um formulário em branco sobre a janela do formulário


padrão. Esse formulário é uma janela sem borda chamada de : objeto
UserControl (ver abaixo)
4. Selecione a opção do menu Project -> Project2 Properties e verá surgir a
janela abaixo , pedindo o nome do controle:

5. Digite o nome do projeto , no nosso caso chamaremos de ValorMontante e


da descrição do projeto - Controle Valor Montante. (como na figura abaixo)

6. A seguir , desenho o formulário do controle como abaixo:


7. Dê um duplo clique no formulário ActiveX e você verá o código do evento
Initialize. Insira o seguinte código neste evento:

Private Sub UserControl_Initialize()


txtvalor = 100
txtprazo = 2
txtjuros = 6
End Sub
8. No evento Click do botão Calcular do formulário ActiveX insira o seguinte
código ( idêntico ao usado no projeto para a classe)

Private Sub Command1_Click()


Dim objValorMontante As New Montante

objValorMontante.prazo = Val(txtprazo)
objValorMontante.Juros = Val(txtjuros)
objValorMontante.Valor = Val(txtvalor)

objValorMontante.Calcula

lblmontante = objValorMontante.Montante

End Sub
9. Insira a classe Montante.cls(criada no projeto anterior) no projeto do
controle ActiveX
10. Agora , vamos salvar tudo: Salve o projeto e o formulário padrão EXE com o
nome de Repositório ; Salve o projeto ActiveX com o nome de
ValorMontante ; salve o controle ActiveX com o nome de
ControleValorMontante e salve o grupo de projeto com o nome de
PrimeiroActiveX. Abaixo temos uma visão do seu projeto global:
Perceba que o arquivo do controle ActiveX possui a extensão CLT . Um arquivo CLT
é igual a um arquivo FRM; assim como um arquivo FRM armazena as definições de
um formulário um arquivo CLT armazena as definições para o controle. E , assim
como algumas vezes um arquivo FRM possui um arquivo FRX um arquivo CLT
também pode ter um arquivo CLX.

11. Agora feche a janela do projeto ActiveX e observe a barra de ferramentas


padrão. O seu controle já aparece a ela. Voce acabou de criar a OCX
ControleValorMontante. Palmas para você ...

O que você esta esperando ??? Vamos usar essa OCX agora ! . Ative o seu
formulário padrão ( form1) e clique no controle inserindo-o no formulário como
abaixo:
Pressione F5 para executar o projeto e a seguir clique no botão Calcular. Veja o
resultado abaixo:

Brilhante !!! A OCX funciona !!!

Compilando e Registrando a OCX

Vamos agora compilar o seu controle ActiveX. Observe a figura abaixo , onde temos
Grupo de Projeto para nosso exemplo:
Fig 2.0 - Compilando seu controle
Fig 1.0 - A janela do Grupo de Projeto
ActiveX

1. Você deve selecionar o projeto ValorMontante


2. Selecione a opção do menu File->Make ValorMontante.ocx... ( ver fig
2.0 ) para compilar o Controle.
3. A seguir selecione o projeto repositorio.vbp e selecione na opção File ->
Make repositorio.exe...

Pronto ! Serviço acabado . Falta agora registrar a sua OCX. Para registrar sua OCX
você pode usar o arquivo regsvr32.exe que vem com o Windows usando a
seguinte sintaxe:

regsvr32 ValorMontante.ocx

Se o registro foi feito com sucesso você verá uma mensagem com a janela abaixo:

Agora vamos ver se a sua OCX já pode ser usada por qualquer projeto no Visual
Basic. Inicie um novo projeto e selecione a opção Project -> Components... , na
janela de diálogo Components procure pela sua ocx - Valor_Montante. Veja
abaixo a janela:
Para usar a sua OCX basta selecionar a opção - Controle Valor Montante ; o
controle deverá aparecer na caixa de ferramentas pronto para ser inserido em
qualquer projeto.

Segurança ActiveX

Ao se conectar a um servidor na Internet ocorre a transferência de páginas HTML ,


código VBScript/JavaScript e imagens. Como a HTML e as linguagens de scripts
contém basicamente comandos de formatação de texto não temos que nos
preocupar com uma possível invasão Hacker .

Com os controles ActiveX a coisa muda de figura . Nada impede que um controle
transferido para o seu sistema venha a causar danos ao seu computador. Talvez
possa parecer um exagero mas cuidado com os controles Activex que você
transfere para o seu computador.

Bem , mas o que podemos fazer para amenizar tal problema ? Vejamos:

• No Internet Explorer , opção Ferramentas -> Opções da Internet , na aba


Segurança , você pode aumentar o nível de segurança e personalizar as
opções relacionadas aos controles ActiveX.
• A microsoft disponibiliza através da ActiveX SDK a tecnologia Authenticode
que permite incluir uma assinatura digital aos seus controles indicando que
eles são seguros.

Usando o Registro do sistema


Quando você instala um controle baseado em um objeto , as OCXs são registradas
como parte da rotina de instalação.

Os objetos registrados são armazenados em HKEY_CLASSES_ROOT . Após o


registro eles são identificados por um identificador de classe - CLSID - que é um
código alfanumérico.

Para incorporar um controle ActiveX dentro de uma página Web, precisamos usar o
conjunto de tags <OBJECT> ... </OBJECT>. O que vai identificar o objeto
ActiveX é o seu CLASSID alfanumérico - um nome longo e dificílimo de memorizar
.

Uma ferramenta da Microsoft que facilita a copia do nome CLASSID é a ACTIVEX


CONTROL LISTER FOR HTML que exibe todos os controles registrados em sua
máquina. Para obter o código HTML que irá inserir o controle clique com o botão
direito do mouse sobre o controle e selecione copiar e a seguir cole o conteúdo da
área de transferência no código fonte HTML.

A seguir temos um exemplo do código fonte gerado para o controle Label do VB.

<OBJECT
ID="Label Object"
CLASSID="CLSID:99B42120-6EC7-11CF-A6C7-00AA00A47DD2"
WIDTH=80
HEIGHT=30>
</OBJECT>

Lindo !!! nào é mesmo ???

O CLASSID identifica exclusivamente um objeto. Existe ainda um parâmetro


adicional chamado CODEBASE que indica onde no servidor a classe pode ser
encontrada se não estiver registrada localmente.

Quando o navegador encontra a referência do controle ActiveX , ele usa o CLASSID


para verificar o registro da máquina local e checar se o controle esta registrado
localmente.

O DCOM - Modelo de Objeto Componente

DCOM é uma especificação de desenvolvimento de software que define como os


componentes devem ser comunicar entre si. Quando um programa faz referência a
um componente ActiveX o Windows irá localizar o componente e enviará a
mensagem para ele. Você não precisa fazer nada além de criar as referências aos
controles ActiveX no seu código a DCOM fará o resto.

Criando Controles ActiveX no Visual Basic - II

Os Controles ActiveX

Cá estamos novamente falando sobre controles ActiveX. Se você esta familiarizado


com os controles TextBox , Label , ComboBox , etc... e os utiliza com frequência em
seus formulários usando suas propriedades , métodos e eventos , saiba que quando
você cria um controle ActiveX você esta criando controles que podem ser usados
em suas aplicações exatamente da mesma forma.

Após criado o seu Controle ActiveX pode ser usado em outros projetos VB , e, você
pode até criar um controle para uso comercial como um Grid ou qualquer controle
que você crie para suprir uma lacuna que exista no mercado.

Criar um controle ActiveX não é a mesma coisa que criar uma aplicação padrão no
Visual Basic ; os passos envolvidos na criação de um controle podem ser
enumerados assim :

1. Defina o objetivo : O que o seu controle vai fazer ? Para que ele vai servir ?
2. Defina a interface do seu controle
3. Crie o código para as propriedades , métodos e eventos do seu controle
4. Teste o seu controle antes de usá-lo pra valer.
5. Compile o seu controle criando uma OCX fazendo os testes para versão
compilada.
6. Incorpore o seu controle a sua aplicação e monte os discos de distribuição
da mesma.

No artigo anterior - Criando Controles Activex no VB - mostramos como criar


um controle Activex passo a passo. Vamos mostrar agora como usar os controles já
existentes no Visual Basic para criarmos no novo controle ActiveX.
Neste exemplo iremos criar um controle do tipo Spin usando dois controles já

existentes: Uma caixa de texto e o um controle VScrollBar , ver na figura


abaixo:

1.0 - Os controles do VB usados para criar nosso novo 2.0 - A aparência do Nosso controle
Controle Activex Activex

Vamos lá , volte o filme...

1. Inicie o seu Visual Basic versão 5 ou versão 6 e clique na opção File->New


Project. Você verá a seguinte tela sendo exibida:

Selecione a opção Standard EXE . O projeto Standard EXE será o container para
nosso controle ActiveX.

2. No menu File selecione a opção Add Project


3. Na janela de diálogo selecione a opção ActiveX Control e clique em
Abrir/Open
4. Neste ponto você verá dois projetos abertos que parecem similares. Observe
também que existe um novo controle na caixa de ferramentas chamado
UserControl1 com o ícone indicando que o mesmo ainda não esta
habilitado

5. Vamos criar a interface do nosso controle Spin. Selecione o controle


TextBox ( ) e desenhe uma pequena caixa de texto no formulário do

projeto. A seguir selecione o controle Vertical Scrollbar ( ) e coloque no


lado direito da caixa de texto , ajustando o tamanho dos controles. Veja
abaixo o resultado. Obs: Procure fazer o tamanho do formulário ajustado ao
tamanho do controle.

6. Como nossa interface gráfica já esta pronta falta escrever o código para
fazer funcionar o Controle. O comportamento que queremos obter é o
seguinte: quando o usuário clicar nas setas do controle o valor da caixa de
texto seja incrementado ou decrementado. Para que isto ocorra devemos
inserir código no evento Change da Barra de rolagem vertical (Vertical
Scrollbar). Clique duas vezes sobre o controle VScrollBar e na janela de
código insira a seguinte linha como na figura: Obs: Podemos definir as
propriedades Max e Min do controle VScrollBar definindo qual o valor
máximo e o mínimo. Vamos definir a propriedade Text da caixa de text com
o valor 1 . Este será o valor inicial do controle.
7. Feche a janela de código e antes de fechar a janela do formulário do nosso
controle vamos dar um nome bem sugestivo a ele... Que tal : SuperSpin...
Veja na figura abaixo no novo nome da caixa de propriedades do controle.

8. Estamos terminando. Feche a janela do formulário do nosso controle SuperSpin.


Perceba agora que na caixa de ferramentas ele surge com o ícone habilitado e
pronto para o uso.

9. Para testar o controle selecione-o da caixa de ferramentas e arraste-o até o


formulário padrão desenhando-o no form como na figura a seguir: (Observe que
voce agora possui somente um controle)
10. Ao executar o seu projeto e clicar nas setas para cima/baixo do seu controle
terá o seguinte resultado:

Pronto !!! agora só falta compilar e criar a OCX e o seu controle SuperSpin esta
pronto para detonar... Voce pode usá-lo inclusive no Internet Explorer ( versão 4.0
ou superior...).

Para alterar o ícone do seu controle na caixa de ferramentas ( afinal se você gerar
mais de um controle poderá ficar confuso pois o ícone padrão é sempre o mesmo)
basta você alterar o valor da propriedade ToolboxBitmap do seu controle
atribuindo a ele um ícone válido. Os ícones da caixa de ferramentas tem um
tamanho de 16 por 15 pixels. Veja abaixo:
Alterando a propriedade ToolboxBitmap O novo ícone do seu controle

Usando o Activex Control Interface Wizard

O Activex Interface Wizard permite criar propriedades , eventos e métodos para os


controles ActiveX. Ele automatiza um serviço que seria muito tedioso, embora não
faça o serviço completo. Vamos usar este assistente para acrescentar alguns
recursos ao nosso primeiro controle ActiveX criado - ControleValorMontante .
(Veja artigo - Criando Controles ActiveX no Visual Basic )

Vamos incluir em nosso controle : uma propriedade , um método e um evento:

1. A propriedade VM_Conta - que indica o número de vezes que o controle foi


calculado
2. O método VM_Sobre - que exibe uma caixa de diálogo Sobre o controle
3. O evento VMCalcula - que será disparado toda vez que o Valor Montante for
calculado.

Obs: As propriedades, métodos e eventos são também conhecidas como


membros.( Members)

Para iniciar nosso trabalho devemos incluir o Assistente - Activex Control Interface
Wizard - no ambiente de desenvolvimento do Visual Basic. Então façamos:

1. Selecione no menu Add-Ins a opção Add-In Manager e na janela de


diálogo Add-In Manager selecione a opção VB6 ActiveX Ctrl Interface
Wizard e marque as caixas de opções : Loaded/Unloaded e Load on
Startup do frame Load Behavior. Veja figura abaixo:
Como Assistente integrado vamos começar o trabalho:

• Inicie o Visual Basic e carregue o projeto ValorMontante .


• A seguir inicie o Assistente. A seguinte tela será exibida:

• Clique no botão Next . A caixa de diálogo abaixo será exibida:


Nesta janela de diálogo temos uma lista de propriedades , métodos e eventos mais
comuns que podemos usar para o nosso controle. Podemos selecionar uma
propriedade, evento ou método da lista de nomes disponíveis e clicar no botão com
o sinal de maior ( > ) para incluí-la em nosso controle. Sew clicar no botão >> irá
selecionar todos os membros disponíveis.

Como iremos criar nossos próprios membros vamos clicar no botão Next > .

• A janela de diálogo abaixo é exibida.


Vamos clicar no botão New....

• Temos a seguir uma janela solicitando o nome( Name ) e o tipo de Membro


que queremos criar:

Vamos informar os nomes da propriedade , método e evento respectivamente


como: VM_Conta, VM_Sobre e VMCalcula. (Ver figura abaixo):

Clique no botão Next >.

• Vamos obter a janela de diálogo Set Mapping que permite mapear as


propriedades, métodos e eventos no nosso controle para propriedades ,
controles e métodos específicos aos controles constituintes. (Ver janela Set
Mapping abaixo)
A ação de mapear os membros ( mapping the members ) basicamente é
determinar a quais controles constituintes(ou o UserControl) ser refere cada
membro da lista. Para isso você deve selecionar o membro da lista Public Name e
depois o controle ao qual o membro se refere na lista Control.

• Na última etapa vamos configurar os atributos dos membros mapeados no


passo anterior que aparecem na lista Public Name. Aqui vamos definir o
tipo de dado de uma propriedade o seu valor padrão e se ela estará
disponível durante a execução do programa. Se o membro é um método
podemos definir o tipo de dado retornado e se for um evento podemos
configurar os seus argumentos.
Para encerra nosso trabalho basta clicar no botão Finish , feito isto , o controle é
criado com as configurações selecionadas. Vamos dar uma olhada no código
gerado:

Em muitos trechos de código iremos ver mensagem como a exibida no código


abaixo:

'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!


'MemberInfo=8,0,0,0
Public Property Get ForeColor() As Long
ForeColor = m_ForeColor
End Property

Traduzindo: "ATENÇÃO NÃO REMOVA OU MODIFIQUE AS SEGUINTES LINHAS


COMENTADAS!"

Lembra que no inicio dissemos que o Assistente não fazia o serviço completo ? .
Pois é , agora temos que codificar a propriedade Sobre. Basta localizar a função
VM_Sobre() e inserir o código como abaixo:

'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED


LINES!
'MemberInfo=14
Public Function VM_Sobre() As Variant
MsgBox " Valor Montante - JcmSoft "
End Function

Agora se você inserir um botão de comando no Controle pode associar ao evento


click do mesmo o seguinte código:
Private Sub Command2_Click()
Me.VM_Sobre
End Sub

Ao executar o projeto e clicar no botão Sobre teremos :

O projeto com o botão de comando Sobre Executando o projeto e clicando o botão Sobre

Se voce olhar detalhadamente o código gerado verá que o assistente encapsulou


todas as propriedades em envoltórios Property Let/ Property Get e algumas
propriedades , Font por exemplo , em um Property Set .

Para converter um aplicativo inteiro para um documento ActiveX podemos usar o


assistente : ActiveX Document Migration Wizard. Mas isto é assunto para um
outro artigo... até lá...

You might also like