http://www.unalmed.edu.co/~walvarem
13/09/05
Diseo de la interfaz
La interfaz es el medio bsico de comunicacin entre el usuario y el algoritmo que se dise. En Visual Basic, la interfaz consta de uno o ms 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 tpica 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 diseo. El conjunto de controles, incluyendo al formulario, es la sociedad de objetos que implementa el algoritmo diseado. 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 permetro, 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 cdigo fuente (programas) pertinentes. Es posible alinear los controles que se encuentran agrupados, utilizando la opcin 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 opcin Align del men Format para escoger el tipo de alineamiento a establecer. Es conveniente que las cajastexto queden sin ningn mensaje en su interior; para ello se debe dejar en blanco la propiedad Text.
Pgina 370
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.
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 especfico. En la figura siguiente se muestra el programa para el objeto Command1, el primer botn de comando de la interfaz arriba descrita (el botn con el mensaje Leer Datos).
http://www.unalmed.edu.co/~walvarem
13/09/05
En la ventana mostrada en la figura 3.39, inmediatamente debajo de la barra de ttulo 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 especfico; 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 bsico de todo procedimiento se inicia con Private Sub y finaliza con End Sub; entre estos dos van las diferentes instrucciones segn la lgica del algoritmo. En este ejemplo se leen los valores numricos de entrada, con verificacin del rango vlido; adems, se emplea una rutina de control de errores atrapables.
Ejecucin y depuracin
Una vez se han elaborado los programas para cada uno de los objetos que as lo requieran, se puede entrar al tiempo de ejecucin con el fn 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 ejecucin de un proyecto.
Figura 3.40 Ventana de los mensajes de Depuracin
Mediante el botn End se termina la interaccin con el proyecto; con el botn Debug se entra al modo de depuracin que permite ubicar la instruccin donde se ha presentado el error y realizar los correctivos dle caso; mediante el botn Help se visualiza una explicacin del error y de los posibles cursos de accin a tener en cuenta para subsanar tal error.
Pgina 372
Usar InputBox
La funcin InputBox muestra un cuadro de dilogo estndar que solicita al usuario que escriba una cadena. Cuando el usuario hace clic en "Aceptar" o presiona ENTRAR, la funcin InputBox devuelve el contenido del cuadro de texto. Si el usuario hace clic en "Cancelar", InputBox devuelve una cadena vaca (""). Este ejemplo utiliza una funcin InputBox dentro de una instruccin Do...Loop para pedir al usuario que escriba una fecha vlida.
__________________________________________________________________________________________ walvarem@unalmed.edu.co Pgina 373
http://www.unalmed.edu.co/~walvarem
13/09/05
StartDate = InputBox("Escriba una fecha inicial") If IsDate(StartDate) Or StartDate = "" Then ValidDate = True Else ValidDate = False MsgBox "Escriba una fecha vlida: dd/mm/aa" End If
Este cdigo muestra un cuadro de entrada tal como aparece a continuacin, en la figura 3.41.
Figura 3.41. Validacin de un dato tipo fecha
Algunas de las propiedades, comunes a muchos controles son: MaxLength, PassWordChar, Default, Cancel, Locked.
Pgina 374
Propiedad MaxLength La propiedad MaxLength determina la longitud mxima del texto permitido en un cuadro de texto. El sistema emite un pitido cuando el usuario intenta escribir ms all de la longitud mxima. Si desea que se muestre un mensaje de error, deber interceptar la pulsacin de tecla en el evento KeyPress o bien utilizar el control de edicin con mscara, procedimientos que se tratarn posteriormente en este mismo captulo. Propiedad PasswordChar La propiedad PasswordChar determina el carcter que debe mostrarse a medida que el usuario escribe el texto en un cuadro de texto. Aunque puede utilizarse cualquier carcter, la mayora de las aplicaciones basadas en Windows utilizan el carcter asterisco (*), que es el carcter 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 botn de comando es True, el evento Click de ese botn se ejecuta cuando el usuario presiona ENTRAR . Slo 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 botn de comando es True, el evento Click de ese botn se ejecuta cuando el usuario presiona ESC en el formulario. Slo 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 slo podrn ver los datos de un cuadro de texto.
http://www.unalmed.edu.co/~walvarem
13/09/05
En el ejemplo siguiente, los caracteres se convierten en maysculas a medida que el usuario los escribe: Sub Text1_KeyPress (KeyAscii As Integer) KeyAscii = Asc(UCase(Chr(KeyAscii))) End Sub En este ejemplo de cdigo se evita que el cuadro de texto reciba caracteres que no sean dgitos.
Sub Text1_KeyPress (KeyAscii As Integer) If KeyAscii = 8 Then 'Permitir el uso de RETORNO Exit Sub End If 'Los nicos caracteres vlidos son los dgitos. 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 seccin 3.7, tabla 3.1.
Visual Basic proporciona las constantes de los cdigos de tecla. Para ver las constantes de los cdigos de tecla disponibles, elija F2 para mostrar el Examinador de objetos, despus 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/Mdulos".
Pgina 376
Figura 3.43. Constantes de los cdigos de tecla, predefinidas en Visual Basic 6.0.
http://www.unalmed.edu.co/~walvarem
13/09/05
En la figura 3.44 se muestra la apariencia fsica del control de edicin de mscaras, tanto para la versin 4.0 de Visual Basic, como para las versiones 5.0, 6.0. Figura 3.44 Control para la edicin de mscaras. Este objeto facilita la validacin de datos en las aplicaciones de Visualbasic (versiones 4.0, 5.0, 6.0).
Propiedades importantes
Hay varias propiedades del control de edicin con mscara 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 edicin con mscaras.
Propiedad Mask
Puede definir una mscara de entrada utilizando la propiedad Mask. La posicin de cada carcter del control de edicin con mscara se asigna a un marcador de posicin de un tipo especificado o un carcter literal. Puede escribir sus propias mscaras utilizando los caracteres especiales para las mscaras o una de las mscaras predefinidas. Algunos caracteres de mscara indican una entrada obligatoria. Por ejemplo la mscara "#" indica una entrada numrica obligatoria. Se produce un evento ValidationError si el usuario cambia de campo sin escribir ningn valor vlido. La mscara "9" es un valor numrico opcional. El usuario puede cambiar de campo sin escribir ningn nmero.
Propiedad AutoTab
Pgina 378
Si AutoTab es True y el usuario llena un control con el nmero mximo de caracteres, el siguiente carcter que escriba har que el enfoque se desplace al siguiente control, donde aparecer el carcter. Si AutoTab es False, el usuario deber presionar ENTRAR o TAB para desplazarse al control siguiente.
Evento ValidationError
Si el usuario escribe un carcter no vlido respecto a la mscara de entrada, deber proporcionarle cierta informacin para indicarle el error. Para proporcionar informacin de retorno puede colocar el cdigo en el evento ValidationError. El evento ValidationError se produce si el usuario escribe un carcter no vlido o sale del control de edicin con mscara sin escribir los caracteres necesarios. Si intenta asignar una cadena a un control de edicin con mscara y la cadena representa una infraccin respecto a la mscara, se produce un evento ValidationError y un error en tiempo de ejecucin (por este orden). La cadena no se asigna al control. El control de edicin con mscara conserva el valor que tena antes de que se intentara la asignacin. Esto podra suceder si est leyendo informacin de una base de datos y sta entra en conflicto con la mscara. Argumentos: El evento ValidationError ofrece dos argumentos: InvalidText La cadena que no es vlida. StartPosition La posicin del carcter no vlido.
Ejemplo
En este ejemplo de cdigo, el mensaje de error "Lmite de 6 dgitos" se muestra si el usuario escribe ms de 6 dgitos. Se muestra un mensaje de error si el usuario escribe un valor que no sea un nmero.
Sub mskID_ValidationError (InvalidText As String, _ StartPosition As Integer) If StartPosition = mskID.MaxLength Then lblError.Caption = "Lmite de 6 dgitos" Else lblError.Caption = "Slo dgitos" End If End Sub
Si trata de asignar una cadena que no es vlida a un control de edicin con mscara, recibe un evento ValidationError y un error en tiempo de ejecucin.
http://www.unalmed.edu.co/~walvarem
13/09/05
En el siguiente cdigo, se supone que mskID tiene la mscara "###-###". Esta instruccin causa un evento ValidationError y un error en tiempo de ejecucin. La propiedad Text de mskID no cambia. El argumento InvalidText ser "222a34444". El argumento StartPosition ser "3". mskID.Text = "222a34444" Esta demostracin 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 vlida, la aplicacin muestra un mensaje de error y establece el enfoque al campo con datos no vlidos. La ventaja de este tipo de validacin es que se avisa al usuario inmediatamente si un campo no es correcto. Si utiliza este mtodo para validar datos de campo, recuerde lo siguiente: Permita que el usuario disponga de alguna forma de pulsar la tecla de tabulacin desde el campo sin haber completado el mismo. Si el usuario no sabe qu entrada es vlida, no le obligue a permanecer en ese campo. Utilice SetFocus con cuidado. Podra dar lugar a un bucle infinito donde existan dos controles que estn 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 vlido. Dar lugar a un bucle infinito si txtFirstName y txtLastName contienen datos no vlidos. Por ejemplo: 1. El usuario escribe datos no vlidos en txtFirstName pulsa el tabulador para ir a txtLastName. 2. txtFirstName recibe un evento LostFocus. 3. El mtodo 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 tambin tiene datos errneos, la aplicacin emite otro SetFocus para establecer el enfoque nuevamente a txtLastName, dando lugar a un bucle infinito.
Private Sub txtFirstName_LostFocus() If Not (ValidationInProgress) Then 'aceptar validacin 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 validacin If txtLastName.Text = "" Then
Nota: En lugar de validar datos en el evento LostFocus, considere la posibilidad de colocar el
cdigo de validacin en un botn "Aceptar". Esto permite al usuario rellenar el formulario y a continuacin hacer clic en "Aceptar" para validar todos los campos. Esta demostracin ilustra la utiliza cin de LostFocus para realizar la validacin.
de tecla de control.
http://www.unalmed.edu.co/~walvarem
13/09/05
El programa debe proporcionar pistas visuales sobre los comandos que estn disponibles. Por ejemplo, si necesita que el usuario rellene todos los campos antes de hacer clic en el botn "Aceptar", no deber habilitar el botn "Aceptar" hasta que se hayan escrito datos en todos los campos tal como se muestra en esta ilustracin.
Figura 3.46. Botn ACEPTAR desactivado.
Mediante esta tcnica es posible restringir el cceso a ciertos procesos que requieren variables necesariamente obtenidas de procesos previos. En este ejemplo, slo cuando se termine de digitar el cdigo del departamento, y/o se pulse alguna tecla adicional, se habilitara el botn Aceptar. En el siguiente ejemplo de cdigo se muestra una manera de llevar a cabo esta operacin. El ejemplo realiza un bucle por la coleccin Controls para validar cada control. La coleccin Controls es una coleccin 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 botn "Aceptar" slo 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 vaco cmdOK.Enabled = False 'inhabilitar el botn "Aceptar" Exit Sub End If 'Pueden verificarse otros tipos de control si es necesario End If Next 'todos los cuadros de texto contienen informacin cmdOK.Enabled = True End Sub
Captulo 3 Entorno y Lenguaje de Programacin 13/09/05 _____________________________________________________________________________________________ Figura 3.47. formulario. Validacin de campos en un
La validacin de campos es una tcnica requerida para garantizar que los datos que intervienen en un proceso de clculo 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 cdigo en el botn 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 = "Nmero de departamento no vlido" & _ "Los valores vlidos estn entre 50 y 80" mskDept.SetFocus mskDept.ForeColor = vbRed Exit Sub Else Unload Me End If End Sub
http://www.unalmed.edu.co/~walvarem
13/09/05
El evento Initialize se produce cuando una aplicacin 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 cdigo siguiente se muestran cules son los eventos causados por diversos mtodos 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 aplicacin. Tenga en cuenta que los eventos Activate y DeActivate no se producen si el usuario cambia el enfoque a otra aplicacin distinta y vuelve. Estos eventos slo se producen cuando el usuario se desplaza dentro de la aplicacin 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 informacin. QueryUnload El evento QueryUnload se produce justo antes del evento Unload cuando se descarga el formulario. El evento QueryUnload le permite determinar cmo se ha iniciado el evento Unload y cancelar la descarga si se desea.
El evento QueryUnload dispone de dos argumentos:
El argumento UnloadMode indica cmo se inici Unload. El argumento Cancel cancela el evento Unload. Si establece Cancel a True, la aplicacin seguir tal como se encontraba antes de que se intentara el cierre.
Pgina 384
Nota: La instruccin End no produce ningn evento. Si desea asegurarse de que el evento Unload del formulario se produzca cuando finalice la aplicacin, utilice la instruccin UnLoad en lugar de la instruccin End. En este ejemplo de cdigo se cancela una descarga (Unload) si el usuario ha tratado de cerrar la aplicacin 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
http://www.unalmed.edu.co/~walvarem
13/09/05
Pgina 386
Captulo 3 Entorno y Lenguaje de Programacin 13/09/05 _____________________________________________________________________________________________ Figura 3.48. Controles disponibles en la caja de herramientas de VisualBasic 4.0. Categora de los controles Hay tres categoras generales de los controles en VisualBasic: 1. Controles estndar, tales como Label (rtulo), TextBox (CajaTexto), CommandButton (BotnComando), o Frame ( Marco), los cuales estn ensamblados dentro del programa ejecutable *.EXE de VisualBasic. Los controles estndar siempre aparecen en la Caja de herramientas. Dependiendo del tipo de versin que se tenga instalada (aprendizaje, profesional, o empresarial) habrn ms o menos controles estndar 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 tecnologa, as como las versiones mejoradas de los controles estndar, tales como el control Data-BoundListBox o el control DataBoundComboBox. 3. Controles insertables, como una hoja de clculo del tipo Microsoft Excel, una presentacin 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 tecnologa de automatizacin 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 pgina siguiente.
Figura 3.49. Caja herramientas VisualBasic 5.0,6.0(a)
En las versiones 5.0 y 6.0 de VisualBasic, la caja de herramientas permite agregar otras lengetas ( o fichas) para incluir controles adicionales, ya sean personalizados o insertables. En (a) se tiene
__________________________________________________________________________________________ walvarem@unalmed.edu.co Pgina 387
http://www.unalmed.edu.co/~walvarem
13/09/05
los controles de tipo estndar y otros que se han agregado (como el control MaskEdBox) bajo la lengeta General . En (b) se presenta la lengeta 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 opcin Agregar ficha; se da el nombre de la ficha en el panel de dilogo resultante; se hace click en ACEPTAR.
Para ver y agregar controles personalizados siga los siguientes pasos, en la versin 4.0:
Haga click izquierdo en el men Herramientas y del submen que se despliega seleccione, haciendo click izq., la opcin 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 opcin Controles personalizados (haciendo click izq. sobre ella). El panel (o ventana) de dilogo que se presenta, muestra la lista de controles personalizados e insertables disponibles en la versin instalada de VisualBasic. Los que estn sealados (con un chuleado) son los activos. Para incluir otros controles en la caja de herramientas, simplemente selelos en la lista presentada, de suerte que la casilla de verificacin a la izquierda del nombre quede chuleada. Luego, haga click izquierdo en el botn 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 opcin Componentes. Otra forma: Haga click derecho en la caja de herramientas, en un rea libre de controles, y del men contextual resultante escoja la opcin Componentes (haciendo click izq. sobre ella). El panel (o ventana) de dilogo que se presenta, muestra la lista de controles personalizados e insertables disponibles en el tipo de versin instalada de VisualBasic (de aprendizaje, profesional o empresarial). Los que estn sealados (con un chuleado) son los activos. Para incluir otros controles en la caja de herramientas, simplemente selelos en la lista presentada, de suerte que la casilla de verificacin a la izquierda del nombre quede chuleada. Luego, haga click izquierdo en el botn APLICAR, y luego click izquierdo en el botn CERRAR.
Pgina 388
En la tabla 3.19 se presenta una breve descripcin 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 especfico 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 (captulo: introduccin). Tabla 3.19. Descripcin bsica de los controles.
Control Nombre de la clase Pointer Descripcin El puntero del mouse suministra el medio principal de ubicar y ajustar el tamao de los formularios y controles. (No es propiamente un control). El control PictureBox (CajaGrfica) despliega varios tipos de grficos 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. Slo despliega texto. Sirve para visualizar mensajes de cualquier tipo. El usuario no puede editar ni modificar los mensajes desplegados por este control. Proporciona un rea de edicin, permitiendo entrar datos y tambin visualizar datos. Sirve para agrupar a otros controles, generalmente con funciones afines dentro de un proyecto. Es el principal medio para expresar ciertas acciones o comportamientos dentro de una interfaz. El usuario, normalmente, lo activa haciendo click sobre este control. 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. Permite suministrar al usuario mltiples opciones, de las cuales slo se puede escoger una. Es una combinacin de una CajaTexto (TextBox) con una CajaLista (ListBox) , permitiendo editar un dato o seleccionar de las opciones ofrecidas. Suministra una lista de items de la cual el usuario puede escoger. Permite seleccionar un valor dentro de un rango especfico, 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. 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. El temporizador permite ejecutar eventos temporales, expresados como intervalos de tiempo, normalmente basados en el reloj interno de mquina (y expresados en milisegundos). Facilita y permite escoger unidades de disco vlidas, de entre un listado que automticamente 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.).
PictureBox
HScrollBar
VScrollBar
Timer
DriveListBox
http://www.unalmed.edu.co/~walvarem
13/09/05
DirListBox FileListBox
Permite escoger directorios y trayectorias de directorios, de entre la estructura (arbrea) de directorios presentes en una unidad de disco. Sirve para escoger archivos de entre una lista que automticamente este control presenta al usuario, de los archivos (ficheros) grabados en una carpeta (o directorio) especfica. Sirve para agregar una figura a un formulario. Las figuras que se pueden agregar son: rectngulo, cuadrado, elipse, o crculo. Dichas figuras estn automticamente disponibles dentro de este control. Para dibujar un segmento de lnea recta. Despliega archivos grficos tipo *.bmp, *.ico, *.wmf, *.gif, *.jpg. Tambin acta como un botn de comando cuando se hace click sobre l. Se utiliza para conectar una interfaz con un archivo de base de datos, previamente creado, y desplegar informacin de la base de datos. Permite incrustar aplicaciones basadas en Windows dentro de un proyecto VisualBasic. La automatizacin OLE (Object-Linking and Embedding) hace posible correr otras aplicaciones dentro de los proyectos VisualBasic. Combina las propiedades del ComboBox con las funciones de acceso a datos. Combina las propiedades del control ListBox con las funciones de acceso a datos. Un control Grid muestra una serie de filas y columnas. La interseccin de una fila y una columna es una celda. Puede leer y establecer el contenido de cada celda en cdigo (programas). 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. Combina las caractersticas del control TextBox con las funciones de la edicin de datos con mscaras de edicin. Es muy til en los procesos de validacin de datos.
Data-BoundGrid
MaskEdBox
Pgina 390
Para reubicar un control sobre un formulario, simplemente se hace click izquierdo sobre l (as tiene el enfoque de diseo), se sostiene el click y se desplaza a la nueva ubicacin en el formulario. Otra forma de incluir controles en un formulario : en la caja de herramientas, haga dobleclick izquierdo sobre el control especfico, con lo cual dicho control se inserta en el formulario ms o menos hacia el centro del mismo. Este tipo de insercin de controles en un formulario da automticamente el enfoque de diseo al control, con lo cual los ajustadores de tamao estn visibles. Luego de insertar el control puede reubicarse y modificarse sus dimensiones de la forma explicada anteriormente.
Todas las acciones anteriores hacen que VisualBasic invoque automticamente el procedimiento (o programa) del evento Click.
http://www.unalmed.edu.co/~walvarem
13/09/05
En la figura 3.50 se muestra una interfaz en la cual se han diseado dos controles del tipo BotnComando (CommandButton), cada uno con un mensaje apropiado (esta aplicacin 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.
Command1
Command2 Image1
Image2 Image3
La imagen, que se asemeja a un semforo, est formada por tres imgenes contiguas (imgRed, imgGreen, imgYellow). Para denotar que una letra especfica est habilitada como letra rpida, se coloca un signo de ampersand (&) antes de ella. Ese es el caso de los botones cmdChange y cmdClose. De suerte, que para el botn cmdChange la letra ese (s) es la letra habilitada como letra rpida para activar el botn (se empleara ALT + S: aqu el signo ms slo indica pulsar a la vez). La programacin de los objetos (o controles), que requieren efectuar algn comportamiento en la interfaz de la figura 3.50, se presenta en la figura 3.51.
Pgina 392
El entorno interactivo de VisualBasic dispone de un editor especializado para escribir la programacin de los diferentes objetos que componen una interfaz. Para activar el editor se puede hacer doble click izquierdo en uno de los objetos diseados.
(a)Procedimiento ChangeSignal.
Private Sub ChangeSignal() Verifica de qu color es la luz del semforo, y la cambia al prximo 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
La ventana del editor tiene la estructura bsica de una ventana en Windows. La barra de ttulo 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 estndar de todo procedimiento en Visual Basic es as:
...................
End Sub (c)Objeto cmdChange
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.
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.
http://www.unalmed.edu.co/~walvarem
13/09/05
Pgina 394
Captulo 3 Entorno y Lenguaje de Programacin 13/09/05 _____________________________________________________________________________________________ Tabla 3.21. Propiedades de la interfaz/fig. 3.52 Objeto
Form
Propiedad
BackColor Caption Name Caption
Valor
&H8000000F& Propiedades de Label frmWordWrap Una demostracin de AutoSize y WordWrap lblDisplay &H0080FFFF& OPCIONES Stencil, Negrita, 14 &H000080FF& &AutoSize Tahoma, Negrita, 14 chkAutoSize &WordWrap Tahoma, Negrita, 14 chkWordWrap &Visualizar Tahoma, Negrita, 14 cmdDisplay &Cerrar Tahoma, Negrita, 14 cmdClose
Tabla 3.22. Programas para la interfaz de la figura 3.52. __________________________________________________________________________________________ walvarem@unalmed.edu.co Pgina 395
http://www.unalmed.edu.co/~walvarem
13/09/05
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 ejecucin, el usuario har click en las casillas de verificacin (controles CheckBox). Si sobre la casilla de verificacin del control chkAutoSize se ha hecho click, la propiedad Value es 1; en este caso, la propiedad AutoSize se pone a True. Si sobre la casilla de verificacin del objeto chkWordWrap se ha hecho click, la propiedad Value es 1; en este caso, la propiedad WordWrap se pone a True. Esta es la lgica 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 grfica en el entorno de VisualBasic: 1 twip = 1/1440 pgda.). El botnComando cmdClose corrobora la salida del tiempo de ejecucin empleando la funcin MsgBox(), que retorna valores enteros. La variable T se define como Byte (entero) para recibir el valor que devuelve la funcin; si dicho valor es 6, el usuario puls el botn S, y en consecuencia se descarga el formulario de memoria (UnLoad Me), terminndose el tiempo de ejecucin y retornndose al tiempo de diseo.
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
Los controles tipo TextBox (CajaTexto) son bastante verstiles, permitiendo tanto la entrada de datos desde la terminal (pantalla/teclado) como el despliegue de datos en la pantalla. Este tipo de control slo maneja texto, por lo cual hay que efectuar diversas validaciones sobre los datos, cuando son numricos , para poderlos utilizar en los algoritmos. Es decir, que todo dato que se digite en este tipo de control, tiene una representacin 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 slo pueden establecerse a tiempo de diseo. La propiedad MutiLine es de contenido lgico (tipo de datos Boolean); slo admite False o True (ver figura 3.53), y hace posible que una CajaTexto muestre un texto extenso en varias lneas. La funcin ScrollBars admite uno de cuatro valores enteros (0, 1, 2, 3), como se ilustra en la figura 3.54 (la opcin 3 - Both incluir ambas barras de desplazamiento). Las barras de desplazamiento, cuando se definen, se ven a tiempo de diseo (como en la figura 3.55); pero el efecto multilinea slo se ver a tiempo de ejecucin cuando se introduzca un texto extenso en el control.
Pgina 396
Muchas propiedades de los controles manifiestan sus efectos a tiempo de diseo y de ejecucin (como ScrollBars del TextBox); pero otras slo muestran sus efectos a tiempo de ejecucin (como Figura 3.55. Barras deslizantes del TextBox 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 mltiples lneas de texto a tiempo de ejecucin. Un control TextBox multilnea automticamente maneja el salto de lnea si no est presente una barra deslizante horizontal. Por su parte, la propiedad ScrollBars se establece a 0 - None como valor estndar (por defecto). El avance automtico de lneas libera al usuario de tener que insertar la ruptura de lneas manualmente. Cuando una lnea de texto es ms extensa que la lnea desplegable por el control TextBox, entonces el mismo control avanza el texto a la lnea siguiente. Desafortunadamente, la ruptura de lneas, en textos extensos, no puede establecerse en la Ventana de Propiedades en tiempo de diseo. Pero, por medio de cdigo fuente (programas) puede obtenerse la ruptura de lneas insertando un caracter de nueva lnea, obtenido al combinar un caracter de retorno de carro con un caracter de fn de lnea (cdigos ASCII 13 y 10, respectivamente). Por ejemplo, el siguiente procedimiento, para el evento Load de un formulario, asignar varias lneas 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 NuevaLnea Msg$ = "..... una linea ...." & NL & ".... otra linea ..." Msg$ = Msg$ & "... otra linea ms .................." & NL & "...fin" Text1.Tex = Msg$ End Sub El control TextBox puede implearse para disear la edicin de claves o cdigos 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
__________________________________________________________________________________________ walvarem@unalmed.edu.co Pgina 397
http://www.unalmed.edu.co/~walvarem
13/09/05
pueden digitar) suministran una tcnica sencilla de control en la edicin 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 descripcin de los objetos se presenta en la tabla 3.23. Obsrvese que a tiempo de ejecucin no se ven los caracteres digitados; se ve, en lugar de ellos el caracter especificado en la propiedad PassWordChar del control Text1. (La fotografa es del eclipse de Agosto11/99, publicada en el peridico El Tiempo de Bogot).
Tabla 3.23. Propiedades de interfaz/fig.3.56. Objeto
Form1
Propiedad
BackColor Caption Alignment BackColor BorderStyle Caption Font ForeColor Height Picture Width Alignment BackColor BorderStyle Caption Font ForeColor BackColor BorderStyle MaxLenght PassWordChar
Valor
&H0080C0FF& Form1: PassWord 2-Center &H00FFFF00& 1-Fixed Single Eclipse Corporation Ltd. PosterBodoni, Negrita, 14 &H000000FF& 1710 (buscar la imagen) 2475 2-Center &H00C0FFFF& 1-Fixed Single Digite su cdigo: Zurich LtCnBt, Negrita, 12 &H00FF0000& &H00C0C000& 1-Fixed Single 6 *
Label1
Image1
Label2
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 botn (llamado botn generador, que contiene unos puntos suspensivos) el cual activa un panel de dilogo 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 pgina web del peridico 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 cdigo ASCII del caracter que se digita en la CajaTexto. En el siguiente ejemplo muestra cmo 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 cdigo ASCII, mediante la funcin 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.
Pgina 398
Captulo 3 Entorno y Lenguaje de Programacin 13/09/05 _____________________________________________________________________________________________ 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.
Tambin, es posible bloquear la edicin de los mensajes desplegados en el control TextBox mediante la propiedad Locked, la cual es de contenido Boolean (lgico), admitiendo slo 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 slo afecta la interaccin con el usuario a tiempo de ejecucin, y de todas maneras mediante programacin es posible alterar el estado de la propiedad Locked.
http://www.unalmed.edu.co/~walvarem
13/09/05
funcionan independientemente, el usuario puede escoger cualquier nmero de opciones al mismo tiempo. La figura 3.58 es el diseo 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 slo una opcin para el tamao de las letras. Las propiedades de los objetos de la interfaz se relacionan en la tabla 3.25.
Tabla 3.25. Propiedades de interfaz/fig. 3.58. Objeto Form1 Propieda d Caption Valor Ejemplo CheckBox, OptionButton OPCIONES Trebuchet Ms, Negrita, 14 TAMAO Trebuchet Ms, Negrita, 14
BackColor &H00C0E0FF& Font Style Label1 Figura 3.58. Ejemplo CheckBox y OptionButton. Caption Trebuchet Ms, Negrita, 14 1 Graphical Digite su texto aqu:
BackColor &H00C0FFFF& Alignment 2 Center Font Check1 Caption Font Check2 Caption Font Trebuchet Ms, Negrita, 14 Negrita Trebuchet Ms, Negrita, 14 Cursiva Trebuchet Ms, Negrita, 14
Pgina 400
Captulo 3 Entorno y Lenguaje de Programacin 13/09/05 _____________________________________________________________________________________________ Check3 Caption Font Option1 Caption Font Option2 Caption Font Option3 Caption Font Option4 Caption Font Text1 Font MultiLine Check4 Caption Font Check5 Caption Font Option5 Caption Font Option6 Caption Font Normal Trebuchet Ms, Negrita, 14 10 Trebuchet Ms, Negrita, 14 14 Trebuchet Ms, Negrita, 14 18 Trebuchet Ms, Negrita, 14 22 Trebuchet Ms, Negrita, 14 Trebuchet Ms, Negrita, 14 True Maysculas Trebuchet Ms, Negrita, 14 Minsculas Trebuchet Ms, Negrita, 14 36 Trebuchet Ms, Negrita, 14 48 Trebuchet Ms, Negrita, 14
ScrollBars 3 Both
http://www.unalmed.edu.co/~walvarem
13/09/05
Tabla 3.26 Programacin 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 funcin 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 sealado (Checked = chuleado"). Text1.FontBold = True Else ' Si no ha sido sealado (UnChechked = "no-chuleado"). Text1.FontBold = False End If End Sub Private Sub Check2_Click() If Check2.Value = 1 Then ' Se ha sealado (Checked = "chuleado"). Text1.FontItalic = True Else ' Si no ha sido sealado (UnChechked = "no-chuleado"). Text1.FontItalic = False End If End Sub Private Sub Check3_Click() If Check3.Value = 1 Then ' Si ha sido sealado (Checked = "chuleado"). Text1.FontBold = False Text1.FontItalic = False End If End Sub Private Sub Check4_Click() If Check4.Value = 1 Then ' Si ha sido sealado (Checked = "chuleado"). Text1 = UCase(Text1) La funcin Ucase() convierte a maysculas. End If End Sub Private Sub Check5_Click() If Check5.Value = 1 Then ' Si ha sido sealado (Checked = "chuleado"). Text1 = LCase(Text1) La funcin LCase() convierte a minsculas. End If End Sub Private Sub Option1_Click() If Option1.Value = True Then ' Si est sealado (True = "chuleado"). Text1.FontSize = 10 End If End Sub
Pgina 402
Private Sub Option2_Click() If Option2.Value = True Then ' Si est sealado (True = "chuleado"). Text1.FontSize = 14 End If End Sub Private Sub Option3_Click() If Option3.Value = True Then Si est sealado (True = "chuleado"). Text1.FontSize = 18 End If End Sub Private Sub Option4_Click() If Option4.Value = True Then ' Si est sealado (True = "chuleado"). Text1.FontSize = 22 End If End Sub Private Sub Option5_Click() If Option5.Value = True Then ' Si est sealado (True = "chuleado"). Text1.FontSize = 36 End If End Sub Private Sub Option6_Click() If Option6.Value = True Then ' Si est sealado (True = "chuleado"). Text1.FontSize = 48 End If End Sub