visual basic cap. 3

35
Capítulo 3 – Entorno y Lenguaje de Programación 13/09/05 _____________________________________________________________________________________________ __________________________________________________________________________________________ [email protected] Página 369 3.12 Diseño de Aplicaciones en Visual Basic 6.0 Aunque el entorno visual interactivo de Visual Basic, y similares, posee una serie de herramientas integradas en una interfaz gráfica de usuario, es preciso tener en cuenta una serie de elementos para efectuar el diseńo, y realizar una serie de etapas metodológicas para diseńar una aplicación (o proyecto). Como primer elemento del diseńo está el algoritmo, previamente elaborado, en su versión final refinada. Dicho algoritmo guía el diseńo en el entorno visual. Cada bloque lógico de construcción del algoritmo ha de tener su correpondencia en el diseńo visual que se realice. Un segundo elemento lo conforma el formulario básico de diseńo. Normalmente, un proyecto en Visual Basic tiene por lo menos un formulario; sin embargo, muchas aplicaciones se estructuran utilizando varios formularios. Un tercer elemento está conformado por los diferentes controles (objetos) que se pueden manejar y ubicar convenientemente en los formularios de diseńo. En la caja de herramientas se visualizan los controles estándar; muchos otros se pueden insertar en la misma pestańa General o en otras pestańas que se adicionen. Las etapas metodológicas se categorizan entres tiempos diferentes: el tiempo de diseńo, el tiempo de ejecución, y el tiempo de depuración. El tiempo de diseńo implica diseńar la interfaz, establecer las propiedades y escribir el código fuente (los programas). Además, el diseńo de un proyecto en Visual Basic implica utilizar una serie de principios. Algunos de ellos son los siguientes: Ante todo, está el estilo y el criterio personal. La distribución y combinación de los objetos obedece al criterio del diseńador. La combinación de colores refleja los gustos y particularidades de quien diseńa. Esto es así, debido a que esta parte del desarrollo de una aplicación, mediante un ambiente visual interactivo, posee mucho de arte, de inteligencia empírica (o artesanal). No obstante, el manejo del color es crucial. Existe toda una teoría del color (la cromatología) y de sus impactos en las personas. Como regla general, se recomienda no utilizar colores demasiados fuertes ni combinaciones extravagantes. Los principios del diseńo gráfico son igualmente aplicables. Los tipos de las fuentes, sus colores y tamańos pueden determinar buena parte del impacto de una interfaz. La amigabilidad del software que se está desarrollando es un factor muy importante del diseńo. En los ambientes empresariales, siempre ha de tenerse en cuenta al usuario final de la aplicación, pues es el que estará interactuando con la misma buena parte de su jornada diaria de trabajo.

Upload: gabrielk10

Post on 05-Dec-2014

40 views

Category:

Documents


9 download

TRANSCRIPT

Capítulo 3 – Entorno y Lenguaje de Programación 13/09/05 _____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 369

3.12 Diseño de Aplicaciones en Visual Basic 6.0

Aunque el entorno visual interactivo de Visual Basic, y similares, posee una serie de herramientas integradas en una interfaz gráfica de usuario, es preciso tener en cuenta una serie de elementos para efectuar el diseńo, y realizar una serie de etapas metodológicas para diseńar una aplicación (o proyecto).

Como primer elemento del diseńo está el algoritmo, previamente elaborado, en su versión final refinada. Dicho algoritmo guía el diseńo en el entorno visual. Cada bloque lógico de construcción del algoritmo ha de tener su correpondencia en el diseńo visual que se realice.

Un segundo elemento lo conforma el formulario básico de diseńo. Normalmente, un proyecto

en Visual Basic tiene por lo menos un formulario; sin embargo, muchas aplicaciones se estructuran utilizando varios formularios.

Un tercer elemento está conformado por los diferentes controles (objetos) que se pueden manejar y ubicar convenientemente en los formularios de diseńo. En la caja de herramientas se visualizan los controles estándar; muchos otros se pueden insertar en la misma pestańa General o en otras pestańas que se adicionen.

Las etapas metodológicas se categorizan entres tiempos diferentes: el tiempo de diseńo, el tiempo de ejecución, y el tiempo de depuración. El tiempo de diseńo implica diseńar la interfaz, establecer las propiedades y escribir el código fuente (los programas).

Además, el diseńo de un proyecto en Visual Basic implica utilizar una serie de principios. Algunos de ellos son los siguientes:

Ante todo, está el estilo y el criterio personal. La distribución y combinación de los objetos obedece al criterio del diseńador. La combinación de colores refleja los gustos y particularidades de quien diseńa. Esto es así, debido a que esta parte del desarrollo de una aplicación, mediante un ambiente visual interactivo, posee mucho de arte, de inteligencia empírica (o artesanal).

No obstante, el manejo del color es crucial. Existe toda una teoría del color (la cromatología) y de sus impactos en las personas. Como regla general, se recomienda no utilizar colores demasiados fuertes ni combinaciones extravagantes.

Los principios del diseńo gráfico son igualmente aplicables. Los tipos de las fuentes, sus colores y tamańos pueden determinar buena parte del impacto de una interfaz.

La amigabilidad del software que se está desarrollando es un factor muy importante del diseńo. En los ambientes empresariales, siempre ha de tenerse en cuenta al usuario final de la aplicación, pues es el que estará interactuando con la misma buena parte de su jornada diaria de trabajo.

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem 13/09/05 [email protected]

Capítulo 3 – Entorno y Lenguaje de Programación Página 370

Diseńo de la interfaz La interfaz es el medio básico de comunicación entre el usuario y el algoritmo que se diseńó. En Visual Basic, la interfaz consta de uno o más formularios sobre los cuales se ubican y organizan los diferentes objetos que representan las operaciones del algoritmo que se está implementando. La figura siguiente es un ejemplo de una interfaz típica en Visual Basic.

Figura 3.37 Una interfaz sencilla

Los diferentes controles (labels, cajatexto, botonescomando, frames) se encuentran en la caja de herramientas, desde donde se pueden traer, ubicar y organizar en el formulario de diseńo. El conjunto de controles, incluyendo al formulario, es la sociedad de objetos que implementa el algoritmo diseńado. Y aunque la interfaz mostrada es muy simple y no está totalmente refinada, es un buen ejemplo de interfaz en Visual Basic. Cuando un objeto, como el frame de la figura, tiene los

recuadritos obscuros alrededor de su perímetro, significa que dicho objeto (o control) es el objeto activo, el que tiene el enfoque. Sobre dicho objeto se pueden efectuar, entonces, las operaciones de establecer las propiedades y de escribir el código fuente (programas) pertinentes. Es posible alinear los controles que se encuentran agrupados, utilizando la opción Format de la barra del menú principal. Para seleccionar a la vez varios controles que se quieran alinear, se sostiene la tecla Control y se va haciendo click sobre ellos; así quedan seleccionados; luego, se emplea la opción Align del menú Format para escoger el tipo de alineamiento a establecer. Es conveniente que las cajastexto queden sin ningún mensaje en su interior; para ello se debe dejar en blanco la propiedad Text.

Establecer las propiedades Cada uno de los objetos de una interfaz en Visual Basic tiene una serie de características, o atributos, llamadas genéricamente propiedades. En el enfoque orientado a objetos, los diversos objetos de una aplicación tienen incrustados, def forma estándar, muchos de los datos que manejan. Dichos datos se visualizan como propiedades en Visual Basic. La ventana de propiedades lista, precisamente, las propiedades para cada uno de los objetos de la interfaz. Como ya se explicó en secciones anteriores, hay propiedades cuyos efectos se ven tanto a tiempo de diseńo como a tiempo de ejecución (por ejemplo: Caption, BackColor); también hay propiedades cuyos objetos sólo se visualizan a tiempo de ejecución (por ejemplo: WindowState). En la figura siguiente se muestra la correspondencia entre los objetos de la interfaz y la ventana de propiedades.

Capítulo 3 – Entorno y Lenguaje de Programación 13/09/05 _____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 371

Figura 3.38 Establecer las propiedades de los objetos El objeto que tiene el enfoque en la interfaz, el Frame2, es el que aparece activo en la casilla de objetos de la ventana de propiedades. Si de dicha casilla se selecciona otro objeto, éste aparecerá con el enfoque en la interfaz.

Escribir el código fuente El código fuente (o programas) es el mecanismo mediante el cual se le da las funcionalidades del

algoritmo a los diferentes objetos de la interfaz. No todos los objetos requieren programación explícita. De todas formas, por el solo hecho de aparecer en la interfaz, un objeto ya posee una programación implícita automática que el mismo entorno de Visual Basic realiza. Figura 3.39 Un Programa Para escribir los programas se emplea el editor de programas. Se llega a la ventana del editor de programas haciendo doble-click en un objeto específico. En la figura siguiente se muestra el programa para el objeto Command1, el primer botón de comando de la interfaz arriba descrita (el botón con el mensaje Leer Datos).

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem 13/09/05 [email protected]

Capítulo 3 – Entorno y Lenguaje de Programación Página 372

En la ventana mostrada en la figura 3.39, inmediatamente debajo de la barra de título y control, se encuentran dos cajalista (cajas de texto que despliegan una lista); la flecha hacia el extremo de cada cajalista permite desplegar la lista respectiva. La cajalista de la izquierda permite seleccionar los diferentes objetos de la interfaz. La cajalista derecha sirve para escoger los diversos eventos asociados con un objeto específico; cada evento se maneja por medio de un procedimiento. Todo proyecto en Visual Basic consta de una serie de procedimientos. Cada procedimiento implementa por lo menos una funcionalidad del algoritmo. El formato básico de todo procedimiento se inicia con Private Sub y finaliza con End Sub; entre estos dos van las diferentes instrucciones según la lógica del algoritmo. En este ejemplo se leen los valores numéricos de entrada, con verificación del rango válido; además, se emplea una rutina de control de errores atrapables.

Ejecución y depuración Una vez se han elaborado los programas para cada uno de los objetos que asó lo requieran, se puede entrar al tiempo de ejecución con el fín de que efectivamente se ejecuten las secuencias de instrucciones de los procedimientos. Es posible que se presenten errores al ejecutar un programa. La figura siguiente ilustra el mensaje que despliega Visual Basic cuando se presenta un error de desbordamiento en la ejecución de un proyecto.

Figura 3.40 Ventana de los mensajes de Depuración Mediante el botón End se termina la interacción con el proyecto; con el botón Debug se entra al modo de depuración que permite ubicar la instrucción donde se ha presentado el error y realizar los correctivos dle caso; mediante el botón Help se visualiza una explicación del error y de los posibles cursos de acción a tener en cuenta para subsanar tal error.

Capítulo 3 – Entorno y Lenguaje de Programación 13/09/05 _____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 373

3.13 Validar datos en Visual Basic 6.0 Los temas que comprende esta sección son los siguientes:

Validación de datos a nivel de campo, utilizando InputBox(), ciertas propiedadesde algunos controles, y las funciones de verificación de datos.

Uso de los eventos KeyPress, KeyUp, LostFocus y KeyDown para validar datos. Emplear el control Microsoft MaskedEditBox para validar datos con máscaras de entrada

de datos. Validación de datos a nivel de formulario. Creación y uso de controles en VisualBasic para el diseńo de la interfaz de una aplicación

(o proyecto). Para la gran mayoría de programas que se escriben con VisualBasic es preciso ingresar datos que requieren verificación de sus tipos o de sus rangos de valores, para que los otros procesos algorítmicos no generen errores. Tal proceso se llama Validación de los datos. Hay diversas técnicas que permiten validar los datos, que van desde la interceptación de pulsaciones de tecla individuales a la validación de todos los datos de un formulario cuando un usuario hace clic en el botón "Aceptar". Los objetivos básicos de este capítulo incluyen la creación de proyectos en VisualBasic que:

• Verifiquen los datos de campo y de formulario introducidos por un usuario. • Utilicen el control de edición con máscara. • Habiliten o inhabiliten los controles que se basan en valores introducidos en los

campos.

Validación de datos a nivel de campo Una aplicación bien diseńada debe evitar tantos errores de entrada de datos como sea posible. Por ejemplo, si necesita un valor numérico, cree un campo que sólo acepte números. El usuario no podrá escribir ninguna letra. Esta sección explica diversas técnicas para validar datos en un campo, que incluyen la utilización de la función InputBox, la definición de propiedades, la utilización de los eventos del teclado y la utilización del control de edición con máscara. Usar InputBox La función InputBox muestra un cuadro de diálogo estándar que solicita al usuario que escriba una cadena. Cuando el usuario hace clic en "Aceptar" o presiona ENTRAR, la función InputBox devuelve el contenido del cuadro de texto. Si el usuario hace clic en "Cancelar", InputBox devuelve una cadena vacía (""). Este ejemplo utiliza una función InputBox dentro de una instrucción Do...Loop para pedir al usuario que escriba una fecha válida.

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem 13/09/05 [email protected]

Capítulo 3 – Entorno y Lenguaje de Programación Página 374

Private Sub cmdGetDate_Click()

Do StartDate = InputBox("Escriba una fecha inicial") If IsDate(StartDate) Or StartDate = "" Then ValidDate = True Else ValidDate = False MsgBox "Escriba una fecha válida: dd/mm/aa" End If

Loop Until ValidDate End Sub

Este código muestra un cuadro de entrada tal como aparece a continuación, en la figura 3.41. Figura 3.41. Validación de un dato tipo fecha Ejemplo de evntana generada con la función InputBox() en Visual Basic 6.0.

Usar las propiedades para restringir la introducción de datos Se puede evitar algunos errores de entrada de datos y mejorar la forma en que se utiliza la aplicación con sólo definir, para un objeto específico, varias propiedades tal como se muestra en el diagrama de la figura 3.42.

Figura 3.42 Definir propiedades para la entrada de datos Los valores de las propiedades para los diferentes objetos (controles) de esta ventana de diálogo son los que se resaltan. Dichos valores se pueden establecer a tiempo de diseño o a tiempo de ejecución.

Algunas de las propiedades, comunes a muchos controles son: MaxLength, PassWordChar, Default, Cancel, Locked.

Capítulo 3 – Entorno y Lenguaje de Programación 13/09/05 _____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 375

Propiedad MaxLength La propiedad MaxLength determina la longitud máxima del texto permitido en un cuadro de texto. El sistema emite un pitido cuando el usuario intenta escribir más allá de la longitud máxima. Si desea que se muestre un mensaje de error, deberá interceptar la pulsación de tecla en el evento KeyPress o bien utilizar el control de edición con máscara, procedimientos que se tratarán posteriormente en este mismo capítulo.

Propiedad PasswordChar La propiedad PasswordChar determina el carácter que debe mostrarse a medida que el usuario escribe el texto en un cuadro de texto. Aunque puede utilizarse cualquier carácter, la mayoría de las aplicaciones basadas en Windows utilizan el carácter asterisco (*), que es el carácter Chr(42). Esta propiedad no afecta a la propiedad Text; la propiedad Text contiene exactamente lo que el usuario escribe o lo que se ha establecido. Propiedad Default Si la propiedad Default de un botón de comando es True, el evento Click de ese botón se ejecuta cuando el usuario presiona ENTRAR . Sólo uno de los botones de comando de un formulario puede tener la propiedad Default establecida a True.

Propiedad Cancel Si la propiedad Cancel de un botón de comando es True, el evento Click de ese botón se ejecuta cuando el usuario presiona ESC en el formulario. Sólo uno de los botones de comando de un formulario puede tener la propiedad Cancel establecida a True. Propiedad Locked La propiedad Locked determina si los usuarios pueden modificar los datos de un cuadro de texto. Si Locked es True, los usuarios sólo podrán ver los datos de un cuadro de texto.

Usar Eventos para el control de datos Algunos eventos permiten efectuar ciertos controles con respecto a los datos. Particularmente, son muy útiles los eventos Keypress, KeyUp, LostFocus y KeyDown. Usar KeyPress para modificar las pulsaciones de teclas Puede utilizar los eventos del teclado para validar datos a medida que el usuario los escribe. Puede evitar que el usuario escriba ciertos caracteres, por ejemplo, limitando la entrada a sólo números. También puede modificar los datos a medida que se escriben, por ejemplo, convirtiendo los caracteres en mayúsculas. El evento KeyPress tiene lugar siempre que el usuario escribe un carácter ASCII estándar. Esto no incluye la mayoría de las teclas especiales, como las teclas de función, las teclas de dirección o la tecla SUPR. Para responder a esas teclas, utilice los eventos KeyDown y KeyUp. Uso de KeyPress para validar datos

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem 13/09/05 [email protected]

Capítulo 3 – Entorno y Lenguaje de Programación Página 376

En el ejemplo siguiente, los caracteres se convierten en mayúsculas a medida que el usuario los escribe:

Sub Text1_KeyPress (KeyAscii As Integer) KeyAscii = Asc(UCase(Chr(KeyAscii)))

End Sub En este ejemplo de código se evita que el cuadro de texto reciba caracteres que no sean dígitos.

Sub Text1_KeyPress (KeyAscii As Integer) If KeyAscii = 8 Then 'Permitir el uso de RETORNO Exit Sub End If 'Los únicos caracteres válidos son los dígitos. If Chr(KeyAscii) < "0" Or Chr(KeyAscii) > "9" Then KeyAscii = 0 'Poner a null si está fuera del intervalo. Beep End If End Sub

Para obtener una lista de los valores ASCII, vea "ASCII" en la Ayuda, o en la sección 3.7, tabla 3.1. Uso de KeyUp y KeyDown para validar datos Utilice los eventos KeyUp o KeyDown para interceptar teclas de funciones y teclas que no provoquen un evento KeyPress. Los eventos KeyUp y KeyDown se desencadenan cuando se produce cualquier actividad del teclado. Tanto KeyUp como KeyDown proporcionan un código de tecla que identifica de forma exclusiva a una tecla del teclado y un argumento que indica si se han presionado las teclas MAYÚSCULAS, ALT o CONTROL. En este ejemplo de código se utiliza el evento KeyDown para verificar la tecla F1.

Sub Text1_KeyDown (KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyF1 Then MsgBox "ˇHa presionado F1!" End If End Sub

Visual Basic proporciona las constantes de los códigos de tecla. Para ver las constantes de los códigos de tecla disponibles, elija F2 para mostrar el Examinador de objetos, después elija los objetos y procedimientos de VB - Visual Basic del cuadro de lista "Bibliotecas/Proyectos" y por último elija KeyCodeConstants en el cuadro de lista "Clases/Módulos".

Capítulo 3 – Entorno y Lenguaje de Programación 13/09/05 _____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 377

Figura 3.43. Constantes de los códigos de tecla, predefinidas en Visual Basic 6.0.

Usar control de edición con máscara para el control de datos VisualBasic proporciona ciertos controles especiales, construídos por Microsoft o por otros fabricantes, que permiten realizar controles de edición con formatos específicos a los datos, lo que usualmente se denomina edixión con máscara. El control MaskedEditBox La edición Profesional de Visual Basic incluye un control de edición con máscara, que proporciona una introducción de datos restringida, así como una salida de datos con formato. Utilice el control de edición con máscara para crear fácilmente formularios que requieran datos en formatos específicos. Para agregar un control de edición con máscara a la Caja de herramientas (Versión 4.0): 1. En el menú Herramientas, elija Controles personalizados. 2. Seleccione "Microsoft Masked Edit Control" y haga clic en el botón "Aceptar".

Para agregar un control de edición con máscara a la Caja de herramientas (Versiones 5.0, 6.0):

En el menú Proyecto, elija Componentes (o haga click derecho sobre la caja de herramientas, en un espacio que no tenga controles, y del menú contextual escoja Componentes). Seleccione "Microsoft Masked Edit Control" y haga clic en el botón "Aceptar".

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem 13/09/05 [email protected]

Capítulo 3 – Entorno y Lenguaje de Programación Página 378

En la figura 3.44 se muestra la apariencia física del control de edición de máscaras, tanto para la versión 4.0 de Visual Basic, como para las versiones 5.0, 6.0.

Figura 3.44 Control para la edición de máscaras. Este objeto facilita la validación de datos en las aplicaciones de Visualbasic (versiones 4.0, 5.0, 6.0).

Propiedades importantes Hay varias propiedades del control de edición con máscara que se pueden manipular para restringir la entrada y salida de datos. Este diagrama ayuda a clarificar estos conceptos de forma visual.

Figura 3.45. Ejemplo del uso del Control para edición con máscaras.

Propiedad Mask

Puede definir una máscara de entrada utilizando la propiedad Mask. La posición de cada carácter del control de edición con máscara se asigna a un marcador de posición de un tipo especificado o un carácter literal. Puede escribir sus propias máscaras utilizando los caracteres especiales para las máscaras o una de las máscaras predefinidas. Algunos caracteres de máscara indican una entrada obligatoria. Por ejemplo la máscara "#" indica una entrada numérica obligatoria. Se produce un evento ValidationError si el usuario cambia de campo sin escribir ningún valor válido. La máscara "9" es un valor numérico opcional. El usuario puede cambiar de campo sin escribir ningún número.

Propiedades ClipText y Text

La propiedad Text de un control de edición con máscara devuelve los datos que el usuario ha escrito, junto con la máscara. La propiedad ClipText del control devuelve sólo los datos que ha escrito el usuario. Propiedad AutoTab

Capítulo 3 – Entorno y Lenguaje de Programación 13/09/05 _____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 379

Si AutoTab es True y el usuario llena un control con el número máximo de caracteres, el siguiente carácter que escriba hará que el enfoque se desplace al siguiente control, donde aparecerá el carácter. Si AutoTab es False, el usuario deberá presionar ENTRAR o TAB para desplazarse al control siguiente. Borrado de un control de edición con máscara En el ejemplo siguiente se borra un campo de edición con máscara: mskEmpID.Text = "___-___" 'Coincidir con campo de máscara exactamente Evento ValidationError Si el usuario escribe un carácter no válido respecto a la máscara de entrada, deberá proporcionarle cierta información para indicarle el error. Para proporcionar información de retorno puede colocar el código en el evento ValidationError. El evento ValidationError se produce si el usuario escribe un carácter no válido o sale del control de edición con máscara sin escribir los caracteres necesarios. Si intenta asignar una cadena a un control de edición con máscara y la cadena representa una infracción respecto a la máscara, se produce un evento ValidationError y un error en tiempo de ejecución (por este orden). La cadena no se asigna al control. El control de edición con máscara conserva el valor que tenía antes de que se intentara la asignación. Esto podría suceder si está leyendo información de una base de datos y ésta entra en conflicto con la máscara. Argumentos: El evento ValidationError ofrece dos argumentos: InvalidText La cadena que no es válida. StartPosition La posición del carácter no válido. Ejemplo En este ejemplo de código, el mensaje de error "Límite de 6 dígitos" se muestra si el usuario escribe más de 6 dígitos. Se muestra un mensaje de error si el usuario escribe un valor que no sea un número.

Sub mskID_ValidationError (InvalidText As String, _ StartPosition As Integer) If StartPosition = mskID.MaxLength Then lblError.Caption = "Límite de 6 dígitos" Else lblError.Caption = "Sólo dígitos" End If End Sub

Si trata de asignar una cadena que no es válida a un control de edición con máscara, recibe un evento ValidationError y un error en tiempo de ejecución.

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem 13/09/05 [email protected]

Capítulo 3 – Entorno y Lenguaje de Programación Página 380

En el siguiente código, se supone que mskID tiene la máscara "###-###". Esta instrucción causa un evento ValidationError y un error en tiempo de ejecución. La propiedad Text de mskID no cambia. El argumento InvalidText será "222a34444". El argumento StartPosition será "3".

mskID.Text = "222a34444" Esta demostración repasa las propiedades del evento ValidationError. El evento LostFocus Algunas aplicaciones validan los datos cuando el usuario pulsa la tecla del tabulador desde el campo. Si la entrada no es válida, la aplicación muestra un mensaje de error y establece el enfoque al campo con datos no válidos. La ventaja de este tipo de validación es que se avisa al usuario inmediatamente si un campo no es correcto. Si utiliza este método para validar datos de campo, recuerde lo siguiente:

• Permita que el usuario disponga de alguna forma de pulsar la tecla de tabulación desde el campo sin haber completado el mismo. Si el usuario no sabe qué entrada es válida, no le obligue a permanecer en ese campo.

• Utilice SetFocus con cuidado. Podría dar lugar a un bucle infinito donde existan dos controles que estén utilizando SetFocus en el evento LostFocus.

Por ejemplo, suponga que tiene un formulario con dos cuadros de texto, txtFirstName y txtLastName y que el evento LostFocus para cada cuadro de texto utiliza SetFocus para obligar al usuario a volver al campo si el valor no es válido. Dará lugar a un bucle infinito si txtFirstName y txtLastName contienen datos no válidos. Por ejemplo:

1. El usuario escribe datos no válidos en txtFirstName pulsa el tabulador para ir a txtLastName. 2. txtFirstName recibe un evento LostFocus. 3. El método SetFocus se coloca en la cola para ejecutarse cuando sea posible. 4. txtLastName recibe un evento GotFocus. 5. SetFocus se ejecuta tras el evento GotFocus de txtLastName. Esto da lugar a que txtLastName reciba un evento LostFocus.

6. Si txtFirstName también tiene datos erróneos, la aplicación emite otro SetFocus para establecer el enfoque nuevamente a txtLastName, dando lugar a un bucle infinito.

Definición de un indicador para evitar un bucle infinito

Si elige validar datos en el evento LostFocus, debe definir un indicador para indicar si hay alguna validación en proceso para evitar un bucle infinito. En este ejemplo se muestra un método de validación de datos en el evento LostFocus. El procedimiento establece un indicador global para determinar si la validación está en proceso. En este ejemplo se utiliza la instrucción DoEvents para que el método SetFocus se ejecute inmediatamente en lugar de hacerlo al finalizar el procedimiento. Sin la instrucción DoEvents, el método SetFocus no se ejecuta hasta que termine el evento LostFocus. En ese caso, la variable ValidationInProgress ya se habría restablecido y podría dar lugar a un bucle infinito.

Dim ValidationInProgress As Boolean

Capítulo 3 – Entorno y Lenguaje de Programación 13/09/05 _____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 381

Private Sub txtFirstName_LostFocus() If Not (ValidationInProgress) Then 'aceptar validación If txtFirstName.Text = "" Then ValidationInProgress = True txtFirstName.SetFocus lblError.Caption = "Se necesita el nombre." DoEvents ValidationInProgress = False End If End If End Sub Private Sub txtLastName_LostFocus() If Not (ValidationInProgress) Then 'aceptar validación If txtLastName.Text = "" Then Nota: En lugar de validar datos en el evento LostFocus, considere la posibilidad de colocar el código de validación en un botón "Aceptar". Esto permite al usuario rellenar el formulario y a continuación hacer clic en "Aceptar" para validar todos los campos. Esta demostración ilustra la utiliza ción de LostFocus para realizar la validación.

Validación a nivel de formulario

En esta sección se explican tres métodos de validación en un formulario: cómo establecer un controlador de teclado a un formulario, cómo habilitar un botón "Aceptar" cuando se completa un formulario y cómo validar los datos de un formulario en un botón "Aceptar".

Un controlador de teclado a nivel de formulario

En algunos casos, es posible que desee ejecutar el código cuando un usuario presiona una tecla determinada desde cualquier lugar del formulario. No importa qué control tiene el enfoque. Por ejemplo, quizá desee que F9 realice una rutina común. En lugar de agregar el código al evento KeyPress para cada control, puede agregar el código al evento KeyPress del formulario. Los formularios disponen de una propiedad KeyPreview que determina si el formulario recibe los eventos de teclado antes que los controles. Si KeyPreview es True, el formulario recibe el evento de teclado primero y a continuación, lo recibe el control. Si la propiedad KeyPreview de un formulario está establecida a False, el formulario no recibe los eventos de teclado. En este ejemplo de código se muestra un cuadro de mensaje cuando el usuario presiona F2.

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyF2 Then MsgBox "ˇHa presionado F2!" End If End Sub Nota: Si el evento de tecla de formulario establece KeyAscii a 0, no se producirán los eventos de tecla de control.

Habilitar un boton "Aceptar"

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem 13/09/05 [email protected]

Capítulo 3 – Entorno y Lenguaje de Programación Página 382

El programa debe proporcionar pistas visuales sobre los comandos que están disponibles. Por ejemplo, si necesita que el usuario rellene todos los campos antes de hacer clic en el botón "Aceptar", no deberá habilitar el botón "Aceptar" hasta que se hayan escrito datos en todos los campos tal como se muestra en esta ilustración.

Figura 3.46. Botón ACEPTAR desactivado. Mediante esta técnica es posible restringir el cceso a ciertos procesos que requieren variables necesariamente obtenidas de procesos previos. En este ejemplo, sólo cuando se termine de digitar el código del departamento, y/o se pulse alguna tecla adicional, se habilitaría el botón Aceptar.

En el siguiente ejemplo de código se muestra una manera de llevar a cabo esta operación. El ejemplo realiza un bucle por la colección Controls para validar cada control. La colección Controls es una colección predefinida proporcionada por Visual Basic y contiene todos los controles del formulario.

Private Sub Form_Load() cmdOK.Enabled = False End Sub Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer) 'Habilitar el botón "Aceptar" sólo si todos los cuadros de texto ‘tienen entradas Dim curControl As Control For Each curControl In Controls If TypeOf curControl Is TextBox Then If curControl.Text = "" Then 'el cuadro de texto está vacío cmdOK.Enabled = False 'inhabilitar el botón "Aceptar" Exit Sub End If 'Pueden verificarse otros tipos de control si es necesario End If Next 'todos los cuadros de texto contienen información cmdOK.Enabled = True End Sub

Validar todos los campos de un formulario

En comparación con lo que ocurre con la técnica de validación en un campo que verifica cada campo después de que el usuario lo rellene, este método valida todos los campos cuando el usuario hace clic en "Aceptar". En este escenario, la aplicación permite al usuario completar el formulario y hacer clic en "Aceptar" ; y a continuación, valida todos los campos. Después, la aplicación vuelve a establecer el enfoque al primer campo que tenga datos que no sean válidos.

Capítulo 3 – Entorno y Lenguaje de Programación 13/09/05 _____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 383

Figura 3.47. Validación de campos en un formulario. La validación de campos es una técnica requerida para garantizar que los datos que intervienen en un proceso de cálculo o en otras operaciones, dentro de los algoritmos y programas, son exactamente los requridos, en sus contenidos y tipos de datos, paraa validez de operaciones y resultados.

Este ejemplo contiene código en el botón de comando "Aceptar", que valida todos los datos del formulario:

Private Sub cmdOK_Click() If txtFirstName.TEXT = "" Then lblError.Caption = "Proporcione un nombre." txtFirstName.SetFocus Exit Sub ElseIf txtLastName.TEXT = "" Then lblError.Caption = "Proporcione un apellido." txtLastName.SetFocus Exit Sub ElseIf mskDept.ClipText = "" Then lblError.Caption = "Proporcione un departamento." mskDept.SetFocus mskDept.ForeColor = vbRed Exit Sub ElseIf CInt(mskDept.ClipText)<50 Or CInt(mskDept)>80 Then lblError.Caption = "Número de departamento no válido" & _ "Los valores válidos están entre 50 y 80" mskDept.SetFocus mskDept.ForeColor = vbRed Exit Sub Else Unload Me End If End Sub

Eventos de un formulario usados al validar datos

Los formularios tienen varios eventos que puede utilizar para validar datos.

Initialize y Terminate

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem 13/09/05 [email protected]

Capítulo 3 – Entorno y Lenguaje de Programación Página 384

El evento Initialize se produce cuando una aplicación crea una instancia de un formulario (antes de que se cargue o se muestre el formulario). Utilice el evento Initialize para inicializar variables en un formulario. El evento Terminate se produce cuando el formulario se establece a Nothing. Nota: Las variables de formulario se mantienen cuando se descarga (Unload) un formulario. Las variables de formulario se borran cuando un formulario se establece a Nothing. En el código siguiente se muestran cuáles son los eventos causados por diversos métodos e instrucciones:

Form2.iCount = 3 'Da lugar al evento Initialize Form2 Form2.Load 'Da lugar al evento Load Form2 Form2.Show 'Da lugar al evento Activate Form2.Unload 'Da lugar al evento Unload Msgbox Form2.iCount 'Muestra 3 Form2.Show 'Da lugar al evento Load Form2.Unload 'Da lugar al evento Unload set Form2 = Nothing 'Da lugar al evento Terminate

Activate y DeActivate

Los eventos Activate y Deactivate se producen cuando el enfoque se desplaza hacia o desde un formulario de una aplicación. Tenga en cuenta que los eventos Activate y DeActivate no se producen si el usuario cambia el enfoque a otra aplicación distinta y vuelve. Estos eventos sólo se producen cuando el usuario se desplaza dentro de la aplicación actual.

Nota :El formulario recibe un evento GotFocus o LostFocus únicamente si no existen controles en el formulario capaces de recibir el enfoque.

Load y Unload Los eventos Load y Unload se producen cuando se carga o descarga el formulario. Puede utilizar el evento Load para inicializar los controles. Puede utilizar el evento Unload para cerrar archivos y guardar la información. QueryUnload El evento QueryUnload se produce justo antes del evento Unload cuando se descarga el formulario. El evento QueryUnload le permite determinar cómo se ha iniciado el evento Unload y cancelar la descarga si se desea. El evento QueryUnload dispone de dos argumentos:

• El argumento UnloadMode indica cómo se inició Unload. • El argumento Cancel cancela el evento Unload. Si establece Cancel a True, la aplicación

seguirá tal como se encontraba antes de que se intentara el cierre.

Capítulo 3 – Entorno y Lenguaje de Programación 13/09/05 _____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 385

Nota: La instrucción End no produce ningún evento. Si desea asegurarse de que el evento Unload del formulario se produzca cuando finalice la aplicación, utilice la instrucción UnLoad en lugar de la instrucción End. En este ejemplo de código se cancela una descarga (Unload) si el usuario ha tratado de cerrar la aplicación eligiendo Cerrar del menú de sistema.

Sub Form_QueryUnload (Cancel As Integer, _ UnloadMode As Integer) If UnloadMode = vbFormControlMenu Then MsgBox "No utilice Cerrar desde el menú Control." Cancel = True End If End Sub

El argumento UnloadMode puede tener los valores mostrados en la tabla 3.18: Tabla 3.18. Valores del argumento UnloadMode

Valor Constante Significado 0 VbFormControlMenu El usuario ha elegido Cerrar desde el menú Control del

formulario. 1 VbFormCode La instrucción Unload se utilizó desde el código. 2 VbAppWindows La aplicación está cerrándose como resultado de finalizar la

sesión de Windows. 3 VbAppTaskManager La aplicación está cerrándose desde el Administrador de tareas. 4 VbFormMDIForm El formulario MDI secundario está cerrándose debido al cierre del

formulario MDI.

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem 13/09/05 [email protected]

Capítulo 3 – Entorno y Lenguaje de Programación Página 386

3.14 Usar Controles en Visual Basic 6.0

Ya se vió que la interfaz, en un proyecto VisualBasic, contiene uno o más formularios en los cuales se han ubicado controles específicos que realizan diversas funciones según la lógica de los algoritmos diseńados.

También se emplean los controles (u objetos) para la entrada y el despliegue de datos. Algunos controles, como el formulario y el frame, pueden contener a otros controles: son los contenedores. Otros controles permiten el acceso a otras aplicaciones y procesos de datos, como si las aplicaciones remotas formaran parte del proyecto que hemos diseńado. Cada control posee una apariencia propia (interfaz), una serie de atributos o propiedades, métodos que le dan operabilidad, y un conjunto de eventos para responder a las acciones del usuario o de otros objetos. Son las anteriores características las que le dan su potencia y riqueza de expresión, para modelar los procesos organizacionales, a la Programación Orientada por Objetos. VisualBasic, aunque no es un legítimo lenguaje orientado por objetos, sí es un lenguaje de programación basado en objetos. Todo el entorno integrado de desarrollo (IDE = Integrated Development Environment) es un gran objeto que contiene a otros muchos objetos (menús, barra de herramientas, formularios, controles, otras ventanas, etc.). Un objeto es un tipo abstracto de datos que permite integrar los diversos conjuntos de datos de una aplicación con los programas que manejan esos datos, de suerte que un proyecto (o aplicación) puede abstraerse como una sociedad de objetos que realizan diversas funciones y que interactúan a través de mensajes y el paso de parámetros. En esta sección se estudiarán los siguientes temas relacionados con los controles:

• Los tipos de controles de la caja de herramientas; • Cómo efectúan acciones los controles; • Entrada y despliegue de texto; • Controles que despliegan opciones ante el usuario; Cómo obtener y establecer el enfoque

de un objeto; • Establecer la secuencia de activación en un conjunto de objetos; • Activación, desactivación y control de la visibilidad de objetos, a tiempo de ejecución; • Utilizar un arreglo de controles.

Los controles en la caja de herramientas Uno de los utilitarios más importantes, del entorno visual e interactivo de VisualBasic, es la caja de herramientas cuya estructura y apariencia se ilustra en la figura 3.48 (para la versión 4.0 de VisualBasic).

Capítulo 3 – Entorno y Lenguaje de Programación 13/09/05 _____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 387

Figura 3.48. Controles disponibles en la caja de herramientas de VisualBasic 4.0. Categoría de los controles Hay tres categorías generales de los controles en VisualBasic: 1. Controles estándar, tales como Label (rótulo), TextBox (CajaTexto), CommandButton (BotónComando), o Frame ( Marco), los cuales están ensamblados dentro del programa ejecutable *.EXE de VisualBasic. Los controles estándar siempre aparecen en la Caja de herramientas. Dependiendo del tipo de versión que se tenga instalada (aprendizaje, profesional, o empresarial) habrán más o menos controles estándar en la caja de herramientas. 2. Controles personalizados son aquellos que existen como archivos independientes del tipo *.VBX o *.OCX. Estos incluyen controles especializados, tales como el control CommonDialog y controles producidos por empresas de softaware especializadas en esta tecnología, así como las versiones mejoradas de los controles estándar, tales como el control Data-BoundListBox o el control Data-BoundComboBox. 3. Controles insertables, como una hoja de cálculo del tipo Microsoft Excel, una presentación de PowerPoint, o un calendario de proyecto en Microsoft Project Calendar. Estos controles se pueden agregar y remover de la caja de herramientas (lo mismo que los controles personalizados). Algunos de los objetos insertables soportan la tecnología de automatización OLE (denominada ahora ActiveX), la cual permite interactuar con otras aplicaciones -locales o remotas- dentro de un proyecto de VisualBasic.

Para las versiones 5.0 y 6.0 de VisualBasic, la caja de herramientas luce como se muestra en la figura 3.49, que se muestra en la página siguiente.

Figura 3.49. Caja herramientas VisualBasic 5.0,6.0(a) Estos son los controles estándar que aparecen en la lengüeta General.

Figura 3.49. Caja herramientas VisualBasic 5.0,6.0 (b) Controles definidod por el usuario en una lengüeta Personal.

En las versiones 5.0 y 6.0 de VisualBasic, la caja de herramientas permite agregar otras lengüetas ( o fichas) para incluir controles adicionales, ya sean personalizados o insertables. En (a) se tiene

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem 13/09/05 [email protected]

Capítulo 3 – Entorno y Lenguaje de Programación Página 388

los controles de tipo estándar y otros que se han agregado (como el control MaskEdBox) bajo la lengüeta General . En (b) se presenta la lengüeta Personal que incluye controles personalizados. Para agregar otra ficha, se hace click derecho sobre la caja de herramientas, en un área libre de objetos, y del menú contextual se selecciona la opción Agregar ficha; se da el nombre de la ficha en el panel de diálogo resultante; se hace click en ACEPTAR.

• Para ver y agregar controles personalizados siga los siguientes pasos, en la versión 4.0:

Haga click izquierdo en el menú Herramientas y del submenú que se despliega seleccione, haciendo click izq., la opción Controles personalizados . Otra forma: Haga click derecho en la caja de herramientas, en un área libre de controles, y del menú contextual resultante escoja la opción Controles personalizados (haciendo click izq. sobre ella).

El panel (o ventana) de diálogo que se presenta, muestra la lista de controles personalizados e insertables disponibles en la versión instalada de VisualBasic. Los que están seńalados (con un «chuleado») son los activos. Para incluir otros controles en la caja de herramientas, simplemente seńálelos en la lista presentada, de suerte que la casilla de verificación a la izquierda del nombre quede «chuleada». Luego, haga click izquierdo en el botón ACEPTAR.

• Para ver y agregar controles personalizados en las versiones 5.0 y 6.0, el procedimiento es similar:

Haga click izquierdo en el menú Proyecto y del submenú que se despliega seleccione, haciendo click izq., la opción Componentes.

Otra forma:

• Haga click derecho en la caja de herramientas, en un área libre de controles, y del menú contextual resultante escoja la opción Componentes (haciendo click izq. sobre ella).

• El panel (o ventana) de diálogo que se presenta, muestra la lista de controles

personalizados e insertables disponibles en el tipo de versión instalada de VisualBasic (de aprendizaje, profesional o empresarial). Los que están seńalados (con un «chuleado») son los activos.

• Para incluir otros controles en la caja de herramientas, simplemente seńálelos en la lista

presentada, de suerte que la casilla de verificación a la izquierda del nombre quede «chuleada». Luego, haga click izquierdo en el botón APLICAR, y luego click izquierdo en el botón CERRAR.

Descripción básica de los controles

Capítulo 3 – Entorno y Lenguaje de Programación 13/09/05 _____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 389

En la tabla 3.19 se presenta una breve descripción de cada control, como aparece en las cajas de herramientas de las figuras 350 y 351. El nombre de la clase hace referencia al tipo específico de objeto y al nombre conque se identifica el control en la propiedad Name de la ventana de propiedades. Los valores de cada control se relacionaron en la tabla 15 (capítulo: introducción). Tabla 3.19. Descripción básica de los controles.

Control Nombre de la clase Descripción

Pointer � El puntero del mouse suministra el medio principal de ubicar y ajustar el

tamaño de los formularios y controles. (No es propiamente un control).

PictureBox

� El control PictureBox (CajaGráfica) despliega varios tipos de gráficos de los disponibles dentro del VisualBasic y de Windows: bitmaps (*.bmp), íconos (*.ico), metarchivos (*.wmf), y otros tipos como el *.jpg y el *.gif. Este control puede desplegar texto o actuar como contenedor de otros controles.

Label

� Sólo despliega texto. Sirve para visualizar mensajes de cualquier tipo. El usuario no puede editar ni modificar los mensajes desplegados por este control.

TextBox � Proporciona un área de edición, permitiendo entrar datos y también

visualizar datos.

Frame � Sirve para agrupar a otros controles, generalmente con funciones afines

dentro de un proyecto.

CommandButton

� Es el principal medio para expresar ciertas acciones o comportamientos dentro de una interfaz. El usuario, normalmente, lo activa haciendo click sobre este control.

CheckBox

� Sirve para desplegar opciones del tipo Sí/No, o Yes/Not. Se puede tener y chequear, a la vez, cualquier cantidad de este control en un formulario, en un momento dado.

OptionButton � Permite suministrar al usuario múltiples opciones, de las cuales sólo se

puede escoger una.

ComboBox � Es una combinación de una CajaTexto (TextBox) con una CajaLista

(ListBox) , permitiendo editar un dato o seleccionar de las opciones ofrecidas.

ListBox � Suministra una lista de items de la cual el usuario puede escoger.

HScrollBar

� Permite seleccionar un valor dentro de un rango específico, mostrado como una barra deslizante horizontal. Es un control independiente y no se ha de confundir con las barras de desplazamiento que contienen muchos otros objetos, tanto en el entorno de VisualBasic como en el ambiente Windows.

VScrollBar

� Se utiliza para seleccionar un valor, de entre un rango de valores, presentados como una barra deslizante vertical. Es un control independiente y no se ha de confundir con las barras de desplazamiento propias de muchos otros objetos, tanto en el entorno de VisualBasic como en el ambiente del sistema operativo Windows.

Timer

� El temporizador permite ejecutar eventos temporales, expresados como intervalos de tiempo, normalmente basados en el reloj interno de máquina (y expresados en milisegundos).

DriveListBox

� Facilita y permite escoger unidades de disco válidas, de entre un listado que automáticamente presenta este control, y que corresponde a las unidades o dispositivos de almacenamiento presentes en el computador (tales como diskettes, discos duros, unidades de CD-Rom, etc.).

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem 13/09/05 [email protected]

Capítulo 3 – Entorno y Lenguaje de Programación Página 390

DirListBox � Permite escoger directorios y trayectorias de directorios, de entre la

estructura (arbórea) de directorios presentes en una unidad de disco.

FileListBox

� Sirve para escoger archivos de entre una lista que automáticamente este control presenta al usuario, de los archivos (ficheros) grabados en una carpeta (o directorio) específica.

Shape

� Sirve para agregar una figura a un formulario. Las figuras que se pueden agregar son: rectángulo, cuadrado, elipse, o cìrculo. Dichas figuras están automáticamente disponibles dentro de este control.

Line � Para dibujar un segmento de línea recta.

Image � Despliega archivos gráficos tipo *.bmp, *.ico, *.wmf, *.gif, *.jpg. También

actúa como un botón de comando cuando se hace click sobre él.

Data � Se utiliza para conectar una interfaz con un archivo de base de datos,

previamente creado, y desplegar información de la base de datos.

OLE

� Permite incrustar aplicaciones basadas en Windows dentro de un proyecto VisualBasic. La automatización OLE (Object-Linking and Embedding) hace posible correr otras aplicaciones dentro de los proyectos VisualBasic.

DBComboBox � Combina las propiedades del ComboBox con las funciones de acceso a

datos.

DBListBox � Combina las propiedades del control ListBox con las funciones de acceso a

datos.

Grid

� Un control Grid muestra una serie de filas y columnas. La intersección de una fila y una columna es una celda. Puede leer y establecer el contenido de cada celda en código (programas).

Data-BoundGrid

� Un control Data-BoundGrid combina las propiedades del control Grid con las facilidades de acceso a datos. Ha de emplearse conjuntamente con un control Data para efectuar el enlace con un archivo de base de datos.

MaskEdBox

� Combina las características del control TextBox con las funciones de la edición de datos con máscaras de edición. Es muy útil en los procesos de validación de datos.

Para ubicar un control en el formulario de diseńo, siga los siguientes pasos: • En la caja de herramientas, haga click izquierdo sobre el control a ubicar. • Lleve el puntero del mouse al formulario; el puntero es ahora una cruceta. Haga click

izquierdo, sostenga el click y arrastre horizontal y luego verticalmente hasta obtener el tamańo deseado.

• Suelto el botón del mouse. Sobre el formulario aparecerá el control insertado con una serie de recuadritos negros en el perímetro; esto significa que dicho control es el que tiene el enfoque de diseńo, y con tales ajustadores de tamańo se puede redefinir las dimensiones del control. Para ello se coloca el puntero del mouse sobre un ajustador, y al cambiar el puntero a una doble flecha, se hace click izquierdo, se sostiene el click y se arrastra horizontal o verticalmente, dependiendo del ajustador pulsado.

Capítulo 3 – Entorno y Lenguaje de Programación 13/09/05 _____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 391

Para reubicar un control sobre un formulario, simplemente se hace click izquierdo sobre él (así tiene el enfoque de diseńo), se sostiene el click y se desplaza a la nueva ubicación en el formulario.

Otra forma de incluir controles en un formulario : en la caja de herramientas, haga dobleclick izquierdo sobre el control específico, con lo cual dicho control se inserta en el formulario más o menos hacia el centro del mismo. Este tipo de inserción de controles en un formulario da automáticamente el enfoque de diseńo al control, con lo cual los ajustadores de tamańo están visibles. Luego de insertar el control puede reubicarse y modificarse sus dimensiones de la forma explicada anteriormente.

Acciones de los controles

La forma más simple de interactuar con una aplicación es a través de un botón de comando sobre el cual se puede hacer click o pulsar una tecla. Se puede emplear el control estándar proporcionado por VisualBasic, el CommandButton, o se puede diseńar a la medida empleando un control Image sobre el cual se inserta un ícono determinado.

La práctica generalizada de diseńar aplicaciones con VisualBasic utiliza botones de comando de tipo estándar, el CommandButton, para lograr ciertas acciones o comportamientos en la interfaz. Cuando un BotónComando se pulsa, se invoca automáticamente el evento Click asociado con dicho control. Los programas que dan comportamientos al control se escriben en el evento Click.

Hay varias maneras de escoger un control tipo BotónComando a tiempo de ejecución:

• Por medio del mouse haciendo click sobre el BotónComando: Mover el enfoque al BotónComando, pulsando la tecla TAB (tabulador), y luego escogiendo el control por medio de la tecla SPACEBAR (espaciadora) o la tecla ENTER.

• Pulsando una tecla rápida (ALT + letra subrayada) diseńada para el control.

• Establecer en True la propiedad Value para el control, por medio del programa.

• Si el BotónComando es el CommandButton estándar (por defecto) para el formulario,

pulsando la tecla ENTER escoge el control, aunque se cambie el enfoque a un control diferente. En tiempo de diseńo se especifica el control tipo CommandButton como estándar estableciendo la propiedad Default a True.

• Si un BotónComando es el botón estándar de cancelación para un formulario, entonces

pulsando la tecla ESC se escoge el BotónComando, aunque se cambie el enfoque a otro control. En tiempo de diseńo, se especifica un botón estándar de cancelación estableciendo la propiedad Cancel a True.

Todas las acciones anteriores hacen que VisualBasic invoque automáticamente el procedimiento (o programa) del evento Click.

Edición y despliegue de datos

Por medio de la propiedad Caption un control despliega un mensaje identificador de lo que el control hace.

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem 13/09/05 [email protected]

Capítulo 3 – Entorno y Lenguaje de Programación Página 392

En la figura 3.50 se muestra una interfaz en la cual se han diseńado dos controles del tipo BotónComando (CommandButton), cada uno con un mensaje apropiado (esta aplicación es tomada de las aplicaciones de ejemplo que trae el VisualBasic; se hallan en la carpeta \SAMPLES\CONTROLS del directorio donde está grabado el VisualBasic; vea el formulario BUTTON.FRM en el proyecto CONTROLS.VBP). Las propiedades de los objetos que conforman la interfaz, se muestran en la tabla 3.20.

Figura 3.50. Uso del BotónComando.

Tabla 3.20. Propiedades de la interfaz Objeto Propiedad Valor

Form BackColor Caption Name

&H00C0C000& Prueba de botones frmButton

Command1 Caption Font Name

Cambiar &señal MsSansSerif, Negrita,12 cmdChange

Command2 Caption Font Name

&Cerrar MsSansSerif, Negrita,12 cmdClose

Image1 Name ImgRed Image2 Name ImgGreen Image3 Name ImgYellow

La imagen, que se asemeja a un semáforo, está formada por tres imágenes contiguas (imgRed, imgGreen, imgYellow). Para denotar que una letra específica está habilitada como letra rápida, se coloca un signo de ampersand (&) antes de ella. Ese es el caso de los botones cmdChange y cmdClose. De suerte, que para el botón cmdChange la letra ese (s) es la letra habilitada como letra rápida para activar el botón (se emplearía ALT + S: aquí el signo más sólo indica «pulsar a la vez»). La programación de los objetos (o controles), que requieren efectuar algún comportamiento en la interfaz de la figura 3.50, se presenta en la figura 3.51.

Capítulo 3 – Entorno y Lenguaje de Programación 13/09/05 _____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 393

(a)Procedimiento ChangeSignal. Private Sub ChangeSignal() ‘Verifica de qué color es la luz del semáforo, y la ‘cambia al próximo color. El orden es: verde, ‘amarillo y rojo If (ImgGreen.Visible = true)Then ImgGreen.Visible = False ImgYellow = True ElseIf(ImgYellow.Visible = True)Then ImgYellow.Visible = False ImgRed.Visible = True Else ImgRed.Visible = False ImgGreen.Visible = True End if End Sub

El entorno interactivo de VisualBasic dispone de un editor especializado para escribir la programación de los diferentes objetos que componen una interfaz. Para activar el editor se puede hacer doble click izquierdo en uno de los objetos diseñados. La ventana del editor tiene la estructura básica de una ventana en Windows. La barra de título y control contiene el nombre del formulario y los botones de control. Debajo de la barra de control está la barra de herramientas, que en este caso contiene dos casillas con sendas listas.

La casilla Objeto da la lista de los diferentes objetos definidos en la interfaz; aparecen con los nombres asignados en la propiedad Name. La casilla Procedimiento da la lista de los diversos eventos preesablecidos para el objeto seleccionado en la casailla Objeto.

La esrtructura estándar de todo procedimiento en Visual Basic es así:

Private Sub nombreobjeto_evento ([argumentos]) ................... End Sub

(c)Objeto cmdChange Private Sub cmdChange_Click() ‘Llama al procedimiento ChangeSignal ChangeSignal End Sub

Para el objeto cmdChange se programa el evento Click. Este procedimiento llama a otro procedimiento de nombre ChangeSignal . Esa es la sintaxis para invocar un procedimiento: simplemente con su nombre.

(c)Objeto imgGreen Private Sub imgGreen_Clcik() ‘Llama al procedimiento ChangeSignal ChangeSignal End Sub

Para el objeto imgGreen (ImageBox, cuadro de imagen) se programa el evento Click. Este procedimiento invoca al procedimiento de nombre ChangeSignal. Lo mismo hacen los otros objetos de la interfaz: imgRed e imgYellow.

Figura 3.51. Programación de la interfaz mostrada en la figura 3.50.

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem 13/09/05 [email protected]

Capítulo 3 – Entorno y Lenguaje de Programación Página 394

Algunos aspectos adicionales de la aplicación «botones»

En primer lugar, el procedimiento ChangeSignal (figura 3.51) utiliza la estructura de selección lógica con el formato If .. ElseIF .. End If para escoger entre varias posibilidades lógicas. Para activar/desactivar la visibilidad de los objetos tipo ImageBox se emplea instrucciones del tipo:

objeto.propiedad = valor

así, por ejemplo se hace visible el objeto gráfico de color amarillo con la instrucción

imgYellow.Visible = True

En este tipo de instrucción el punto actúa como un operador de jerarquía y de pertenencia: la propiedad Visible pertenece al control (objeto) imgYellow.

Obsérvese la indentación en la escritura del programa para el procedimiento ChangeSignal. Tal indentación no es necesaria, pero es muy conveniente dentro de un estilo estructurado de escribir programas en el ambiente de VisualBasic. La práctica la aconseja, por cuanto es mucho más fácil identificar errores y descubrir problemas de lógica si el programa tiene una estructuración como la mostrada en la parte (a) de la figura 3.51. Los controles tipo Label sólo permiten el despliegue de mensajes; el usuario no puede editar ni modificar los mensajes (en general, los textos) desplegados por este tipo de control. Los controles tipo Label muestran los mensajes mediante la propiedad Caption, que se puede definir tanto a tiempo de diseńo como a tiempo de ejecución. Con dicha propiedad se pueden desplegar mensajes explicativos para controles que no posean dicha propiedad, o crear -para ese mismo tipo de controles- teclas de acceso rápido (como para los controles tipo TextBox, PictureBox, ComboBox, ListBox, Drive ListBox, DirListBox, Grid, Image, HScroolBar y VScrollBar).

Adicionalmente, los controles tipo Label poseen dos propiedades que facilitan el despliegue de los mensajes, incluso si son extensos. La primera propiedad es AutoSize cuyo efecto es que el control se adapta al tamańo del mensaje (se ajusta horizontamente). La propiedad WordWap hace que el control despliegue en forma automática varios renglones para adaptarse al tamańo del texto.

Para ilustrar dichas propiedades, en un objeto Label, se emplea la interfaz que se muestra en la figura 3.52, cuyos los objetos se describen en la tabla 3.21.

Capítulo 3 – Entorno y Lenguaje de Programación 13/09/05 _____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 395

Figura 3.52. Uso del control Label.

Tabla 3.21. Propiedades de la interfaz/fig. 3.52 Objeto Propiedad Valor

Form BackColor Caption Name

&H8000000F& Propiedades de Label frmWordWrap

Label1 Caption Name

Una demostración de AutoSize y WordWrap lblDisplay

Frame1 BackColor Caption Font ForeColor

&H0080FFFF& OPCIONES Stencil, Negrita, 14 &H000080FF&

CheckBox1Caption Font Name

&AutoSize Tahoma, Negrita, 14 chkAutoSize

CheckBox2Caption Font Name

&WordWrap Tahoma, Negrita, 14 chkWordWrap

Command1Caption Font Name

&Visualizar Tahoma, Negrita, 14 cmdDisplay

Command2Caption Font Name

&Cerrar Tahoma, Negrita, 14 cmdClose

Algunos aspectos adicionales de la aplicación «AutoSize/WordWrap»

El formulario de la figura 3.52 se ha disminuído su tamańo para efectos de presentarlo en la pantalla. En la aplicación dentro del ambiente de VisualBasic debe haber suficiente espacio entre el objeto lblDisplay, que es el Label, y los demás objetos, particularmente el objeto Frame1 y sus objetos contenidos; esto con el fín de que a tiempo de ejecución se vea claramente el efecto de las propiedades AutoSize y WordWrap.

Las propiedades presentadas en la tabla 3.21 corresponden a las que cambian para los objetos diseńados en la interfaz. Las propiedades que no es preciso manejar en los algoritmos del proyecto, permanecerán con sus valores que automáticamente les asigna el entorno de VisualBasic.

La programación de los diferentes objetos listados en la tabla 3.21, correspondientes a la interfaz de la figura 3.52, se presenta a continuación en la tabla 3.22. Es claro, que en una interfaz no todos los objetos requieren programación explícita. Para este ejemplo, los botones de comando son los objetos que se programan. Los demás objetos tienen la propia programación automática (implícita) del entorno de VisualBasic.

Tabla 3.22. Programas para la interfaz de la figura 3.52.

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem 13/09/05 [email protected]

Capítulo 3 – Entorno y Lenguaje de Programación Página 396

Private Sub cmdDisplay_Click() ' Restablece el ejemplo. lblDisplay.AutoSize = False lblDisplay.WordWrap = False lblDisplay.Width = 1695 lblDisplay.Height = 255 ' verifica WordWrap y Autosize. If (chkWordWrap.Value = 1) Then lblDisplay.WordWrap = True End If If (chkAutoSize.Value = 1) Then lblDisplay.AutoSize = True End If End Sub

A tiempo de ejecución, el usuario hará click en las casillas de verificación (controles CheckBox). Si sobre la casilla de verificación del controlchkAutoSize se ha hecho click, la propiedad Value es 1; en este caso, la propiedad AutoSize se pone a True. Si sobre la casilla de verificación del objeto chkWordWrap se ha hecho click, la propiedad Valuees 1; en este caso, la propiedad WordWrap se pone a True. Esta es la lógica que se implementa con las instrucciones If .. End If en el evento Click.La propiedad Width da el ancho de un objeto; y la propiedad Height da su altura (en twips, que son unidades de medida gráfica en el entorno de VisualBasic: 1 twip = 1/1440 pgda.).

Private Sub cmdClose_Click() Dim T As Byte, Msg$, Tit$ '........................................ Msg$ = ".. REALMENTE QUIERE SALIR ? " Tit$ = "** CONFIRMAR SALIDA **" T = MsgBox(Msg$, 64, Tit$) If (T = 6) Then UnLoad Me End If End Sub

El botónComando cmdClose corrobora la salida del tiempo de ejecución empleando la función MsgBox(), que retorna valores enteros. La variable T se define como Byte (entero) para recibir el valor que devuelve la función; si dicho valor es 6, el usuario pulsó el botón Sí, y en consecuencia se descarga el formulario de memoria (UnLoad Me), terminándose el tiempo de ejecución y retornándose al tiempo de diseño.

Los controles tipo TextBox (CajaTexto) son bastante versátiles, permitiendo tanto la entrada de datos desde la terminal (pantalla/teclado) como el despliegue de datos en la pantalla. Este tipo de control sólo maneja texto, por lo cual hay que efectuar diversas validaciones sobre los datos, cuando son numéricos , para poderlos utilizar en los algoritmos. Es decir, que todo dato que se digite en este tipo de control, tiene una representación interna como String.

Hay dos propiedades que definen la apariencia y el comportamiento de los controles tipo TextBox: la propiedad MutiLine y la propiedad ScrollBars, cuyos valores sólo pueden establecerse a tiempo de diseńo. La propiedad MutiLine es de contenido lógico (tipo de datos Boolean); sólo admite False o True (ver figura 3.53), y hace posible que una CajaTexto muestre un texto extenso en varias líneas. La función ScrollBars admite uno de cuatro valores enteros (0, 1, 2, 3), como se ilustra en la figura 3.54 (la opción 3 - Both incluirá ambas barras de desplazamiento). Las barras de desplazamiento, cuando se definen, se ven a tiempo de diseńo (como en la figura 3.55); pero el efecto multilinea sólo se verá a tiempo de ejecución cuando se introduzca un texto extenso en el control.

Capítulo 3 – Entorno y Lenguaje de Programación 13/09/05 _____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 397

Figura 3.53. Propiedad MultiLine del

TextBox

Figura 3.54. Propiedad ScrollBars del TextBox

Figura 3.55. Barras deslizantes del TextBox

Muchas propiedades de los controles manifiestan sus efectos a tiempo de diseño y de ejecución (como ScrollBars del TextBox); pero otras sólo muestran sus efectos a tiempo de ejecución (como MultiLine del TextBox).

Nota: La propiedad ScrollBars no debe confundirse con los controles HScrollBars, y VScrollBars , los cuales no pueden enlazarse con el control TextBox, y tienen sus propios conjuntos de propiedades.

Al establecer la propiedad MultiLine a True se habilita al control TextBox para editar o

desplegar múltiples líneas de texto a tiempo de ejecución. Un control TextBox multilínea automáticamente maneja el salto de línea si no está presente una barra deslizante horizontal. Por su parte, la propiedad ScrollBars se establece a 0 - None como valor estándar (por defecto). El avance automático de líneas libera al usuario de tener que insertar la ruptura de líneas manualmente. Cuando una línea de texto es más extensa que la línea desplegable por el control TextBox, entonces el mismo control avanza el texto a la línea siguiente.

Desafortunadamente, la ruptura de líneas, en textos extensos, no puede establecerse en la Ventana de Propiedades en tiempo de diseńo. Pero, por medio de código fuente (programas) puede obtenerse la ruptura de líneas insertando un caracter de nueva línea, obtenido al combinar un caracter de «retorno de carro» con un caracter de «fín de línea» (códigos ASCII 13 y 10, respectivamente). Por ejemplo, el siguiente procedimiento, para el evento Load de un formulario, asignará varias líneas de texto a la propiedad Text de un control TextBox inmediatamente el formulario se cargue en memoria:

Private Form1_Load() Dim NL as String, Msg$ NL = Chr(13) + Chr(10) '.. define el caracter NuevaLínea Msg$ = "..... una linea ...." & NL & ".... otra linea ..." Msg$ = Msg$ & "... otra linea más .................." & NL & "...fin" Text1.Tex = Msg$ End Sub

El control TextBox puede implearse para diseńar la edición de claves o códigos secretos, de

suerte que no se vea lo que el usuario escribe. La propiedad PasswordChar permite especificar un caracter de despliegue cuando se digite una clave en un campo que así lo requiera. La propiedad PasswordChar conjuntamente con la propiedad MaxLength (cantidad de caracteres que se

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem 13/09/05 [email protected]

Capítulo 3 – Entorno y Lenguaje de Programación Página 398

pueden digitar) suministran una técnica sencilla de control en la edición de claves. La figura 3.56 ilustra una sencilla interfaz para solicitar una clave de acceso; generalmente, esta es un tipo de pantalla inicial; si la clave digitada no es correcta, no se puede continuar. La descripción de los objetos se presenta en la tabla 3.23. Obsérvese que a tiempo de ejecución no se ven los caracteres digitados; se ve, en lugar de ellos el caracter especificado en la propiedad PassWordChar del control Text1. (La fotografía es del eclipse de Agosto11/99, publicada en el periódico El Tiempo de Bogotá).

Figura 3.56. Control de claves.

Tabla 3.23. Propiedades de interfaz/fig.3.56. Objeto Propiedad Valor

Form1 BackColor Caption

&H0080C0FF& Form1: PassWord

Label1

Alignment BackColor BorderStyle Caption Font ForeColor

2-Center &H00FFFF00& 1-Fixed Single Eclipse Corporation Ltd. PosterBodoni, Negrita, 14 &H000000FF&

Image1 Height Picture Width

1710 (buscar la imagen) 2475

Label2

Alignment BackColor BorderStyle Caption Font ForeColor

2-Center &H00C0FFFF& 1-Fixed Single Digite su código: Zurich LtCnBt, Negrita, 12 &H00FF0000&

Text1 BackColor BorderStyle MaxLenght PassWordChar

&H00C0C000& 1-Fixed Single 6 *

El control Image1 permite, mediante la propiedad Picture, mostrar una imagen en la interfaz; frente al nombre de la propiedad Picture hay una casilla con un botón (llamado botón generador, que contiene unos puntos suspensivos) el cual activa un panel de diálogo para buscar en el disco o en diskette el archivo de imagen que se quiere ligar con el control. Para este ejemplo, se emplea un arghivo tipo *.jpg obtenido de la página web del periódico «El Tiempo» (http://www.eltiempo.com, foto proporcionada por Reuters del eclipse de Agosto 11 de 1999).

El evento KeyPress, del control TextBox, puede utilizarse para restringir o transformar los

caracteres que se digitan (como ya se mencionó). Este evento exige un argumento KeyAscii, que debe ser un entero (entre 0 y 255, tipo Byte) y que representa el código ASCII del caracter que se digita en la CajaTexto. En el siguiente ejemplo muestra cómo se anulan los caracteres, a medida que se digitan en una CajaTexto; si el caracter digitado no es una cifra entera, el procedimiento cancela el caracter digitado, desplegando un mensaje alusivo. La CajaTexto de este ejemplo se llama txt_NoDatos y el argumento KeyAscii se compara directamente con el código ASCII, mediante la función ASC(). Si el caracter digitado está fuera de rango, se activa la alarma sonora (con Beep) y se despliega un mensaje de advertencia, como se muestra en la figura 3.57.

Capítulo 3 – Entorno y Lenguaje de Programación 13/09/05 _____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 399

Private Sub txt_NoDatos_KeyPress(KeyAscii As Integer) If(KeyAscii < Asc("0") Or KeyAscii > Asc("9"))Then Beep : MsgBox ".. fuera de rango", 64, "*ERROR*" KeyAscii = 0 End If End Sub

Figura 3.57. Ventana de mensaje.

También, es posible bloquear la edición de los mensajes desplegados en el control TextBox mediante la propiedad Locked, la cual es de contenido Boolean (lógico), admitiendo sólo los valores True o False. Si esta propiedad está en True, el usuario puede ver los mensajes pero no los puede editar ni cambiar. Sin embargo, esta propiedad sólo afecta la interacción con el usuario a tiempo de ejecución, y de todas maneras mediante programación es posible alterar el estado de la propiedad Locked.

Controles para presentar y manejar opciones En muchas aplicaciones es necesario presentar opciones al usuario. Contales opciones se ejecutan diferentes alternativas dentro de los algoritmos y los programas. Las opciones, generalmente, dependen de las características propias del problema en cuestión que se automatiza por medio del computador con el entorno y lenguaje Visual Basic. Esto puede hacerse mediante botones de opción (OptionButton), casillas de verificación (CheckBox), listas de items (ListBox), o barras deslizantes (HScrollBars, VScrollBars). En la tabla 3.24 (página siguiente) se compendian algunas de las posibilidades de uso de este tipo de control en VisualBasic.

Tabla 3.24. Funcionalidad de los controles que presentan opciones al usuario. • Control Nombre de Clase Funcionalidad

CheckBox

� Ofrecer un conjunto de opciones de las cuales el usuario puede escoger una o más. Generalmente, se agrupan por medio de frames.

OptionButton

� Ofrecer un conjunto de opciones de las cuales el usuario puede escoger sólo una. Generalmente, se agrupan por medio de frames.

ListBox � Ofrecer una lista de opciones, con barra deslizante, de las

cuales el usuario puede escoger.

ComboBox

� Ofrecer un control tipo ListBox combinado con un control para edición (tipo TextBox). El usuario puede escoger un item de la lista, o puede editar su opción en la CajaTexto.

HScrollBar � Ofrece un rango de valores correspondientes a una escala

numérica , presentada como una barra deslizante horizontal.

VScrollBar � Ofrece un rango de valores correspondientes a una escala

numérica , presentada como una barra deslizante vertical.

Uso de controles CheckBox Un control tipo CheckBox indica cuando una condición o situación particular está activada o desactivada (ON u OFF). Normalmente, se emplea este tipo de control para proporcional al usuario opciones de la forma Sí/No, Yes/Not, True/False. Debido a que las casillas de verificación

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem 13/09/05 [email protected]

Capítulo 3 – Entorno y Lenguaje de Programación Página 400

funcionan independientemente, el usuario puede escoger cualquier número de opciones al mismo tiempo.

La figura 3.58 es el diseńo de una interfaz que emplea controles CheckBox y controles OptionButton . Se pueden escoger hasta dos opciones para el estilo del texto (normal/ cursiva, normal/negrita, negrita/cursiva), pero sólo una opción para el tamańo de las letras. Las propiedades de los objetos de la interfaz se relacionan en la tabla 3.25.

Figura 3.58. Ejemplo CheckBox y OptionButton.

Tabla 3.25. Propiedades de interfaz/fig. 3.58.

Objeto Propiedad Valor

Form1 Caption Ejemplo CheckBox, OptionButton

BackColor &H00C0C000& Frame1 Caption OPCIONES

BackColor &H00C0FFFF&

Font Trebuchet Ms, Negrita, 14

ForeColor &H00FF0000& Frame2 Caption TAMAÑO

BackColor &H00C0FFFF&

Font Trebuchet Ms, Negrita, 14

ForeColor &H00FF0000& Command

1 Caption &Cerrar

BackColor &H00C0E0FF&

Font Trebuchet Ms, Negrita, 14

Style 1 – Graphical

Label1 Caption Digite su texto aquí:

BackColor &H00C0FFFF& Alignment 2 – Center

Font Trebuchet Ms, Negrita, 14

Check1 Caption Negrita

Font Trebuchet Ms, Negrita, 14

Check2 Caption Cursiva

Font Trebuchet Ms, Negrita, 14

Capítulo 3 – Entorno y Lenguaje de Programación 13/09/05 _____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 401

Check3 Caption Normal

Font Trebuchet Ms, Negrita, 14

Option1 Caption 10

Font Trebuchet Ms, Negrita, 14

Option2 Caption 14

Font Trebuchet Ms, Negrita, 14

Option3 Caption 18

Font Trebuchet Ms, Negrita, 14

Option4 Caption 22

Font Trebuchet Ms, Negrita, 14

Text1 Font Trebuchet Ms, Negrita, 14

MultiLine True ScrollBars 3 – Both

Check4 Caption Mayúsculas

Font Trebuchet Ms, Negrita, 14

Check5 Caption Minúsculas

Font Trebuchet Ms, Negrita, 14

Option5 Caption 36

Font Trebuchet Ms, Negrita, 14

Option6 Caption 48

Font Trebuchet Ms, Negrita, 14

La programación de la interfaz de la figura 3.58 se muestra a continuación en la tabla 3.26.

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem 13/09/05 [email protected]

Capítulo 3 – Entorno y Lenguaje de Programación Página 402

Tabla 3.26 Programación de la interfaz ilustrada en la figura 3.58

Private Sub Command1_Click() Dim Salir As Byte Salir = MsgBox("¿S A L I R ?", 4 + 32, "* COMPROBAR SALIDA *") If (Salir = 6) Then End End Sub Se emplea la función MsgBox() con el tipo de ventana 4, Sí / No, y el ícono interrogativo (32).

Private Sub Check1_Click() If Check1.Value = 1 Then ' Si ha sido señalado (Checked = chuleado"). Text1.FontBold = True Else ' Si no ha sido señalado (UnChechked = "no-chuleado"). Text1.FontBold = False End If End Sub

Private Sub Check2_Click() If Check2.Value = 1 Then ' Se ha señalado (Checked = "chuleado"). Text1.FontItalic = True Else ' Si no ha sido señalado (UnChechked = "no-chuleado"). Text1.FontItalic = False End If End Sub

Private Sub Check3_Click() If Check3.Value = 1 Then ' Si ha sido señalado (Checked = "chuleado"). Text1.FontBold = False Text1.FontItalic = False End If End Sub

Private Sub Check4_Click() If Check4.Value = 1 Then ' Si ha sido señalado (Checked = "chuleado"). Text1 = UCase(Text1) ‘ La función Ucase() convierte a mayúsculas. End If End Sub

Private Sub Check5_Click() If Check5.Value = 1 Then ' Si ha sido señalado (Checked = "chuleado"). Text1 = LCase(Text1) ‘ La función LCase() convierte a minúsculas. End If End Sub

Private Sub Option1_Click() If Option1.Value = True Then ' Si está señalado (True = "chuleado"). Text1.FontSize = 10 End If End Sub

Capítulo 3 – Entorno y Lenguaje de Programación 13/09/05 _____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 403

Private Sub Option2_Click() If Option2.Value = True Then ' Si está señalado (True = "chuleado"). Text1.FontSize = 14 End If End Sub

Private Sub Option3_Click() If Option3.Value = True Then ‘Si está señalado (True = "chuleado"). Text1.FontSize = 18 End If End Sub

Private Sub Option4_Click() If Option4.Value = True Then ' Si está señalado (True = "chuleado"). Text1.FontSize = 22 End If End Sub

Private Sub Option5_Click() If Option5.Value = True Then ' Si está señalado (True = "chuleado"). Text1.FontSize = 36 End If End Sub

Private Sub Option6_Click() If Option6.Value = True Then ' Si está señalado (True = "chuleado"). Text1.FontSize = 48 End If End Sub