Visual Basic 6 -   Criando Componentes com o Visual Basic


Compreender os objetos COM é muito importante se você deseja  criar e utilizar esses Componentes para turbinar sua aplicação VB ou ASP .  Mesmo que seja novidade ,  com certeza você já usou objetos COM ; quer um exemplo: se você já utilizou ADO , então já usou objetos COM.

Veremos como criar componentes usando o Visual Basic ; primeiro vamos dar uma breve introdução nos conceitos básicos do modelo dos objetos COM. Se você tem a resposta na ponta da língua para as perguntas abaixo pode pular a introdução.

  1. Qual a diferença entre um método e uma propriedade ?

  2. Uma propriedade necessita de um argumento ?

  3. O que significa uma propriedade ser somente leitura ?

  4. O que é um objeto Collection ?

  5. Quais as propriedades padrão dos objetos Collection ?

  6. Por que eu posso indexar um objeto collection sem chamar um método ?

  7. Quantos objetos COM podem estar presentes em uma DLL ?

1- Introdução

O modelo COM é um padrão para interfaces de objetos e por definição possui somente métodos e propriedades sem qualquer outra interface.  

Uma diferença básica entre métodos e propriedades é que métodos podem possuir argumentos enquanto que propriedades não possuem argumentos.  Outra coisa , propriedades podem ser do tipo leitura/gravação , já os métodos , se retornarem um valor , são somente leitura.

A rigor métodos e propriedades não apresentam muita diferença ( do ponto de vista do programador ). Assim ,  propriedades geralmente representam o aspecto de um estado do objeto já um método pode ser uma função que realiza uma operação quer isto envolva o estado de um objeto ou não.

Propriedades

As propriedades , como já dissemos , não possuem argumentos e são usadas  para descrever o estado de um objeto ou para definir um estado de um objeto.  Todas as propriedades retornam um valor ; algumas propriedades são somente leitura outras são leitura/gravação. A sintaxe básica para ler uma propriedade é :

- Valor = Objeto.Propriedade             Ex:     cor = form1.Backcolor   (armazena o valor da propriedade Backcolor)

Para definir ou atribuir uma propriedades usamos a sintaxe:

- Objeto.Propriedade = Valor             Ex:     form1.Backcolor = vbred  (atribui a propriedade Backcolor )

Pense em um automóvel como um objeto que você possa  programar em Visual basic.  A sintaxe para definir algumas das propriedades do automóvel poderia ser:

Carro.Cor = Vermelho

Carro.Potencia = 16 HP

Carro.Consumo = 16 Km/l

Perceba a sintaxe : objeto.Propriedade = Valor

Métodos

Métodos podem retornar valores e possuir argumentos e são usadas para iniciar um evento intrínseco ao objeto. Os métodos podem ser usados para definir/atribuir valores somente quando os valores são passados na lista de argumentos. Se o método retorna um valor mas não possui um argumento , usamos a seguinte sintaxe:

Valor = Objeto.Metodo()                  

Notou os parênteses ? Os métodos que retornam um valor precisam ter argumentos nos parênteses. Um bom exemplo disto é o objeto Connection da ADO. Quando o objeto Connection executa um método que retorna um recordset , devemos passar como argumento uma string indicando qual o conjunto de registros queremos retornar:

Set Rs = Conexao.Execute("Select * from Tabela") 

Agora, se um método não retornar um valor não precisa usar parenteses:

Exemplo:     Form1.Cls        

                   Conexao.Close

 

Quando o método possuir mais de um argumento , pode acontecer que o um dos argumentos seja opcional, neste caso não necessitamos informar nada para este argumento.  Desde de que um argumento for opcional, todos os argumentos depois dele deverão se opcionais. Assim se em um método que possua quatro argumentos  tivermos o primeiro e o segundo argumentos não opcionais e o terceiro opcional , o quarto deverá ser opcional. Vejamos novamente como exemplo o objeto Connection da ADO . Podemos abrir um objeto Connection assim:

Conexao.Open "Driver=SQL Server;server=Servidor;uid=UID;pwd=Senha;database=DB"

Poderiamos ter usado também:

Conexao.Open "DSN","senha","", , , ,

Voltando ao exemplo do objeto poderíamos invocar alguns dos possíveis métodos do objeto Carro assim:

Carro.Acelerar(100)

Carro.Parar

Coleções

As coleções são objetos que representam um conjunto de objetos. Elas são usadas para agrupar um conjunto de itens relacionados entre si.  Todas as coleções possuem métodos e propriedades pré-definidas. Uma coleção possui um método Item m uma propriedade Count e um método _NewEnum.

No Visual Basic podemos ter  Coleções de formulários , Controles , drivers , etc... . De maneira geral se um objeto pode ser agrupado em um conjunto então este objeto terá um objeto Collection. Sendo que o objeto Collection pode criar objetos do tipo Collection.

Uma Coleção (collection) , é então um grupo de objetos que é em si mesmo um objeto. O Visual Basic possui duas coleções de objetos intrínsecas : A coleção Forms e a coleção Controls . Podemos usar as coleções com a instrução For Each...Next para realizar ações em todos os objetos que ela contém. Vejamos um exemplo de utilização onde minimizamos , através da procedure MinimezeAll, cada formulário carregado em uma aplicação:

Sub MinimizeAll()

    Dim frmElement As Form

    For Each frmElement In Forms
        ` Minimiza o form
        frmElement.WindowState = vbMinimized
   Next frmElement

End Sub

As coleções tentam resolver três problemas que enfrentamos quando trabalhamos com objetos:

Método e Propriedade Padrão (Default)

O método ou propriedade que tem o índice zero é definido como o padrão.  Assim o método padrão em todas as coleções é o método Item. Você pode chamar o método Item assim:

Set Objecto = Collection.Item(2)

Isto irá obter o segundo item da coleção e atribuí-lo a variável objeto .  Como o método Item é o método padrão você pode usar a sintaxe abaixo:

Set Objecto = Collection(2)

Instanciando um objeto

Para criar uma instância de um objeto COM , tanto em ASP , como em Visual Basic , usamos a sintaxe:

Set objecto = CreateObject("ObjetoID")

Exemplo:

Set conexao = CreateObject("ADODB.Connection")

O argumento ObjetoID é atribuído ao componente para identificar o objeto COM.  Desta forma você pode criar os seus próprios componentes e instanciá-los em suas aplicações.

2 - Finalmente : Criando um componente com o Visual Basic.

Vamos começar com um projeto bem simples para depois partir para algo mais ousado. 

Vamos criar uma um componente DLL ( ActiveX DLL ) para calcular a CPMF. Vamos ao roteiro passo a passo:

1-) Inicie um novo projeto no Visual Basic  e selecione  a opção ActiveX DLL da janela New Project

2-) Agora você pode selecionar a opção Project|Project1 Properties e informar o nome e a descrição do projeto. Na figura abaixo exibimos o nome do projeto : CalculaCPMF e a descrição - Componente para Calcular a CPMF.  

3-) Como nosso componente é muito simples , ele conterá apenas uma classe , a qual chamaremos de cCalculaCPMF . Veja abaixo figura exibindo a classe do nosso componente.

4-) Uma classe possui métodos , propriedades , e por ai vai.... Para não complicar muito , e , visto que a tarefa do nosso componente é apenas calcular o valor da CPMF . Vamos usar uma função que recebe o valor a calcular e multiplica este valor pelo valor do imposto CPMF ( eu acho que a cpmf é 0,0041 , e vou este valor , se estiver enganada , não importa ... tenho que pagar de qualquer jeito ).  Então vamos criar um método que será exercido pela função que retorna o valor calculado da CPMF.  Veja abaixo nossa função:

5-) Agora salve o projeto em um diretório e selecione a opção Make CalculaCPMF.dll do menu File. Pronto , acabamos de criar nosso componente.

6-) Para usar o componente temos que registrá-lo. Vamos fazer isto usando o arquivo regsvr32.exe que se encontra no diretório \windows\system. Então registre o seu componente assim:

-Clique no botão iniciar e em Executar digite: (Obs: criadll é o diretório onde eu salvei minha dll)

c:\windows\system\regsvr32 c:\criadll\calculacpmf.dll

Se o registro ocorrer com sucesso você deverá obter a seguinte janela:

7-) Bem , tudo certo ! Agora vamos usar o componente né. ! . Aqui estaremos usando como usar o componente em uma página ASP. É , é isto mesmo vamos usar o componente na internet.

Para isto o componente deve estar registrado e instalado no servidor, OK ! Vamos criar um script ASP , instanciar nosso componente e fazê-lo trabalhar... Veja abaixo o script ASP usado:

<html>

<head>

<meta http-equiv="Content-Language" content="pt-br">

<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

<meta name="GENERATOR" content="Microsoft FrontPage 4.0">

<meta name="ProgId" content="FrontPage.Editor.Document">

<title>Nova pagina 1</title>

</head>

<body>

<p><font color="#000080"><b>Exemplo de Utilização da DLL CalculaCPMF :</b></font></p>

<%

Set CPMF= Server.CreateObject("CalculaCPMF.cCalculaCPMF")

Response.Write("O valor da CPMF para R$ 120,50 é : " & CPMF.ValorCPMF(120.50) )

%>

</body>

</html>

Perceba que:

CalculaCPMF.cCalculaCPMF - cria uma instância do nosso componente e o atribui a variável  CPMF. Usamos para isto o método CreateObject do objeto Server.

A seguir usamos o único método que o componente tem : CPMF.ValorCPMF(x) onde x é o valor sobre o qual a CPMF será calculada.

8-) Muito Simples... Agora , rode o script ASP no seu servidor Web (Testei no PWS) e veja o resultado:

É isto ai... Direto e reto. Seu componente funciona ! mesmo. Agora podemos avançar um pouco...

3-  Criando um Componente de acesso a dados

Vamos finalmente partir para a parte prática e mostrar como criar um componente no Visual Basic. Com isto estaremos tentando encapsular nosso código e torná-lo mais reutilizável. Eu sugiro que você se aprofunde mais na teria dos objetos COM , pois apenas dei uma pincelada na teoria.

Vamos criar um componente que permita acessar e gravar dados em um banco de dados. Ela deverá ter propriedades e métodos para poder acessar ,  extrair informações e gravar informações em banco de dados.  Vamos escolher a tecnologia ADO para interagir com o banco de dados e definir que a base de dados será uma base de dados Access (*.mdb ) , por questão de simplicidade.

Como um bom componente que se preze nosso componente irá esconder do cliente a complexidade das tarefas envolvidas no processo , e, deverá tornar o processamento mais eficiente,  permitindo , é claro , uma manutenção mais fácil do código do projeto. Neste contexto teremos : o cliente da aplicação, que solicita os serviços  e o Servidor que fornece os serviços solicitados (este será o nosso componente).

Vejamos um resumo das etapas envolvidas no processo:


Veja os Destaques e novidades do SUPER DVD VB (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#
 

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

 

Referências: