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 Controle Activex 2.0 - A aparência do Nosso controle 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.

  1. No menu File selecione a opção Add Project
  2. Na janela de diálogo selecione a opção ActiveX Control e clique em Abrir/Open
  3. 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
  1. 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.

  1. 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.

  1. 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.

  1. 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.

  1. 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)

  1. 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:

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 > .

Vamos clicar no botão New.... 

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 >.

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.

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á...