Professional Documents
Culture Documents
0 Nivel Avanzado
Incluye:
Clases con Proyectos EXE Standard
Programacin de Sockets
Contenidos
Detalles de los Proyectos y de las Clases ..................................................................................................... 4
Standard EXE ....................................................................................................................................................... 4
ActiveX EXE .......................................................................................................................................................... 5
ActiveX DLL .......................................................................................................................................................... 6
ActiveX Control ................................................................................................................................................... 7
Caractersticas generales de la programacin orientada a objetos. .................................................... 9
Encapsulacin ...................................................................................................................................................... 9
Reusabilidad (herencia) ................................................................................................................................. 10
Polimorfismo ...................................................................................................................................................... 10
Descripcin de las clases .................................................................................................................................... 11
Qu es una clase o mdulo de clase? .................................................................................................... 11
Eventos de un mdulo de clase: Initialize y Terminate ..................................................................... 12
Diferencias con los mdulos estndar ...................................................................................................... 13
Propiedades y mtodos .................................................................................................................................. 13
Propiedades como variables pblicas .................................................................... 13
Propiedades como procedimientos Property .......................................................................................... 13
Tipos de propiedades Property ............................................................................ 14
Mtodos ............................................................................................................................................................... 15
Procedimientos vs. Mtodos ................................................................................ 15
Alcance de las propiedades y mtodos .................................................................................................... 16
Lab01: Diseando una Clase con propiedades y mtodos .................................................................... 17
Creacin de objetos y otras consideraciones .............................................................................................. 19
Declarando instancias de clase con CreateObject ............................................................................... 19
Declarando instancias de clase con New ................................................................................................. 19
Declarando instancias de clase que generan eventos ........................................................................ 20
Terminar de usar una instancia de clase................................................................................................. 20
Conceptos de Late Binding y Early Binding ............................................................................................ 21
Late Binding (Vinculacin Tarda) ......................................................................... 21
Early Binding (Vinculacin Temprana) .................................................................. 21
Lab02: Usando la librera creada en Lab01 ................................................................................................. 22
Crear y generar eventos en la clases............................................................................................................. 24
Declaracin de eventos con la palabra reservada Event ................................................................... 24
Generar un evento declarado con la instruccin RaiseEvent ........................................................... 24
Declarar la variable de objeto con WithEvents ..................................................................................... 24
Amigos y Enumeraciones ................................................................................................................................... 25
Compartir informacin entre clases como amigos: Friend ............................................................... 25
Qu son Enumeraciones? ............................................................................................................................ 25
Cmo declarar y usar las enumeraciones ............................................................................................... 25
Lab03: Aadir Eventos y enumeraciones ..................................................................................................... 27
Interfases y polimorfismo .................................................................................................................................. 29
Interfases? ........................................................................................................................................................ 29
Desarrollando e implementando interfases en VB ............................................................................... 29
Pgina:2 de 66
Definiendo la interfase. ...................................................................................... 29
Lab04: Interfases .................................................................................................................................................. 32
Controles de Usuario ............................................................................................................................................ 36
Introduccin: ..................................................................................................................................................... 36
Lab05: Creacin de un Control ActiveX (OCX) Paso a Paso .................................................................. 36
Para crear el proyecto ControlDemo ......................................................................................................... 36
Tiempos y vida de un objeto UserControl ............................................................................................... 41
Dibujar el control ShapeLabel ..................................................................................................................... 43
Guardar los valores de las propiedades del control ShapeLabel .................................................... 45
Dar una pgina de propiedades al control ShapeLabel ...................................................................... 48
Agregar un evento al control ShapeLabel ............................................................................................... 52
Compilar el componente ControlDemo .................................................................................................... 54
Temas de Programacin Avanzada ................................................................................................................. 56
Acceder a la API de Windows ...................................................................................................................... 56
Comprender la API de Windows ........................................................................... 56
Programacin Cliente/Servidor en Visual Basic utilizando el Control WinSock .............................. 59
Conceptos Bsicos de Programacin Cliente/Servidor ....................................................................... 59
Comenzando a Programar con el Control Winsock .............................................................................. 61
Protocolos TCP/IP y UDP ..................................................................................... 61
Propiedades, mtodos y eventos de WinSock. ....................................................... 61
Lista de propiedades ms importantes: ................................................................ 61
Ejemplo 1 ......................................................................................................... 62
Lista de Mtodos ms importantes ....................................................................... 62
Lista de Eventos ms importantes ....................................................................... 62
Programando la primera aplicacin Cliente/Servidor. .............................................. 62
Bibliografa ....................................................................................................... 66
Pgina:3 de 66
Detalles de los Proyectos y de las Clases
Algunos de los diferentes proyectos que pueden realizarse dentro del ambiente de desarrollo
de Visual Basic 6.0 tiene diferentes caractersticas entre ellos y entre las clases que
contienen. Veamos detalles tericos de estas caractersticas:
Standard EXE.
ActiveX EXE.
ActiveX DLL.
ActiveX Control.
Los detalles que se vern se observan en el ambiente de Visual Basic 6. Para ver
caractersticas particulares de un proyecto seleccione Propiedades de NombreDeProyecto...
del men Proyecto. Para ver las propiedades particulares de un mdulo de clase vea la
ventana de propiedades (F4) para cada mdulo de clase.
Si observamos la imagen anterior podemos notar dos reas que en este caso nos interesa
recalcar en esta ocasin.
El Tipo de Proyecto nos dice el tipo de proyecto que estamos desarrollado en el cual
podemos escoger entre Standard Exe, ActiveX Exe, ActiveX Dll y ActiveX Control. Al escoger
en cada uno de ellos podemos observar algunas otras propiedades de esta ventana se
habilitan y otras se deshabilitan presentando diferentes opciones de configurar el proyecto.
Standard EXE
Pgina:4 de 66
Al tener este tipo de proyecto crearemos una aplicacin stand-alone. Si observamos en la
imagen anterior podemos ver que no se tiene ningn modelo de hilos de ejecucin.Si
tenemos un mdulo de clase en el proyecto, podemos observar las siguientes propiedades
en la ventana de propiedades
ActiveX EXE
Si seleccionamos que el tipo de proyecto, en la ventana de propiedades del proyecto, sea del
tipo ActiveX Exe, el modelo de hilo de ejecucin se habilita. (Ver Propiedades de Proyecto)
Al tener este tipo de proyecto las lista de propiedades para un mdulo de clase se vera as:
Pgina:5 de 66
La propiedad mas importante de esta lista es la propiedad Instancing, la cual nos indica la
forma de crear instancias de la clase fuera del proyecto y si es as como se comportara. Las
opciones que se muestran son:
3. SingleUse: permite crear objetos de la clase pero cada objeto creado de esta clase
crea una nueva instancia de tu componente. No permitido en proyectos de tipo
ActiveX DLL. Por ejemplo, en MS Excel por cada instancia a este componente se
ejecuta Excel en forma separado (en la barra de tarea tendriamos dos icono para
cada instancia).
ActiveX DLL
Si seleccionamos que el tipo de proyecto, en la ventana de propiedades del proyecto, sea del
tipo ActiveX Dll, el modelo de hilo de ejecucin se habilita de la siguiente forma
Pgina:6 de 66
Subproceso nico: pone el cdigo en modo de compatibilidad con versiones
antiguas y forza a los objetos creados a residir en el hilo principal (STA: Single
Threaded Apartment) del proceso del cliente. Si el cliente trata de crear uno de los
objetos desde cualquier otro hilo o apartamento, COM automticamente regresara
una representacin o agente (proxy) al invocador. Esto asegura que todo acceso al
los objetos son serializados hacia el hilo principal. Esto puede impactar el
rendimiento debido a que se requieren de dos cambios de hilo para cada llamada a
un mtodo.
Al tener este tipo de proyecto las lista de propiedades para un mdulo de clase se vera as:
Con respecto a un proyecto de tipo ActiveX Exe, aqu solo tenemos 4 de las seis opciones
para la propiedad de clase Instancing. Estos cuatro son los siguientes:
Private: lea arriba en el proyecto de tipo ActiveX Exe para la descripcin de esta
opcin.
MultiUse: lea arriba en el proyecto de tipo ActiveX Exe para la descripcin de esta
opcin.
ActiveX Control
El modelo de hilo de la ventana de propiedades para este tipo de
proyecto es igual al tipo de proyecto ActiveX DLL:
Pgina:7 de 66
Lea en la seccin anterior detalles sobre el modelo de subprocesos de un Control ActiveX
En este tipo de proyecto se habilita otra opcin dentro de la ventana de propiedades del
proyecto:
Esta opcin habilita el licenciamiento para un proyecto que produce componentes ActiveX
(servidores de automatizacin, controles de usuario o controles ActiveX). Solo se aplica a
este tipo de proyecto. Habilitada esta opcin, VB crear un archivo de licencia (*.vbl) que
deber ser registrada en la maquina del usuario para los componentes a ser usados en el
ambiente de diseo. El programa Aistente para empaquetado y distribucin construir
un programa setup que registrara apropiadamente la informacin en el *.vbl en la maquina
del usuario final.
Al tener este tipo de proyecto las lista de propiedades para un mdulo de clase se vera as:
Con respecto a un proyecto de tipo ActiveX Exe, tenemos las mismas opciones en la
propiedad Instancing, para mayor informacion consulte en la seccin ActiveX Exe
Pgina:8 de 66
Caractersticas generales de la programacin
orientada a objetos.
Visual Basic tiene su propia manera de implementar la programacin orientada a objetos tal
como otra muchas cosas dentro de este ambiente. Programadores puros argumentan que
Visual Basic no es un lenguaje orientado a objetos, sino a eventos, debido a que no soporta
al 100% los tres pilares de este concepto:
Encapsulacin.
Reusabilidad (herencia).
Polimorfismo.
Encapsulacin
Significa simplemente agrupar o contener juntas todas las variables y rutinas relacionadas
con el objeto. Permitiendo mantener interno al objeto algunas de estas variables y rutinas y
exponiendo otras fuera de l.
Muchos de los problemas respecto ha constantes pblicas han sido arreglados por el estatuto
Enum en la versin 5 de Visual Basic, tambin puedes establecer una propiedad o mtodo
como default y crear colecciones (aunque sigue siendo difcil de codificar). Los
procedimientos Property dan a Visual Basic una ventaja sobre C++ y muchos otros lenguajes
orientados a objetos en el sentido de que permiten acceso a datos mediante una sintaxis
natural y sin exponer datos internos a cambios no autorizados.
Pero an se atrasa respecto a otros lenguajes, en la manera que permite compartir datos
entre clases y entre instancias de la misma clase. El nuevo modificador Friend permite
compartir datos entre clases permitiendo especificar exactamente lo que quieres compartir
con otras clases, pero no permite especificar con quin compartir datos dentro de un
proyecto.
Visual Basic no proporciona caractersticas de lenguaje para compartir datos entre instancias
de un objeto (variables estticas en C++), esto se puede simular con variable pblicas
dentro de mdulos estndar. Los miembros amigos y variable pblicas en mdulos estndar
dentro del proyecto llegan a ser invisibles a los clientes fuera del componente, por lo que hay
alguna proteccin.
Porcentaje: 80 %
Ejemplo grfico:
En la dibujo anterior son pblicos al programa (el objeto expone) los mtodos Abrir, Cerrar,
Crear y borrar y las propiedades Color y Contorno. Y son privadas al objeto los
Pgina:9 de 66
procedimientos Abrir-ventana, Abrir_puerta y la variable Color_puerta. Y cada uno de estos
mtodos, propiedades, procedimientos y variables estn encapsuladas en un objeto.
Para ejemplificar las enumeraciones que nos proporciona el estatuto Enum, veamos el dibujo
anterior. Podramos declarar una enumeracin global en la que definamos los colores
permitidos para la propiedad Color. Esto es, podamos definir las constantes cteAzul, cteRojo
y cteVerde para los colores Azul, Rojo y Verde, respectivamente.
Reusabilidad (herencia)
Significa ser capaz de crear una nueva clase que usa caractersticas de una clase existente
sin recodificar esas caractersticas. Significa usar cdigo en una estructura jerrquica. Visual
Basic no lo tiene.
Relacin es-un: Una clase es una versin mejorada de otra clase, definida con
herencia.
Relacin tiene-un: Una clase tiene caractersticas de otra clase, definida con
delegacin.
Debido a que Visual Basic no soporta herencia, forza a definir ambos estilos de relaciones
con delegacin. Modelar una relacin es-un usando herencia solo necesitas escribir cdigo
para las nuevas caractersticas, usando delegacin necesitas delegar todo, an los mtodos y
propiedades que no cambian. Este proceso mecnico parece ser automatizado, y de hecho,
Visual Basic lo automatiza, pero este slo funciona para controles no para clases.
COM soporta una tercera tcnica de reuso llamada agregacin, significa combinar varios
objetos internos de tal manera que parezcan ser parte de un objeto externo. Esta es una
organizacin colectiva en lugar de una organizacin jerrquica. Visual Basic no soporta esta
caracterstica pero algunas ventajas de esta pueden obtenerse con el nuevo estatuto
Implements.
Porcentaje: 40 %
Ejemplo:
Una clase llamada ventana (clase base) puede estar contenida en otra clase llamada
departamento y en otra llamada cuarto, etc. sin tener que recodificar la clase. La clase o
clases que contienen ventana pueden mejorar las caractersticas de esta y completarla con la
clase que encapsula.
Polimorfismo
Significa que cualquier objeto puede ser capaz de hacer lo correcto si recibe un mensaje que
entienda.
Visual Basic soporta Polimorfismo de dos maneras. Primero, se logra Polimorfismo usando el
tipo Object, pero debe evitarse porque es muy lento y no tiene proteccin de tipo (Late
binding) por otro lado, hay ocasiones en la que excesiva proteccin de tipo se obtiene en el
camino y donde la velocidad no es critica.
En muchas ocasiones es mejor usar interfaces a travs del nuevo estatuto Implements para
obtener velocidad. La sintaxis para Implements hace que trabaje al estilo de los eventos.
Implements habilita una cantidad de nuevas tcnicas. Es casi una implementacin directa del
poderoso concepto COM de interfaces. Desafortunadamente, algunas de las ventajas de usar
interfaces COM se eliminan debido a que Visual Basic no soporta los tipos usados en varias
interfaces COM estndar.
Pgina:10 de 66
En muchos lenguajes orientados a objetos, Polimorfismo va mano a mano con herencia.
Porcentaje: 70 %
Ejemplo:
Ambas clases, revista y la clase libro, contienen un mtodo llamado Abrir pero su
implementacin es diferente respecto una de otra. A pesar que el mismo termino es aplicado
a ambos tu sabes la accin correcta a ejecutar
Es el molde que nos servir para definir todas las propiedades y mtodos, tanto
privados como pblicos, que deseamos que nuestro objeto final posea. Definir todas
las caractersticas que quisieramos que nuestro objeto final tuviera.
Por ejemplo: podemos tener una clase llamada clsEmpleados en el cual deseamos
tener todas las caractersticas con respecto a un empleado. Como propiedades
podriamos definir: nombre, apellidos, domicilio, edad, casado, sueldo, fechaIngreso,
Antiguedad, etc. Como mtodos podriamos tener: ActualizarDatos o GuardarCambios
(donde cambios a las propiedades anteriores se grabaran fisicamente en una base de
datos), ValidarDatos (donde se valida los datos siempre y cuando haya habido
cambios en las propiedades segun una variable privada Cambios).
Los tipos definidos por el usuario son agreados de otro tipos, esto es contiene
miembros que pueden ser de diferentes tipos (integer, string, etc.), as las clases
tambin concentra diferentes tipos en sus miembros pero la sintaxis es muy
diferente.
Type tEmpleado
Nombre as string
Edad as Integer
End Type
Pgina:11 de 66
Dim Empleado As tEmpleado
Empleado.Nombre = "Juan Perez"
Empleado.Edad = 25
Los objetos son creados en tiempo de ejecucin con los estatutos New o
CreateObject. En tiempo de diseo los utilizas los mdulos de clase para crear las
caracteristicas especificas del objeto.
Los mdulos de clase no presentan una interfaz grfica al desarrollados tal y como lo
hacen las formas o formularios. En los formularios puedes colocar visualmente un
botn, una lista, un texto, etc. Los mdulos de clase solo contiene cdigo que definen
las caracteristicas del objeto.
Si se desea presentar una ventana informativa (como un Acerca de) u otro
formulario, este puede pertenecer a un proyecto ActiveX DLL y mandarlo llamar
mediante un mtodo (como MostraAcercaDe) que expone alguna clase dentro del
proyecto.
1. Initialize: ocurre cuando se crea una instancia de una clase. Se usa, generalmente
para inicializar cualquier dato usado por la instancia de una clase en el cdigo.
2. Terminate: ocurre cuando toda referencia a una instancia de una clase son
removidas de memoria al establecer todas las variables que la refieren a un objeto a
Nothing o cuando la ultima referencia al el objeto se encuentra fuera de alcance.
Usado generalmente para limpiar la memoria de objetos creados dentro de esta
instancia y generar un error si hay alguna anomala o guardar alguna informacin del
objeto, etc.
Pgina:12 de 66
Diferencias con los mdulos estndar
Propiedades y mtodos
Para poder definir las caractersticas del objeto a crear se requieren de tres elementos
esenciales: mtodos, propiedades y eventos. En esta seccin se vern los dos primeros.
Pgina:13 de 66
nada mas, esta es de slo lectura; si ademas se declara como Let la propiedad se
convierte de lectura y escritura.
Validacin previa, ejecutar un procedimiento antes de actualizar la
propiedad y/o generar un error o evento.
Debido a la similitud que existe entre un mtodo o procedimiento con los
procedimientos Property, dentro de la declaracin de la misma se puede aadir
cdigo para realizar una validacin, desplegar un mensaje o una ventana de dilogo,
generar un evento o un error como parte de la validacin o de cambio de valor de la
propiedad.
Limitar la propiedad a un grupo de posibles valores.
Debido a que se puede tener cdigo, ver arriba, dentro de la definicin de la
propiedad se pueden tener validaciones en la propiedad Let para validar el valor a
asignar a la propiedad o utilizar las enumeraciones para limitar la propiedad a ciertos
valores posibles.
Uso del Examinador de Objetos (F2) para observar las propiedades y
mtodos que ofrece la clase.
En versiones anteriores a VB5 las propiedades declaradas como procedimientos
Property se observaban dentro de Examinador de Objetos (Object Browser) para
obtener una referencia rapida sobre una propiedad o metodo.
Proporcionar ayuda sensible al contexto, definida dentro del Examinador de
Objetos (F2).
En la declaracin de la clase, el Navegador de Objetos nos servira entre otras cosas
para asignar una pequea descripcin para cada una de las propiedades y mtodos
que declaremos como publicas dentro de la clase, permitira definir una ayuda de
contexto, declarar un metodo o propiedad como default, esconder metodos o
propiedades entre otras cosas.
Property Get: lectura, para obtener el valor de una variables de tipo de dato
standard o regresar la referencia a un objeto.
Sintaxis:
Uso:
Label1.Caption = NombreObjeto.NombrePropiedad
Ejemplo:
Property Let: Escritura, para establecer o cambiar el valor de una variables de tipo
de dato standard.
Pgina:14 de 66
Sintaxis:
Uso:
NombreObjeto.NombrePropiedad = Text1.Text
Ejemplo:
Sintaxis:
Uso:
Ejemplo:
Mtodos
Para crear mtodos de una clase es muy sencillo lo unico que se necesita es declarar
aquellos procedimientos o funciones que se desean compartir como pblicos, vea anajo. Al
igual que las propiedades apareceran en el Object Browser y mediante este definir una
pequea descripcin para cada mtodo expuesto por la clase, adems de asignarle un
nmero de contexto de ayuda.
Ejemplo:
Public Sub Calcula_Costo(Porcentaje As Single)
'Cdigo
End Sub
Pgina:15 de 66
Si hemos observado hasta ahora, las propiedade se parecen a un procedimiento tradicional y
los mtodos igual observados por el programador, pero para el usuario de la clase o objeto a
crear son distintos.
Con respecto al uso de las palabra procedimiento y mtodo hay quienes dicen que la
dicerencia es el alcance de las mismas dentro de la definicin de las mismas dentro de la
clases. Esto es, todo aquello procedimientos o funciones que expone la clase al cliente se
llaman Mtodos, todos aquellos procedimientos que no son expuestos por la clase se llaman
Procedimientos.
AEsto.HazEso ConEstos
Public: Indica que la propiedad o metodo a definir es accesible a todos los demas
procedimientos en todos los mdulos. En mdulos de clase es lo que se expone a la
hora de crear el objeto.
Private: Indica que la propiedad o mtodo es accesible solo a otros procedimientos
en el mdulo donde es declarado. En un mdulo de clase, las propiedades creadas
con este prefijo solo seran accesible a todos lo miembros (propiedades y metodos,
etc.) de este mdulo de clase.
Static:
Friend: Esta prefijo es slo usado en mdulos de clase. Indica que la propiedad o
mtodo a definir es visible o accesible a traves del proyecto que la contiene, pero no
es visible a un controlador de una instancia de un objeto. Esto es, solo podra ser
accesado por ActiveX DLL o EXE que contiene la definicin de la(s) clase(s) que
contiene un metodo(s) o propiedad(es) con prefijo Friend.
El prefijo default es Public. Esto es, si no se especifica el prefijo en la definicin de la
propiedad o metodo a definir dentro de la clase, este ser pblico.
Ejemplo:
Declarar Sub Calcula() es igual a declarar Public Sub Calcula(). Esto puede ser observado en
el Object Browser, si se declara de la primera forma en el Navegador de Objetos se vera que
se le antepone Public a la definicin.
Pgina:16 de 66
Lab01: Diseando una Clase con propiedades y
mtodos
Duracin: 40 min. aprox
Descripcin General:
Para guardar sus proyectos, hagalo en su disco duro local creando la siguiente estructura
VBAvanzado
PracticaGuiada01
Dentro de la carpeta VBAvanzado deber crear UNA CARPETA por cada Proyecto que
realicemos.
6. Observe las propiedades del mdulo de clase. Deseamos que esta clase pueda ser
instanciada las veces que se quiera y a peticin del cliente. Cmo lo declarar?
Observe la seccin ActiveX Exe las opciones para la propiedad Instancing.
Pgina:17 de 66
En el mdulo de clase declare las siguientes propiedades cmo pblicas (L: Lectura;
E:Escritura):
Nombre: Cadena (L/E)
Quizs este sea el momento para resolver algunas dudas con el instructor o continuar, si aun
dispone de tiempo, en Visual Basic para observar algunas otras caracter sticas o funciones.
Por ejemplo, puede observar el Examinador de Objetos (F2) para ver si es posible ver la
clase que gener en el proyecto y ver los metodos y propiedades que a creado y si estas son
de lectura/escritura o de slo lectura. Si no lo a probado, en este momento puede checar los
caractersticas para cada proyecto y las clases.
Pgina:18 de 66
Creacin de objetos y otras consideraciones
En esta seccin se enfoca en la creacin de los objetos o instanciacin de las clases y otras
consideraciones a tomar en cuenta en cuanto el manejo de los proyectos ActiveX Exe o Dll
para el proceso de depuracin.
Por ejemplo: En versiones anteriores a la 95 de Office, esto es lo que se tenia que hacer para
lograr una comunicacin OLE con Word.
La razn de usar New es porque con las instancias de clase, la variable no es lo mismo que la
instancia. La variable es el nico medio de comunicacin con la instancia. Las variables de
clase con tambin llamados variables de objeto y las instancias son llamados Objetos.
Existen dos formas de instanciar las variables de objeto mediante la clausula New:
Declarar la variable de objeto y posteriormente utilizar Set... New para instanciar la clase.
Un ejemplo de este caso es como se manejo arriba.
Pgina:19 de 66
Esta es la forma ms recomendablesi se desea tener el control sobre la instancia de la
variable: cuando debo crearlo, usarlo, terminarlo, volverlo a crear... etc.
De esta forma a la hora que entre al modulo o procedimiento que la contiene se generara
automticamente la instanciacin de la clase.
Se tiene menos control sobre la instanciacin de la clase; estos sin poder determinar el
momento en que deseamos que nuestra variable de objeto se instanciado. Podermos
terminar la instanciacin utilizando Set... = Nothing.
Para atrapar el evento o eventos que genera la clase a instanciar escriba un procedimiento
que se llame segun el nombre de la variable de objeto y el nombre del evento a atrapar
insertando entre los dos un caracter underscore ('_').
End Sub
Si observa lo anterior se ve el parecido con los eventos de cualquier control, solo que aqui
hay que codificarlo y en el caso de los controles el ambiente de Visual Basic te los presenta
en una lista.
Se puede observar con el Objet Browser las propiedades, metodos y eventos que la clase
esta exportando.
Posterior a esto y de acuerdo a alguna otra accin o vento del usuario se puede volver a
instanciar esta variable de objeto mediante Set.. New (vea arriba).
Pgina:20 de 66
Se recomienda terminar el objeto si ya no se esta usando para poder liberar recursos del
sistema, adems de asegurarse de que se esta liberando recursos al momento de salir, por
ejemplo, si un procedimiento contiene la declaracin y uso de la variable de objeto (se
supone que al perderse el alcance de cualquier variable se termina su uso) puede asegurarse
que realmente se termine este objeto.
Pgina:21 de 66
Lab02: Usando la librera creada en Lab01
Proyecto ejemplo: uso de nuestra librera
Pgina:22 de 66
Por lo pronto mande llamar a este procedimiento en el evento Load de la forma para
que refresque los datos al entrar al sistema.
Ahora aadamos el codigo necesario para los botones.
Aadir: codifique este botn para igualar los datos actuales de los textbox al objeto
creado. Puede utilizar validacin de datos si lo desea.
Borrar: de lo que se trata es que el objeto del empleado actual deber borrarse y
crearse uno nuevo. Debera actualizar la forma al nuevo objeto.
Aumentar: mendiante una caja de entrada (instruccin InputBox) obtener un valor
entero entre 1 y 100, para poder aumentar el sueldo al empleado actual. Aumentele
el sueldo al empleado y despues actualice la forma para actualizar esta informacin
en pantalla.
Disminuir: igual que la anterior, pero se trata ahora de disminuir el sueldo.
Salir: para salir de la aplicacin o de la forma.
Pruebelo. Ejecute la aplicacin (F5) para ver nuestro objeto de empleado
funcionando.
Nota: Este Lab es guiado por el instructor.
Pgina:23 de 66
Crear y generar eventos en la clases
En esta seccin veremos como crear un evento o una serie de eventos en una clase y, de
acuerdo a alguna accin, generar un evento para avisar al usuario de la clase. Generar
eventos en muy sencillo en VB5 y VB6 (en VB4 no se puede), solo siga las siguientes
indicaciones:
Event nombreEvento([listaArgumentos])
Para generar algn o algunos de los eventos declarados se utiliza la instruccin RaiseEvent
dentro de algun procedimiento, mtodo o propiedad que requiera para notificar al cliente de
la clase que algo a ocurrido. La sintaxis para generar el eventos es:
RaiseEvent nombreEvento([listaArgumentos])
Esto ya se vi anteriormente, si no recuerda como declarar una variable de objeto con una
clase vaya a instancias de una clase con eventos.
Pgina:24 de 66
Amigos y Enumeraciones
La mejor forma de implementar Programacin Orientada a Objetos es con 2 o mas clases
cooperando entre s. Las clases necesitan compartir informacin pero no con otras clases. En
seccin veremos como VB5 comparte informacin entre clases del mismo componente.
Adems veremos para que nos sirven las enumeraciones y como definirlas y usarlas.
Qu son enumeraciones?
La interpretacin de Friend de VB6 es muy pobre, te permite decir que tienes amigos y
cualquiera dentro del componente es tu amigo y nadie te conoce. Esto es, en VB6 tu declaras
tus mtodos y propiedades como Amigos y todos dentro del componente que lo contiene
(ActiveX Exe o ActiveX Dll) puede verlos y usarlos y cualquiera fuera del componente no
pude utilizarlos.
La sintaxis para declarar propiedades o mtodos incluyen este modificador como opcional:
Qu son Enumeraciones?
Las enumeraciones son un grupo de constantes definidas que pueden describir entre otras
cosas posibles valores de retorno para una funcin especifica o evento generado por la clase.
Tambien pueden ser posibles valores disponibles para algun argumento de entrada a algn
mtodo o propiedad de la clase.
Por ejemplo, supongase que tenemos una propiedad llamada Color y en la cual se desea que
los nicos valores vlidos son Azul, Rojo y Verde al momento que se le asigne un valor.
Podriamos definir las constantes pblicas 1 para Azul, 2 para Rojo y 3 para verdes o definir
las enumeracines con esas mismas constantes.
Pgina:25 de 66
El default, como ya se dijo en mtodos y propiedades, es Public. Si se declara como tal los
usuarios de la clase podran usarlo, lo cual es recomendable si va a regresar o recibir un valor
de este tipo. Si solo es de uso interno en la clase entonces declararlo como Private.
Por ejemplo: para nuestro ejemplo anterior podriamos definir nuestro grupo de colores como
sigue:
Enum icColores
Azul = 10
Rojo = 15
Verde = 20
End Enum
Una enumeracin puedes utilizarlo para definir una variable de este tipo y si puedes definir
una variable cuyos posibles valores estan limitados a los valores que la enumeracin
contiene tambien puedes definir parametros.
Ejemplos:
Dim A as icColores
End Property
End Property
En asignaciones recuerdese que las enumeraciones son como variables globales y se puede
utilizar o su valor numerico o el nombre declarado en la enumeracin.
Ejemplos:
A = varobj.Color
Pgina:26 de 66
Lab03: Aadir Eventos y enumeraciones
Proyecto ejemplo: aadir eventos y enumeraciones
Es momento de practicar nuestras dos ultimas sesiones en la cual abarcamos los temas de
eventos, enumeraciones y Amigos. Veremos por lo pronto la implementacin de los dos
primeros en esta sesin de practica.
En esta seccin seguiremos trabajando en el proyecto ActiveX Dll y Standar Exe definidos en
los Labs anteriores.
Realicemos los cambio necesarios para que el valor de la propiedad sexo est
limitado a la enumeracin.
Tenemos que definir las propiedades Get y Let de Sexo como de tipo enumeracin,
adems de la variable privada que contiene el valor de esta propiedad.
Ademas en el evento de Initialize de la clase inicialice la propiedad de sexo al valor
que desee (vera que al poner el signo de asignacin aparecer una lista flotante
indicandole los posibles valores, eliga uno con las flechas y TAB).
Una vez realizados estos cambio presione F2 para ver el Object Browser como me
coloco un nuevo elemento del lado izquierdo con un icono distinto a la de la clase,
esta es la enumeracin que definimos.
Realice los cambios necesarios en SysEmp.exe.
Ahora en lugar de utilizar un textbox para mostrar el valor que se obtiene de la
propiedad Sexo del objeto empleado, defina dos OptionButton con leyenda igual a
Mascullino y Femenino, respectivamente. Y en el cdigo de el botn Aadir deber
realizar un cambio en base al OptionButton seleccionado igualar la propiedad Sexo
con la constante adecuada. Adems el procedimiento Actualiza_Forma debera
contemplar el valor obtenido de la propiedad Sexo para habilitar un OptionButton.
Pruebelo. Presione F5 para ejecutar la aplicacin y probar.
Pgina:27 de 66
Recuerda como se vi en Eventos en las clases, para declarar nuestras variables de
objeto para que intercepte los eventos. Bueno, pues vaya a la seccin de
declaraciones del formulario y haga los cambios pertinentes.
Ahora defina el procedimiento de evento para atraparlo. Como parte del cdigo
dentro del evento, segun el parmetro recibido, despliega un mensaje que diga: Se
aumento el sueldo o en caso distinto Se disminuyo el sueldo.
Pruebelo. Presione F5 para ejecutar la aplicacin. Recuerde de salvar su grupo de
proyecto.
Pgina:28 de 66
Interfases y polimorfismo
VB presenta una nueva caracterstica muy poderosa para la implementacin de interfases. En
esta seccin describiremos que son las interfases y como se implementan en VB5.
Interfases?
Interfases?
Interfases es el concepto de moda en diseo del lenguaje. Cuando Java incorpor interfaces
como una caracterstica del lenguaje se proclamo que las interfaces son el mejor sustituto
para el concepto ms maligno de herencia mltiple.
Supongamos que se tiene dos clases donde una parte del cdigo es genrico para ambas y
otra parte es muy especfica a cada clase. En estos casos se escribe una interfase para la
parte genrica y las dos clases implementan la interfase para la parte especfica. La parte
genrica utiliza los objetos con implementaciones especificas sin conocer o preocuparse lo
que esos objetos hacen o como lo hacen.
Las interfaces encapsulan clases de la misma forma que las clases encapsulan miembros y
mtodos. Y tal como una clase esconde el estado interno de sus objetos, una interfase
esconde la implementacin de sus clases.
Definiendo la interfase.
Para crear interfaces en VB simplemente aade un mdulo de clase con los mtodos y
propiedades vacias, o sea, sin codigo; recuerdese que la implementacin (el cdigo) de estos
es particular para cada clase que lo implementa.
Por ejemplo:
Una interfase no tiene cdigo porque no hacen nada, deber crear al menos una clase por
separado que implemente la interfase, ponerle cdigo. En VB, como para las variables, se
utiliza un prefijo para darle un nombre al mdulo de clase: para las clases se utiliza 'C', para
las interfases 'I'. Se podria tener una clase llamada CEmpleado la cual implementa una
interfase llamada IPropEmpleado.
Implementando una Interface.
Pgina:29 de 66
La clusula principal en la implementacin de interface es Implements. La sintaxis
para realizar una implementacin de una interface es (se coloca en un mdulo (o
modulos) de clase diferente a la interface que se va a implementar):
Implements nombreInterface
Esta instruccin se coloca en otro mdulo de clase diferente al modulo que definio la
interfase. Esto es porque esta nueva clase har la implementacin de la interfase (le
pondr codigo a la interfase).
Lo interesante acerca de este estatuto es lo que realiza con la ventana de codigo que
lo contiene. La lista de objeto presenta una nueva entrada para la interface a
implementar. Haga de cuenta que insert un control y desea introducir codigo en sus
eventos. De esta misma forma en la ventana de cdigo puede elegir la interface y
moverse a travs de los miembros a implementar por medio de las listas superiores
de la ventana de cdigo.
Implements IpropEmpleado
Para implementar una propiedad pblica que tenga acceso a la propiedad imprementada
Nombre por ejemplo:
Por ejemplo: vamos a ejemplificar lo anterior para que se entienda. Ya realizamos nuestra
interface de IPropEmpleado ahora deseamos utilizar esta interface en un procedimiento
generico que lo unico que va a hacer es imprimir el nombre y sueldo en una caja de dialogo.
Pgina:30 de 66
Este cdigo puede estar en un mdulo estandar para que se pueda accesar desde cualquier
parte del proyecto.
El objeto que pases como parmetro a este procedimiento deber implementar la interfase
IPropEmpleado.
De esta forma suponga que tiene dos implementaciones distintas de IPropEmpleado:
CEmpleadoGeneral y CEmpleadoEspecial. Si se definen dentro del evento Click de un
botn en una forma el siguiente cdigo se observaran los nombre y sueldos de las personas
definidas por las dos variables. una tras de otra en una ventana de dialogo.
Pgina:31 de 66
Lab04: Interfases
Olvidmonos por lo pronto de lo que hemos diseado para la clase CEmpleado. En los
siguientes puntos a desarrollar nos basaremos en el codigo generado en la clase; esto es, en
donde se requiera solo realice Copiar de cdigo que ya se tiene y Pegar a los nuevos
mdulos de clases que se van a aadir al proyecto de ActiveX DLL.
Siga estos puntos paso por paso, no se salte ninguno sin haber ternimado por completo
estos, si tiene duda o no sabe como pregunte al instructor para poder seguir avanzando.
Vamos a disear la interfase que presente algunas caracterticas genericas para dos clases
nuevas que disearemos: CAgente y CDirectivo. En el primer paso disearemos la interfase y
en las siguientes las dos clases y algunas funciones genricas para ambas. Para este
ejemplo, no crearemos ni enumeraciones, ni eventos, ni amigos... slo lo indicado.
Insertemos un nuevo mdulo de clase en nuestro proyecto de libreria DLL. Esta clase
sera nuestra interfase por lo que la llamaremos IEmpleado.
Pgina:32 de 66
Genere estas propiedades utilizando los conocimientos ya adquiridos anteriormente.
Esto es, copiandolo de la clase que implementamos en la primera prctica: Nombre,
Edad y Sueldo. Solo verifique que los nombres de las variables internas sean los
mismos.
Aqui hay que hacer una observacin: note que tanto las propiedades de la interfase
implementada y las propiedades a exponer (Nombre, Edad, Sueldo) contiene el
mismo cdigo. En este caso los podemos dejar as porque no es mas que una lnea
de codigo en estas propiedades, pero si fuera mas compleja la programacin no
repitiriamos el mismo codigo en ambas parte, sino que simplemente las propiedades
a exponer mandaran llamar a las propiedades implementadas de IEmpleado para no
duplicar cdigo. Esto se vera ms claro al implementar los mtodos en el punto
siguiente.
Implemente los dos mtodos de aumentar/disminuir sueldo que presenta la interface
IEmpleado en ambas clases CAgente y CDirectivo.
El cdigo que se implementar en estos mtodos son similares a los que se
realizaron en CEmpleados en la primera practica. Solo que haremos algunas
modificaciones.
Para la clase CAgente: se le aumenta el sueldo si el sueldo actual es mayor o igual a
1500 y se le disminuye si el sueldo actual es mayor 499. Casos contrarios no se le
aumenta o disminuye, respectivamente.
Para la clase CDirectivos: se le aumenta el sueldo si el sueldo actual es mayor o igual
2000 y se le disminuye si el sueldo actual es mayor a 999. Casos contrarios no se le
aumenta o disminuye.
Ahora, tenemos que exponer estos mtodos al usuario de nuestras clases. Por lo que
deber crear dos mtodos pblico que se llamen: AumentaSueldo y DisminuyeSueldo
en cada modulo de clase (CAgente, CDirectivo).
Y como cdigo dentro de estos no escriba lo mismo que se hizo en el paso anterior.
Solo mande llamar al que ya se codifico. Por ejemplo, en AumentaSueldo mande
llamar a IEmpleado_AumentaSueldo y regrese al cliente lo que ste regrese.
Hasta el momento en nuestras dos clases ya tenemos codificada la implementacin
de las dos clases: CAgente y CDirectivo. Ahora vamos a aadir otras propiedades a
cada uno respectivamente. Esto es, podemos tener otras propiedades o metodos
expuestos al usuario diferentes a los que tiene la interface.
En la clase CAgente: aada la siguiente propiedad:
HorasTrabajadas: Single (L/E); en Let debera validar que este entre 4 hrs. y 10 hrs.
(inclusives) sino no realice el cambio.
Ahora iremos a nuestro proyecto SysEmp.exe. Para hacer uso de estas dos clases. Siga los
siguientes pasos cuidadosamente.
Aadir una nueva forma al proyecto SysEmp.exe y llamsmola CatEmpleado2.
Pgina:33 de 66
Vayamos a las propiedades del proyecto (SysEmp Properties del men Project) y se
leccionesmos que la forma CatEmpleado2 es nuestra forma inicial al correr el
proyecto.
Ahora pongamos los respectivos Labels y Textbox para cada una de las siguientes
propiedades:
Nombre, Edad, Sueldo (recuerde que es de solo lectura), Horas Trabajadas.
Para la propiedad Prestaciones utilice un CheckButton para habilitar si tiene
prestaciones o no.
Aadiremos ahora los acostumbrados botones: Aadir, Borrar, Aumentar, Disminuir.
Inicialicemos estas variables (o sea crear los objetos con Set.. New) en el evento
Initialize del formulario.
Pgina:34 de 66
Debera actualizar la forma al nuevo objeto (solo mande llamar al evento Click del
OptionButton actualmente seleccionado).
Aumentar: mendiante una caja de entrada (instruccin InputBox) obtener un valor
entero entre 1 y 100, para poder aumentar el sueldo al Agente o Directivo actual,
utilice la funcin CambiarSueldo creado en el punto anterior para aumentar el sueldo,
solo pasele el objeto de Agente o Directivo que implementa la interface para enviarlo
como parmetro a este procedimiento.
Disminuir: igual que la anterior, pero se trata ahora de disminuir el sueldo.
Salir: para salir de la aplicacin o de la forma.
Salve su proyectos y deles un nombre descriptivo a los archivos a guardar.
Pgina:35 de 66
Controles de Usuario
Introduccin:
Los controles ActiveX, que se llamaban antes controles OLE, son elementos estndar de
interfaz de usuario que le permiten ensamblar rpidamente formularios y cuadros de dilogo.
Los controles ActiveX tambin dan vida a Internet, agregando una nueva y atractiva
funcionalidad a las pginas del World Wide Web.
Disear un control ActiveX puede resultar tan fcil como disear un formulario de Visual
Basic: puede usar los comandos grficos de Visual Basic con los que est familiarizado para
dibujar el control o bien crear un grupo de controles con los controles existentes.
Los controles ActiveX se pueden depurar en proceso, de forma que puede pasar
directamente desde el cdigo del formulario de prueba al cdigo del proyecto de control
ActiveX.
Puede agregar enlaces de datos a su control ActiveX de Visual Basic, de forma que un
usuario pueda enlazar fcilmente los campos individuales del control con los campos
correspondientes de una base de datos o de un origen de datos. Puede usar tambin enlaces
de datos para crear un control ActiveX que puede enlazar con otros controles, similares al
control Data de Visual Basic.
1. En el men Archivo, haga clic en Nuevo proyecto para abrir el cuadro de dilogo
Nuevo proyecto. (Esto cerrar el proyecto o grupo de proyectos actual; se le pedir
que guarde los cambios que haya efectuado.) Haga doble clic en el icono Control
ActiveX para crear un nuevo proyecto. Visual Basic agrega automticamente al
proyecto un diseador UserControl. El nombre predeterminado, UserControl1,
aparece como ttulo del diseador.
Pgina:36 de 66
3. Haga doble clic en UserControl1 en la ventana Explorador de proyectos para
traer el diseador al frente.
El nombre que especifique se convertir en el nombre de clase del control, igual que
CommandButton es el nombre de clase de los botones de comando. "Crear
controles ActiveX" proporciona instrucciones para elegir los nombres de clase de los
controles.
6. En el men Archivo, haga clic en Guardar proyecto para guardar los archivos del
proyecto. Asgneles nombres como se muestra en la tabla siguiente. Visual Basic
proporcionar las extensiones apropiadas automticamente.
Pgina:37 de 66
Para agregar un proyecto de prueba al grupo de proyectos
7. En el men Archivo, haga clic en Agregar proyecto para abrir el cuadro de dilogo
Agregar proyecto.
8. Haga doble clic en el icono EXE estndar para agregar un proyecto .exe normal.
Ahora puede ver ambos proyectos en la ventana Explorador de proyectos y el
ttulo de la ventana Explorador de proyectos muestra el nombre predeterminado del
grupo de proyectos.
Pgina:38 de 66
2. Haga doble clic en el control ShapeLabel para abrir la ventana de cdigo.
Pgina:39 de 66
4. Al colocar en el formulario el control ShapeLabel se ha producido el evento Resize
del mismo, como puede ver en la ventana Inmediato. Utilice los controladores de
tamao para cambiar varias veces el tamao del control. Cada vez que cambia el
tamao se vuelve a producir el evento Resize. Si se limita a mover el control por el
formulario, no se produce el evento Resize.
5. En Form1, haga doble clic en el control ShapeLabel para abrir la ventana de cdigo
de Form1. El cursor estar situado en el procedimiento de evento predeterminado,
ShapeLabel1_GotFocus. Puede usar el cuadro Procedimiento para ver los otros tres
eventos que Visual Basic proporciona automticamente para el control. Cierre la
ventana de cdigo cuando haya terminado.
Abrir el diseador de un control hace que todas las instancias del control queden
inactivas. Cambiar el cdigo en la ventana de cdigo del control tambin convierte en
inactivas las instancias del control.
Pgina:40 de 66
Tiempos y vida de un objeto UserControl
La vida de un formulario normal de Visual Basic est marcada por ciertos eventos clave,
como Initialize, Load, QueryUnload y Unload. Para crear aplicaciones que funcionen bien
es importante saber cundo se producen estos eventos en el ciclo de vida de un formulario.
Lo mismo sucede con los controles. Los eventos clave en el ciclo de vida de un control de
usuario son Initialize, InitProperties, ReadProperties, WriteProperties y Terminate.
El procedimiento siguiente explora estos eventos.
2. Haga doble clic en el diseador para abrir una ventana de cdigo para ShapeLabel y
escriba el cdigo en los siguientes procedimientos de evento:
Private Sub UserControl_Initialize()
Debug.Print "Initialize"
End Sub
Nota Para los objetos UserControl, Load y Unload se sustituyen por los eventos
ReadProperties y WriteProperties. Esto se explica con ms detalle en "Descripcin del
tiempo de vida y los eventos clave de un control", en "Crear controles ActiveX".
3. Asegrese de que el diseador de ShapeLabel est en el frente y, entonces,
presione Ctrl-F4 para cerrar la ventana, poniendo as el control en modo de
ejecucin. Aparecern mensajes de depuracin en la ventana Inmediato:
Pgina:41 de 66
Este ejemplo ilustra un punto importante sobre los controles. Un usuario coloca un
control en un formulario y piensa que a partir de ah el control es un componente fijo
y permanente del formulario. Pero desde la perspectiva del autor de controles, estos
se destruyen y se vuelven a crear continuamente.
5. Cierre Form1 para volver al modo de diseo. En la ventana Inmediato ver un evento
Terminate a medida que se destruye la instancia en tiempo de ejecucin de
ShapeLabel (pero no ver WriteProperties, por qu?). Despus ver los eventos
Pgina:42 de 66
Initialize, ReadProperties y Resize, a medida que se crea la instancia en tiempo de
diseo del control.
La instancia en tiempo de ejecucin de un control no obtiene nunca un evento
riteProperties, porque no necesita guardar los valores de sus propiedades. Para
entender por qu no, considere el futuro de ShapeLabel. Cuando est compilado en
un archivo .ocx, lo agregar a otro proyecto, pondr una instancia en un formulario,
compilar el proyecto en un archivo .exe y lo ejecutar. Cuando cierre ese archivo
.exe, el nico sitio en que la instancia de ShapeLabel podra guardar sus propiedades
sera el archivo .exe. Los buenos sistemas operativos no toleran este tipo de
comportamiento.
7. En la ventana Explorador de proyectos, haga doble clic en Form1 para traer al frente
el Form1.
Cuando se sita una nueva instancia del control en un contenedor, obtiene un evento
InitProperties. En el procedimiento de evento UserControl_InitProperties puede
escribir cdigo para:
Realizar tareas siempre que un usuario crea una instancia del control.
10. En la ventana Explorador de proyectos, haga doble clic en Form1 para abrir otra vez
su diseador. Cuando se abre el diseador, se crean todos los controles del Form1 y
se activan sus eventos Initialize. Entonces todos los controles reciben eventos
ReadProperties, que les permiten recuperar los valores guardados de sus
propiedades. El evento InitProperties no se produce, porque ya existen las dos
instancias del control ShapeLabel.
Puede usar mtodos grficos, como Circle y Line, para dibujar el control o bien puede crear
la apariencia del control usando los controles ActiveX y los controles intrnsecos de Visual
Basic existentes. Los controles que se agregan a UserControl para crear su apariencia se
denominan controles componentes.
Pgina:43 de 66
Para agregar controles componentes al control ShapeLabel
2. En el Cuadro de herramientas, haga doble clic en el control Visual Basic Shape para
colocar un control Shape en el diseador de ShapeLabel. Si no ha utilizado antes el
control Shape, mantenga el mouse sobre los botones del cuadro de herramientas
hasta que encuentre uno cuya Informacin sobre herramientas sea "Shape".
Propiedad Valor
BorderStyle 0 - Transparent
FillColor &H000000FF (Rojo)
FillStyle 0 Solid
Name ShpBack
Shape 2 Oval
4. En el Cuadro de herramientas, haga doble clic en el control Label para agregar una
etiqueta encima del control Shape. En la ventana Propiedades, establezca los
siguientes valores de propiedades para el control Label:
Propiedad Valor
Alignment 2 - Center
BackStyle 0 - Transparent
ForeColor &H00FFFFFF (Blanco)
Name lblCaption
Pgina:44 de 66
6. Haga doble clic en el diseador de ShapeLabel para traer al frente la ventana de
cdigo y sustituya el cdigo del procedimiento de evento UserControl_Resize con el
siguiente cdigo:
Private Sub UserControl_Resize()
' Da tamao al control Shape para llenar el
' rea visible de ShapeLabel.
shpBack.Move 0, 0, ScaleWidth, ScaleHeight
' Centra verticalmente el control Label y
' lo hace del mismo ancho que ShapeLabel.
lblCaption.Move 0, (ScaleHeight - lblCaption.Height) / 2, ScaleWidth
End Sub
7. Cuando est diseando un control de usuario, recuerde que el rea con la que tiene
que trabajar est enlazada por los valores ScaleWidth y ScaleHeight del control.
Aparte de esto, nada es visible para el usuario del control. Adems, el tamao del
rea de cliente cambiar a voluntad del usuario. Por eso, el evento Resize es uno de
los eventos ms importantes del diseo de controles.
9. Los dos controles ShapeLabel deben aparecer ahora como valos rojos, con ttulos
blancos centrados con el texto "Label1". Cambie el tamao de ambos controles
ShapeLabel para probar el cdigo del evento Resize.
El procedimiento siguiente agrega una propiedad Caption y el cdigo de soporte para guardar
y recuperar el valor de la propiedad. Los valores de las propiedades de un control se guardan
junto con los dems datos que describen el contenedor, en este caso, Form1.
Pgina:45 de 66
1. En la ventana Explorador de proyectos, haga doble clic en ShapeLabel para abrir su
diseador y haga doble clic en ShapeLabel para traer al frente la ventana de cdigo.
3. En la ventana de cdigo, cambie los procedimientos Property recin creados para que
aparezcan de la forma siguiente:
Public Property Get Caption () As String
Caption = lblCaption.Caption
End Property
Qu ocurrira si creara una propiedad Name para el control? Podra tener acceso a
ella desde dentro del control, pero la nica propiedad Name que vera el usuario sera
la propiedad Name del objeto Extender.
Una ltima cuestin relacionada con este asunto: por qu se pone este cdigo en el
evento InitProperties? Por qu no se utiliza el evento Initialize? Como ya hemos
visto, se llama a Initialize cada vez que se crea una instancia del control, lo que
sucede a menudo. InitProperties slo se produce cuando el usuario coloca el control
Pgina:46 de 66
en el contenedor. Por eso es el sitio apropiado para establecer los valores iniciales de
una instancia de control.
PropertyBag es una "bolsa" en la que se guardan los valores de las propiedades. Esta
bolsa la proporciona el contenedor. No puede ver su contenido, ni puede saber dnde
o cmo se guardan los datos. Todo lo que puede hacer es colocar valores en ella y
extraerlos.
A partir de los mensajes de la ventana Inmediato, puede ver que los controles se han
destruido y se han vuelto a crear, pero los valores de las propiedades Caption se han
guardado y recuperado.
Pgina:47 de 66
8. Presione Ctrl-F5 para ejecutar TestCtlDemo, el proyecto inicial del grupo de
proyectos, y observe el comportamiento del control ShapeLabel en tiempo de
ejecucin.
9. Haga clic en el botn Cerrar del Form1 para volver al modo de diseo.
Cada pgina de propiedades que se conecta al control se convierte en una de las fichas del
cuadro de dilogo Propiedades con fichas. Visual Basic controla todos los detalles de
presentar las pginas como un cuadro de dilogo con fichas y administra los botones
Aceptar, Cancelar y Aplicar. Todo lo que tiene que hacer es disear los controles que se
usarn para establecer los valores de las propiedades.
Por qu llamar a la pgina SLGeneral en lugar de General? Puede que tenga varios
controles en un proyecto y cada uno de ellos tenga una pgina General. sta es la
pgina General del control ShapeLabel.
3. En el men Archivo, haga clic en Guardar grupo de proyectos para guardar el grupo
de proyectos. Asigne nombre a la pgina de propiedades como se indica en la tabla
siguiente. Visual Basic agregar automticamente la extensin indicada.
Pgina:48 de 66
Para disear la pgina de propiedades General para el control ShapeLabel
Propiedad Valor
Name txtCaption
Text <vaco>
La pgina de propiedades debe parecerse a la que se muestra a continuacin.
3. Haga doble clic en la pgina de propiedades para abrir una ventana de cdigo. En la
lista desplegable Eventos, seleccione el evento SelectionChanged y agregue el cdigo
siguiente:
Private Sub PropertyPage_SelectionChanged()
' Muestra el ttulo del primer control de
' la lista de controles seleccionados
' actualmente.
txtCaption.Text = SelectedControls(0).Caption
End Sub
La finalidad de este evento es obtener los valores existentes de propiedades del
control o controles ShapeLabel que estn seleccionados en este momento. No hay
ningn problema; puede haber ms de un control ShapeLabel seleccionado. La
seleccin mltiple es muy prctica para el usuario del control, pero implica ms
trabajo para el diseador.
Una pgina de propiedades recibe un evento SelectionChanged cada vez que se abre.
Tambin recibe este evento cuando cambia la lista de controles seleccionados. Esto
es necesario porque el cuadro de dilogo Pginas de propiedades no es modal, de
forma que el usuario puede seleccionar controles adicionales mientras est abierto el
cuadro de dilogo.
Tiene que decidir cmo controlar la seleccin mltiple basndose en cada propiedad.
Por ejemplo, si la pgina de propiedades muestra la propiedad Width del primer
control de la coleccin SelectedControls, es decir, SelectedControls(0), como se
muestra arriba en el cdigo, ser fcil para el usuario cambiar el ancho de todos los
controles seleccionados a ese valor.
Por otra parte, no tiene sentido establecer los ttulos de todos los controles
ShapeLabel de un formulario al mismo valor: lo ms lgico que se puede hacer con la
Pgina:49 de 66
propiedad Caption es desactivar txtCaption si la propiedad Count de la coleccin
SelectedControls es mayor que uno.
Sin embargo, este procedimiento no hace lo lgico. Con fines ilustrativos se permite
que la pgina de propiedades establezca varios ttulos. Despus, si desea activar el
comportamiento descrito anteriormente, puede agregar las lneas de cdigo
siguientes al procedimiento de evento PropertyPage_SelectionChanged:
' No haga esto todava!
If SelectedControls.Count > 1 Then
txtCaption.Enabled = False
Else
txtCaption.Enabled = True
End If
4. Para establecer los valores de las propiedades de todos los controles seleccionados
actualmente, agregue el cdigo siguiente al evento ApplyChanges:
Private Sub PropertyPage_ApplyChanges()
' Use una variable genrica Object, en caso de
' estar seleccionado ms de un tipo de control.
Dim objControl As Variant
For Each objControl In SelectedControls
objControl.Caption = txtCaption.Text
Next
End Sub
La pgina de propiedades recibir el evento ApplyChanges cuando el usuario haga
clic en el botn Aplicar o en Aceptar del cuadro de dilogo Pginas de propiedades.
Cmo sabe que cada control de SelectedControls tiene una propiedad Caption?
Como diseador del componente del control, usted determina qu pginas de
propiedades estn conectadas a un control dado. Una pgina de propiedades slo
aparecer si todos los controles seleccionados actualmente tienen esa pgina en la
lista Pginas de propiedades. Lo ms fcil es asegurarse de que las pginas
asignadas a cada control no muestran propiedades que no tiene el control.
Si desea usar una pgina de propiedades de uso general para una serie de controles,
y en la pgina de algunos de esos controles no se muestran todas las propiedades,
puede agregar cdigo al evento ApplyChanges para probar el tipo de control y aplicar
el valor de propiedad que sea apropiado. Como alternativa, puede usar una
instruccin On Error para interceptar y pasar por alto los errores de los controles que
no tienen esa propiedad.
Slo tiene que preocuparse de los controles de su componente, ya que los controles
que no forman parte de l nunca usarn las pginas de propiedades del componente.
5. Para activar el botn Aplicar del cuadro de dilogo Pginas de propiedades cuando se
ha modificado la propiedad Caption, agregue el cdigo siguiente al evento Change
del cuadro de texto txtCaption:
Private Sub txtCaption_Change()
' La propiedad Changed de la pgina de
' propiedades controla el botn Aplicar del
' cuadro de dilogo Pgina de propiedades.
Changed = True
End Sub
6. En la ventana Explorador de proyectos, haga doble clic en SLGeneral para traer al
frente el diseador de pginas de propiedades. Haga clic en el botn Cerrar del
diseador o presione Ctrl-F4 para cerrar el diseador y poner la pgina en modo de
ejecucin. Al igual que los objetos UserControl, los objetos PropertyPage deben
ejecutarse mientras el resto del grupo de proyectos est en modo de diseo.
Pgina:50 de 66
Para conectar la pgina de propiedades al control ShapeLabel
6. Haga clic con el botn secundario del mouse (ratn) en uno de los controles
ShapeLabel del Form1 para ver el men contextual y haga clic en Propiedades para
presentar el cuadro de dilogo Pginas de propiedades.
8. Mantenga presionada la tecla CTRL y haga clic en el segundo control ShapeLabel del
Form1, de forma que estn seleccionados ambos controles ShapeLabel. Cambie el
ttulo y haga clic en el botn Aplicar para establecer ambos ttulos al mismo valor.
Pgina:51 de 66
Si lo desea, pruebe a agregar otros controles, como botones de comando, al Form1 y
observe los efectos de las selecciones mltiples en el cuadro de dilogo Pginas de
propiedades.
9. Cuando haya terminado de experimentar, haga clic en Aceptar para cerrar el cuadro
de dilogo Pginas de propiedades.
Es importante distinguir entre los eventos que recibe el objeto UserControl (o los controles
que contiene) y los eventos que desencadena el control. Los eventos que recibe el control
son oportunidades para que usted haga algo interesante, mientras que los eventos que
desencadena el control proporcionan oportunidades para que el programador que usa ese
control haga algo interesante.
Hay muchos eventos que podran ser de inters para el usuario del control ShapeLabel. El
control Label de Visual Basic desencadena un evento Click y ShapeLabel es solamente una
etiqueta atractiva, por lo que el procedimiento siguiente agregar un evento Click. Para
hacer el evento ms interesante, slo se desencadenar si el usuario hace clic en el segundo
plano del valo.
Option Explicit
' Declara un evento Click pblico sin argumentos.
Public Event Click()
Pgina:52 de 66
' color del control Shape. Ignora los clics
' que se hacen fuera del valo.
If Point(X, Y) = shpBack.FillColor Then
RaiseEvent Click
End If
End Sub
Puede hacer clic en la flecha del cuadro Procedimiento para ver todos los eventos del
control ShapeLabel. Adems del evento Click, hay otros cuatro eventos (DragDrop,
DragOver, GotFocus y LostFocus) que proporciona automticamente el contenedor,
Form1.
8. Hay un fallo sutil en la prueba de llamada para el evento Click de ShapeLabel. Para
verlo, presione el botn del mouse mientras el puntero est en la mitad inferior del
valo rojo. Manteniendo presionado el botn del mouse, mueva con cuidado el
puntero hasta que la punta de la flecha est sobre el texto blanco del ttulo de
ShapeLabel y suelte luego el botn del mouse. El cuadro de mensajes no aparece!
Pgina:53 de 66
-1, por lo que soltar el botn del mouse encima de cualquier punto rojo aleatorio no
desencadenar el evento Click.)
Arreglar este fallo se deja como ejercicio para el lector. (Sugerencia: mover la
prueba de llamada al evento Click de UserControl no servir de nada, porque el
evento Click no se produce cuando el evento MouseUp se desencadena sobre un
objeto diferente al del evento MouseDown.)
4. En el men Archivo, haga clic en Quitar proyecto para quitar ControlDemo del grupo
de proyectos, de forma que Visual Basic utilice el componente binario compilado
(archivo .ocx) en lugar del proyecto.
Para volver a usar el proyecto en lugar del componente binario, puede hacer clic en
Agregar proyecto en el men Archivo y agregar otra vez el proyecto ControlDemo al
grupo de proyectos.
Cuando ControlDemo se ejecuta desde el cdigo fuente, no puede tener acceso al control
ShapeLabel desde otras aplicaciones o desde otra instancia de Visual Basic. Esto se debe a
que los componentes del control ActiveX tienen que ejecutarse en proceso. Una vez
compilado el componente .ocx, puede probarlo desde otras aplicaciones.
1. Abra una nueva instancia de Visual Basic. En el cuadro de dilogo Nuevo proyecto,
haga doble clic en el icono EXE estndar para abrir un proyecto .exe.
Pgina:54 de 66
El icono para ShapeLabel aparece en el cuadro de herramientas. Ahora puede
agregar controles ShapeLabel al formulario predeterminado y usar la ventana
Propiedades para establecer sus propiedades. Tambin puede hacer clic con el botn
secundario del mouse en una instancia de ShapeLabel y elegir Propiedades en el
men contextual para modificar las propiedades del control con la pgina de
propiedades.
Pgina:55 de 66
Temas de Programacin Avanzada
Para usar estas funciones, hay que aadir unas cuantas lineas de codigo que definan en
Visual Basic la funcin externa. En otras palabras, para usar una funcion de la API, en primer
lugar hay que declararla. Las declaraciones de la API se introducen en la seccin de
declaraciones de un Mdulo. Al igual que se declaran variables.
Para demostrar el uso de la API desde Visual Basic, haremos un Proyecto .EXE Estndar
Pgina:56 de 66
2. Agregue un Mdulo, haciendo clic en la opcin Agregar Mdulo del Men Proyecto
3. Vaya a la seccin de declaraciones del Mdulo
4. Haga Clic en el Men Complementos y elija Administrador de Complementos y
en la pantalla del Administrador marque las opciones como se muestra en la figura
Esto permitir habilitar el Visor de API de VB6 para facilitar la declaracin de las
funciones de la API de Windows.
Pgina:57 de 66
10. Busque la funcin llamada ExitWindowsEx y luego haga clic en el botn Agregar
que est a mano derecha
11. Ahora haga clic en el botn Copiar (parte inferior derecha)
12. Regrese a la pantalla de Visual Basic y en la seccin de declaraciones del modulo,
use la combinacin de tecla CTRL+V para pegar la declaracin
Pgina:58 de 66
Programacin Cliente/Servidor en Visual Basic
utilizando el Control WinSock
Al igual que un usuario se comunica con un programa por medio del teclado y dos personas
se comunican por medio del telfono, dos programas se pueden comunicar entre s por
medio de sockets. Visual Basic cuenta con un control especial que se denomina WinSock
Control, el cual simplifica la programacin de los sockets para ahorrarle tiempo al
programador. Este control se encuentra bajo el nombre de archivo winsock.ocx, dicho
nombre proviene de Windows Sockets.
El Winsock Control como opcin predeterminada no se encuentra disponible en la barra de
controles estndar de Visual Basic, para acceder a l debemos agregarlo manualmente
mediante Proyecto> Componentes> y luego seleccionar WinSock Control y Aceptar. No es
visible en tiempo de ejecucin, lo que significa que no podremos verlo mientras nuestra
aplicacin se este ejecutando, no obstante podemos modificar sus propiedades en tiempo de
ejecucin.
Este tipo de aplicaciones Cliente-Servidor permiten comunicar programas entre s y en
consecuencia tambin permiten intercomunicar computadoras, porque habiendo un
programa en la computadora llamada Oscar_1 y otro en la computadora llamada
Daniel_1 ambos programas se pueden comunicar a travs de Internet.
Para que el lector entienda por completo y de forma sencilla cul es la estructura del
software Cliente-Servidor vamos a dar un ejemplo bien sencillo y concreto. Un programa
para administrar un cyber-caf es un programa que se basa en la arquitectura Cliente-
Servidor, permitiendo al dueo del local controlar/administrar las computadoras que posee.
El dueo del local puede facturar el tiempo que se utiliz en cada computadora, apagar las
computadoras, reiniciarlas, todo de forma ordenada y sin la necesidad de ir mquina por
mquina. Como si esto no fuera poco adems y por ms increble que parezca el dueo
podra administrar el local desde su casa, a travs de Internet, de la misma forma que lo
hara si estuviese en el local, ya que el programa es el mismo, pero se utiliza a distancia
gracias a la red Internet.
Programas Troyanos
Pgina:59 de 66
Los puertos que se dejan a la escucha generalmente son muy altos, es decir puertos que
pasan del nmero 20000, para garantizar que ningn otro programa pueda estar usndolos y
cancelar la conexin del troyano.
El uso de estos programas no es ilegal a menos que el usuario final opte por entrar a la
mquina remota sin autorizacin. En dicho caso se puede proceder legalmente de acuerdo al
pas en el que se encuentre la PC hacheada/vctima, es decir la computadora a la que se
infiltr el hacker (hacker: persona interesada en el funcionamiento y vulnerabilidad de los
sistemas operativos, lenguajes de programacin y seguridad informtica). Por ejemplo en
EEUU se puede condenar a una larga sentencia por hacer eso, pero tambin hay que conocer
la otra cara de la moneda, es el caso de Argentina, donde todava no esta tipificado en el
cdigo penal la intrusin en computadoras sin autorizacin, esto quiere decir que no es un
delito condenable, a menos que en dicha intrusin se eliminen datos.
Aqu debajo una lista de los troyanos ms conocidos del Underground, es decir de la
sociedad que ronda el hacker, o ms bien todo aquello que sea difcil de encontrar para el
usuario comn. La palabra UnderGround significa debajo de la tierra, lo que para la mayora
significa algo oculto y qu otro ejemplo ms conciso que los programas que usa un hacker.
Cabe aclarar que el uso de estos programas comnmente denominados para hackers no
convierte a nadie pero absolutamente a nadie en hacker. No solo eso, sino que cualquier
persona que se jacte de usar estos programas se ganar el desprecio de los verdaderos
hackers, quienes arduamente programan sus propios programas luego de haber estudiado
aos para hacerlo. El hacker no se hace de la noche a la maana, es ms, el hacker no se
hace, nace
Back Oriffice 2000: Sin lugar a duda el troyano que ms pnico caus en los ltimos
tiempos. Fue el preferido de todos por ser el primero que sali en Internet con una facilidad
de uso impresionante y caractersticas que otros troyanos aun no imaginaban, como la
renovada parte grfica entre otras cosas. En la ltima versin del programa se puede notar
que fue programado para funciones de administracin remota, ya que se nota la
programacin estructurada y concisa, sin botones de ms, ni funciones innecesarias para el
usuario final.
Dolly Trojan: Excelente troyano, lstima que no se gan el aprecio del pblico porque
el servidor es muy grande.
Girlfriend 1.35: Al contrario del Dolly Troyan este programa es muy pequeo, al igual
que su servidor, por lo tanto no incluye tantas funciones.
Pgina:60 de 66
InCommand v1.0: Diferente a todos los dems este programa es de tamao medio,
pero lamentablemente no pudo adquirir la atencin del usuario porque no tiene suficientes
funciones.
Tamao del servidor: 168 KB
NetSphere: Nuevamente, al igual que el Dolly este troyano posee un servidor muy
grande por lo que se hace pesado el envo por Internet o por e-mail, lo que lleva a la gente a
buscar una alternativa menos pesada para enviar, recurriendo a otro troyano.
Tamao del servidor: 621 KB
Primero abrimos un proyecto (EXE Estndar) y colocamos en control en cualquier parte del
formulario. Vamos a comenzar por ver las propiedades, estas pueden ser establecidas en
tiempo de diseo como tambin en tiempo de ejecucin. A continuacin se muetran las
propiedades ms importantes.
Pgina:61 de 66
Estas son algunas de las propiedades ms importantes, y a continuacin la sintaxis de cada
propiedad.
Objeto.Propiedad = Valor
Entonces por ejemplo si queremos probar la propiedad LocalIP debemos seguir el ejemplo 1.
Ejemplo 1
Crear un Proyecto (EXE Estndar) y agregar el WinSock Control. Luego agregar una etiqueta
vaca, es decir un Label. Despus introducimos el siguiente cdigo.
Este simple ejemplo nos muestra de forma rpida nuestro nmero IP. Si no estamos
conectados a Internet nuestro nmero IP es 127.0.0.1 (es un nmero que se reserva la placa
de red para pruebas internas). Podemos usar este nmero IP cuando queramos probar
nuestras propias aplicaciones Cliente-Servidor sin tener que recurrir a otra computadora, es
decir, ejecutar tanto el Server como el Cliente en una misma PC.
Ahora que sabemos manejar las propiedades podemos seguir con los Mtodos. A
continuacin la lista de algunos de los Mtodos ms importantes del Control WinSock.
GetData: Recupera el bloque actual de datos y lo almacena en una variable de tipo Variant.
Connect: Se produce cuando el equipo local se conecta al equipo remoto y se establece una
conexin.
Close: Se produce cuando el equipo remoto cierra la conexin. Las aplicaciones deben usar el
mtodo Close para cerrar correctamente una conexin TCP.
DataArrival: Se produce cuando llegan nuevos datos. Este evento es importante, ya que
debemos hacer algo con la informacin que llega.
La sintaxis de los mtodos y eventos es igual a la sintaxis de las propiedades, por lo cual no
vamos a hacer referencia a ella.
Pgina:62 de 66
Conociendo las propiedades, mtodos y eventos del Control WinSock podemos pasar a la
engorrosa labor de la programacin.
Para poder programar la siguiente aplicacin necesitan tener el Control WinSock en el
formulario (no importa el lugar), asegrese de tenerlo ya que es fundamental para que el
programa funcione correctamente.
Para entender el correcto funcionamiento del protocolo TCP/IP vamos a empezar por
programar la aplicacin Servidor a la cual luego se conectar el Cliente.
Comenzamos por crear un proyecto nuevo (EXE estndar) para el Servidor, y agregamos la
siguiente lista de controles al formulario principal. La ubicacin de dichos controles es a
gusto del programador, siempre tratando de que el usuario final este a gusto con el producto
y que se pueda manejar libremente sin problemas por el entorno del mismo.
o WinSock Control
o 2 cajas de texto (Text Box)
o 2 botones (Command Button)
A continuacin hace falta que cambiemos algunas propiedades de los controles, debajo la
lista de controles con las respectivas propiedades a cambiar.
Para orientar mucho mejor al programador que esta leyendo este tutorial incluimos
imgenes del formulario para que se puedan guiar en caso de que lo necesiten, si no lo
necesitan pueden ubicar los controles a su gusto.
Una vez hecho esto podemos empezar a tipear cdigo. El sangrado del programa (espacio
entre el cdigo y el margen) es una cuestin de entendimiento/comprensin para el
programador, algunos recurren a ste como otros no, eso tambin queda a criterio de la
persona que programa.
En el Evento Click del Command1 incluimos el siguiente cdigo; (slo lo que esta en negrita,
el resto es en modo de ayuda, ya que aparece cuando se hace doble click en algn control).
Pgina:63 de 66
End Sub
Esto hace que el Control WinSock empiece a funcionar, escuchando el puerto que se indic
anteriormente en las propiedades de dicho control. Este puerto es el 888. Si seguimos los
pasos anteriores correctamente entonces el puerto 888 esta siendo vigilado/escuchando para
aceptar conexiones remotas.
En el evento ConnectionRequest
Este evento es muy importante, permite aceptar la peticin de conexin. Sin este evento el
resto del programa no tendra efecto.
Por ahora este es un simple programa Servidor, lo que hace es: designar un puerto, dejarlo
a la escucha para aceptar conexiones, si se realiza una peticin de conexin la acepta, y por
ltimo enva datos al Cliente y recibe los datos que ste enve.
Para seguir programando el Cliente hace falta crear un nuevo proyecto y en el formulario
principal incluir la siguiente lista de controles:
o WinSock Control
o 3 cajas de texto (Text Box)
o 2 botones (Command Button)
Como lo hicimos anteriormente hace falta cambiar algunas propiedades. Debajo la lista de
controles con las respectivas propiedades para cambiar.
Pgina:64 de 66
Text2 Text =
Text3 Text =
Command1 Caption = Conectar
Command2 Caption = Enviar
Para tener una referencia de cmo situar los controles conviene seguir la Figura siguiente
El evento Connect nos permite conectarnos al programa servidor que esta esperando nuestra
solicitud. Este evento requiere un parmetro fundamental, el nmero IP o nombre de host, el
cual es introducido previamente a la conexin en TextBox3 (Text3).
Pgina:65 de 66
Este es un ejemplo muy sencillo de la arquitectura Cliente-Servidor. Si desean pueden
establecer la propiedad Multiline en TRUE para los TextBox, la cual ordena la informacin
recibida en los TextBox para que se pueda leer ms fcilmente.
Bibliografa
Baltazar & Mariano Birnios, Creacin de Aplicaciones Multimedia con Visual Basic, editorial MP
Ediciones, primera edicin, Buenos Aires, 1998.
Baltazar & Mariano Birnios, Microsoft Visual Basic Manual de Referencia, editorial MP
Ediciones, primera edicin, Buenos Aires, 1999.
(En Ingls)
http://msdn.microsoft.com/vb
http://www.vb-herlper.com
http://www.vbexplorer.com
http://www.cgvb.com
http://www.vb-world.net
http://www.planet-source-code.com/vb
http://www.programmersheaven.com/
(En Castellano)
http://www.programacion.net/
http://www.abcdatos.com
http://www.monografias.com
Pgina:66 de 66