libro anaya visual basic 6 0

Upload: david-tonato-peralta

Post on 11-Jul-2015

844 views

Category:

Documents


75 download

TRANSCRIPT

2

Curso

Captulo 1Si sientes inters por una seccin de programacin es porque no te conformas con utilizar tu PC como si se tratase de una videoconsola, una mquina de escribir o un reproductor MP3. Lo que os caracteriza a todos los que ahora os adentris en el fascinante mundo de la programacin es que queris sacarle todo el jugo posible a vuestra mquina y, por supuesto, a vuestra cabeza. Con esta nueva seccin os ayudaremos a dar vuestros primeros pasos de una manera sencilla, prctica y amena.Sin entrar en demasiados detalles diremos que un procesador es capaz de realizar una serie de operaciones bsicas como sumar o restar dos nmeros enteros, leer o escribir un dato en la memoria, comparar si una cantidad es igual, mayor o menor que otra, etc. Teniendo en cuenta que el ordenador trabaja en binario (slo distingue entre 1 y 0), podemos imaginarnos lo complicado que es transmitir las rdenes complejas. Aparece entonces la necesidadVisual Basic 6.0 3

de utilizar un tipo de herramientas que, a partir del lenguaje humano, genere rdenes que pueda comprender la mquina. Las herramientas de ese tipo son los denominados compiladores. El problema es que un compilador no interpreta directamente el lenguaje coloquial, sino una mezcla de comandos en ingls, nombres, operaciones matemticas y smbolos lgicos. Existe multitud de lenguajes de programacin de alto nivel. En un principio, el cdigo de un programa se escriba en unas tarjetas perforadas del tamao de un folio que se introducan a modo de disquetes en una computadora enorme. Despus aparecieron los primeros en los que se escriba el cdigo en un determinado lenguaje de programacin dentro de un fichero de texto. Despus se ejecutaba el compilador que generaba el archivo ejecutable. Con la llegada a la informtica personal del entorno de ventanas con sus mltiples controles, surgi la necesidad de trabajar con un software que facilitase la insercin de dichos controles. De esta manera apareci la denominada programacin visual, donde destacan Delphi, Visual Basic o Visual C++. Dentro de los entornos de programacin visual, el ms apropiado para aprender es Visual Basic, por su sencillez integracin en todas las versiones de Windows, si bien Delphi es una estupenda alternativa para los que hayan trabajado con Pascal. Para realizar las explicaciones y los ejemplos utilizaremos Microsoft Visual Basic 6.0, aunque posiblemente con versiones anteriores no encontris demasiadas diferencias.

Programar una calculadora de eurosPara empezar a introducirnos en el entorno de trabajo de Visual Basic, vamos a realizar un sencillo programa que iremos modificando a medida que vayamos adquiriendo conocimientos. De momento, disearemos una aplicacin que realice el cambio de pesetas a euros, prestando especial atencin a la insercin de controles y a la modificacin de sus propiedades.

Configurar el formularioLo primero que debemos hacer es ejecutar Microsoft Visual Basic. Despus seleccionamos EXE estndar en la pestaa Nuevo de la ventana Nuevo Proyecto y pulsamos el botn Abrir. Aparece entonces un documento en blanco, que es el proyecto que posteriormente generar el programa. Dentro de4 Curso

l aparece un formulario al que, desde la ventana Propiedades, vamos a cambiar algunos registros. Siempre que vayamos a modificar el registro de propiedad de algn control o formulario, debemos asegurarnos de que tenemos seleccionado el objeto correcto. En este caso no hay ninguna duda, pues tan slo tenemos un formulario. De todos modos, en el ttulo de la ventana Propiedades aparece el nombre del objeto activo. Con el formulario seleccionado modificamos los registros de las propiedades Nombre y Caption (las modificaciones se realizan en la columna de la derecha) con los valores fmrMoneda y Cambio de Moneda respectivamente (de ahora en adelante incluiremos un prefijo Reddick delante del nombre de cada objeto). El nombre que demos a un objeto ser aquel con el que nos referiremos a l a lo largo del programa, mientras que el valor de la propiedad Caption se muestra sobre el objeto.

EtiquetasCon el formulario configurado procedemos a incluir los objetos en l. En la parte superior del formulario incluiremos dos etiquetas (Label). Para ello, seleccionamos la herramienta correspondiente en el Cuadro de Herramientas y con ella dibujamos un pequeo rectngulo en la parte superior izquierda del formulario (no debe preocuparnos demasiado el tamao o la situacin que tenga un objeto dentro del formulario ya que ambos aspectosVisual Basic 6.0 5

son fcilmente modificables). Despus insertamos, del mismo modo, una etiqueta similar a la derecha de la primera. Tambin debemos cambiar algunas propiedades de las etiquetas. Concretamente pondremos lblPts en el registro Nombre de la primera y lblEuros en el de la segunda; Pesetas en el registro Caption de la primera y Euros en el de la segunda y, en el registro Font de ambas indicaremos una fuente Times New Roman negrita de 12 puntos en la ventana Fuente (que se despliega al pulsar sobre el botn que aparece en la celda del registro de la propiedad).

Cuadros de textoDebajo de las etiquetas y del mismo modo que se insertaron stas, se dibujan, con la herramienta TexBox, los dos cuadros de texto. Despus se les cambia el registro de la propiedad Nombre con los valores txtPts para el primero y txtEuros para el segundo. Para ambos cuadros indicaremos el valor 1Right Justify en la propiedad Alignment (para alinear los nmeros a la derecha), y el tipo Times New Roman normal de 12 puntos para el registro Font. Tambin en los dos cuadro de texto dejaremos vaco el registro de la propiedad Text (equivalente a Caption), para lo que tan slo hay que borrar el texto que tiene por defecto. Por ltimo, cambiaremos el valor de la propiedad Enabled a False del cuadro de texto txtEuros para impedir la insercin de datos, pues de momento tan slo debe mostrar un resultado.

Botones de comandoAhora slo nos queda insertar un par de botones de comando en la parte inferior del formulario. El primero har que se produzca la conversin y el segundo que podamos salir del programa (realmente este segundo botn no es demasiado importante porque la pantalla en la que se ejecutar el programa incluir en la barra de ttulo el clsico botn de cerrar). Dibujamos pues, ambos botones (con la herramienta CommandButton) en la parte inferior del formulario. Al primero lo llamaremos cmdConvertir y cmdSalir al se6 Curso

gundo (propiedad Nombre). Los valores correspondientes a la propiedad Caption sern Convertir y Salir respectivamente. Por ltimo, para asociar la tecla Intro del teclado al primer botn, slo hay que poner el registro de su propiedad Default como True. Del mismo modo, para asociar la tecla Esc al segundo, activaremos (pasando a True su registro) la propiedad Cancel del mismo. Tambin se les puede cambiar la propiedad Font para resaltar el texto.

Modificar tamao y posicinYa tenemos el formulario definido. Si queremos cambiar el tamao de alguno de los objetos o del propio formulario, slo hay que seleccionar el objeto correspondiente (con un clic encima de l) y arrastrar desde cualquiera de los ocho tiradores que definen su tamao. Para mover cualquier objeto dentro del formulario se pulsa sobre l y se arrastra hasta la posicin deseada. Para cambiar la ubicacin del formulario al iniciarse el programa, se utiliza la ventana Posicin del formulario.

Insertar cdigoHasta ahora slo hemos hecho el diseo del formulario o, lo que es lo mismo, de la pantalla del programa. Una vez terminado este proceso es el momento de incluir unas lneas de cdigo, es decir, un poco de programacin. Para programar el botn de cambio (cmdConvertir) haremos doble clic sobre l. Se despliega entonces la pantallaVisual Basic 6.0 7

de cdigo del proyecto. En el mismo punto de insercin donde se encuentra el cursor escribimos las lneas: txtEuros = txtPts / 166.386 txtEuros = Format(txtEuros,#,##0.00) Despus se cierra la ventana y se hace doble clic sobre el botn cmdSalir. Igual que con el primer botn, escribimos la lnea: End

Guardar y ejecutarCon el proyecto terminado lo ms indicado es guardar el trabajo realizado. El proceso es el mismo que el utilizado para guardar cualquier otro documento: pulsando sobre Guardar proyecto como en el men Archivo se abre la ventana Guardar archivo como, utilizada por multitud de programas. Primero se guarda el formulario y posteriormente el proyecto. Para evitar complicaciones diremos que no. Despus, para ejecutar el programa pulsamos el botn Iniciar de la barra de herramientas estndar o la tecla F5 del teclado.

8

Curso

Captulo 2El captulo anterior empezamos el curso de programacin con la creacin de un sencillo programa que converta cantidades de pesetas a euros. El objetivo de este segundo captulo es completar la funcionalidad de la aplicacin, mejorar su interfaz y explicar las dudas que puedan ir apareciendo.

En el captulo anterior, diseamos una aplicacin por medio de controles a los que bamos aplicando diferentes propiedades. Una vez diseado el formulario, habamos incluido unas lneas de cdigo, que no explicamos, paraVisual Basic 6.0 9

programar el botn que ejecutaba el cambio. Lo primero que haremos hoy ser explicar brevemente el porqu de aquellas instrucciones. Como recordaris, al hacer doble clic sobre el botn al que llamamos cmdConvertir, se desplegaba la Ventana de Cdigo que ya inclua algunas lneas escritas: Private Sub cmdConvertir_Click() End Sub Estas lneas vienen a marcar el principio y el fin de un procedimiento que se activa al producirse un evento. Siempre que se abre la ventana de cdigo con un doble clic sobre un control, Visual Basic prepara el procedimiento (para ese control) del evento por defecto de ese tipo de controles. Para el caso de los botones de comando, el evento por defecto es Click, es decir pulsar sobre l con el botn izquierdo del ratn. As pues, el nombre del procedimiento (cmdConvertir_Click) viene a expresar un evento (Click) sobre un control (cmdConvertir). Las palabras resaltadas en azul son palabras reservadas de Visual Basic. En este caso indican el inicio de un procedimiento privado (Private Sub) y el fin del mismo (End Sub). Todo lo que introduzcamos entre ambas lneas sern las instrucciones que se ejecutarn al producirse el evento que invoca al procedimiento. Lo siguiente que hicimos fue insertar el cdigo del procedimiento. Para ello habamos escrito las siguientes instrucciones: txtEuros = txtPts / 166.386 txtEuros = Format(txtEuros,#,##0.00) La primera expresin es lo que se denomina una asignacin, es decir se asigna al trmino a la izquierda del = (cuadro de texto txtEuros) el valor de la derecha (el contenido de txtPts dividido entre 166,386). La segunda expresin es similar, salvo que el valor asignado a txtEuros es el valor que devuelve la funcin Format, propia de Visual Basic. Esta funcin necesita dos parmetros: un texto (en nuestro caso el contenido en txtEuros) y un tipo de formato entre comillas (con la coma entre las almohadillas indicamos el separador de miles, y con el punto seguido de 2 ceros indicamos 2 posiciones decimales) que debe ser en formato americano, justo al revs que el europeo (puntos en lugar de comas y comas en lugar de puntos). Los par10 Curso

metros de las funciones y procedimientos siempre van separados por comas. Podramos haber resumido ambas lneas en la siguiente: txtEuros = Format(txtPts / 166.386, #,##0.00) donde indicaramos que habra que asignar directamente a txtEuros el valor de txtPts dividido por 166,386 pero con el formato mencionado. El cdigo introducido en el botn cmdSalir es, sencillamente, el de finalizacin del programa. Novedades de esta versin En esta ocasin vamos a aadir la posibilidad de cambiar cantidades de pesetas a euros indistintamente. Para ello, el formulario debe incluir la opcin de seleccionar el tipo de cambio a realizar. Con los controles bsicos, la manera ms sencilla de hacer este tipo de selecciones es utilizando los controles CheckBox (casilla de verificacin) u OptionButton (botn de opcin). En nuestro caso, partiremos de dos opciones para el tipo de cambio (pesetas a euros o euros a peVisual Basic 6.0 11

setas) donde necesariamente debe haber una, y slo una, seleccionada. Para este tipo de casos lo mejor es utilizar los botones de opcin. Una pequea pega de este tipo de botones es precisamente que son excluyentes unos de otros, es decir, si est marcada una de las opciones el resto no pueden estarlo. Por otro lado, existe la posibilidad de que necesitemos rellenar un mismo formulario con varias cuestiones de este tipo, pero debido a la naturaleza de estos controles, tan slo podramos tener un botn seleccionado. Parece necesario entonces aislar cada uno de los grupos de botones de opcin dentro de su propio contexto. Para ello debemos insertar, previamente, un marco que englobe a todos los botones de opcin referentes a un mismo contexto. Para insertar dichos marcos, Visual Basic dispone del control Frame. Dichos marcos contendrn todos los controles que deban ser aislados. Otro detalle a tener en cuenta es la necesidad de incluir en esta versin los ramificadores condicionales en el cdigo del botn cmdCambio. Los ramificadores que incluiremos sern las estructuras If ... Else ... EndIf. El esquema de estas estructuras es el siguiente: If (condicin) Then (instrucciones si se produce condicin) Else (instrucciones si no se produce condicin) End If De esta manera podremos realizar determinadas operaciones segn se cumpla o no la condicin (que en nuestro caso depender del botn de opcin seleccionado por el usuario). Por otro lado, en esta segunda versin del programa, tendremos que modificar algunas propiedades en tiempo de ejecucin (habilitar o deshabilitar los cuadros de texto dependiendo del tipo de cambio seleccionado) as como invocar al mtodo SetFocus de los cuadros de texto (para situar el puntero en el cuadro de texto correspondiente). Para que todo quede ms claro, en esta versin incluiremos comentarios de todos los aspectos que vayamos programando (Visual Basic interpreta por comentario todo el texto comprendido entre una comilla simple y un salto de lnea, y lo resalta en co12 Curso

lor verde). El esquema de modificacin del registro de la propiedad de un control en tiempo de ejecucin es como sigue: nombre_control.propiedad = nuevo valor

Programar una calculadora de euros (2)Abrir antiguo proyectoLo primero que debemos hacer es abrir el proyecto que empezamos en el nmero anterior. Para ello, si es de los ltimos proyectos que hemos realizado, podemos acceder directamente desde la pestaa Recientes de la ventana Nuevo proyecto que aparece al iniciar Microsoft Visual Basic. Si por el contrario nos hemos visto en la necesidad de descargarlo o no es de los proyectos ms recientes, deberemos abrirlo por medio del explorador que aparece en la pestaa Existente de la misma pantalla. Una vez abierto el proyecto, para abrir el formulario sobre el que queremos trabajar, desplegamos la rama de la carpeta Formularios en el Explorador de proyectos (con un clic del botn izquierdo del ratn sobre el signo + que se encuentra junto a dicha carpeta) y finalmente lo abrimos con un doble clic sobre el formulario.

Modificar formularioEmpezaremos por realizar unas pequeas modificaciones en el formulario para adaptarlo a nuestras necesidades. Lo primero que haremos ser eliminar los botones Minimizar y Maximizar o Restaurar de la parte derecha de la barra de herramientas. Para ello debemos cambiar el registro de laVisual Basic 6.0 13

propiedad BorderStile del formulario al valor 1-Fixed Single. Posteriormente atribuiremos un icono al formulario que se mostrar en la parte superior izquierda del mismo (en la barra de ttulo). Para ello, tan slo debemos acceder al registro de la propiedad Icon del formulario y en l, a partir del explorador desplegado, seleccionar el icono correspondiente (en la pgina web de la revista podris encontrar una coleccin de iconos relacionados con el tema). Por ser el nico formulario de la aplicacin, el icono que atribuyamos al formulario ser el icono por defecto de la misma de modo que al generar el archivo ejecutable ste llevar relacionado ese mismo icono.

Mover controlesLo siguiente ser realizar las modificaciones grficas pertinentes. Dado que vamos a aadir nuevos elementos a nuestro formulario, parece aconsejable aumentar el tamao del mismo, de manera que los controles no queden muy condensados. Para ello, recordemos, se selecciona el formulario y se estira desde los tiradores hasta alcanzar el tamao deseado o bien se escribe directamente el tamao en los registros de las propiedades Height (altura) y Widht (anchura). En nuestro caso resulta bastante apropiado un tamao aproximado de 7.515 x 4.020 twips. Siguiendo este mtodo podramos aplicar la siguiente tabla para aplicar un tamao y posicin (propiedades Left y Top para la distancia del vrtice superior izquierdo del control respecto a los bordes izquierdo y superior del formulario respectivamente) a todos los controles del formulario: CONTROL lblPts14

POSICIN (twips) 480, 240

TAMAO (twips) 1095 x 375Curso

lblEuros txtPts txtEuros cmdConvertir cmdSalir

2520, 240 480, 840 2520, 840 5400, 1680 5400, 2640

1095 x 375 1575 x 375 1575 x 375 1335 x 615 1335 x 615

Aadir imagenPara dar un aspecto ms atractivo a la aplicacin podemos insertar una imagen relacionada con el tema de los euros en la parte superior derecha del formulario. Para ello necesitamos disponer de dicha imagen en nuestro ordenador en formato BMP, JPG, GIF, etc. Una vez dispongamos de la imagen deseada, el modo de insertarla en el formulario es por medio del control Image (tambin podra utilizarse el control PictureBox, aunque este segundo control es ms apropiado para los casos en los que la imagen cambia en tiempo de ejecucin). Seleccionamos, por tanto, el control Image en el Cuadro de Herramientas y dibujamos un rectngulo en la parte superior derecha del formulario sin preocuparnos por el tamao, ya que este control, que har las veces de contenedor, adaptar automticamente sus medidas al tamao de la imagen que contenga. Por ltimo modificamos el registro de la propiedad Nombre del nuevo control con el valor imgEuro y, en la propiedad Picture, abrimos, por medio del explorador de archivos desplegado, la imagen que vayamos a insertar. Si observamos que la imagen no tiene el tamao apropiado, podemos modificar sus proporciones utilizando los tiradores sin ms que cambiar previamente el registro de su propiedad Stretch a True. Para desplazar la imagen por el formulario, como para desplazar cualquier otro control, pulsamos sobre ella con el botn izquierdo del ratn y, sin soltar, arrastramos hasta el lugar deseado.

Insertar macro

Visual Basic 6.0

15

La parte inferior izquierda del formulario estar dedicada a la seleccin del tipo de cambio a realizar, para lo cual necesitaremos dos botones de opcin. Para crear un contexto aislado para los botones de opcin dibujaremos un marco, con el control Frame seleccionado, en la parte inferior izquierda del formulario con una posicin 480,1.680 y un tamao de 3.255 x 1.455 twips. Despus modificamos el registro de su propiedad Nombre con el valor fmrCambio, el de la propiedad Caption con Tipo de cambio y el de la propiedad Font con un tipo de letra Times New Roman negrita de 12 puntos.

Botones de opcinAhora ya podemos insertar los botones de opcin en nuestro formulario. Seleccionamos, pues, el control OptionButton en el cuadro de herramientas y dibujamos, dentro del nuevo marco, dos botones de opcin en las posiciones 240,480 y 240,960 respectivamente (estas posiciones estn referidas al vrtice superior izquierdo del marco que las contiene, no del formulario), ambos con un tamao de 2.055 x 255 twips. Al primero de ello lo llamaremos optPtsEuros y optEurosPts al segundo (propiedad Nombre). En el registro de la propiedad Caption indicaremos los textos Pesetas a Euros para el primero y Euros a Pesetas para el segundo. A ambos les aplicaremos un tipo de letra MS Sans Serif normal de 10 puntos y, en el registro de la propiedad Value del primero (optPtsEuros) indicaremos el valor True para hacer de esta opcin la opcin por defecto.

Reprogramar botones16 Curso

Con el aspecto del formulario preparado pasamos a revisar el cdigo del programa. Para desplegar la Ventana de Cdigo pulsamos sobre el comando Cdigo en el men Ver de la barra de herramientas estndar. Lo primero que haremos una vez desplegado el formulario es reprogramar el botn cmdConvertir con el siguiente cdigo:

Programar botones nuevosObviamente tambin hay que programar los botones de opcin. Concretamente lo que haremos ser habilitar el cuadro de texto en el que, segn la seleccin, debemos escribir la cantidad; deshabilitar el otro cuadro de texto; borrar el contenido de ambos cuadros de texto y situar el cursor en el cuadro de texto activo. Durante la programacin de estos botones podemos observar que, al modificar el registro de una propiedad o invocar un mtodo, se despliega una lista con las propiedades y mtodos disponibles para ese control, donde podremos seleccionar el que busquemos. Dicho esto, pasamos a escribir las nuevas instrucciones al final del cdigo existente:

Visual Basic 6.0

17

Generar ejecutables

Si el cdigo est correctamente escrito, la nueva versin est lista para ser ejecutada (F5). Hay que tener en cuenta que, a pesar de las mejoras, el pro18 Curso

grama an tiene algunos fallos que pasaremos a depurar en el prximo captulo (concretamente el hecho de que a la hora de convertir, si el cuadro de texto activo est vaco o posee caracteres no numricos, se produzca un error). Aun as generaremos, a partir de esta versin, el primer archivo ejecutable (con extensin .exe). Para ello pulsamos sobre el men Archivo en la barra de herramientas y, a continuacin, sobre Generar Proyecto.exe. Despus seleccionamos el nombre (sin extensin) y la ubicacin del ejecutable y confirmamos. El programa se ejecuta con un doble clic.

Visual Basic 6.0

19

20

Curso

Captulo 3En el primer captulo del curso de programacin vimos el modo de crear un conversor de pesetas a euros. En el segundo, mejoramos la interfaz grfica del programa y aadimos la posibilidad de convertir indistintamente de pesetas a euros y de euros a pesetas. En esta ocasin los objetivos sern redisear el formulario de manera que resulte lo ms prctico posible y depurar la aplicacin para evitar que se produzcan errores.En la programacin de las versiones anteriores del conversor de euros hemos tratado con diferentes tipos de datos. Llegados a este punto es conveniente profundizar un poco en este aspecto. Para empezar, podemos decir que aunque Visual Basic no es (todava) un lenguaje de programacin orientada a objetos (POO), s que es, por necesidad, un lenguaje de programacin basado en objetos. Para nosotros, un objeto es, por ejemplo, un formulario, un cuadro de texto o un botn de comando. Cada uno de estos objetos posee sus propios mtodos, propiedades y eventos dependiendo de su naturaleza. Por si esto no queda suficientemente claro, vamos a hacer una semejanza con el mundo real. Supongamos que tenemos un objeto de tipo coche. Las propiedades de nuestro objeto seran, por ejemplo: cilindrada, ABS, color, etc. Ejemplos de eventos podran ser: entrar en coche, salir de coche, tocar coche, etc. Como mtodos asociados podramos indicar: subir ventanillas, frenar, tocar claxon, etc. El uso principal de los eventos es programar acciones referidas al suceso de dicho eventos sobre el objeto. De este modo, y siguiendo con el ejemplo, podra programarse la ejecucin del mtodo subir ventanillas al producirse el evento salir en un objeto coche de nombre MiCoche: Private sub MiCoche_Salir() MiCoche.SubirVentanillasVisual Basic 6.0 21

End Sub Del mismo modo, para atribuirle un color determinado al objeto MiCoche del tipo coche en un punto determinado del programa podramos incluir: MiCoche.Color = Verde Tipos de datos Centrndonos en las propiedades de los objetos podemos observar que todas ellas son algo as como contenedores de informacin. La cuestin es si todos los datos (ya sean variables, constantes o registros de propiedades) son del mismo tipo. Volviendo al ejemplo, nos damos cuenta de que la inclusin o no de ABS en un objeto de tipo coche se resuelve con un s o un no, mientras que la cilindrada ser un nmero entero positivo de hasta 4 dgitos y el color una cadena de letras. Nos encontramos, pues, con que los datos son de tipos diferentes. En la siguiente tabla se muestran los principales tipos de datos utilizados para trabajar en Visual Basic:Tipo de datos Byte Integer Long Single Clase Nmeros enteros Nmeros enteros Nmeros enteros Nmeros reales Rango de valores 0255 -3276832767 -2147483648 2147483647 -3,4383,438 (aprox.); precisin mxima 1-45 -1,83081,8308 (aprox); precisin mxima 1-324 15 dgitos para la parte entera y 4 para la decimal True (verdadero) o False (falso) Desde 1/1/100 hasta 31/12/9999 Hasta 2000 millones de caracteres Dependiendo del Tamao en memoria 1 byte 2 bytes 4 bytes 4 bytes

Double

Nmeros reales

8 bytes

Currency

Cantidades monetarias Valores lgicos Fechas Cadenas de caracteres (texto) Cualquier tipo de

8 bytes

Bolean Date String variant22

2 bytes 8 bytes 1 byte por carcter 16 bytes + 1 Byte porCurso

los anteriores

tipo

carcter

Profundizando en los cuadros de textos Una de las propiedades ms importantes de las que hemos visto hasta ahora es la propiedad Text de los cuadros de texto. Esta propiedad, cuyo registro es de tipo String, es la propiedad por defecto para esta clase de controles (del mismo modo que, por ejemplo, Value es la propiedad por defecto para los botones de opcin), por lo que podemos referirnos a ella utilizando tan slo el nombre del objeto. As se explica que la instruccin: txtPts = Format (txtEuros * 166.386, #,##0) modifique el texto del cuadro de texto txtPts del mismo modo que lo hara: txtPts.Text = Format(txtEuros.Text * 166,386, #,##0) Por otro lado, y como novedad en esta versin, veremos dos nuevos eventos correspondientes a los cuadros de texto (entre otros controles). El primero es el evento gotfocus, producido al situar el enfoque sobre el control correspondiente. En nuestro programa utilizaremos este evento para seleccionar el texto que aparece por defecto al seleccionar un tipo de cambio. Para realizar dicha seleccin utilizaremos tambin la propiedad de lectura y escritura SelLength. El otro evento, keypress, se produce al pulsar una tecla con el cuadro de texto activo, y a nosotros nos servir para filtrar las teclas que pulsa el usuario. Como es lgico, el procedimiento que utilicemos para programar la ocurrencia de este evento necesitar como parmetro algn tipo de informacin sobre la tecla pulsada (un entero con su cdigo ASCII). Acerca de los string Si alguno de los tipos de datos predeterminados (tanto en Visual Basic como en cualquier otro lenguaje de programacin) merece una mencin especial, sin duda se trata de cadenas de caracteres. Para empezar, Visual Basic slo reconoce como cadenas de caracteres aquel texto comprendido entre comillas dobles (). As se explica, por ejemplo, que cuando el mes pasado queramos borrar los registros de la propiedad Text de los cuadros de texto, hicisemos las asignaciones:Visual Basic 6.0 23

txtEuros.Text = txtPtx.Text = En referencia a los string, terminaremos indicando las funciones (propias de Visual Basic) que utilizaremos en esta versin: Nombre Len Parmetros necesarios Una cadena de caracteres Valor devuelto Un entero (Long) que indica el nmero de caracteres de la cadena Una cadena de caracteres con el formato especificado Un entero (Long) que indica la posicin de la primera aparicin de la segunda cadena en la primera. Si no se encontraron apariciones devuelve 0

Format InStr

Una cadena de caracteres y el tipo de formato Dos cadenas de caracteres

Caracteres Como ya hemos mencionado, un string es una cadena de caracteres. Existen varios tipos de caracteres y varias maneras de representarse (existe un carcter relacionado con la tecla supr que borra el carcter a la derecha del cursor, otro relacionado con la barra espaciadora que deja un espacio en blanco, etc.), aunque el concepto ms importante es que el ordenador utiliza un nico cdigo para representar cada carcter. Teniendo en cuenta que Visual Basic (como cualquier otro lenguaje de programacin) utiliza un Byte (8 bits) para codificar (cdigo ASCII extendido) cada carcter, nos encontramos con que trabajamos con 256 (28) caracteres distintos. Desde luego no es necesario conocer el cdigo ASCII de cada carcter, aunque s es conveniente tener presentes algunos conceptos: Las letras minsculas se codifican de manera distinta a las maysculas (b) ( B) Las vocales acentuadas tienen su propio cdigo ASCII (a) ( )

24

Curso

Los cdigos de los dgitos (0-9) son consecutivos. Lo mismo ocurre con las maysculas (A-Z) y las minsculas (a-z), aunque las vocales acentuadas, el carcter y el carcter no se incluyen en esos rangos.

De todos modos, y para facilitar las cosas, Visual Basic dispone de una serie de constantes con las que trabajaremos sin problemas. En esta versin utilizaremos: vbKey0 (contiene el cdigo ASCII del carcter 0) vbKey9 (contiene el cdigo ASCII del carcter 9) vbKeyClear (contiene el cdigo ASCII asociado a la tecla supr) vbKeyBack (contiene el cdigo ASCII asociado a la tecla de borrado) En esta versin tambin utilizaremos las siguientes funciones para pasar de un cdigo ASCII a carcter y viceversa: Nombre Chr Asc Parmetros necesarios Un entero entre 0 y 255 Un string Valor devuelto Un string de un carcter cuyo cdigo ASCII coincide con el entero Un entero que indica el cdigo ASCII del primer carcter de la caneda

Programar una calculadora de euros (y 3)Visual Basic 6.0 25

Eliminar controles innecesariosComo indicbamos en los requisitos, el formulario de esta tercera y definitiva versin del conversor de euros ha de ser, ante todo prctico y funcional. Para ello debemos eliminar del formulario todo aquello que resulte redundante (el botn salir y la imagen), adecuar el tamao del formulario y sus controles de manera que cumplan su funcin sin ocupar demasiado espacio en la pantalla. Adems, en esta versin, realizaremos el clculo al mismo tiempo que escribimos la cantidad en el cuadro de texto activo, por lo que el botn cmdConvertir ya no resultar de utilidad. As pues, abrimos el proyecto antiguo (del mismo modo que lo hacamos el captulo anterior) y eliminamos la imagen imgEuro seleccionndola (con un clic sobre el control en el formulario) y pulsando la tecla supr del teclado o bien pulsando sobre el comando Eliminar en el men contextual desplegado al pulsar con el botn derecho del ratn sobre la imagen. Siguiendo el mismo procedimiento eliminamos los botones cmdSalir y cmdConvertir. Por ltimo, para habilitar el botn de minimizar del formulario, indicamos en el registro de su propiedad (MinButton) el valor True.

Modificar controlesPara poder modificar el tamao del formulario, previamente hemos de modificar los controles. Para empezar, indicaremos, en el registro de la propiedad Font de las etiquetas (lblPts y lblEuros) y del marco (fmrCambio), un tipo de letra MS Sans Serif en negrita de 8 puntos. Despus se modifica la misma propiedad de los dos cuadros de texto (txtPts y txtEuros) y de los botones de opcin (optPtsEuros y optEurosPts) indicando un tipo de letra MS Sans Serif normal de 8 puntos. Por ltimo modi26 Curso

ficamos el registro de la propiedad Style de los botones de opcin indicando 1 Graphical.

Mover controlesEn este punto nos encontramos con un tamao de formulario desproporcionado con respecto al de los controles. Para solucionarlo indicaremos los siguientes valores para el tamao y ubicacin de los controles:

Despus se cambia el tamao del formulario con los valores 3975 (twips) en el registro de su propiedad Width y 1770 en el de la propiedad Height.

Introducir cdigoPara terminar, abrimos la ventana de cdigo (Ver/Cdigo), borramos el texto de la versin anterior y tecleamos el siguiente cdigo: Private Sub Form_Load() txtPts = 0 poner pesetas a 0 End Sub Private Sub optEurosPts_Click() txtEuros.Enabled = True habilitarVisual Basic 6.0 27

txtEuros txtPts.Enabled = False deshabilitar txtPts txtEuros = 0 poner euros a 0 txtEuros.SetFocus situar cursor en txtEuros End Sub Private Sub optPtsEuros_Click() txtPts.Enabled = True habilitar txtPts txtEuros.Enabled = False deshabilitar txtEuros txtPts = 0 poner pesetas a 0 txtEuros = 0,00 poner euros a 0 txtPts.SetFocus situar cursor en txtPts End Sub Private Sub txtEuros_Change() If txtEuros.Enabled = True Then si txtEuros habilitado If Len(txtEuros) = 0 Then si txtEuros se vaca txtEuros = 0 poner euros a 0 txtEuros.SelLength = 1 seleccionar el 0 End If txtPts = Format(txtEuros * 166.386, #,##0) End If End Sub Private Sub txtPts_Change() If txtPts.Enabled = True Then si txtPts habilitado If Len(txtPts) = 0 Then si txtPts se vaca txtPts = 0 poner pesetas a 0 txtPts.SelLength = 1 seleccionar el 0 End If txtEuros = Format(txtPts / 166.386, #,##0.00) End If End Sub Private Sub txtPts_gotfocus() txtPts.SelLength = 1 seleccionar el 0 al mover el cursor End Sub28 Curso

Private Sub txteuros_gotfocus() txtEuros.SelLength = 1 seleccionar el 0 al mover el cursor End Sub Private Sub txtpts_keypress(tecla As Integer) If ((tecla vbKeyBack) And _ (tecla vbKeyClear) And _ (tecla vbKeyClear) And _ ((tecla < vbKey0) Or (tecla > vbKey9))) Then con espacio seguido de guin bajo al final de la lnea contina en siguiente lnea si la tecla no es borrar y tampoco es suprimir y tampoco es un carcter numrico entonces tecla = Empty tecla vaca Beep emitir sonido End If End Sub Private Sub txteuros_keypress(tecla As Integer) habilitar la tecla . para introducir decimales If (tecla = Asc(.)) Then tecla = Asc(,) End If validar caracteres If ((tecla >= vbKey0) And (tecla vbKey9))) Esta expresin est compuesta a su vez por 3 expresiones ms sencillas unidas por el operador lgico And, lo cual quiere decir que basta con que una de las expresiones devuelva el valor False para que el valor de la expresin final sea False. Estas tres expresiones son: 32

tecla vbKeyBackCurso

tecla vbKeyClear (tecla < vbKey0) Or (tecla > vbKey9)

De estas tres expresiones, las dos primeras son bsicas, ya que estn formadas por la comparacin directa de dos valores (una variable y una constante) por medio de un operador de comparacin. El valor que devuelve cada una de ellas es obvio: si tecla es distinta de la tecla de borrar en el primer caso, o tecla es distinta de la tecla suprimir en el segundo, el valor de la expresin es True; en caso contrario el valor es False. La tercera expresin vuelve a ser una composicin de expresiones ms sencillas, aunque en este caso unidas por el operador Or, por lo que bastara con que una de las expresiones que forman esta expresin fuese verdadera para hacer verdadera a toda la expresin. Instrucciones If anidadas Otro aspecto que pudo no quedar demasiado claro en el ltimo captulo del curso es la anidacin de los ramificadores. Haciendo memoria, en el segundo captulo del curso indicbamos que la estructura bsica de este tipo de instrucciones era: If (condicin) Then (instrucciones si se produce condicin) Else (instrucciones si no se produce condicin) End If De este modo, para que se ejecuten las instrucciones del If anidado, debe producirse la condicin 2 sin que se produzca la condicin 1. Para estos casos puede utilizarse la palabra reservada ElseIf de la siguiente manera: If (condicin 1) Then (instrucciones si se produce condicin 1) ElseIf (condicin 2) Then (instrucciones se produce condicin 2) End IfVisual Basic 6.0 33

End If Al trabajar con las estructuras If anidadas, hay que tener presente que hasta que no se cierra una estructura If con la instruccin End If no se vuelve al If que contena al primero (de ah la importancia de hacer un buen sangrado a las lneas de cdigo). Variables Visual Basic, por medio de las propiedades de sus controles, permite tener almacenada muchsima informacin. A pesar de ello, en la mayora de los programas esa informacin no resultar suficiente. Ser entonces cuando tengamos que utilizar estructuras de almacenamiento auxiliares, es decir, variables. Los aspectos ms importantes de las variables son los siguientes: Nombre: cada variable debe tener un nombre nico dentro de su mbito. Tipo: cada variable debe estar orientada a contener un tipo de datos especfico. Podran declararse todas como Variant pero estaramos malgastando innecesariamente los recursos de la mquina. mbito: la vida til de la variable equivale a la vida til del programa, funcin o procedimiento donde es declarada. Al finalizar dicho cdigo, el espacio de memoria utilizado por esa variable es liberado.

Visual Basic permite utilizar variables que no han sido declaradas anteriormente (declaracin implcita), lo cual puede resultar tanto una ventaja como un inconveniente, ya que a pesar de ahorrarnos algunas lneas de cdigo, en el supuesto de que al teclear nos equivocsemos y escribisemos mal el nombre de una variable se creara una nueva variable con ese nombre. Para evitar estos problemas, que aumentan proporcionalmente al tamao del programa, se utiliza la declaracin explcita con la que, si Visual Basic encuentra una variable que no ha sido declarada previamente muestra un mensaje de error. El modo ms sencillo de forzar la declaracin explcita es incluir la instruccin Option Explicit al comienzo del cdigo del formulario o mdulo.34 Curso

La sintaxis de la declaracin de variables es la siguiente: Dim NombredeVariable [As TipodeDato] Es decir, se utiliza la palabra reservada Dim para indicar que se va a declarar una variable de mbito local (por el momento, y salvo que sea estrictamente necesario, prescindiremos del uso de variables globales), despus se indica el nombre de la variable (que debe comenzar por una letra, no puede contener smbolos de puntuacin, no puede superar los 255 caracteres y, por supuesto, no puede tener por nombre ninguna de las palabras reservadas por Visual Basic) y, opcionalmente (cuando utilicemos este tipo de sintaxis, todo lo que vaya entre corchetes [ ] ser opcional) el tipo de dato que, por defecto (si no se pone nada), ser de tipo Variant. Como es lgico, la variable debe ser declarada antes de su primera utilizacin. Adems, al leer un programa, resulta muy cmodo tener declaradas todas las variables al comienzo del programa o subprograma. Bucles Los bucles son estructuras de programacin que permiten repetir la misma tarea un nmero condicionado de veces. Por ejemplo, y adelantndonos al paso a paso de este captulo, imaginemos que dado un nmero natural (mayor o igual que 1) llamado n, queremos calcular la suma de todos los naturales hasta ese n. En este caso tendramos que llevar una variable contador, llammosla i, que, partiendo de 1 y sin pasar de n, se ira incrementando en una unidad y se ira sumando a otra variable llamada resultado. As pues, las instrucciones que iran dentro de este bucle seran: i=i+1 resultado=resultado+i y la condicin de salida del bucle dependera de la estructura seleccionada. Las estructuras ms utilizadas son: Do While condicin instrucciones LoopVisual Basic 6.0 35

Este bucle evala la condicin. Si no se cumple, contina con las instrucciones que siguen a Loop. Si se cumple ejecuta las instrucciones del bucle y vuelve a evaluar. Es un bucle de los denominados de 0 ms repeticiones. Do instrucciones Loop While condicin En este caso, lo que cambia es que se ejecuta al menos una vez, ya que la condicin se evala despus de ejecutar las instrucciones. Es una estructura de bucle de 1 ms repeticiones. Do Until condicin instrucciones Loop Esta estructura, tambin de 0 ms repeticiones, cambia con respecto a la primera en que se sale del bucle si se cumple la condicin. Do instrucciones Loop Until condicin Esta estructura es la variante de 1 ms repeticiones de la estructura anterior. Ninguna de todas estas estructuras es imprescindible, ya que, por ejemplo, se puede cambiar la palabra While por Until (o viceversa) y aadir el operador lgico Not al inicio de la condicin y el comportamiento del bucle sera el mismo. Otro tipo de estructura de bucles, muy til cuando se conoce el nmero de repeticiones, es el tipo For. Estos bucles, adems, incrementan o disminuyen el contador en cada repeticin. Su sintaxis es la siguiente:36 Curso

For contador = inicio To fin [Step incremento] instrucciones Next donde contador es una variable e inicio, fin e incremento son valores numricos (constantes o variables). El bucle inicializa contador al valor de inicio, comprueba si inicio es menor o igual que fin antes de cada iteracin (menor o igual en caso de que se indique un incremento negativo). En caso afirmativo se ejecutan las instrucciones (si es mayor se sale del bucle) e incrementa, en cada iteracin, la variable contador con el valor especificado en incremento (1 por defecto).

Suma de nmeros decimalesPara poner en prctica las novedades de este captulo, utilizaremos un ejemplo tpico de uso de bucles: la suma de los n primeros nmeros naturales.

Propiedades del formularioLo primero que haremos ser abrir un nuevo proyecto (EXE estndar). El formulario necesitar 2 cuadros de texto (uno para introducir los datos y otro para mostrarlos), dos etiquetas, tres botones de opcin (sumar todos los naturales hasta n, todos los pares menores o iguales que n y todos los impares menores o iguales que n) en un marco y un botn de comando. Una alternativa al cuadro de texto de los resultados es utilizar una etiqueta con el valor 1-Fixed Single en su propiedad BorderStyle y color blanco en la propiedad BackColor. As lo haremos. Para empezar, definiremos este formulario:

Visual Basic 6.0

37

ControlesA continuacin podemos incluir el cuadro de texto.

despus la etiqueta que har las veces de cuadro de texto

las dos etiquetas informativas

y el botn de comando

38

Curso

Propiedad Nombre Caption Left Top Height Width Font

Valor del registro cmdCalcular &Calcular 120 1560 375 1455 Ms Sans Serif, negrita de 8 puntos

Del valor del registro de la propiedad Caption destaca &: antepuesto a un carcter alfanumrico, asocia la tecla correspondiente al evento Click del control.

OpcionesComo indicbamos en el paso Propiedades del formulario, la aplicacin debe ofrecer la posibilidad de elegir entre tres opciones. Utilizaremos botones de opcin en un marco. Modificaremos estos registros:

En este marco, debemos insertar 3 botones de opcin, a los que modificar los registros de algunas propiedades:

Visual Basic 6.0

39

BuclesQu controles programar? Slo programaremos el evento Clic del botn cmdCalcular. Segn la opcin seleccionada el programa realizar una u otra operacin (ramificadores If). En la solucin utilizamos tres estructuras diferentes. Por otro lado, utilizaremos el operador Mod, que devuelve el resto de la divisin del valor numrico a su izquierda por el de su derecha.

Cdigo del programaOption Explicit forzar declaracin explcita de variables Private Sub cmdCalcular_Click() Dim i As Integer contador i como entero Dim resultado As Long resultado como entero con ms capacidad i = 1 inicializacin de contador resultado = 0 inicializacin de resultado If optSumarTodos.Value = True Then Do bucle de 1 ms repeticiones resultado = resultado + i i=i+1 Loop While i CInt(txtDatos.Text) bucle de 0 ms repeticiones If (i Mod 2) = 0 Then sumar slo si es par resultado = resultado + i End If i=i+1 Loop Else For i = 1 To CInt(txtDatos.Text) Step 2 Bucle de repeticiones conocidas con incremento de 2 unidades para contador resultado = resultado + i40 Curso

Next End If End If lblResultado.Caption = Format(resultado, #,##0) mostrar el resultado con formato End Sub

Visual Basic 6.0

41

42

Curso

Captulo 5Funciones, procedimientos y librerasUna vez que ya sabemos cmo funciona el control del flujo de datos en la programacin con Visual Basic, cmo deben utilizarse las variables y algunos de los controles que se manejan de forma habitual, debemos ir pensando en cmo archivaremos el cdigo de los programas a medida que el nmero de lneas vaya aumentando.Modularidad Las aplicaciones informticas que se utilizan hoy en da, incluso aquellas diseadas de forma personal, cuentan en su implementacin con miles de lneas de cdigo. Teniendo en cuenta que el cdigo de toda aplicacin debe ser revisado en multitud de ocasiones antes de alcanzar su plena funcionalidad, da la sensacin de que una buena documentacin de todas esas instrucciones no resulta suficiente para localizar aquellos errores que se vayan detectando. Es entonces cuando toma fuerza el uso de la modularidad o, lo que es lo mismo, la divisin de un programa muy grande en programas ms sencillos y manejables. Estos mdulos se denominan funciones, procedimientos, subrutinas, etc., dependiendo del lenguaje de programacin utilizado. Los habituales de esta seccin recordarn que ya hemos usado la modularidad cuando programbamos los eventos de los controles. Uso y ventajas de la modularidad Que debemos echar mano de la modularidad en nuestros programas es un hecho, pero tenemos que saber exactamente cundo hay que abstraer un mdulo del programa principal. Esta respuesta no es sencilla y queda a criterio del programador que, a medida que va adquiriendo experiencia, utiliza este recurso sin apenas darse cuenta. De todos modos, existen algunos casos donde el uso de un subprograma resulta idneo:

Visual Basic 6.0

43

Un fragmento del programa tiene una misin concreta. El cdigo se mantiene dentro de un tamao manejable. El cdigo puede ser invocado varias veces a lo largo del programa o incluso puede ser reutilizado por otros programas.

Practicando la modularidad a partir de estos criterios, nos encontraremos con las siguientes ventajas: 1. Cada subprograma puede ser desarrollado y comprobado de manera independiente. Se produce un ahorro de memoria al ejecutar el programa debido a la reduccin del nmero de lneas de cdigo. Por el mismo motivo, se ahorra tiempo de desarrollo. Se consigue una independencia de datos que evita que las modificaciones en otras zonas de cdigo afecten a la funcionalidad del subprograma.

2.

3. 4.

Como conclusin, podemos afirmar que el uso de subprogramas resulta beneficioso incluso en programas de pequeo tamao. Funciones y procedimientos Visual Basic, a diferencia de otros lenguajes de programacin, distingue entre funciones y procedimientos. Como ya explicamos en captulos anteriores, la principal diferencia entre un procedimiento y una funcin radica en que esta ltima se puede utilizar dentro de una expresin (por ejemplo, la funcin format), ya que retorna un valor (recordad que la funcin format retornaba una cadena de caracteres con un determinado formato). Por el contrario, los pro44 Curso

cedimientos son segmentos de cdigo independiente que, una vez invocados, ejecutan una serie de instrucciones sin retornar ningn valor al programa que los invoc (aunque puede modificar los argumentos). Un ejemplo de llamada a un procedimiento es la sentencia beep que utilizbamos en el cdigo de la calculadora de euros para emitir un sonido. Funciones

La sintaxis de las funciones es la siguiente: [Public] [Private] Function nombre_funcin ([parmetros]) As tipo [sentencias] nombre_funcin=expresin End Function Con la palabra reservada Public o Private indicamos el alcance de la funcin, es decir, desde dnde se le puede invocar. Utilizando la palabra Public, nos aseguramos de que se puede invocar a la funcin desde cualquierVisual Basic 6.0 45

parte del programa (el mismo formulario, otro formulario, un mdulo, etc.). Por el contrario, al utilizar la palabra Private acotamos el alcance de la funcin al formulario o mdulo en el que se encuentra. Si no se utiliza ninguna de las dos palabras, Visual Basic entiende que se trata de una funcin pblica. La palabra reservada function indica la naturaleza de la subrutina y nombre_funcin es el nombre que utilizaremos para referirnos a dicha funcin. Cuando utilicemos funciones o procedimientos de mbito pblico debemos asegurarnos de no asignar el mismo nombre a dos subprogramas diferentes. Los parmetros son los argumentos que son pasados cuando se llama a la funcin (en el caso de la funcin format, se pasa una cantidad de tipo variant y un string que indica el formato de salida). Desde el punto de vista del subprograma, los parmetros sern variables con un valor inicial (el correspondiente a la variable, constante o expresin utilizada en la llamada). A la hora de implementar la funcin, esos parmetros se especifican indicando un nombre (que no tiene por qu coincidir con el de la variable utilizada en la llamada) y un tipo. En caso de necesitar ms de un argumento, stos se separan por comas y el orden que ocupen en las llamadas debe corresponder con el orden que ocupan en la definicin. Para especificar el tipo de valor retornado por la funcin se utiliza la palabra reservada As seguida del tipo de dato que devolver el subprograma. Por ltimo, es imprescindible asegurarse de que la funcin retornar el valor deseado, para lo que asigna al nombre de la funcin el valor de retorno (justo antes de salir o durante el transcurso del subprograma) como si de una variable convencional se tratase. Las llamadas a las funciones no tienen un esquema definido, pero puede resumirse su uso diciendo que una llamada a una funcin puede ocupar el mismo lugar que un dato del tipo retornado por la funcin. Procedimientos o subrutinas La sintaxis de los procedimientos en Visual Basic se corresponde con el siguiente esquema: [public] [private] Sub nombre_prodedimiento ([parmetros])46 Curso

[sentencias] End Sub La explicacin del esquema es similar al de las funciones, si bien cabe destacar que para distinguir el tipo de subprograma del que se trata se utiliza otra palabra reservada por Visual Basic, Sub en este caso. ? Ejemplo de un procedimiento que obtiene la suma de los n primeros nmeros. Por otro lado, y dado que no retorna ningn valor, no debe indicarse ningn tipo de dato devuelto ni hay que asignar ningn valor de retorno. Por ello, la llamada a un procedimiento difiere de la llamada a una funcin, ya que no se espera ningn valor. El esquema de estas llamadas es: call nombre_procedimiento (argumentos) o nombre_procedimiento argumentos Argumentos por referencia y por valor Como venimos explicando a lo largo de este tema, existe una correspondencia entre los valores que se pasan al llamar a un subprograma y los parmetros que ste utiliza. La duda surge al preguntarse si las modificaciones de los parmetros se ven reflejadas en las variables correspondientes en la llamada al subprograma o si, por el contrario, unos datos y otros son independientes. La respuesta es que depende del modo en que los parmetros se especificaron durante la implementacin, en la cabecera del subprograma. Concretamente, Visual Basic reserva la palabra byVal, que se coloca en la cabecera de la especificacin de los subprogramas delante de cada parmetro que se pasa por valor, para indicar que dicho subprograma no modifica el valor de la variable asociada en los argumentos de la llamada. Si no seVisual Basic 6.0 47

utiliza esta palabra, el argumento se pasa por referencia, es decir, los cambios que sufra el parmetro asociado dentro del subprograma tambin afectan a la variable asociada en la llamada al mismo. ? Ejemplo similar al anterior que no modifica el argumento de la llamada asociado a n.

LibrerasUna de las ventajas del uso de los subprogramas que destacbamos al hablar de la modularidad era la reutilizacin de cdigo. Para facilitar esta labor, Visual Basic cuenta con unos archivos externos (archivos basic .BAS), a los que denomina Mdulos, destinados a contener subprogramas que posteriormente pueden ser exportados y reutilizados. Desde cualquier parte de un proyecto (formulario o mdulo) se puede acceder a cualquier subprograma de cualquier mdulo siempre que dicho subprograma est declarado como pblico. Con la funcin Agregar Mdulo del men Proyecto de la barra de herramientas se puede insertar un mdulo en el proyecto. En el dilogo desplegado puede seleccionarse si se quiere insertar un mdulo nuevo, sin cdigo, o bien reutilizar alguno ya existente, seleccionndolo por medio del explorador que aparece en la pestaa Existente de dicho dilogo. Para salvar un mdulo con el fin de reutilizarlo en otro proyecto, se pulsa con el botn derecho del ratn sobre el mdulo correspondiente en la Ventana de Proyecto y, del men desplegado, se presiona sobre la opcin Guardar Mdulo.Bas. Mdulos matemticos48 Curso

Como ejemplo, vamos a implementar unos subprogramas bsicos de la didctica de algoritmos dedicados a operaciones matemticas tpicas. Para empezar, modularizaremos el ejemplo del captulo anterior, la suma de los n primeros nmeros naturales. Lo primero que debemos hacer es pararnos a meditar qu tipo de subprograma debemos utilizar. Podemos pensar que utilizar un procedimiento que directamente lea de un cuadro de texto y escriba en otro utilizando un procedimiento para implementarlo puede ser una buena idea, pero la verdad es que se pierde generalidad, pues posiblemente nos encontremos con casos en los que el resultado devuelto no deba ser mostrado por pantalla. Lo idneo es utilizar una funcin que devuelva el valor (de tipo Long para soportar cantidades mayores) al punto de llamada o bien un procedimiento que reciba un parmetro Resultado por referencia. El algoritmo que calcula el factorial de un nmero entero n (el producto de ese nmero y todos los enteros anteriores) es similar al caso anterior, aunque de mayor utilidad. Puede utilizarse un valor devuelto de tipo Single o Double, con lo que se conseguira trabajar con cantidades mayores pero se perdera precisin. En ambos casos sera conveniente especificar un paso por variable para el dato que se pasa como argumento, para evitar una modificacin del mismo y permitir que se pasen variables o constantes indistintamente. Tambin sera conveniente asegurarse de que los valores de n se mueven entre los lmites mnimo y mximo, si procede.

Crear un mdulo matemticoVamos a practicar con la modularidad para afianzar los conceptos. Crearemos un pequeo mdulo matemtico en el que incluiremos las funciones anteriormente explicadas.Lo primero que debemos hacer es abrir un nuevo proyecto y disear un formulario donde probar las funciones o bien partir de un formulario existente y realizar las modificaciones pertinentes. Optando por esta segunda posibilidad podemos reutilizar el proyecto del captulo anterior y modificar pequeos asVisual Basic 6.0 49

pectos del formulario: Propiedad Nombre Caption Valor del registro FmrMatemticas Funciones Matemticas

Lo siguiente es modificar las propiedades de algunos controles. Por ejemplo, podemos ampliar el tamao del control lblResultado para adaptarlo a cantidades mayores: Propiedad Width Valor del registro 1575

Despus, se elimina el control optSumarImpares seleccionndolo y pulsando la tecla Supr del teclado. A continuacin se modifican las siguientes propiedades de los otros botones de opcin: optSumarTodo Valor del registro optSumatorio Sumar n primeros naturales 970 2200 optSumarPares Valor del registro optFactorial Factorial de n (n!)

Propiedad Nombre Caption Top Width

Tambin se adapta el marco que contiene los botones de opcin (fmrOpcion) a la nueva aplicacin: Propiedad Height Caption Valor del registro 1095 Seleccionar opcin

A continuacin se inserta un nuevo mdulo dentro del proyecto (Proyecto/Agregar Mdulo) y se teclea el cdigo de las funciones:

50

Curso

Option Explicit Public Function SumaNNaturales(ByVal n As Integer) As Long n se pasa por variable Dim resultado As Long variable auxiliar resultado = 0 inicializacin de resultado If n > 0 Then confirmar que n > 0 sino no entra en el bucle y retorna 0 Do resultado = resultado + n n=n-1 Loop While n > 0 End If SumaNNaturales = resultado asignacin de valor devuelto End Function Public Function Factorial(ByVal n As Integer) As Double n se pasa por variable Dim resultado As Double variable auxiliar resultado = 1 inicializacin de resultado If n > 0 Then confirmar que n > 0 sino no entra en el bucle y retorna 1 Do resultado = resultado * n n=n-1 Loop While n > 0 End If Factorial = resultado asignacin de valor devuelto End Function

Visual Basic 6.0

51

Para acabar este captulo, se borra el cdigo del formulario del captulo anterior y se escriben las nuevas instrucciones, basadas en llamadas a las funciones: Option Explicit forzar declaracin explcita de variables Private Sub cmdCalcular_Click() If optFactorial.Value = True Then lblResultado = Format(Factorial(txtDatos), #,##0) Else lblResultado = SumaNNaturales(txtDatos) End If End Sub Como podemos observar, la llamada a una funcin (Factorial) se puede producir dentro de la llamada a otra funcin (Format). Por ltimo, se guarda el nuevo formulario con un nombre nuevo con la funcin Archivo/Guardar fmrSumador.fmr como. Tambin se guarda el proyecto, preferiblemente en la misma carpeta que el formulario, con la funcin Archivo/Guardar proyecto como y se le asigna un nombre o ruta distinta al proyecto original para conservar una copia de cada uno.

52

Curso

Captulo 6Arrays de variablesHasta ahora, cuando trabajbamos con variables, siempre eran de un nico valor. En ocasiones, debemos trabajar con un elevado nmero de valores del mismo tipo y otorgar un nombre a cada uno de ellos para despus hacerles referencia lo que puede resultar un trabajo tedioso.Con el fin de facilitar la labor en estos casos, los lenguajes de programacin de alto nivel ponen al servicio de los programadores un tipo de datos denominado array. Los arrays, tambin llamados vectores, son colecciones ordenadas de variables del mismo tipo que comparten el mismo nombre. Dentro de estas colecciones, los elementos se distinguen unos de otros por medio de ndices (generalmente nmeros enteros) que indican la posicin que el elemento ocupa en el vector. La declaracin de arrays se realiza de manera similar a la declaracin de variables de tipos predefinidos pero indicando adems los ndices entre los que se mueven la variables de tipo base o indicando tan slo el ndice superior con un nmero entero (en estos casos los ndices van de 0 al nmero especificado). Veamos unos ejemplos: Dim VectorEnteros (1 To 10) as Integer vector de 10 enteros Dim VectorFechas (10) as Date vector de 11 fechas Un ejemplo de acceso a los datos de los vectores podra ser: VectorEnteros (5) = VectorEnteros (3) * 5 el 5 elto del vector pasa a valer 5 veces el valor del tercero Arrays de controles

Visual Basic 6.0

53

Una variante especialmente til de los arrays de variables son lo arrays de controles. Como ya explicamos al hablar de los vectores, todos los elementos del array deben ser del mismo tipo, por lo que un array de controles ser un array de cuadros de texto, o un array de cuadros combinados, etc. pero nunca un array de varios tipos de controles. El modo ms sencillo de crear un array de controles en tiempo de diseo es copiar y pegar un control dentro del mismo formulario tantas veces como elementos sean necesarios en el vector. Otra posibilidad es, una vez insertados todos los elementos en el formulario, unificarlos en un vector dndoles a todos el mismo nombre y configurando el valor de su propiedad Index (que es la que indica la posicin que el control ocupa en el formulario). Con el ejemplo de este captulo veremos como un trabajo conjunto de bucles, arrays y subprogramas facilita enormemente la implementacin de una aplicacin. ? La funcin marcad corresponde al cuadro combinado (Combobox) Cuadros combinados Tambin como novedad en el paso a paso de este captulo trabajaremos con un nuevo tipo de controles, los llamados ComboBox o cuadros combinados. Su nombre se debe a que son una combinacin de los cuadros de listas y los cuadros de texto. Seguramente, aunque nunca hayamos programado en ningn lenguaje de programacin visual, en multitud de ocasiones habremos utilizado estos cuadros combinados. Su aspecto en estado inactivo es similar al del cuadro de texto aunque suele llevar un botn desplegable a su derecha que, al ser pulsado, muestra el contenido de la lista. Los elementos de dicha lista puede aadirse y eliminarse en tiempo de diseo (con la propiedad ItemData) y en tiempo de ejecucin (lo ms recomendado, con los eventos AddItem, que necesita un valor para aadir una nueva entrada a la lista en la ltima posicin, y Clear para borrar la lista). Adems, y como veremos en el paso a paso, con la propiedad ListIndex hacemos referencia a la posicin activa de la lista. Al modificar el valor activo de un54 Curso

cuadro combinado con el ratn o los cursores del teclado se produce su evento Click. Algunas funciones necesarias Para entender el cdigo de este captulo del curso es necesario que comentemos algunas funciones con las que trabajaremos: Year (Fecha): retorna un entero equivalente al ao del valor pasado como argumento, de tipo Date. Month (Fecha): retorna un entero equivalente al mes del valor pasado como argumento, de tipo Date. Date: Retorna la fecha que marca el reloj del sistema. RGB (Rojo,Verde,Azul): retorna un entero correspondiente al color resultante de mezclar las cantidades de rojo, verde y azul especificadas por los argumentos que han de ser enteros con valores entre 0 y 255. Cdate (Expresin): retorna un valor de tipo Date correspondiente a lo especificado en Expresin. Str (Cantidad): Devuelve un String con la cantidad indicada. Weekday (Fecha,Criterio): Devuelve el da de la semana en que cay o caer el da especificado en Fecha, de tipo Date, siguiendo el Criterio, que es un entero que, de valer 2, indica que el primer da de la semana es el lunes (criterio espaol).

Estructura with end winth En el trabajo con objetos, ms an cuando se modifican sus propiedades en tiempo de ejecucin, es necesario que dichas modificaciones se realicen de un modo rpido, ntido y sencillo. Con ese objetivo, Visual Basic 6 ofrece a los programadores la estructura With End Whith que sigue la siguiente estructura:Visual Basic 6.0 55

With objeto . propiedad1 = Nuevo_Valor . propiedad2 = Nuevo_Valor . propiedadn = Nuevo_Valor End With De este modo modificaramos n propiedades del mismo objeto sin necesidad de escribir n veces su nombre. El hecho de que en el paso a paso de este captulo, objeto sea ARRdias(i) significa que las propiedades se refieren a la etiqueta que ocupa la posicin i-sima del vector de controles ARRdias.

Crear un calendario universalEn este captulo practicaremos el uso de los vectores con una coleccin de controles, concretamente etiquetas, con las que programaremos un calendario universal. Tambin utilizaremos cuadros combinados para familiarizarnos con ellos. Con esta aplicacin podremos ver el calendario de cualquier mes de un ao cualquiera de los siglos XX y XXI. Lo primero que debemos hacer es abrir un nuevo proyecto (EXE estndar) y modificar el valor de algunas propiedades del formulario, todas ellas ya conocidas:Propiedad Nombre Caption BorderStyle MinButton Height Width Valor fmrCalendario Calendario Universal 1-Fixed Single True 7665 6960

Posteriormente insertaremos dos cuadros combinados con sus respectivas etiquetas. Primero, activando la funcin ComboBox de la barra de herramientas, dibujamos los dos cuadros de texto, a los que indicaremos los siguientes valores para los registros de propiedades:56 Curso

Propiedad Nombre Text Left Top Height Width

Combo de Aos Valor cmbAnio 1200 240 315 855

Combo de Meses valor cmbMes 3240 240 315 1335

Despus, con la funcin Label, insertamos sus respectivas etiquetas: Propiedad Nombre Caption Left Top Height Width Etiqueta de Aos Valor lblAnio Ao 360 240 255 615 Etiqueta de Meses Valor lblMes Mes 2400 240 255 615

Para ambas etiquetas indicamos una fuente (propiedad Font) MS Sans Serif, negrita de 12 puntos. Ahora vamos a crear un array de etiquetas, cada una de las cuales contendr (o no, segn el caso) un da del mes. En esta ocasin (no siempre ocurre lo mismo) lo ms prctico ser crear el vector a partir de una etiqueta con unos determinados valores para los registros de sus propiedades haciendo copias de esa etiqueta y ubicndolas en distintos puntos del formulario. Para los registros de las propiedades de la etiqueta original especificamos los siguientes valores: Propiedad Nombre CaptionVisual Basic 6.0

Valor ARRDias

57

Left Top Height Width

240 1680 615 615

A continuacin copiamos la etiqueta en el portapapeles (Edicin/Copiar) y la pegamos sobre el formulario (Edicin/Pegar). En ese momento, Visual Basic nos preguntar si deseamos crear una matriz de controles, a lo que debemos contestar afirmativamente. Debemos repetir este proceso hasta contar con 37 etiquetas iguales (36 copias), colocando cada una en el formulario antes de pegar la siguiente. Es muy importante tener en cuenta el orden que cada una de ellas ocupa en el array, porque su posicin en el formulario depender de ese ndice. Teniendo en cuenta que la primera etiqueta adquiere por defecto el ndice 0 y que ya est ubicada en el formulario, las dems etiquetas ocuparn, segn su ndice (propiedad Index), las siguientes posiciones (las posiciones estn pensadas para que se puedan colocar de manera sencilla pulsando y arrastrando con el ratn):Prop. Index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 58 Prop. Left 240 1200 2160 3120 4080 5040 6000 240 1200 2160 3120 4080 5040 6000 240 1200 2160 Prop. Top 1680 1680 1680 1680 1680 1680 1680 2640 2640 2640 2640 2640 2640 2640 3600 3600 3600 Prop. Index 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 Prop. Left 5040 6000 240 1200 2160 3120 4080 5040 600 240 1200 2160 3120 4080 5040 6000 240 Prop. Top 3600 3600 4560 4560 4560 4560 4560 4560 4560 5520 5520 5520 5520 5520 5520 5520 6480 Curso

17 18

3120 4080

3600 3600

36

1200

6480

Los nicos controles que ahora quedan por aadir son los ttulos de los das de la semana. Para ello utilizaremos 7 etiquetas con rtulos (propiedad caption) LUN, MAR, MIE, JUE, VIE, SAB, DOM, de tamao 615 x 255 twips, fuente MS Sans Serif negrita de 12 puntos y las siguientes coordenadas:

Lo siguiente que debemos hacer es insertar el cdigo del formulario (Ver/Cdigo) donde inicializaremos los valores de los cuadros combinados al cargarse el formulario (evento form_load) y programaremos los eventos de cambio de valor de los cuadros combinados (evento click). Para simplificar el cdigo, utilizaremos la modularidad (explicada en el captulo anterior del curso) creando los procedimientos Redibujar (que hace el proceso de refresco de datos), BorrarFormulario (subprocedimiento del anterior, que borra los datos antes de que se dibujen los nuevos) y RedibujarFechas (tambin subprocedimiento de Redibujar que inserta los nuevos datos). El cdigo es el siguiente: Option Explicit

Visual Basic 6.0

59

Private Sub cmbAnio_Click() Redibujar End Sub Private Sub cmbMes_click() Redibujar End Sub Private Sub form_load() Inicializar valores en tiempo de ejecucin Dim i As Integer RELLENAR EL COMBO DE MESES cmbMes.AddItem Enero cmbMes.AddItem Febrero cmbMes.AddItem Marzo cmbMes.AddItem Abril cmbMes.AddItem Mayo cmbMes.AddItem Junio cmbMes.AddItem Julio cmbMes.AddItem Agosto cmbMes.AddItem Septiembre cmbMes.AddItem Octubre cmbMes.AddItem Noviembre cmbMes.AddItem Diciembre RELLENAR EL COMBO DE AOS For i = 1900 To 2100 cmbAnio.AddItem i Next INICIALIZAR COMBOS CON FECHA ACTUAL cmbAnio.Text = Year(Date) establecer ao actual como valor inicial de cmbAnio cmbMes.ListIndex = Month(Date) - 1 establecer mes actual como valor inicial de cmbMes CAMBIAR COLORES A LOS TTULOS DE SBADO Y DOMINGO lblSabado.ForeColor = RGB(0, 0, 255) lblDomingo.ForeColor = RGB(255, 0, 0) End Sub60 Curso

Private Sub Redibujar() Dibuja el nuevo calendario Dim diasmes As Integer Dim fecha As Date BorrarFormulario diasmes = NumDiasMes(cmbMes.ListIndex + 1, cmbAnio.Text) fecha = CDate(1/ + Str(cmbMes.ListIndex + 1) + / + cmbAnio.Text) con el smbolo entre strings se produce concatenacin Call RedibujarFechas(Weekday(fecha, 2), diasmes) End Sub Private Sub BorrarFormulario() Borra el formulario Dim i As Integer For i = 0 To 36 With ARRdias(i) .Appearance = 1 Fondo blanco .Caption = .Font = Arial .FontBold = True Negrita .FontSize = 26 .Alignment = 2 Centrado End With Next End Sub Private Sub RedibujarFechas(ByVal dia1mes As Integer, _ ByVal diasmes As Integer) Dim i As Integer For i = dia1mes To (diasmes + dia1mes - 1) ARRdias(i - 1).Appearance = 0 If (i Mod 7 = 6) Then si es sbado ARRdias(i - 1).ForeColor = RGB(0, 0, 255) Else If (i Mod 7 = 0) Then si es domingo ARRdias(i - 1).ForeColor = RGB(255, 0, 0) Else ARRdias(i - 1).ForeColor = RGB(0, 0, 0) End If End IfVisual Basic 6.0 61

ARRdias(i - 1).Caption = i - dia1mes + 1 Next End Sub Por ltimo, debemos crear la funcin NumDiasMes, que devuelve el nmero de das de un mes segn el mes y el ao (exclusivamente para febrero). El criterio utilizado para calcular el nmero de das de un mes de febrero es el siguiente: Un ao es bisiesto (y por consiguiente su mes de febrero tiene 29 das) si dicho ao es divisible por 4 (al dividir el nmero de ao por 4 su resto es 0). Como excepcin estn los aos mltiplos de 100 (el ao 1900, por ejemplo), que no son bisiestos, salvo los mltiplos de 400 (por ejemplo el ao 2000) que s que lo son. Como esta funcin puede tener utilidad en algn otro programa, es conveniente ubicarla en un mdulo externo (Proyecto/Agregar Mdulo/Nuevo). Siguiendo el criterio anterior, el cdigo de la funcin NumDiasMes ser el siguiente: Public Function NumDiasMes(mes As Integer, anio As Integer) If mes = 2 Then If ((anio Mod 4 = 0) And (anio Mod 1000)) Or _ ((anio Mod 4 = 0) And (anio Mod 100 = 0) And _ (anio Mod 400 = 0)) Then NumDiasMes = 29 Else NumDiasMes = 28 End If Else If (mes = 1) Or (mes = 3) Or (mes = 5) Or _ (mes = 7) Or (mes = 8) Or (mes = 10) Or _ (mes = 12) Then NumDiasMes = 31 Else NumDiasMes = 30 End If End If End Function

62

Curso

Captulo 7Interfaz aplicacin-usuarioSeguramente, a todos los que aprendimos a programar con entornos de programacin no visuales (Pascal, Cobol, Basic, C, Fortran, ) lo que ms nos fascin de la programacin visual fue su tremenda potencia a la hora de disear la interfaz de las aplicaciones, gracias a una amplia gama de controles con los que nos permite trabajar.

Visual Basic 6.0

63

Como hemos ido viendo a lo largo del curso, Visual Basic ofrece una extenssima gama de controles (de los que tan slo conocemos una nfima porcin) que permiten realizar, esencialmente, intercambio de informacin entre la mquina y el usuario. Posiblemente debido a toda esta gama de posibilidades, gran parte del tiempo dedicado al desarrollo de una aplicacin se destina al diseo de la interfaz. Al respecto del diseo de interfaces hay multitud de teoras. De hecho, cada diseador puede tener su propio estilo, pero existen unas premisas bsicas que debemos tener en cuenta antes de empezar a insertar controles en los formularios. Sin profundizar en el buen gusto de cada uno a la hora de elegir colores, fuentes y dems, toda aplicacin que presuma de ser prctica y tener una interfaz bien diseada debe resultar al mismo tiempo: Simple: una interfaz no debe sobrecargarse con controles dedicados a mostrar datos intrascendentes. Completa: la aplicacin debe mostrar todos los datos necesarios. En caso de tener que mostrar o recopilar muchos datos, es preferible utilizar varios formularios que concentrar demasiada informacin en uno mismo. Concreta: en caso de utilizar mltiples formularios en el proyecto, conviene tratar de contextualizar la informacin, dedicando, si es posible, cada formulario a una funcin en concreto. Intuitiva: debe tenderse a desarrollar proyectos donde el usuario se sienta familiarizado con el entorno.

Editor de mens Uno de los elementos ms utilizados a la hora de desarrollar aplicaciones para entornos de ventanas es la barra de mens. Los mens se suelen aadir en la parte superior de los formularios y su funcin es facilitar al usuario el acceso a todas las funciones del programa. Adems, respetando las cualidades anteriormente mencionadas, los desarrolladores de aplicaciones ofimticas tienden a disear la barra de mens siguiendo un estndar: el men Archivo contiene las funciones operativas del documento, Edicin rene, entre64 Curso

otras, las funciones de trabajo con el portapapeles, Formato se destina a reunir las posibilidades de formato especficas de la aplicacin, Ayuda contiene los ficheros informativos del programa, etc. Visual Basic 6 ofrece una estupenda funcin que nos ayudar en gran medida a la hora de elaborar las barras de men de nuestras aplicaciones. Esta herramienta es el denominado Editor de mens. El Editor de mens se presenta con un formulario dividido en dos zonas. La superior est destinada a configurar cada uno de los nodos del rbol de men mientras que la inferior nos muestra la estructura de dicho rbol. Como el resto de objetos con los que trabaja Visual Basic, los nodos del rbol de men tienen una serie de propiedades que es necesario conocer: Name: es la cadena de caracteres con la que nos referiremos al nodo a lo largo del diseo del programa. Siguiendo el convenio Redclick utilizado desde el principio del curso, todos los nodos del men llevarn en su nombre el prefijo mnu. Caption: es el texto que la aplicacin mostrar en el men como representacin grfica del nodo. Anteponiendo a una de las letras del texto el carcter &, esa letra queda asociada al nodo dentro del submen donde se encuentre. Lgicamente, en cada uno de los submens no puede haber dos nodos con la misma letra asociada. Grficamente, la letra aparecer subrayada. Shortcut: combinacin de teclas con las que, en tiempo de ejecucin, se invoca directamente el evento Click del nodo. La diferencia entre esta asignacin y la anterior es que esta se realiza desde cualquier punto del programa y la asociacin por medio de la propiedad Caption se realiza durante la navegacin por el men. Checked: con esta propiedad (de tipo boolean) activada, aparece una verificacin junto al nodo en el men. Enabled: habilita o deshabilita el nodo (y sus hijos si los tuviera). Visible: muestra u oculta el nodo (y sus hijos si los tuviera).

Visual Basic 6.0

65

Los separadores son unos nodos especiales. Se utilizan para separar funciones dentro de un mismo men y no llevan programacin. Para aadirlos al men basta con poner un guin - en su propiedad Name. Para diferenciar los distintos niveles del rbol se utilizan las flechas de derecha e izquierda del centro del formulario. La primera hace descender un nivel al nodo seleccionado y la segunda se lo aumenta. Tambin es muy importante el orden en que se ordenan los nodos dentro del rbol, pues dependiendo de este orden los nodos sern padres o hijos de unos nodos u otros. Con las flechas arriba y abajo (en el centro del formulario) se modifica la posicin del nodo seleccionado. Para eliminar un nodo de la estructura se selecciona el nodo en concreto y se pulsa el botn Eliminar del formulario. Para pasar de un nodo a otro se puede seleccionar directamente el nodo objetivo con el ratn o bien utilizar el botn Siguiente para pasar al sucesor del nodo actual.

Creacin del men del editor de textosEn el paso a paso de este captulo crearemos el men del editor de textos sobre el que trabajaremos durante los prximos captulos del curso. El men contendr las funciones estndar de modo que al usuario le resulte cmoda y familiar la interfaz utilizada. Lo primero que debemos hacer es pararnos a pensar qu es lo que queremos hacer. En nuestro caso, el objetivo es crear el men de un editor de textos. Dicho men contar entonces con las siguientes ramas o grupos: Archivo que incluir las funciones Nuevo, Abrir, Guardar y Salir; Edicin con las funciones Cortar, Copiar y Pegar; y Formato que a su vez contiene Negrita, Cursiva y Subrayado. Teniendo esto claro ya podemos abrir un nuevo proyecto de Visual Basic. A continuacin abrimos el editor de mens (Herramientas/Editor de mens o Ctrl+E) y configuramos el rbol del men. El primero de los nodos ser Archivo y sus propiedades sern las siguientes:

66

Curso

A continuacin pulsamos la tecla Enter (o el botn Insertar del formulario) para validar la entrada. Como a continuacin vamos a aadir los nodos hijo de archivo, indicamos una bajada de nivel con la flecha derecha del formulario. Al nombre de todos los hijos de Archivo le aadiremos el prefijo del nombre de su padre:

Validamos la entrada (Enter) y aadimos los siguientes nodos (asegurndonos de insertar uno antes de pasar al siguiente):

Visual Basic 6.0

67

En este punto es conveniente aadir un separador, ya que el prximo nodo programable ser Salir y, por su naturaleza, podra aislarse de los 3 nodos anteriores:

Validamos la entrada (Enter) y aadimos el nodo Salir:

Validamos y queda terminado el men Archivo. Para continuar con el men Edicin lo primero que debemos hacer es subir el nivel (con la flecha izquierda del formulario) para igualarlo al nivel de Archivo. A continuacin aadimos la entrada de dicho nodo:

68

Curso

Despus bajamos de nivel (con la flecha derecha) y aadimos los hijos de Edicin con las siguientes propiedades:

Despus de validar la entrada de estos nuevos nodos, subimos de nuevo de nivel (flecha izquierda del formulario) para aadir el modo Formato.

Bajamos de nivel (flecha derecha del formulario) e insertamos sus correspondientes hijos:

Visual Basic 6.0

69

Terminada la edicin del men, confirmamos con el botn Aceptar. Despus guardamos el proyecto (Archivo/Guardar proyecto como) para poder retomarlo ms adelante en este mismo punto.

70

Curso

Captulo 8Barras de estado y barras de herramientasAprovechando la creacin del editor de textos en la que nos encontramos sumidos desde el captulo anterior, en esta ocasin, vamos a conocer el manejo de algunos de los llamados controles comunes de Microsoft, algo ms complejos que los controles estndar pero de una alta funcionalidad.Todas las aplicaciones de trabajo con archivos (diseo, ofimtica, etc.) cuentan con unos controles, de los que an no hemos hablado. De hecho, paralelamente a la barra de mens, estos programas ofrecen una barra de herramientas donde agrupan las principales funciones del men (abrir, guardar, copiar, pegar, etc.). Tambin es muy comn en las aplicaciones donde el teclado tiene un peso importante, incluir una barra de estado en la parte inferior de la pantalla. Esa barra, de uso generalmente informativo, muestra el estado del bloqueo de las maysculas o el teclado numrico, la fecha, la hora, o informacin propia del programa. Del resto de los controles comunes de Microsoft, hoy hablaremos de las listas de imgenes, ya que su utilizacin es imprescindible para poder asociar iconos a los botones de la barra de herramientas. Control ImageList El control ImageList tiene una utilidad diferente a los dems controles con los que hemos trabajado hasta el momento. El fin de casi todos los controles ms comunes de Visual Basic es intercambiar informacin con el usuario (ya sea un simple clic del usuario sobre un botn de comando para desencadenar un procedimiento, mostrar un ttulo sobre una etiqueta u ofrecer una serie de opciones con un cuadro combinado). En cambio, la funcin de una lista de imgenes es servir de contenedor de imgenes (iconos, cursores, mapas de bits, etc.) que posteriormente sern utilizarlas por otros controles. La insercin de las imgenes en la lista puede hacerse por medio de cdigo, en tiempo de ejecucin, o bien en tiempo de diseo a partir de un dilogo que har las veces de asistente. Dentro de la lista, cada imagen tendr un nVisual Basic 6.0 71

dice para diferenciarse del resto. Para que otro control pueda despus utilizar esas imgenes, primero debemos crear un enlace a la lista y despus, por medio de esos ndices, hacer referencia a las distinta imgenes. Barras de herramientas Para crear las barras de herramientas con Visual Basic, se utiliza el control Toolbar (hasta ahora desconocido) que contiene a su vez una serie de controles. Todo el mundo est acostumbrado a utilizar las barras de herramientas en multitud de programas, por lo que incluirlas en nuestras aplicaciones resultar, al menos en concepto, bastante sencillo. El control Toolbar se inserta en el formulario en tiempo de diseo (siempre en la parte superior de la pantalla, bajo la barra de men). La configuracin de las propiedades de este control es tremendamente sencilla, ya que cuenta con un asistente que nos ayudar durante el proceso. Dentro de este dilogo, tambin podemos insertar los botones que habilitaremos para que los usuarios interacten con nuestra aplicacin, si bien los iconos que etiqueten a estos botones deben estar previamente insertados en una lista de imgenes. Dependiendo del tamao de las imgenes y de la insercin o no de texto en los botones de la barra de herramientas, el tamao del control ser mayor o menor. Una alternativa a etiquetar con texto el botn (propiedad Caption), es aadir un texto a la propiedad ToolTipText para que la etiqueta se despliegue al situar el puntero del ratn sobre el botn. Barras de estado Las barras de estado, tambin muy extendidas entre las aplicaciones actuales, estn formadas por uno o varios paneles informativos. Estos paneles pueden mostrar la hora, la fecha, informacin sobre la pulsacin o no de teclas especiales (Bloq Mays, Insert, etc.) o informacin especfica de la aplicacin. En Visual Basic, para insertar barras de estado en las aplicacio72 Curso

nes, se utiliza el control StatusBar. Este tipo de controles, al igual que las barras de estado, poseen un asistente para su configuracin con el fin de evitarle al programador algunas lneas de cdigo. Las barras de estado tambin pueden contener iconos en sus paneles, pero en este caso no es necesario que dichos iconos estn previamente insertados en un control ImageList.

Controles comunes de MicrosoftLa mejor manera de aprender a utilizar los nuevos controles es ponerse a trabajar con ellos. En esta ocasin, aadiremos una barra de herramientas y una barra de estado a nuestro editor de textos, aunque de momento no programaremos sus funciones. Como para la realizacin de este paso a paso partiremos del proyecto que empezamos el pasado captulo, lo primero que debemos hacer es recuperar ese proyecto. Para ello, podemos buscar el proyecto dentro de nuestros documentos y abrirlo con un doble clic sobre su icono o bien, al iniciar Visual Basic, seleccionar la pestaa Existente y buscar all el proyecto guardado.

Lo primero que debemos hacer para poder utilizar los nuevos controles, es insertarlos en el cuadro de herramientas. Para ello, pulsamos sobre un rea en blanco del cuadro de herramientas y, del men contextual desplegado, pulsamos sobre la funcin Componentes Se despliega entonces el dilogo Componentes, donde debemos pulsar sobre la pestaa Controles (si no es la lengeta activa). Dentro de la lista de controles, buscamos la entrada MicroVisual Basic 6.0 73

soft Windows Common Controls 6.0 (SP4) y marcamos la casilla de verificacin adjunta. Despus, al pulsar sobre el botn de comando Aceptar, veremos que un conjunto de nuevos controles aparecen en nuestro cuadro de herramientas. Ya estamos en disposicin de insertar los nuevos controles, si bien, como indicbamos anteriormente, es necesario tener creada la lista de imgenes para poder insertar las imgenes en la barra de herramientas. Para aadir un control ImageList a nuestro formulario, basta con hacer un doble clic sobre su icono en el cuadro de herramientas. Una vez tenemos el control ImageList sobre el formulario, pulsamos sobre l para activarlo y establecemos como imlIcono el registro de su propiedad Nombre. A continuacin, pulsamos sobre el control en el formulario con el botn derecho del ratn y, en el men contextual, pulsamos sobre Propiedades. En el dilogo General, indicamos un tamao de los iconos de 16 x 16 puntos y, en Imgenes, insertamos, respetando este orden, las imgenes de los siguientes iconos: nuevo, abrir, guardar, cortar, copiar, pegar, negrita, cursiva y subrayado. Para insertar un icono se pulsa sobre Insertar imagen, se localiza con el explorador desplegado y se pulsa sobre Abrir. Una vez insertadas todas las imgenes, se pulsa sobre el botn Aceptar y la lista queda definida. Ahora insertamos el control ToolBar que contendr la barra de herramientas. Para ello, nuevamente, hacemos doble clic sobre la funcin correspondiente del cuadro de herramientas. Despus actualizamos el nombre del nuevo control (indicamos el valor tbrOfimatica en su propiedad Nombre) y llamamos al asistente de las propiedades del mismo modo que lo74 Curso

hacamos en el paso anterior con el de la lista de imgenes. En la pestaa general aceptamos los valores por defecto, salvo en el del cuadro combinado ImageList, donde buscaremos la entrada imlIconos correspondiente a la lista recin creada, y pasamos a la pestaa Botones. A partir de este dilogo crearemos los botones que se mostrarn en la barra de herramientas. Existen varios tipos de botones, pero para este proyecto utilizaremos tan slo los botones comunes o tbrDefault (similares a los CommandButton) y los separadores o tbrSeparator. Dentro de la barra de herramientas, los botones vienen a ser elementos de un array de controles. Dicho esto, y teniendo siempre en consideracin el valor del ndice (campo index) del botn, estableceremos los siguientes valores para los 11 botones de la barra de herramientas (para insertar un nuevo botn se pulsa el botn de comando Insertar botn):

El resto de valores se dejan con su valor por defecto. Despus confirmamos pulsando el botn Aceptar.Visual Basic 6.0 75

De un modo muy similar al utilizado para crear la barra de herramientas, insertaremos en el formulario una barra de estado. Con un doble clic sobre el icono correspondiente el cuadro de herramientas de Visual Basic, aadimos el control StatusBar al formulario, al que llamaremos sbrEstado. A continuacin invocamos al formulario de sus propiedades. Accedemos al dilogo de Paneles pulsando sobre su pestaa correspondiente y, una vez all, insertamos los siguientes paneles:

De nuevo, dejamos el resto de campos con su valor por defecto. Por ltimo, guardamos el proyecto para continuar trabajando en l en los prximos captulos del curso. Si queremos conservar las distintas versiones del proyecto, es preferible hacer una copia de todos los archivos que se generan en una sesin antes de editar los documentos, ya que en ocasiones los proyectos originales pueden verse modificados.

76

Curso

Captulo 9Cuadros de dilogo comunesInsertados casi todos los controles en el formulario del editor de textos, ha llegado la hora de empezar a programar, pero antes debemos aadir al proyecto los ltimos objetos necesarios para dotar al editor de toda su funcionalidad.Con la insercin de las barras de herramientas y estado del captulo anterior del curso, la parte de diseo de la interfaz de nuestro editor qued prcticamente completada. Curiosamente, hemos dejado para el final la parte ms importante, que es el cuadro de texto que contendr todos los caracteres de nuestros documentos. Para el trabajo con archivos, adems, necesitaremos utilizar los tpicos cuadros de dilogo Abrir y Guardar como, para lo que necesitaremos insertar el control CommonDialog. Por ltimo, empezaremos a programar el motor de la aplicacin, teniendo siempre en cuenta el paralelismo entre las funciones de la barra de mens y la barra de herramientas. Introduccin al trabajo con ficheros Como avanzbamos, utilizaremos el control CommonDialog de Visual Basic para trabajar con los cuadros de dilogo usuales en el trabajo con documentos. Adems, en este aspecto, necesitaremos empezar a conocer el funcionamiento del trabajo con ficheros, de modo que seamos capaces de abrir o crear nuevos documentos donde guardar u obtener informacin (texto en el ejemplo que nos compete). Aunque con el Paso a Paso quedar todo mucho ms claro, la idea general es que con un cuadro de dilogo (independientemente de que se trate del destinado a abrir o guardar documentos), obtendremos el nombre, el tipo (con la propiedad Filter de los CommonDialog podemos especificar un filtro para localizar un tipo especfico de archivos) y la ubicacin de un fichero (al salvar los datos,Visual Basic 6.0 77

si no existe ese fichero, se crea uno nuevo), que posteriormente abriremos para leer o escribir el texto con la instruccin Open de Visual Basic: Open rutaacceso [For modo] As #nmeroarchivo donde rutaacceso es el nombre con la ruta completa del fichero (que automticamente se guarda en el registro de la propiedad FileName de los cuadros de dilogo), modo es el tipo de apertura (Output al guardar e Input al cargar) y nmeroarchivo, siempre precedido de #, el nmero entero que har las veces de alias del fichero. Para recuperar el texto de un documento, tras la llamada al cuadro de dilogo Abrir (mtodo ShowOpen de los CommonDialog) y la apertura del archivo, volcamos el contenido del fichero al editor con la funcin Input, que recibe como parmetros la longitud del texto (que podemos obtener a su vez con la funcin FileLen) y el alias del fichero