COMPONENTES
Funcionarán en W95 y NT, ya que necesitan un CLASS.ID que está en el registro de Windows.
Cuando arranco Visual Basic 5.0 nos pregunta sobre el tipo de proyecto. Para crear una librería de componentes:
1.ACTIVEX.EXE
2.ACTIVEX.DLL
1.Cuando se levanta un componente .EXE se levanta en un área de memoria distinta a la de la aplicación.
2.Cuando se levanta un componente .DLL se levanta en el área de memoria de la aplicación. La ventaja de este tipo de
componente respecto al .EXE es que éste es más rápido, pero tiene la pega de que si se cae el componente, se cae la
aplicación.
El componente no tendrá formularios. Sólo tendrá código.
En una DLL o en un EXE tendré uno o más objetos, cada uno en un módulo de clase.
La propiedad instancing nos dice cómo lo vamos a instanciar:
1.Privada: Nadie, fuera de esta aplicación, podrá instanciar un objeto (no se puede acceder).
2.PublicNotCreatable: No se puede instanciar. Sí acceder.
3.SingleUse, MultiUse: Se puede instanciar. Con SingleUse tendremos una instancia, y con MultiUse tendremos varias.
4.GlobalSingleUse, GlobalMultiUse: Como en 3, pero las funciones se tratarán como funciones globales, para usarlos
dentro de cada aplicación.
Con estas maneras de instanciar tendremos una jerarquía de componentes.
DEFINICIÓN DE UN OBJETO
Propiedad: Una propiedad es una variable pública. Se declaran como siempre:
Public Nombre As String
Nombre del objeto: Es el nombre del módulo de clase.
Nombre del EXE o DLL: Es el nombre del proyecto.
Para probar una DLL, abrimos un proyecto estándar, lo veo en Project | References.
Para probar un EXE, abro una nueva instancia de VB con un proyecto estándar y en Project | References.
La DLL la puedo ver con el Object Browser, una vez incluida en el proyecto, mediante Project | References.
INSTANCIAR UN OBJETO
Reservo memoria: Dim
Doy valores por defecto: Dim
ó
Set
Puedo igualar objetos: Set
El valor NULL es la palabra reservada Nothing.
Vuelvo a las propiedades iniciales (a 0 los números, a "" las cadenas, ...):
Set
Cuando deje de usar un objeto: Set
EVENTO CLASS_INITIALIZE
Ocurre al inicializar el objeto.
EVENTO CLASS_TERMINATE
Ocurre cuando se hace Nothing
PROPIEDADES
Para asignar y consultar valores de las propiedades:
Public Property Get
................
End Property
Public Property Let
................
End Property
Esto se puede hacer a mano, escribiendo los procedimientos, o usando el asistente:
Tools | Add Procedure
Con este asistente doy el nombre del procedimiento y le digo ?Property.
Ejemplo: Validar que la fecha sea menor que hoy.
If valFechaCaducidad < Now() Then
Err.Raise 1 + vbObjectError, , "La fecha está mal"
Else
varFechaCaducidad = ...................
End If
Objeto Err:
.source
.description
.clear
.raise Para forzar un error. Como nº uso 1+vbObjectError, para no usar un nº
de error de VB. cte.
Err.Raise 1 + vbObjectError, , "La fecha está mal"
Number Source Description
EVENTOS
Lo primero que tengo que hacer es declarar el evento:
Public Event
El contenido del evento lo pondrá el programador del objeto.
Cuando quiero que se vaya a dar el evento, lo pongo con Raise Event:
RaiseEvent (
Para declarar el objeto para usar eventos tengo que hacerlo como sigue:
Dim WithEvents
y en el Load del formulario:
Set
GENERAR LA DLL O EL EXE
Grabo el proyecto y hago un make de la DLL.
NOTA: Los componentes han de copiarse y registrarse. Cada objeto tiene un identificador único que se llama CLASE.ID y
se genera al hacer el ejecutable del proyecto.
COMO SE REGISTRA UN COMPONENTE
Usando REGSVR32.EXE.
Lo podemos encontrar en C:\WINDOWS\SYSTEM en Windows 95, o en C:\WINNT\SYSTEM32 en Windows NT.
Para registrar: REGSVR32
Para desregistrar: REGSVR32 [/u]
El
El
Cuando se usa una dll sin registrar sale el error 439.
Si modifico un componente tendré que desregistrar el antiguo, registrar el nuevo y volver a compilar el proyecto. O esto, o lo
siguiente:
Project | Properties | Component
1.Binary Compatibility: Para respetar las propiedades, métodos, ..., elegiré esta opción, y así puedo modificar el
código y me respeta el CLASS.ID. Si ni se puede usar esta opción saltará un error.
2.Project Compatibility: Para crear nuevas propiedades.
3.No Compatibility: Si, por ejemplo, quiero borrar una propiedad, o renombrarla. Esta opción creará un nuevo
componente, y una nueva entrada en el Registro.
Este tipo de aplicaciones se llaman aplicaciones servidoras de componentes Active X.
Resumen