- Objetivo
- Introducción a la programación
orientada a eventos - Programas secuenciales, interactivos y orientados a
eventos - Eventos
- Propiedades
- Métodos
- Programas para el entorno de Windows
- Modo de diseño y modo de
ejecución. - Objetos y Propiedades
- Nombres de Objetos
- Orden de disparo de los eventos
- Carga y descarga de formulario
- Eventos relacionados con el ratón
- Agregando código al formulario.
- Crear, disparar y manejar eventos
personalizados - Eventos y propiedades relacionados con
gráficos - Conclusión
- Bibliografía
Objetivo :
El trabajo identificará conceptos de programación orientada al evento
confrontándola con lenguajes visuales y orientados a
objetos, asimismo, y manejará el ambiente de
desarrollo de
Visual Basic en
la construcción de interfaces gráficas
para demostraciones de eventos.
Introducción A La Programación Orientada A Eventos.
Los lenguajes visuales orientada al evento y con manejo
de componentes dan al usuario que no cuenta con mucha experiencia
en desarrollo, la
posibilidad de construir sus propias aplicaciones utilizando
interfaces gráficas sobre la base de ocurrencia de
eventos.
Para soportar este tipo de desarrollo
interactuan dos tipos de herramientas,
una que permite realizar diseños gráficos y , un
lenguaje de
alto nivel que permite codificar los eventos. Con
dichas herramientas
es posible desarrollar cualquier tipo de aplicaciones basadas en
el entorno.
Visual Basic es uno de los lenguajes de
programación que más entusiasmo despiertan
entre los programadores de computadoras,
tanto expertos como novatos. En el caso de los programadores
expertos por la facilidad con la que desarrollan aplicaciones
complejas en poquísimo tiempo (comparado
con lo que cuesta programar en Visual C++, por
ejemplo). En el caso de los programadores novatos por el hecho de
ver de lo que son capaces a los pocos minutos de empezar su
aprendizaje.
El precio que hay
que pagar por utilizar Visual Basic es una menor
velocidad o
eficiencia en
las aplicaciones.
Visual Basic es un lenguaje de
programación visual, también llamado lenguaje de
4ta. generación. Esto quiere decir que un gran
número de tareas se realizan sin escribir código,
simplemente con operaciones
gráficas realizadas con el ratón sobre la
pantalla.
Visual Basic es también un programa
basado en objetos, aunque no orientado a objetos
como Visual C++. La diferencia está en que
Visual Basic utiliza objetos con
propiedades y métodos, pero
carece de los mecanismos de herencia y
polimorfismo propios de los verdaderos lenguajes
orientados a objetos como Java y
C++.
En este trabajo se presentará las características generales de Visual
Basic, junto con algunos ejemplos sencillos que den idea
de la potencia del
lenguaje
orientado a eventos, y del
modo en que se utiliza.
Programas Secuenciales, Interactivos Y Orientados
A Eventos
Existen distintos tipos de programas. En los
primeros tiempos de los ordenadores los programas eran de
tipo secuencial (también llamados tipo
batch). Un programa
secuencial es un programa que se
arranca, lee los datos que
necesita, realiza los cálculos e imprime o guarda en el
disco los resultados. De ordinario, mientras un programa
secuencial está ejecutándose no necesita ninguna
intervención del usuario. A este tipo de programas se les
llama también programas basados u orientados a procedimientos o a algoritmos
(procedural languages). Este tipo de programas siguen
utilizándose ampliamente en la actualidad, pero la
difusión de los PC’s ha puesto de actualidad otros
tipos de programación.
Los programas
interactivos exigen la intervención del
usuario en tiempo de
ejecución, bien
para suministrar datos, bien para
indicar al programa lo que
debe hacer por medio de menús. Los programas interactivos
limitan y orientan la acción del usuario.
Por su parte los programas orientados a
eventos son los programas típicos de
Windows, tales como Netscape,
Word, Excel, PowerPoint y
otros. Cuando uno de estos programas ha arrancado, lo
único que hace es quedarse a la espera de las acciones del
usuario, que en este caso son llamadas
eventos.
El usuario dice si quiere abrir y modificar un fichero
existente, o bien comenzar a crear un fichero desde el principio.
Estos programas pasan la mayor parte de su tiempo esperando
las acciones del
usuario (eventos) y respondiendo a ellas. Las acciones que
el usuario puede realizar en un momento determinado son
variadísimas, y exigen un tipo especial de programación: la programación orientada a eventos.
Este tipo de programación es sensiblemente más
complicada que la secuencial y la interactiva, pero con los
lenguajes visuales de hoy, se hace sencilla y
agradable.
Antes de continuar es necesario definir algunos
conceptos de los elementos de Programación Orientada a
Eventos.
Eventos.
Ya se ha dicho que las acciones del
usuario sobre el programa se llaman eventos. Son
eventos típicos el click sobre un botón, el hacer
doble click sobre el nombre de un fichero para abrirlo, el
arrastrar un icono, el pulsar una tecla o combinación de
teclas, el elegir una opción de un menú, el
escribir en una caja de texto, o
simplemente mover el ratón. Más adelante se
verán los distintos tipos de eventos reconocidos por
Windows 95 y por Visual Basic. Cada
vez que se produce un evento sobre un determinado tipo de
control,
Visual Basic arranca una determinada
función o procedimiento que
realiza la acción programada por el usuario para ese
evento concreto.
Estos procedimientos se
llaman con un nombre que se forma a partir del nombre del objeto
y el nombre del evento, separados por el carácter (_),
como por ejemplo txtBox_click, que es el nombre del
procedimiento
que se ocupará de responder al evento click
en el objeto txtBox.
Propiedades y Métodos.
Además de los eventos, la mayor
parte de los objetos, como los formularios y los
controles, son suministrados con propiedades y métodos.
Son conceptos fundamentales e importantes.
Propiedades.
Una propiedad es
una asignación que describe algo sobre un objeto como un
formulario. Dependiendo de la propiedad, se
la puede asignar en tiempo de
diseño
usando la ventana Propiedades y/o en tiempo de
ejecución al programar.
A continuación se describen dos ejemplos de las
propiedades del formulario de Visual
Basic:
- MinButton. Esta propiedad
puede asignarse como TRUE (verdadero) o FALSE (falso).
Dependiendo de la asignación, el formulario
tendrá o no tendrá un botón
minimizar. - BackColor. Asignando esta propiedad a
un valor
expresado como hexadecimal RGB (Rojo Verde Azul) o como una
constante se cambia el color del fondo
del formulario. Se pueden consultar las constantes usando el
examinador de objetos (Seleccione VER, EXAMINADOR DE OBJETOS) y
en la Biblioteca
VBRUN (Columna clase) bajo "ColorConstants" y
"SystemColorConstants".
Métodos.
Los métodos son funciones que
también son llamadas desde programa, pero a diferencia de
los procedimientos no
son programadas por el usuario, sino que vienen ya
pre-programadas con el lenguaje.
Los métodos
realizan tareas típicas, previsibles y comunes para todas
las aplicaciones. de ahí que vengan con el lenguaje y
que se libere al usuario de la tarea de programarlos. Cada tipo
de objeto o de control tiene sus
propios métodos.
En general solo pueden ser ejecutados en tiempos de
ejecución no en tiempo de diseño.
Algunos ejemplos de métodos de
formularios
son el método
MOVE, que mueve un formulario en un espacio de dos dimensiones en
la pantalla, y el método
ZORDER que sitúa el formulario delante o detrás de
otras ventanas.
Los métodos son invocados dando nombres al objeto
y cuyo método se
está llamando, listando el operador punto (.), y
después listando el nombre del método.
Como cualquier rutina los métodos pueden incorporar
argumentos
Por ejemplo:
Form1.Show 1
Este método
Show carga y muestra un
formulario, dos acciones
distintas que forman ambas partes del proceso de
nacimiento o inicio a un formulario (al ejecutar el formulario de
inicio se carga también primero el formulario y
después se muestra). El
método Show puede ser invocado como no modal o modal.
Modal significa que no se ejecuta ningún código
posterior hasta que el formulario se oculte o se descargue.
Cuando se muestra un
formulario modal no se puede producir ninguna entrada de usuario
(de teclado o
click del ratón) excepto para los objetos del formulario
modal. Si se activa el estilo 1 (uno) es modal y 0 (cero) es no
modal.
Visual Significa Visual.
Como el nombre lo indica, una gran parte de la
programación con Visual Basic se
realiza visualmente. Esto significa que durante el tiempo de
diseño
usted tiene la capacidad de ver la forma en el programa se vera
al ejecutarse Esta es una gran ventaja sobre otros lenguajes de
programación debido a que se tiene la capacidad de
cambiar y experimentas con el diseño
hasta que se esté satisfecho con los colores,
proporciones e imágenes
que incluya en su programa.
Programas Para El Entorno Windows.
Visual Basic está orientado a la
realización de programas para Windows,
pudiendo incorporar todos los elementos de este entorno
informático: ventanas, botones, cajas de diálogo y
de texto, botones
de opción y de selección, barras de desplazamiento,
gráficos, menús, etc. Prácticamente todos
los elementos de interacción con el usuario de los que
dispone Windows 95 pueden ser programados en
Visual Basic de un modo extraordinariamente
sencillo. En ocasiones bastan unas pocas operaciones con
el ratón y la introducción a través del
teclado de
algunas sentencias para disponer de aplicaciones con todas las
características de Windows
95.
Modo De Diseño
Y Modo De Ejecución.
La aplicación Visual Basic de
Microsoft puede trabajar de dos modos distintos: en
modo de diseño y en modo de ejecución. En
modo de diseño el usuario construye
interactivamente la aplicación, colocando
controles en el formulario,
definiendo sus propiedades, desarrollando
funciones para gestionar los eventos.
La aplicación se prueba en modo de
ejecución. En ese caso el usuario actúa
sobre el programa (introduce eventos) y prueba
cómo responde el programa. Hay algunas
propiedades de los controles que
deben establecerse en modo de diseño, pero muchas otras
pueden cambiarse en tiempo de ejecución desde el programa
escrito en Visual Basic, en la forma en que
más adelante se verá. También hay
propiedades que sólo pueden establecerse en
modo de ejecución y que no son visibles en modo de
diseño.
Formularios Y Controles
Cada uno de los elementos gráficos que pueden
formar parte de una aplicación típica de
Windows 95 es un tipo de control: los
botones, las cajas de diálogo y de texto, las
cajas de selección desplegables, los botones de
opción y de selección, las barras de desplazamiento
horizontales y verticales, los gráficos, los menús,
y muchos otros tipos de elementos son controles para Visual
Basic. Cada control debe
tener un nombre a través del cual se puede
hacer referencia a él en el programa. Visual
Basic proporciona nombres por defecto que el
usuario puede modificar.
En la terminología de Visual Basic
se llama formulario (form) a una ventana. Un
formulario puede ser considerado como una especie de contenedor
para los controles. Una aplicación puede tener varios
formularios,
pero un único formulario puede ser suficiente para las
aplicaciones más sencillas. Los formularios deben
también tener un nombre, que puede crearse siguiendo las
mismas reglas que para los controles.
Objetos Y Propiedades.
Los formularios y los
distintos tipos de controles son entidades genéricas de
las que puede haber varios ejemplares concretos en cada programa.
En programación orientada a objetos (más
bien basada en objetos, habría que decir) se llama
clase a estas entidades genéricas, mientras
que se llama objeto a cada ejemplar de una clase
determinada. Por ejemplo, en un programa puede varios botones,
cada uno de los cuales es un objeto del tipo de
control
command button, que sería la
clase.
Cada formulario y cada tipo de control tienen un
conjunto de propiedades que definen su aspecto
gráfico (tamaño, color,
posición en la ventana, tipo y tamaño de letra,
etc.) y su forma de responder a las acciones del usuario (si
está activo o no, por ejemplo). Cada propiedad
tiene un nombre que viene ya definido por el
lenguaje.
Por lo general, las propiedades de un
objeto son datos que tienen
valores
lógicos (true, false) o numéricos
concretos, propios de ese objeto y distintos de las de otros
objetos de su clase. Así pues, cada clase, tipo de objeto
o control tiene su conjunto de propiedades, y cada objeto o
control concreto tiene
unos valores
determinados para las propiedades de su clase.
Casi todas las propiedades de los objetos pueden
establecerse en tiempo de diseño y también -casi
siempre- en tiempo de ejecución. En este segundo caso se
accede a sus valores por
medio de las sentencias del programa, en forma análoga a
como se accede a cualquier variable en un lenguaje de
programación. Para ciertas propiedades ésta es
la única forma de acceder a ellas. Por supuesto
Visual Basic permite crear distintos tipos de
variables,
como más adelante se verá.
Se puede acceder a una propiedad de un objeto por medio
del nombre del objeto a que pertenece, seguido de
un punto y el nombre de la propiedad, como por
ejemplo optColor.objName.
Nombres De Objetos
En principio cada objeto de Visual Basic
debe tener un nombre, por medio del cual se hace referencia a
dicho objeto. El nombre puede ser el que el usuario desee, e
incluso Visual Basic proporciona nombres por
defecto para los diversos controles. Estos nombres por
defecto hacen referencia al tipo de control y van seguidos de un
número que se incrementa a medida que se van introduciendo
más controles de ese tipo en el formulario (por ejemplo
VScroll1, para una barra de desplazamiento
–ScrollBar– vertical,
HScroll1, para una barra horizontal,
etc.).
Los nombres por defecto no son adecuados
porque hacen referencia al tipo de control, pero no al uso que de
dicho control está haciendo el programador. Por ejemplo,
si se utiliza una barra de desplazamiento para introducir una
temperatura,
conviene que su nombre haga referencia a la palabra
temperatura, y así cuando haya que utilizar
ese nombre se sabrá exactamente a qué control
corresponde. Un nombre adecuado sería por ejemplo
hsbTemp, donde las tres primeras letras indican que
se trata de una horizontal scroll bar, y las
restantes (empezando por una mayúscula) que servirá
para definir una temperatura.
Existe una convención ampliamente aceptada que es
la siguiente: se utilizan siempre tres letras
minúsculas que indican el tipo de control, seguidas por
otras letras (la primera mayúscula, a modo de
separación) libremente escogidas por el usuario, que
tienen que hacer referencia al uso que se va a dar a ese
control. La Tabla 1.1 muestra las
abreviaturas de los controles más usuales, junto con la
nomenclatura
inglesa de la que derivan.
Abrebiatura | Control | Abrebiatura | Control |
chk | check box | cbo | combo y drop-list box |
Cmd | command button | dir | dir list box |
drv | drive list box | fil | file list box |
frm | form | fra | Frame |
hsb | horizontal scroll bar | img | Image |
lbl | label | lin | Line |
lst | list | mnu | Menu |
opt | option button | pic | Picture |
shp | shape | txt | text edit box |
tmr | timer | vsb | vertical scroll bar |
Tabla 1.1. Abreviaturas para los controles más
usuales
Orden De Disparo De Eventos.
Para controlar con éxito la aparición y el
comportamiento
de los formularios (y también de los controles) en tiempos
de ejecución, debe comprenderse en que orden se disparan
los eventos. Las consideraciones del orden de disparo de los
eventos deciden generalmente por el usuario donde debe ser
colocada una parte determinada de código de respuesta de
un evento. Los eventos de formularios pueden ser divididos en los
grupos
siguientes:
- Inicio.
- Respuesta a una acción (de
usuario). - Vinculación.
- Cierre.
Es importante también comprender que un evento
inicia automáticamente con frecuencia a otro evento,
produciendo un efecto en cascada. Por ejemplo un evento
KeyPress no puede ser disparada sin disparar
también lo eventos KeyUp y KeyDown. El
secreto para trabajar con esta clase de situaciones es una
comprensión clara de que es lo que dispara cada evento en
la secuencia; el peligro de la codificación es iniciar un
cadena sin fin de llamada a eventos circulares
recursivos.
Eventos Generales
Carga Y Descarga De Formularios
Cuando se arranca una aplicación, o más en
concreto
cuando se visualiza por primera vez un formulario se producen
varios eventos consecutivos: Initialize, Load, Activate y
Paint. Cada uno de estos eventos se puede aprovechar para
realizar ciertas operaciones por
medio de la función correspondiente.
Para inicializar las variables
definidas a nivel de módulo se suele utilizar el evento
Initialize, que tiene lugar antes que el
Load. El evento Load se activa al
cargar un formulario. Con el formulario principal esto sucede al
arrancar la ejecución de un programa; con el resto de los
formularios al mandarlos cargar desde cualquier procedimiento o
al hacer referencia a alguna propiedad o control de un formulario
que no esté cargado. Al descargar un formulario se produce
el evento Unload. Si se detiene el programa desde
el botón Stop de Visual Basic
(o del menú correspondiente) o con un
End, no se pasa por el evento
Unload. Para pasar por el evento
Unload es necesario cerrar la ventana con el
botón de cerrar o llamarlo explícitamente. El
evento QueryUnload se produce antes del evento
Unload y permite por ejemplo enviar un mensaje de
confirmación.
QueryUnload. Se dispara por un evento
Unload de formulario, antes de que se ejecute
ningún código del evento Unload.
QueryUnload da la oportunidad de detener la descarga del
formulario de la memoria
cuando sea apropiado, por ejemplo, cuando el usuario haya
cambiado valores del
formulario sin guardar los cambios. El formulario no será
descargado si la variable Cancel está asignada como
True en el procedimiento del
evento QueryUnload. Es una práctica
común asignar esta variable como True a
continuación de una consulta del usuario a lo largo de las
líneas de "¿Guardar los cambios? Sí, No,
Cancelar" cuando el usuario responde cancelando. La
función MsgBox puede usarse
fácilmente para dar al usuario una oportunidad de cancelar
una descarga.
Unload. Se dispara cuando un usuario
cierra el formulario usando el comando Cerrar en el menú
Control o cuando se ejecuta en código un método
Unload. Unload dispara inmediatamente un evento
QueryUnload como acabamos de describir. Se pude
usar el evento Unload (así como
QueryUnload) para realizar tareas de cierre como
guardar y convalidar datos.
Terminate. Se produce cuando se eliminan
de la memoria
todas las referencia a una instancia de un formulario.
El evento Load de un formulario se suele
utilizar para ejecutar una función que dé valor a sus
propiedades y a las de los controles que dependen de dicho
formulario. No se puede utilizar para dibujar o imprimir sobre el
formulario, pues en el momento en que se produce este evento el
formulario todavía no está disponible para dichas
operaciones.
Por ejemplo, si en el formulario debe aparecer la salida del
método Print o de los métodos
gráficos Pset, Line y
Circle puede utilizarse el evento
Paint u otro posterior (por ejemplo, el evento
GotFocus del primer control) pero no puede
utilizarse el evento Load. Se puede ocultar un
formulario sin descargarlo con el método
Hide o haciendo la propiedad Visible =
False. Esto hace que el formulario desaparezca de la
ventana, aunque sus variables y
propiedades sigan estando accesibles y conservando sus valores. Para
hacer visible un formulario oculto pero ya cargado se utiliza el
método Show, que equivale a hacer la
propiedad Visible = True, y que genera los eventos
Activate y Paint. Si el formulario no
había sido cargado previamente, el método
Show genera los cuatro eventos
mencionados.
Cuando un formulario pasa a ser la ventana activa se
produce el evento Activate y al dejar de serlo el
evento Deactivate. En el caso de que el formulario
que va a ser activo no estuviera cargado ya, primero
sucederían los eventos Initialize,
Load y luego los eventos Activate y
Paint. Se han de crear dos formularios
(frmPrincipal y frmSecundario). El
primero de ellos contendrá dos botones
(cmdVerSec y cmdSalir) y el segundo
tres (cmdHide, cmdUnload y
cmdTerminate). El formulario principal será
el primero que aparece, y sólo se verá el segundo
si se clica en el botón Cargar
Formulario. Cuando así se haga, a medida
que los eventos antes mencionados se vayan sucediendo,
irán apareciendo en pantalla unas cajas de mensajes que
tendrán como texto el
nombre
del evento que se acaba de producir. Según con
cual de los tres botones se haga desaparecer el segundo
formulario, al volverlo a ver se producirán unos eventos u
otros, según se puede ver por los mensajes que van
apareciendo con cada evento.
' código del form. principal
Private Sub cmdCargar_Click()
frmSecundario.Show
End Sub
' código del form. secundario
Private Sub cmdHide_Click()
Hide
End Sub
Private Sub cmdUnload_Click()
Unload Me
End Sub
Private Sub cmdTerminate_Click()
Hide
Set Form2 = Nothing
End Sub
Private Sub Form_Activate()
MsgBox ("Evento Activate")
End Sub
Private Sub Form_Deactivate()
MsgBox ("Evento Deactivate")
End Sub
Private Sub Form_Initialize()
MsgBox ("Evento Initialize")
End Sub
Private Sub Form_Load()
MsgBox ("Evento Load")
End Sub
Private Sub Form_Paint()
MsgBox ("Evento Paint")
End Sub
Private Sub Form_QueryUnload(Cancel As Integer,
UnloadMode As Integer)
MsgBox ("Evento QueryUnload")
End Sub
Private Sub Form_Terminate()
MsgBox ("Evento Terminate")
End Sub
Private Sub Form_Unload(Cancel As Integer)
MsgBox ("Evento Unload")
End Sub
Es muy interesante realizar este ejemplo y seguir la
secuencia de eventos que se producen al hacer aparecer y
desaparecer los formularios.
Paint.
El evento Paint sucede
cuando hay que redibujar un formulario o
PictureBox. Esto sucede cuando esos objetos se
hacen visibles después de haber estado tapados
por otros, tras haber sido movidos otras haber sido modificados
de tamaño.
El foco (focus)
En todas las aplicaciones de Windows, en
cualquiera de sus versiones, siempre hay un único control,
formulario o ventana que puede recibir clicks del ratón o
entradas desde teclado. En
cada momento ese control, ventana o formulario es el que dispone
del "foco" (focus). El objeto que posee el foco
está caracterizado por estar resaltado con
letra negrita, con un contorno más vivo o teniendo
parpadeando el cursor en él. Este foco puede ser
trasladado de un objeto a otro por código o por
interacciones del usuario, como por ejemplo clicando con el
ratón en distintos puntos de la pantalla o pulsando la
tecla Tab. Cada vez que un objeto pierde el foco se
produce su evento LostFocus y, posteriormente, el
evento GotFocus del objeto que ha recibido el
foco.
Dos propiedades de muchos controles relacionadas con el
foco son TabIndex y
TabStop.
TabStop determina si el foco se va o no a
posar en el objeto al pulsar la tecla Tab (si
TabStop está a False no se
puede obtener el foco mediante el tabulador) y
TabIndex determina el orden en el que esto va a
suceder. Así al cargar un formulario, el foco
estará en aquel objeto cuyo TabIndex sea
0.
Al pulsar la tecla Tab el foco irá
al objeto que tenga TabIndex = 1 y así
sucesivamente. Para retroceder en esta lista se pulsa
Mayúsculas+Tab. La propiedad
TabIndex se puede determinar en tiempo de
diseño por medio de la caja de propiedades, del modo
habitual. Cuando a un control se le asigna un determinado
valor de
TabIndex, Visual Basic ajusta
automáticamente los valores de
los demás controles (si tiene que desplazarlos hacia
arriba o hacia abajo, lo hace de modo que siempre tengan
números consecutivos). Para que un
formulario reciba el foco es necesario que no haya
en él ningún control que sea capaz de recibirlo. Un
grupo de
botones de opción tiene un único
TabIndex, es decir, se comporta como un
único control. Para elegir una u otra de las opciones se
pueden utilizar las flechas del teclado
y.
KeyPress, KeyUp y KeyDown.
El evento KeyPress sucede cuando el
usuario pulsa y suelta determinada tecla. En este evento el
único argumento KeyAscii es necesario para
conocer cuál es el código ASCII de la tecla
pulsada. El evento KeyDown se produce cuando el
usuario pulsa determinada tecla y el evento KeyUp
al soltar una tecla.
Los eventos KeyUp y KeyDown
tienen un segundo argumento llamado Shift que
permiten determinar si esa tecla se ha pulsado estando pulsadas a
la vez cualquier combinación de las teclas
Shift, Alt y
Ctrl. En un apartado próximo se explica
cómo se identifican las teclas pulsadas a partir del
argumento Shift.
Eventos Relacionados Con El
Ratón.
Click y DblClick.
El evento Click se activa cuando el
usuario pulsa y suelta rápidamente uno de los botones del
ratón. También puede activarse desde código
(sin tocar el ratón) variando la propiedad
Value de uno de los controles. En el caso de un
formulario este evento se activa cuando el usuario clica sobre
una zona del formulario en la que no haya ningún control o
sobre un control que en ese momento esté inhabilitado
(propiedad Enabled = False). En el caso de
un control, el evento se activa cuando el usuario realiza una de
las siguientes operaciones:
- Clicar sobre un control con el botón derecho o
izquierdo del ratón. En el caso de un botón de
comando, de un botón de selección o de un
botón de opción, el evento sucede solamente al
darle un click con el botón izquierdo. - Seleccionar un registro de
alguno de los varios tipos listas desplegables que dispone
Visual Basic. - Pulsar la barra espaciadora cuando el
foco está en un botón de comando, en un
botón de selección o en un botón de
opción. - Pulsar la tecla Return cuando en un
formulario hay un botón que tiene su propiedad
Default = True. - Pulsar la tecla Esc cuando en un
formulario hay un botón que tiene su propiedad
Cancel = True. - Pulsar una combinación de teclas aceleradoras
(Alt + otra tecla, como por ejemplo cuando de despliega
el menú File de Word con
Alt+F) definidas para activar un determinado control de
un formulario.
También se puede activar el evento
Click desde código realizando una de las
siguientes operaciones:
- Hacer que la propiedad Value de un
botón de comando valga True. - Hacer que la propiedad Value de un
botón de opción valga
True - Modificar la propiedad Value de un
botón de selección.
El evento DblClick sucede al clicar dos
veces seguidas sobre un control o formulario con el botón
izquierdo del ratón.
MouseDown, MouseUp y MouseMove.
El evento MouseDown sucede
cuando el usuario pulsa cualquiera de los botones del
ratón, mientras que el evento MouseUp sucede
al soltar un botón que había sido pulsado. El
evento MouseMove sucede al mover el ratón
sobre un control o formulario.
Los eventos MouseUp y
MouseDown tienen algunos argumentos que merecen ser
comentados. El argumento Button indica cuál
de los botones del ratón ha sido pulsado o soltado, y el
argumento Shift indica si además alguna de
las teclas alt, shift o
ctrl está también pulsada. La lista
con todos los posibles valores de estos argumentos se muestra
abajo.
Cte simbólica Valor
Acción Cte simbólica Valor
Acción
vbLeftButton 1 Botón izdo pulsado o soltado
vbShiftMask 1 Tecla SHIFT pulsada
vbRightButton 2 Botón dcho pulsado o soltado
vbCtrlMask 2 Tecla CTRL pulsada
vbMiddleButton 4 Botón central pulsado o soltado
vbAltMask 4 Tecla ALT pulsada
Valores de los argumentos de los eventos
MouseUp y MouseDown
Con estos valores se aplica la aritmética
booleana, lo cual quiere decir que si se pulsan
simultáneamente los botones izquierdo y derecho del
ratón el argumento Button valdrá 3
(1+2) y si
se pulsan las tres teclas shift,
ctrl y alt simultáneamente el
argumento Shift valdrá 7 (1+2+4).
DragOver y DragDrop.
El evento DragOver sucede mientras se
está arrastrando un objeto sobre un control. Suele
utilizarse para variar la forma del cursor que se mueve con el
ratón dependiendo de si el objeto sobre el que se
encuentra el cursor en ese momento es válido para soltar o
no. El evento DragDrop sucede al concluir una
operación de arrastrar y soltar. El evento
DragOver requiere de los argumentos que se muestran
a continuación:
Private Sub Text1_DragOver(Source As Control,
_
X As Single, Y As Single, State As Integer)
…
End Sub
Los argumentos de este evento son Source
que contiene el objeto que está siendo arrastrado,
X e Y que indican la posición
del objeto arrastrado dentro del sistema de
coordenadas del objeto sobre el que se está arrastrando y
State (que es propio del DragOver,
pero no aparece en el DragDrop) que vale 0, 1
ó 2 según se esté entrando,
saliendo o permaneciendo dentro del mismo objeto,
respectivamente. Es importante señalar que el evento
DragOver es propio del objeto sobre el que se
arrastra, no del objeto que es arrastrado.
Agregando Código Al Formulario Y Controlar
Eventos.
Se han mostrados ya las formas generales en las que se
agrega código ejecutable a los procesos que
controlan eventos. Es importante, sin embargo, revisar
explícitamente cómo acceder al marco propio de los
eventos en el cual se sitúa ese código. Esto le
permitirá escoger la forma más rápida y
fácil de acceder al marco de control de los eventos que
necesita para agregar su código. Una vez que aceda al
procedimiento
adecuado para el manejo de los eventos, puede agregar
código con sólo teclearlo en la ventana
Código, como hemos mostrado en los ejemplos anteriormente.
Las prácticas herramientas
del lenguaje le
ayudan a encontrar la sintaxis real en cualquier
situación.
Es importante tener en cuenta, como hemos
señalado antes, que el código realcionado con un
procedimiento
de control de eventos consistirá con frecuencia
simplemente en llamadas a procedimientos.
En este caso los procedimientos
llamados contendrán el código real ejecutable. Una
razón para diseñar un programa de esta forma es que
el mismo procedimiento puede ser llamado desde diferentes
controladores de eventos, simplificando así, abreviando y
aclarando la arquitectura del
programa. Una técnica común es pasar a un
procedimiento llamado desde un controlador de eventos un
parámetro que indique qué controlador lo ha
llamado. La ejecución en el procedimiento le ha llamado
(determinado por el parámetro).
A continuación se indican las tres formas de
"alcanzar" un marco de procedimiento para el manejo de
eventos:
- Asegúrese de que esté abierta la
ventana Proyecto ( si
es necesario, seleccione el Explorador de proyectos en el
menú Ver). Seleccione el formulario al que desee agregar
código de eventos. (Si está agregando un evento a
un control que ha sido situado en un formulario, seleccione al
formulario que se encuentre en el "padre" del control.) Haga
click en el botón Ver código. (También
puede hacer click con el botón derecho en el icono del
formulario y seleccionar Ver Código en el menú de
contexto.) En el cuadro de lista Objeto, seleccione el
formulario o bien otro objeto (por ejemplo, un control) al cual
desee agregar código de evento. A continuación,
desde el cuadro de lista Procedimiento, seleccione el
controlador del procedimiento al que va a agregar
código. Observe que los procedimientos controladores de
código con código adjunto están en negrita
en el cuadro de lista Procedimiento, mientras que los que no
tienen código adjunto no lo están. - Haga
doble click en el formulario al cual desee agregar
código. Realice su selección desde el cuadro de
lista Objeto y desde el cuadro de lista Procedimiento como
acabamos de describir. - Haga click con el botón derecho en el
formulario (Ver figura de abajo). Seleccione Ver código
en el menú emergente. Realice su selección en lo
cuadros de la lista Objeto y Procedimiento como acabamos de
describirlo.
Crear, Disparar Y Manejar Eventos
Personalizados.
Para agregar un evento al módulo
myClass, utilice la instrucción
Event para declarar un evento con los argumentos
que desee. Los eventos deben ser declarados con
Public. Dispare el eventos siempre que los desee
dentro del módulo de clase usando la instrucción
RaiseEvent. Pero asegúrese de suministrar
todos los parámetros requeridos.
Como ejemplo, podría decir, por razones
científicas, agregaré un evento llamado Frodo a mi
módulo myClass. Se dispara Frodo invocando
myMenth, seguido por la aplicación del cuadro de mensaje
myMeth.
A continuación se muestra el código
revisado del módulo myClass son el evento Frodo
agregando:
Option Explicit
Public Event Frodo()
Private thisVal as String
Public Property Get myProp() as Astring
MyProp = thisVal
End Property
Public Property Let myProp(ByVal vNewValue as
String)
if vNewValue <> thisVal Then ThisVal =
vNewValue
end Property
Public Function myMeth()
MsgBox myProp, vbInformation, "Classy!"
RaiseEvent Frodo
End Function
El paso siguiente es acceder al manejador de eventos en
el módulo del formulario que utiliza una instancia de este
módulo de clase.
En la sección de Declaraciones del módulo
del formulario, declare una variable privada del tipo de clase,
usando la palabra clave WithEvents:
Private WithEvents X As myClass
Ahora
puede utilizar la lista desplegable Objeto para acceder al objeto
X. Una vez seleccionado X en la lista desplegable Objeto, puede
acceder al evento Frodo de la lista desplegable Procedimiento,
tal como se muestra en la figura:
Cuando haga click en el evento Frodo de la lista
desplegable Procedimiento, VB crea el código del manejador
de eventos de plantilla.
Private Sub X_Frodo ( )
End Sub
Puede agregar a este evento el código que desee
para comprobar que se ha disparado realmente. Por
ejemplo:
Private Sub X_Frodo ( )
MsgBox "¡Frodo ha sido disparado!".
End Sub
No se puede crear una instancia de una variable objeto
declarada usando la palabra clave WithEvents utilizando la
sintaxis Dim…As New (llamada creación implícita).
En lugar de ello, debe crearla explícitamente, usando la
instrucción Set.
A continuación, se muestra el código
revisado del módulo del formulario que crea una instancia
WithEvents de myClass y responde al disparo de Frodo:
Option Explicit
Private WithEvents X As myClass
Private Sub X_Frodo ( )
MsgBox "¡Frodo ha sido disparado!".
End Sub
Private Sub Form_Click ( )
Set X = New myClass
X.my Prop = "¡Esto es un prueba!"
X.myMeth
End Sub
Si
ejecuta el proyecto y hace
click en el formulario, verá primero el mensaje myMeth. A
continuación, verá el cuadro de mensaje invocado en
el manejador de eventos Frodo, como se muestra en la figura de
abajo:
Eventos Y Propiedades Relacionadas Con
Gráficos
El Evento Paint
El evento Paint se ejecuta cuando un
objeto -de tipo form o pictureBox– se
hace visible. Su finalidad es que el resultado de los
métodos gráficos y del método
print aparezcan en el objeto correspondiente. Hay
que tener en cuenta que si se introducen métodos
gráficos en el procedimiento form_load su
resultado no aparece al hacerse visible el formulario (es como si
se dibujara sobre el formulario antes de que éste
existiera). Para que el resultados de print y de
los métodos gráficos aparezcan al hacerse visible
el formulario, deben introducirse en el procedimiento
paint_form.
También los controles pictureBox
tienen evento paint, que se ejecuta al hacerse
visibles.
El evento Paint tiene mucha importancia en
relación con el refresco de los gráficos y con la
velocidad de
ejecución de los mismos. En los apartados siguientes se
completará la explicación de
este tema.
La Propiedad Drawmode
Esta es una propiedad bastante importante y
difícil de manejar, sobre todo si se quieren realizar
cierto tipo de acciones con los métodos gráficos.
La opción por defecto es la nº 13: Copy
Pen.
La propiedad DrawMode controla cómo
se dibujan los controles line y
shape, así como los resultados de los
métodos gráficos pset,
line y circle. La opción por
defecto hace que cada elemento gráfico se dibuje con el
color
correspondiente (por defecto el foreColor) sobre lo
dibujado anteriormente. En ocasiones esto no es lo más
adecuado pues, por ejemplo, si se superponen dos figuras del
mismo color o si se
dibuja con el backColor, los gráficos
resultan indistinguibles.
Para entender cómo funciona
DrawMode es necesario tener claros los conceptos de
color
complementario y combinación
de dos colores. El color
complementario de un color es el color que sumado con él
da el blanco (&HFFFFFF&). Por ejemplo, el
color complementario del rojo (&H0000FF&)
es el cyan (&HFFFF00&).
El color complementario se puede obtener
mediante la simple resta del color blanco menos el color
original. Por su parte la combinación de dos
colores es el color que resulta de aplicar
el operador lógico Or: el color resultante
tiene sus bits a 1 si alguno o los dos de los colores
originales tiene a 1 el bit correspondiente. La
explicación de los distintos valores de la propiedad
DrawMode que se obtiene del Help es
la siguiente:
Constant Setting Description
VbBlackness 1 Blackness.
VbNotMergePen 2 Not Merge Pen— Inverse of
setting 15 (Merge Pen).
VbMaskNotPen 3 Mask Not Pen — Combination
of the colors common to the
background color and the inverse of the pen.
VbNotCopyPen 4 Not Copy Pen — Inverse of
setting 13 (Copy Pen).
VbMaskPenNot 5 Mask Pen Not — Combination
of the colors common to both the
pen and the inverse of the display.
VbInvert 6 Invert — Inverse of the display
color.
VbXorPen 7 Xor Pen — Combination of the
colors in the pen and in the display
color, but not in both.
VbNotMaskPen 8 Not Mask Pen — Inverse of
setting 9 (Mask Pen).
VbMaskPen 9 Mask Pen — Combination of the
colors common to both the pen
and the display.
VbNotXorPen 10 Not Xor Pen — Inverse of
setting 7 (Xor Pen).
VbNop 11 Nop — No operation — output
remains unchanged. In effect, this
setting turns drawing off.
VbMergeNotPen 12 Merge Not Pen —
Combination of the display color and the inverse
of the pen color.
VbCopyPen 13 Copy Pen (Default) — Color
specified by the ForeColor property.
VbMergePenNot 14 Merge Pen Not —
Combination of the pen color and the inverse of
the display color.
VbMergePen 15 Merge Pen — Combination of
the pen color and the display color.
VbWhiteness 16 Whiteness.
El explicar más a fondo las distintas
aplicaciones de esta propiedad esta fuera del alcance de este
manual
introductorio.
Planos de dibujo
(Layers)
Visual Basic considera tres planos
superpuestos (layers): el plano frontal, el plano
intermedio y el plano de fondo. Es importante saber en qué
plano se introduce cada elemento gráfico para entender
cuándo unos elementos se superpondrán a otros en la
pantalla. En principio, los tres planos se utilizan del siguiente
modo:
1. En el plano frontal
(Front) se dibujan todos los controles,
excepto los controles gráficos y las labels.
2. En el plano intermedio se representan
los controles gráficos y labels.
3. En el plano de fondo se representa el
color de fondo y el resultado de los métodos
gráficos.
Estas reglas tienen excepciones que dependen de la
propiedad AutoRedraw, de la propiedad
ClipControl y de si los métodos
gráficos se utilizan o no asociados al evento
paint.
La Propiedad Autoredraw
Esta propiedad tiene una gran importancia. En principio,
todas las aplicaciones de Windows permiten
superponer ventanas y/u otros elementos gráficos,
recuperando completamente el contenido de cualquier ventana
cuando ésta se selecciona de nuevo y viene a primer plano
(es la ventana activa). A esto se llama redibujar
(redraw) la ventana. Cualquier aplicación que se
desarrolle en Visual Basic debe ser capaz de
redibujarse correctamente, pero para ello el programador debe
conocer algo de la propiedad AutoRedraw.
Por defecto, Visual Basic redibuja siempre
los controles que aparecen en un formulario.Esto no sucede sin
embargo con el resultado de los métodos
gráficos y de print. Para que la
salida de estos métodos se redibuje es necesario adoptar
uno de los dos métodos siguientes:
1. Si en el form o
pictureBox la propiedad AutoRedraw
está en false:
- Si los métodos gráficos y
print están en el procedimiento
correspondiente al evento paint se redibujan en
el plano de fondo (los métodos vuelven a
ejecutarse, por lo que el proceso
puede ser lento en ciertos casos). - Si los métodos gráficos y
print están fuera del evento
paint no se redibujan.
- Si en el form o
pictureBox la propiedad AutoRedraw
está en true
- Si los métodos gráficos y
print están en el evento
paint se ignoran. - Si los métodos gráficos y
print están fuera del evento
paint se redibujan guardando en memoria una
copia de la zona de pantalla a refrescar. Este es la forma
más rápida de conseguir que los gráficos y
el texto se
redibujen. Tiene el inconveniente de necesitar más
memoria.
La propiedad AutoRedraw de los
forms y de las pictureBox es
independiente, por lo que las dos formas anteriores de conseguir
que los gráficos se redibujen se pueden utilizar
conjuntamente, por ejemplo una en el formulario y otra en las
pictureBox.
La Propiedad ClipControl.
Por defecto esta propiedad de las forms y
pixtureBox está en true. En
este caso los controles están siempre por encima de la
salida de los métodos gráficos, por lo que nunca
por ejemplo una línea se dibujará sobre un
botón o una barra de desplazamiento (los controles
están siempre en el plano frontal o en el plano
intermedio, según se ha explicado antes).
Cuando la propiedad ClipControl se pone a
false se produce una doble
circunstancia:
- Los métodos gráficos situados en un
evento paint siempre se dibujan en el plano de
fondo y por tanto respetan los controles. - Los métodos gráficos situados fuera de
un evento paint se dibujan sobre cualquier
elemento que esté en la pantalla, incluidos los
controles.
Conclusión.
La Programación Orientada a Eventos facilitan el
proceso de
programación visual por su practicidad al generar
rápidamente algunas aplicaciones basadas en objetos
visuales. Ayuda al programador novato en el rápido
aprendizaje de
desarrollo de
nuevos pragramas con alta calidad en muy
poco tiempo.
Bibliografía.
Harold Davis. Visual Basic: Los
secretos de Visual Basic: Los
secretos más ocultos y los trucos mejor guardados de la
programación: Foster City, California: Ediciones Anaya
Multimedia S.A.
884 páginas. ISBN = 84-415-0231-5.
Internet =
Internet = http://www.monografias.com
Autor:
armin molas