Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Fecha:
Programa de formación: Técnico en Sistemas Versión 1 Febrero 28 de 2011
Nivel: Técnico Versión 1.0
Sistema de
Gestión de la Página 1 de 16
Calidad GUIA DE ACTIVIDADES DE PROGRAMACIÓN ORIENTADA A EVENTOS
CONCEPTUALIZACIÓN
Vamos a ver en este capítulo como podemos realizar una aplicación en Visual Basic.
Comencemos por abajo.
Una aplicación VB es una aplicación que, generalmente, tiene una interface gráfica. Es decir, es
una aplicación de las típicas de Windows. Y esa interface gráfica está formada por un formulario y
dentro de él, controles. Tanto al formulario como a los controles les denominamos genéricamente
Objetos. Hay objetos VB que no los podemos ver en la interface gráfica. No podemos verlos
porque pese a que son objetos VB, no tienen ninguna representación en la ventana. Son por
ejemplo, los objetos de acceso a datos que veremos profusamente más adelante.
Todos los objetos de Visual Basic tienen Propiedades. (Por ejemplo, el nombre de ese objeto es
una de sus propiedades). Los objetos que tienen parte gráfica tienen además Eventos. Y muchos
de ellos tienen también Métodos
Las propiedades son aquellas características de un objeto que lo define "físicamente", bien por su
forma o color, por su contenido, por la forma en la que va a trabajar… Las propiedades pueden
modificarse cuando estamos diseñando la interface gráfica, mediante lo que llamamos caja de
propiedades, o durante la ejecución del programa. En este caso hay que hacerlo con código
escrito en el propio programa. Veamos ya dos definiciones que se repetirán profusamente a lo
largo del curso
- Tiempo de diseño. Es cuando realizamos una operación durante el diseño. Por ejemplo,
podemos cambiar el color de un control durante el diseño de la aplicación, accediendo a su
propiedad BackColor en la caja de propiedades.
- Tiempo de ejecución. Es cuando esa operación se realiza durante la ejecución del
programa. Si tenemos una línea de código como esta
MiControl.BackColor =RGB(255,0,0)
al ejecutarse esa línea, se cambiará el color del control de nombre MiControl. Hemos cambiado la
propiedad BackColor de ese control en tiempo de ejecución.
Las propiedades pueden ser de lectura y escritura, (se puede cambiar y se puede leer el valor de
la propiedad), sólo de lectura (solamente se puede leer el valor de la propiedad) ó solo de escritura
(hay muy pocas de este tipo). Puede que una propiedad, que es de lectura y escritura en tiempo
de diseño, sea sólo de lectura en tiempo de ejecución (esto es lo que le pasa por ejemplo, a la
propiedad Name - Nombre)
Un evento es todo aquello que le puede ocurrir a un objeto con parte gráfica (Control o
Formulario) Por ejemplo, es un evento el hecho de hacer click sobre ese control, el hecho de
pasar el ratón por encima de él, el hecho de que un control cambie de tamaño…. Los controles
tienen muchos eventos, unos de ellos comunes a casi todos los controles (Evento click, por
ejemplo) y otros exclusivos de un determinado control (El evento Timer solamente lo tiene el
control Timer) Puede ver los eventos de un control haciendo doble click sobre ese control en
tiempo de diseño. Le aparecerá la ventana de código.
La ventana de código es el lugar donde deberá escribir el código de su aplicación. Puede ver que
existen en ella dos listas desplegables, una a la izquierda (sin desplegar) donde se ve el nombre
del control del cual estamos visualizando el código (en este caso Command1) y otra a la derecha,
donde se despliegan todos los eventos que tiene ese control. Haciendo click en la línea de uno de
esos eventos, aparecerá la ventana de código dedicada a ese evento.
Nota. Fíjese en la parte inferior izquierda de la ventana de código. Hay dos botones, uno que
permite visualizar el código correspondiente a un solo evento, (el de más a la izquierda) y otro que
permiten ver en la misma ventana el código de todos los eventos. Cada programador tiene su
costumbre para ver uno o todos. La práctica le dirá lo que es más práctico para Vd.
Estos procedimientos forman parte del programa. Podría hacerse una aplicación que no tuviese
mas código que el introducido en los procedimientos, y muchas veces esa es la realidad.
Un procedimiento puede pasar parámetros. Se dice que pasa parámetros cuando el sistema
aporta datos automáticamente al procedimiento. Por ejemplo, el procedimiento MouseUp, que se
ejecuta cuando levantamos el botón del ratón (también existe el evento MouseDown), pasa los
siguientes parámetros: Número del botón que se ha pulsado, (1=Izdo, 2=Dcho, 3=Central), si está
pulsada la tecla mayúsculas (Shift, 1 si está pulsada, 0 si no está pulsada) y los valores X e Y de
la posición del cursor del ratón. Podemos ver los parámetros que pasa en la propia definición del
procedimiento, que nos da Visual Basic
End Sub
Observe que los parámetros están entre paréntesis, y que queda definido el tipo de variable que
es cada uno de ellos. Podemos usar ese valor dentro del código del procedimiento como un dato
más.
Un Método es una operación que la realiza Visual Basic sin necesidad de escribir código para
realizarla. Por ejemplo, si queremos dibujar una línea en un formulario o en la impresora
utilizaremos el método Line. Si queremos dibujar una circunferencia usaremos el método Circle. Si
queremos escribir texto, utilizaremos el método Print. No necesitamos decirle como lo tiene que
haver, puesto que eso ya lo sabe hacer VB sin necesidad de que se lo expliquemos. A los métodos
les tenemos que pasar datos. A eso le llamamos también pasarle parámetros. Los métodos solo
permiten introducir los parámetros que necesita el método para ejecutarse. (En el caso de una
línea, el punto inicial y el final, en el caso del circulo, el radio y las coordenadas del centro.
Pueden pedir parámetros optativos, como el puede ser el color de la línea o circulo.
Espero que le quede claro cada una de estas definiciones. Tendrá tiempo suficiente a lo largo del
curso para verlas, y dentro de muy poco tiempo le serán muy familiares estos conceptos.
EL FORMULARIO
El primer objeto Visual Basic con que nos encontramos es el FORMULARIO. De hecho, cada vez
que iniciamos Visual Basic (VB) nos presenta en pantalla un nuevo formulario, que tiene por
defecto el nombre de Form1
Fig. 2.3 Un formulario que parece un equipo de radio (Programa realizado por el autor)
Ejemplo de un formulario para una aplicación industrial. Este formulario reproduce el panel de
control de un transmisor - receptor de radio. En este caso, parece que el nombre de ventana le
viene mejor que el de formulario. Observe que dentro del formulario existen gran cantidad de
objetos. Botones, que hacen la misma función que el botón real en el equipo de radio, y un par de
displays, que muestran un texto, en este caso las frecuencias de transmisión y recepción.
Como cualquier objeto Visual Basic, un formulario tiene propiedades, procedimientos y métodos.
Vamos a ver las propiedades del formulario, pero solo veremos las que son específicas para un
formulario. El resto las podrá ver al final del capítulo. Aquí haremos referencia a esas propiedades
con un asterisco (*) que significa que esa propiedad no tiene una notación especial para los
formularios. Seguiremos esta norma con todos los controles.
PROPIEDADES.
Name Nombre
Caption Título
Es el texto que aparecerá en la barra de Título cada vez que aparezca en pantalla este formulario.
No tiene otra función dentro del programa. El programa no accede a este formulario por el título,
sino por el nombre. Puede cambiarse en tiempo de ejecución.
Control Box Menú de Control en la parte sup. Izda. Valor por defecto : True
Propiedad Booleana que admite los valores de true (verdadero) o False (Falso). Si esta propiedad
es True, aparecerá en la esquina superior izquierda el icono (el "menos" en W-3.11) para
desplegar el menú de control de este formulario. Si esta propiedad se pone como False, no
aparece dicho icono y por tanto no se puede desplegar dicho menú.
MinButton
MaxButton Valor por defecto: True
Botones de minimizar y maximizar este formulario. Son igualmente propiedades booleanas, que
admiten el valor True o False. Si están en true, aparecerá la flecha correspondiente. Si están en
False, no aparecerá dicha flecha. Deben configurarse de una u otra forma, dependiendo si se
quiere minimizar / maximizar este formulario durante la ejecución.
Nota. En los formularios MDI child, es necesario poner a true las propiedades ControlBox,
MinButton y MaxButton para poder maximizar el formulario hijo. De no ponerlas a true, sí se
pretende maximizar el formulario hijo, (Propiedad WindowState=2) el formulario no aparece.
Define el tipo de borde que tendrá el formulario durante la ejecución. No se puede cambiar en
tiempo de ejecución. Admite los siguientes valores:
1 - Fixed Single
El formulario tendrá un borde fino, y no podrá cambiarse su tamaño
durante el tiempo de ejecución. Con este valor, el formulario puede tener
un menú de control, barra de título y botones de maximizar y minimizar.
Solo podrá cambiarse de tamaño utilizando estos botones.
2-Sizable
El formulario tendrá borde grueso, y se podrá cambiar su tamaño en
tiempo de ejecución mediante los botones de maximizar y minimizar, y
mediante el arrastre de uno de los bordes con el ratón.
3 - Fixed Dialog
El formulario tendrá borde grueso, y no se podrá redimensionar durante la
ejecución. No puede tener los botones de maximizar ni minimizar.
4 - Fixed ToolWindow
En las versiones de 16 bits de Windows y Windows NT 3.51 y anteriores
se comporta como Fixed Single. No puede cambiar de tamaño. En
Windows 95 muestra el botón Cerrar, y el texto de la barra de titulo
aparece con un tamaño de fuente reducido. El formulario no aparece en la
barra de tareas de W95.
5 - Sizable ToolWindow
En las versiones de 16 bits se comporta como Sizable. En W95 muestra el
botón Cerrar y el texto de la barra de titulo aparece con un tamaño de
fuente reducido. El formulario no aparece en la barra de tareas de W95.
Admite los valores 0 (=Flat, plano) y 1 (=3D) Si tiene el valor 1 (3D), el formulario aparecerá con
cierto efecto tridimensional, y los controles que le introduzcamos a este formulario aparecerán
como esculpidos dentro de él. Con valor 0 (Flat) en esta propiedad, el formulario aparecerá
durante la ejecución como una superficie plana. El color de fondo se ve afectado al cambiar esta
propiedad. Si se cambia a 3D, el fondo (Backcolor) toma el color definido en Windows en el Panel
de Control. Si se cambia a Flat, toma el color blanco
Propiedad Booleana. Esta propiedad, estando en True, permite actualizar el contenido del
formulario y de sus controles incluso cuando no están visibles. Imaginemos que en este formulario
existe un texto, que se haya cambiado por programa mientras este formulario no estaba visible. Si
esta propiedad Autoredraw está en False, al hacer visible este formulario, aparecerá sin reflejar
ese cambio. Si esta propiedad está en True, aparecerá actualizado.
Establece el color del fondo del formulario. Puede cambiarse en tiempo de ejecución.
Propiedad Booleana. Establece si un evento Paint vuelve a dibujar el objeto entero (True) o si
solamente dibujan las partes que han sufrido cambios (False)
DrawMode
Enabled (*)
Establece el color del primer plano del formulario. Es el color que tendrán las letras si escribimos
en él, o los dibujos, si lo que hacemos es dibujar. En tiempo de diseño, determina el color de la
rejilla,.
Especifica el tipo y tamaño de la letra que se usará en el formulario al utilizar el método Print. Al
seleccionar esta propiedad en la ventana de propiedades, aparece un cuadro de dialogo donde se
eligen ambos parámetros.
Cuando introduzca nuevos controles en el Formulario, la propiedad Font de estos controles tomará
el valor que tenga esta propiedad en el Formulario. Puede servirle este pequeño truco para utilizar
en todos los controles una determinada fuente sin tener que teclearla para cada control.
Establece si el texto o gráfico de fondo del formulario se muestra (True) o no se muestra entre los
caracteres de texto escritos en el propio formulario.
Icon Icono
Esta propiedad define el icono que va a representar a este formulario cuando esté minimizado. Si
el formulario es el formulario padre o formulario de inicio de una aplicación, este icono es el que
toma el Asistente de Instalación para colocarlo como icono de apertura del programa en el grupo
de programas Windows correspondiente. Como valor de esta propiedad se le puede asignar
directamente el icono o el nombre de un archivo (con su path correspondiente) que lo contiene,
haciéndolo directamente sobre la caja de propiedades.
Propiedad Booleana. Cuando un formulario tiene dentro de sí varios controles, uno de ellos es el
que está activo. En estas condiciones, si se pulsa una tecla, esa pulsación la recibe en primer
lugar el control que esté activo, y si éste no la procesa, pasa esa pulsación al formulario. Para
hacer que esa pulsación pase previamente por formulario, debe ponerse esta propiedad en True.
Esta propiedad la usará frecuentemente cuando quiera realizar alguna función pulsando una letra.
Pone KeyPreview a True, y puede conocer que tecla se ha pulsado en el procedimiento KeyPress
del formulario. Si la tiene a False, ese procedimiento no se ejecuta ya que la pulsación “no pasa”
por el formulario.
Indica la posición del borde izquierdo del formulario respecto a la parte izquierda de la pantalla.
(Lo verá mas adelante, la pantalla será para VB el objeto Screen). Normalmente no se introduce
como valor numérico, sino que lo toma automáticamente de la posición que tenga el formulario en
el tiempo de diseño. Puede cambiarse en tiempo de ejecución, para mover el formulario.
Permite que una aplicación destino inicie una conversación DDE con el formulario (origen de
datos). Puede tomar los siguiente valores:
1 - Source. Indica que este Formulario es origen de una comunicación DDE. El dato que
se va a traspasar en esa comunicación DDE estará en un TextBox, en un Label o en un
PictureBox de este Formulario.
LinkTopic
Establece el tema al que este formulario va a responder a una conversación DDE, cuando
funciona como origen. Es por este tema por el que se debe llamar a este formulario cuando actúa
de origen en una conversación DDE
Establece que este formulario es un formulario Hijo dentro de un formulario MDI. No se puede
cambiar en tiempo de ejecución. Es una propiedad Booleana
MouseIcon (*)
Picture Gráfico
Mediante esta propiedad podemos poner un gráfico como fondo del formulario. El gráfico puede
ser un bit-map o un fichero .ICO
Indican la unidad de medida de dimensión de altura y anchura del Formulario. ScaleMode indica
en qué unidades de medida se van a medir esas dimensiones. Acepta Twips (1), Point(2), Pixel
(3), Character (4), Pulgadas (Inch) (5), Milímetros (6), Centímetros (7). Si colocamos la propiedad
ScaleMode en cualquiera de estos valores, las propiedades ScaleHeight y ScaleWidth nos
vendrán dadas automáticamente dependiendo del ancho del Formulario, y no se extrañe si
encuentra para estas propiedades valores tan peregrinos como 4815 y 7423. Al haber elegido la
unidad de medida, los valores de ancho (ScaleWidth) y alto (ScaleHeight) serán los que tengan
que ser, medidos en la unidad que hemos elegido. Podemos elegir una cifra para el ancho y el alto
del Formulario de forma que podamos controlar mejor las distintas posiciones que van a ocupar en
él los controles, los textos o los dibujos. Podemos poner, por ejemplo, que el Formulario mida 400
de ancho (ScaleWidth = 400) y 300 de alto (ScaleHeight = 300) forzándole estas propiedades,
bien en tiempo de diseño en la caja de propiedades, o en tiempo de ejecución mediante código.
Entonces sabemos que el formulario, independientemente de las dimensiones físicas que tenga
sobre la pantalla, medirá 400 de ancho y 300 de alto, y si en estas condiciones queremos colocar
un control o un dibujo justo en el medio del Formulario, sabemos que tenemos que colocarle en
las coordenadas 200, 150. ¿Que unidad de medida estaremos utilizando entonces en el
Formulario ? Unas definidas por el usuario (distintas para el ancho y el alto) que serán las
necesarias para que el Formulario mida de ancho lo que le hayamos puesto en la propiedad
ScaleWidth y de alto lo que le hayamos puesto en la propiedad ScaleHeight. Observe que la
propiedad ScaleMode se ha cambiado automáticamente a User (0) al introducir las dimensiones
de ancho y alto que nosotros queremos.
Estas unidades de medida afectarán a los controles que metamos en este Formulario. Se medirán
en su ancho y alto con la unidad de medida definida para el ancho y alto del Formulario.
Lógicamente también afectará a las propiedades Left y Top de los controles, pero estas
propiedades se verán afectadas además por las propiedades ScaleLeft y ScaleTop del
Formulario que se verán a continuación.
ScaleLeft, ScaleTop
Estas propiedades, medidas en la unidad de medida elegida para el ancho y alto mediante las
propiedades ScaleMode, ScaleWidth y ScaleHeight anteriores, expresan las coordenadas
iniciales de la parte izquierda y de la parte superior respectivamente del Formulario. Estas
propiedades no afectan a la posición del Formulario en la pantalla (Si está maximizado seguirá
ocupando toda la pantalla, si está en “Normal” ocupará el mismo sitio que se dio en tiempo de
diseño). Supongamos que se le asigna a un Formulario, las propiedades ScaleWidth = 400, y
ScaleHeight = 300. Si colocamos un control justamente en el centro del Formulario tendrá sus
propiedades Top =150 y Left=200. Si ponemos ahora las propiedades del Formulario ScaleLeft a
30 y ScaleTop a 10, ese control, para seguir en el centro del Formulario deberá tener sus
propiedades Top a 160 (150 + 10) y Left a 230 (200 + 30).
Recuerde que las medidas de un formulario crecen, desde la esquina superior izquierda, según
avanzamos hacia abajo y hacia la derecha.
Como aclaración de las relaciones entre distintas unidades de medida, puede ver en la siguiente
table la correspondencia entre cada una de ellas y la unidad imaginaria Twip.
1 Point=20 Twips ; 1Pixel=15 Twips : 1 Charecter=240 Twips ; 1 Inch (pulgada) =1440 Twips
1mm=56,52 Twips 1 cm=566 Twips
Tag (*)
Esta propiedad establece la posición del borde superior del formulario respecto a la parte superior
de la pantalla (Objeto Screen). Normalmente no se introduce como valor numérico sino que lo
toma automáticamente de la posición que tenga el Formulario durante el tiempo de diseño Este
valor puede cambiarse durante la ejecución para, conjuntamente con Left, variar la posición del
Formulario. Los valores de Top y Left definen la esquina superior izquierda del Formulario.
WindowState
Este evento ocurre cuando el formulario toma el foco. Cosa un poco difícil, ya que para que el
formulario tome el foco debe ocurrir, o que no tenga ningún control capaz de tomar el foco, o que
todos los controles existentes en el formulario y que puedan tomar el foco, estén desactivados. No
se suele usar este procedimiento.
Se produce al cargar por primera vez el formulario. Esto significa que si en una aplicación
cargamos ese formulario una vez (la primera) se realiza este evento, pero si descargamos el
formulario (con Unload Formxx) y luego lo volvemos a cargar (con Formxx.Show), esta segunda
vez (y sucesivas) no se produce este evento
Estos tres procedimientos son excluyentes y tienen la jerarquía con el orden siguiente: KeyDown,
KeyPress y KeyUp. Si el procedimiento KeyDown tiene código que pueda realizar una operación,
no se ejecutará el procedimiento KeyPress ni el KeyUp. Si es el procedimiento KeyPress quien
tiene el código que ejecuta una operación, no se ejecutará el KeyUp. Para que realice esta
exclusión es necesario que el código pueda realizar alguna operación.
KeyCode es el código ASCII de la tecla pulsada. KeyAscii es el código ASCII de la tecla pulsada.
La diferencia entre KeyCode y KeyAscii es que el primero se refiere a las teclas del teclado (Todas
las letras y números, teclado numérico, Alt, F1 a F12, etc.) mientras que KeyAscii solamente tiene
valor cuando se pulsa una tecla de letra o número. Puede observar que el KeyCode de un número
tecleado en el teclado numérico es distinto del KeyCode de ese mismo número pulsado en el
teclado alfanumérico. No se confunda con el hecho de que el KeyCode de algunas teclas coincida
con el KeyAscii. No es lo mismo.
Shift indica si está pulsada la tecla “Mayúsculas”. Contiene un 1 si está pulsada, 0 si no lo está.
Estos tres procedimientos ocurren cuando el formulario forma parte de un enlace DDE. Vea el
capítulo del DDE para mas detalles.
formulario (X e Y). Este evento puede usarse para muchas cosas. Una de ellas, muy típica, iniciar
una operación de Drag & Drop manual, usando la particularidad de que como pasa la tecla Shift
como parámetro, puede obligarse a pulsar esa tecla para iniciar el D & D, evitando así cualquier
activación accidental.
Cancel es un parámetro que debemos introducir para abortar la descarga del formulario. Si se
pone a un valor distinto de 0, se detiene la descarga.
Constante Valor
vbFormControlMenu 0 El usuario eligió el comando Cerrar del menú Control del
formulario o hizo click en el X del mismo.
vbFormCode 1 Se invocó la instrucción Unload desde el código.
vbAppWindows 2 La sesión actual del entorno operativo Microsoft Windows
está finalizando.
vbAppTaskManager 3 El Administrador de tareas de Microsoft Windows está cerrando la
aplicación.
vbFormMDIForm 4 Un formulario MDI hijo se está cerrando porque el
formulario MDI padre también se está cerrando.
Se ejecuta cuando cambia el tamaño del Formulario, bien porque le cambia con las flechas del
ratón arrastrando uno de sus bordes, bien porque lo maximizamos, ponemos a tamaño intermedio
o minimizamos. Puede usar este evento para redistribuir o cambiar el tamaño de los controles. No
pasa parámetros.
Evento Terminate
Este evento no se produce si sale de la aplicación con la instrucción End. Solamente si lo hace
mediante Unload (Unload Me, p.e.) o con el comando Cerrar o el X del formulario. Me permito
recomendarle que No termine sus aplicaciones mediante End. No podrá usar los eventos
QueryUnload, Unload ni Terminate.
Este evento se produce en el momento en el que se descarga el formulario. Pasa como parámetro
Cancel, al igual que lo hace QueryUnload. Es la última oportunidad de cancelar la descarga del
formulario, haciendo Cancel = True o Cancel = cualquier valor distinto de 0.
Existen varios eventos relacionados con el OLE de Windows. Se estudiarán cuando se estudie el
OLE. De momento se enumeran con los parámetros que pasan.