Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PracticasVisualBasic60 PDF
PracticasVisualBasic60 PDF
Javier Garca de Jaln Jos Ignacio Rodrguez Alfonso Brazlez Madrid, junio 2003
Practique Visual Basic 6.0 como si estuviera en primero Javier Garca de Jaln Jos Ignacio Rodrguez Alfonso Brazlez Perteneciente a la coleccin :
Aprenda
Practique Visual Basic 6.0 como si estuviera en Primero pgina 1 NDICE 0 INTRODUCCIN 2 1 Primera Prctica 3 1.1 Introduccin 3 1.2 Programas secuenciales, interactivos y orientados a eventos 3 1.3 Programas para el entorno Windows 4 1.3.1 Modo de Diseo y Modo de Ejecucin 4 1.3.2 Formularios y Controles 4 1.3.3 Objetos y Propiedades 4 1.3.4 Nombres de objetos 5 1.3.5 Eventos 6 1.3.6 Mtodos 6 1.3.7 Proyectos y ficheros 6 1.4 El entorno de programacin Visual Basic 6.0 7 1.5 El Help de Visual Basic 6.0 8 1.6 Ejemplos 8 1.6.1 Ejemplo 1.1: Sencillo programa de colores y posiciones 8 1.6.2 Ejemplo 1.2: Minicalculadora elemental 10 1.6.3 Ejemplo 1.3: Transformacin de unidades de temperatura 11 1.6.4 Ejemplo 1.4: Colores RGB 13 2 Segunda Prctica 16
2.1 Ejercicio 1. Eventos en formularios. 16 2.2 Ejercicio 2. Listas (Examen de Septiembre 1997) 18 2.3 Ejercicio 3. Operaciones con nmeros 19 3 Tercera Prctica 20 3.1 Ejercicio 1. Aplicacin con diversos controles 20 3.2 Ejercicio 2: Movimiento oscilatorio sinusoidal. 22 3.3 Ejercicio 3: Lanzamiento parablico con obstculo. 24 4 Cuarta Prctica 27 4.1 Ejercicio 1: Operaciones diversas sobre los elementos de una lista. 27 4.2 Ejercicio 2. Ayuda informtica para la Liga de las Estrellas. 30 5 Quinta Prctica 33 5.1 Ejercicio 1: Simulacin del movimiento de un pez dentro de una pecera 33 5.2 Ejercicio 2: Utilizacin del debugger: Dibujo interactivo de polgonos 35 5.3 Ejercicio 3: Definir un polgono y averiguar si una serie de puntos estn dentro o fuera. 39 6 Sexta Prctica 44 6.1 Ejercicio 1: Simulacin del llenado y vaciado de un depsito 44 6.2 Ejercicio 2: Clculo de una raz de un polinomio por el mtodo de Newton. 45 6.3 Ejercicio 3. Simulacin de llenado de un doble depsito 47 7 Sptima Prctica 50 7.1 Ejercicio 1: Desarrollo de un editor de texto: proyecto MiNotepad 50 7.2 Ejercicio 2: Introduccin de mejoras: tener en cuenta si el texto se ha modificado , y no cerrar la aplicacin sin avisar que se puede perder informacin (proyecto MiNotepad2) 51 7.3 Ejercicio 3: Introduccin de mejoras: bsqueda de texto (proyecto MiNotepad3) 52 Como recomendacin general, antes de comenzar cada prctica abre el Windows Explorer y crea en tu disco un directorio llamado Prac01, Prac02, etc. Por motivos de orden es impo rtante que todos los ficheros de esta prctica se creen dentro de este directorio.. Todos los proye
ctos debern estar dentro del directorio de la prctica, en un sub-directorio especial para cada ejer cicio. Mantn abierto el Windows Explorer y comprueba de vez en cuando que los proyectos de los distintos ejercicios se estn guardando correctamente.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 2 INTRODUCCIN Este manual recoge los ejercicios de programacin en lenguaje Visual Basic 6.0 rea lizados en las prcticas de la asignatura Informtica 1, en el Primer Curso de la Escuela Superior de Ingenieros Industriales de San Sebastin (Universidad de Navarra), desde el curso 1997-98 al curso 1999-2000. Esta coleccin de ejercicios nunca lleg a publicarse en Internet. Sin embargo, es lg ico considerarla como el complemento imprescindible a los apuntes "Aprenda Visual Basic 6.0 co mo si estuviera en Primero", que no contienen ejemplos o ejercicios resueltos. Aunque con cierto retraso, estos ejemplos se publican ahora en formato PDF, espe rando que ayuden a aprender a programar a muchos estudiantes o simples aficionados a la informtica . Los distintos ejercicios estn agrupados en "prcticas". De cada uno de ellos se inc luye: -Un enunciado que describe el programa a realizar, tal como se planteaba a los a lumnos. -El programa correspondiente al ejercicio resuelto. -Unos breves comentarios sobre los aspectos del ejercicio resuelto a los que con venga prestar ms atencin. A lo largo de estas pginas se utilizan con frecuencia las unidades de disco Q: y G:, y los directorios Q:\Infor1\Prac%% y G:\Infor1\Prac%%. El disco Q: de la red Novell de la ESII de San Sebastin era un disco compartido, visible desde todos los ordenadores de la red, en el qu e los profesores ponan los ficheros de slo lectura que queran compartir con los alumnos. El disco G: era una particin del servidor propia de cada alumno que se estableca como tal unidad cuando el alu mno iniciaba sesin desde cualquier ordenador de la red. Las prcticas se recogan automticamente a partir de estas particiones propias de cada alumno. Para facilitar la tarea a los usuarios de esta coleccin de ejercicios se facilita un directorio llamado programas en el que se incluyen los ficheros correspondientes a todos los ejerci cios resueltos, de forma que el lector no necesite teclear o escanear ningn programa. Es posible que alguno de los programas incluidos contenga algn error; se agradecer recibir noticia de ello para corregirlo y facilitar el trabajo a los futuros lectores.. Madrid, junio de 2003
Practique Visual Basic 6.0 como si estuviera en Primero pgina 3 1 PRIMERA PRCTICA 1.1 INTRODUCCIN Visual Basic 6.0 es uno de los lenguajes de programacin que ms entusiasmo despiert an entre los programadores de PCs, tanto expertos como novatos. En el caso de los programador es expertos por la facilidad con la que desarrollan aplicaciones complejas en poqusimo tiempo (co mparado con lo que cuesta programar en Visual C++, por ejemplo). En el caso de los programadore s novatos por el hecho de ver de lo que son capaces a los pocos minutos de empezar su aprendizaje . El precio que hay que pagar por utilizar Visual Basic 6.0 es una menor velocidad o eficiencia en las aplicaciones. Visual Basic 6.0 es un lenguaje de programacin visual, tambin llamado lenguaje de 4 generacin. Esto quiere decir que un gran nmero de tareas se realizan sin escribir cdigo, simp lemente con operaciones grficas realizadas con el ratn sobre la pantalla. Visual Basic 6.0 es tambin un programa basado en objetos, aunque no orientado a o bjetos como C++ o Java. La diferencia est en que Visual Basic 6.0 utiliza objetos con pr opiedades y mtodos, pero carece de los mecanismos de herencia y polimorfismo propios de los verdader os lenguajes orientados a objetos como Java y C++. En este primer captulo se presentarn las caractersticas generales de Visual Basic 6 .0, junto con algunos ejemplos sencillos que den idea de la potencia del lenguaje y del mo do en que se utiliza. 1.2 PROGRAMAS SECUENCIALES, INTERACTIVOS Y ORIENTADOS A EVENTOS Existen distintos tipos de programas. En los primeros tiempos de los ordenadores los programas eran de tipo secuencial (tambin llamados tipo batch) Un programa secuencial es un programa que se arranca, lee los datos que necesita, realiza los clculos e imprime o guarda en el disco los resultados. De ordinario, mientras un programa secuencial est ejecutndose no necesita ninguna intervencin del usuario. A este tipo de programas se les llama tambin programas basados u ori entados a procedimientos o a algoritmos (procedural languages). Este tipo de programas sig uen utilizndose ampliamente en la actualidad, pero la difusin de los PCs ha puesto de actualidad otros tipos de programacin. Los programas interactivos exigen la intervencin del usuario en tiempo de ejecucin , bien para suministrar datos, bien para indicar al programa lo que debe hacer por medi o de mens. Los
programas interactivos limitan y orientan la accin del usuario. Un ejemplo de pro grama interactivo podra ser Matlab. Por su parte los programas orientados a eventos son los programas tpicos de Windo ws, tales como Netscape, Word, Excel y PowerPoint. Cuando uno de estos programas ha arranc ado, lo nico que hace es quedarse a la espera de las acciones del usuario, que en este caso s on llamadas eventos. El usuario dice si quiere abrir y modificar un fichero existente, o bien comenza r a crear un fichero desde el principio. Estos programas pasan la mayor parte de su tiempo esperando las acciones del usuario (eventos) y respondiendo a ellas. Las acciones que el usuario puede real izar en un momento determinado son variadsimas, y exigen un tipo especial de programacin: la programa cin orientada a eventos. Este tipo de programacin es sensiblemente ms complicada que la secuenci al y la interactiva, pero Visual Basic 6.0 la hace especialmente sencilla y agradable.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 4 1.3 PROGRAMAS PARA EL ENTORNO WINDOWS Visual Basic 6.0 est orientado a la realizacin de programas para Windows, pudiendo incorporar todos los elementos de este entorno informtico: ventanas, botones, cajas de dilogo y de texto, botones de opcin y de seleccin, barras de desplazamiento, grficos, mens, etc. Prcticamente todos los elementos de interaccin con el usuario de los que dispone W indows 95/98/NT/XP pueden ser programados en Visual Basic 6.0 de un modo muy sencillo. En ocasiones bastan unas pocas operaciones con el ratn y la introduccin a travs del teclado de a lgunas sentencias para disponer de aplicaciones con todas las caractersticas de Windows 95/98/NT/XP . En los siguientes apartados se introducirn algunos conceptos de este tipo de programacin. 1.3.1 Modo de Diseo y Modo de Ejecucin La aplicacin Visual Basic de Microsoft puede trabajar de dos modos distintos: en modo de diseo y en modo de ejecucin. En modo de diseo el usuario construye interactivamente la a plicacin, colocando controles en el formulario, definiendo sus propiedades, y desarrolland o funciones para gestionar los eventos. La aplicacin se prueba en modo de ejecucin. En ese caso el usuario acta sobre el pr ograma (introduce eventos) y prueba cmo responde el programa. Hay algunas propiedades de los controles que deben establecerse en modo de diseo, pero muchas otras pueden cambiarse en ti empo de ejecucin desde el programa escrito en Visual Basic 6.0, en la forma en que ms adelante se ver. Tambin hay propiedades que slo pueden establecerse en modo de ejecucin y que no son visibles en modo de diseo. Todos estos conceptos controles, propiedades, eventos, etc.- se explican en los a partados siguientes. 1.3.2 Formularios y Controles Cada uno de los elementos grficos que pueden formar parte de una aplicacin tpica de Windows 95/98/NT/XP es un tipo de control: los botones, las cajas de dilogo y de texto, l as cajas de seleccin desplegables, los botones de opcin y de seleccin, las barras de desplazamiento hor izontales y verticales, los grficos, los mens, y muchos otros tipos de elementos son controles para Visual Basic 6.0. Cada control debe tener un nombre a travs del cual se puede hacer referencia a l en el programa. Visual Basic 6.0 proporciona nombres por defecto que el usuario puede modificar. En el Apartado Nombres de objetos se exponen algunas reglas para dar nombres a los dis
tintos controles. En la terminologa de Visual Basic 6.0 se llama formulario (form) a una ventana. U n formulario puede ser considerado como una especie de contenedor para los controles. Una apl icacin puede tener varios formularios, pero un nico formulario puede ser suficiente para las a plicaciones ms sencillas. Los formularios deben tambin tener un nombre, que puede crearse siguie ndo las mismas reglas que para los controles. 1.3.3 Objetos y Propiedades Los formularios y los distintos tipos de controles son entidades genricas de las que puede haber varios ejemplares concretos en cada programa. En programacin orientada a objetos (ms bien basada en objetos, habra que decir) se llama clase a estas entidades genricas, mientras q ue se llama objeto a cada ejemplar de una clase determinada. Por ejemplo, en un programa pue de haber varios botones, cada uno de los cuales es un objeto del tipo de control command button, que sera la clase.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 5 Cada formulario y cada tipo de control tienen un conjunto de propiedades que def inen su aspecto grfico (tamao, color, posicin en la ventana, tipo y tamao de letra, etc.) y su forma de responder a las acciones del usuario (si est activo o no, por ejemplo). Cada propiedad tien e un nombre que viene ya definido por el lenguaje. Por lo general, las propiedades de un objeto son datos que tienen valores lgicos (True, False) o numricos concretos, propios de ese objeto y distintos de las de otros objetos d e su clase. As pues, cada clase, tipo de objeto o control tiene su conjunto de propiedades, y c ada objeto o control concreto tiene unos valores determinados para las propiedades de su clase. Casi todas las propiedades de los objetos pueden establecerse en tiempo de diseo y tambin -casi siempre- en tiempo de ejecucin. En este segundo caso se accede a sus valore s por medio de las sentencias del programa, en forma anloga a como se accede a cualquier variabl e en un lenguaje de programacin. Para ciertas propiedades sta es la nica forma de acceder a ellas. P or supuesto Visual Basic 6.0 permite crear distintos tipos de variables, como ms adelante se ver. Se puede acceder a una propiedad de un objeto por medio del nombre del objeto a que pertenece, seguido de un punto y el nombre de la propiedad, como por ejemplo optColor.objNa me. En el siguiente apartado se estudiarn las reglas para dar nombres a los objetos. 1.3.4 Nombres de objetos En principio cada objeto de Visual Basic 6.0 debe tener un nombre, por medio del cual se hace referencia a dicho objeto. El nombre puede ser el que el usuario desee, e incluso Visual Ba sic 6.0 proporciona nombres por defecto para los diversos controles. Estos nombres por defecto hacen referencia al tipo de control y van seguidos de un nmero que se incrementa a medida que se v an introduciendo ms controles de ese tipo en el formulario (por ejemplo VScroll1, para una barra d e desplazamiento -scroll bar- vertical, HScroll1, para una barra horizontal, etc.). Los nombres por defecto no son adecuados porque hacen referencia al tipo de cont rol, pero no al uso que de dicho control est haciendo el programador. Por ejemplo, si se ut iliza una barra de desplazamiento para introducir una temperatura, conviene que su nombre haga refe rencia a la palabra temperatura, y as cuando haya que utilizar ese nombre se sabr exactamente a qu cont rol corresponde. Un nombre adecuado sera por ejemplo hsbTemp, donde las tres primeras letras indic an que se trata de una horizontal scroll bar, y las restantes (empezando por una ma
yscula) que servir para definir una temperatura. Existe una convencin ampliamente aceptada que es la siguiente: se utilizan siempr e tres letras minsculas que indican el tipo de control, seguidas por otras letras (la primera m ayscula, a modo de separacin) libremente escogidas por el usuario, que tienen que hacer refe rencia al uso que se va a dar a ese control. La Tabla 1.1 muestra las abreviaturas de los cont roles ms usuales, junto con la nomenclatura inglesa de la que derivan. En este mismo captulo se vern unos cuantos ejemplos de aplicacin de estas reglas para construir nombres.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 6 Abreviatura Control Abreviatura Control chk check box cbo combo y drop-list box cmd command button dir dir list box drv drive list box fil file list box frm form fra frame hsb horizontal scroll bar img image lbl label lin line lst list mnu menu opt option button pct pictureBox shp shape txt text edit box tmr timer vsb vertical scroll bar Tabla 1.1. Abreviaturas para los controles ms usuales. 1.3.5 Eventos Ya se ha dicho que las acciones del usuario sobre el programa se llaman eventos. Son eventos tpicos el clicar sobre un botn, el hacer doble clic sobre el nombre de un fichero para a brirlo, el arrastrar un icono, el pulsar una tecla o combinacin de teclas, el elegir una opcin de un me n, el escribir en una caja de texto, o simplemente mover el ratn. Ms adelante se vern los distinto s tipos de eventos reconocidos por Windows 95/98/NT/XP y por Visual Basic 6.0. Cada vez que se produce un evento sobre un determinado tipo de control, Visual B asic 6.0 arranca una determinada funcin o procedimiento que realiza la accin programada por el usuario para ese evento concreto. Estos procedimientos se llaman con un nombre que se fo rma a partir del nombre del objeto y el nombre del evento, separados por el carcter (_), como por ejemplo txtBox_click, que es el nombre del procedimiento que se ocupar de responder al ev ento click en el objeto txtBox. 1.3.6 Mtodos Los mtodos son funciones que tambin son llamadas desde programa, pero a diferencia de los procedimientos no son programadas por el usuario, sino que vienen ya pre-programadas con el len guaje. Los mtodos realizan tareas tpicas, previsibles y comunes para todas las aplicacion es. De ah que vengan con el lenguaje y que se libere al usuario de la tarea de programarlo s. Cada tipo de objeto o de control tiene sus propios mtodos. Por ejemplo, los controles grficos tienen un mtodo llamado Line que se encarga de dibujar lneas rectas. De la misma forma existe un mtodo llamado Circle que dibuja circunfe rencias y arcos de circunferencia Es obvio que el dibujar lneas rectas o circunferencias es una t area comn para todos los programadores y que Visual Basic 6.0 da ya resuelta. 1.3.7 Proyectos y ficheros
Cada aplicacin que se empieza a desarrollar en Visual Basic 6.0 es un nuevo proye cto. Un proyecto comprende otras componentes ms sencillas, como por ejemplo los formularios (que s on las ventanas de la interface de usuario de la nueva aplicacin) y los mdulos (que son conjuntos de funciones y procedimientos sin interface grfica de usuario). Cmo se guarda un proyecto en el disco? Un proyecto se compone siempre de varios fi cheros (al menos de dos) y hay que preocuparse de guardar cada uno de ellos en el direc torio adecuado
Practique Visual Basic 6.0 como si estuviera en Primero pgina 7 y con el nombre adecuado. Existe siempre un fichero con extensin *.vbp (Visual Ba sic Project) que se crea con el comando File/Save Project As. El fichero del proyecto contien e toda la informacin de conjunto. Adems hay que crear un fichero por cada formulario y por cada mdulo q ue tenga el proyecto. Los ficheros de los formularios se crean con File/Save Filena me As teniendo como extensin *.frm. Los ficheros de cdigo o mdulos se guardan tambin con el comando File/ Save Filename As y tienen como extensin *.bas si se trata de un mdulo estndar o *.c ls si se trata de un mdulo de clase (class module). Clicando eros del Si no se ave As por cada en el botn Save en la barra de herramientas se actualizan todos los fich proyecto. haban guardado todava en el disco, Visual Basic 6.0 abre cajas de dilogo S uno de los ficheros que hay que guardar.
1.4 EL ENTORNO DE PROGRAMACIN VISUAL BASIC 6.0 Cuando se arranca Visual Basic 6.0 aparece en la pantalla una configuracin simila r a la mostrada en la Figura 1.1. En ella se pueden distinguir los siguientes elementos: 1. La barra de ttulos, la barra de mens y la barra de herramientas de Visual Basic 6.0 en modo Diseo (parte superior de la pantalla). 2. Caja de herramientas (toolbox) con los controles disponibles (a la izquierda de la ventana). 3. Formulario (form) en gris, en que se pueden ir situando los controles (en el centro). Est dotado de una rejilla (grid) para facilitar la alineacin de los controles. 4. Ventana de proyecto, que muestra los formularios y otros mdulos de programas q ue forman parte de la aplicacin (arriba a la derecha). 5. Ventana de Propiedades, en la que se pueden ver las propiedades del objeto se leccionado o del propio formulario (en el centro a la derecha). Si esta ventana no aparece, se pu ede hacer visible con la tecla <F4>. 6. Ventana FormLayout, que permite determinar la forma en que se abrir la aplicac in cuando comience a ejecutarse (abajo a la derecha). Existen otras ventanas para edicin de cdigo (Code Editor) y para ver variables en tiempo de ejecucin con el depurador o Debugger (ventanas Immediate, Locals y Watch). Todo este conjunto de herramientas y de ventanas es lo que se llama un entorno integrado de desarrollo o IDE (Integrated Development Environment). Construir aplicaciones con Visual Basic 6.0 es muy sencillo: basta crear los controles en el formulario con ayuda de la toolbox y del ratn, establecer sus propiedades
con ayuda de la ventana de propiedades y programar el cdigo que realice las acciones adecuadas en respuesta a los eventos o acciones que realice el usuario. A continuacin, tras explicar brevement e cmo se utiliza el Help de Visual Basic, se presentan algunos ejemplos ilustrativos. Figura 1.1. Entorno de programacin de Visual Basic 6.0.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 8 1.5 EL HELP DE VISUAL BASIC 6.0 El Help de Visual Basic 6.0 es de los mejores que existen. Adems de que se puede buscar cualquier tipo de informacin con la funcin Index, basta seleccionar una propiedad cualquiera en la ventana de propiedades o un control cualquiera en el formulario (o el propio for mulario), para que pulsando la tecla <F1> aparezca una ventana de ayuda muy completa. De cada contr ol de muestran las propiedades, mtodos y eventos que soporta, as como ejemplos de aplicacin. Tambin se muestra informacin similar o relacionada. Existe adems un breve pero interesante curso introductorio sobre Visual Basic 6.0 que se activa con la opcin Help/Contents, seleccionando luego MSDN Contents/Visual Basic Docume ntation/Visual Basic Start Page/Getting Started. 1.6 EJEMPLOS El entorno de programacin de Visual Basic 6.0 ofrece muchas posibilidades de adap tacin a los gustos, deseos y preferencias del usuario. Los usuarios expertos tienen siempre una forma propia de hacer las cosas, pero para los usuarios noveles conviene ofrecer unas ciertas or ientaciones al respecto. Por eso, antes de realizar los ejemplos que siguen se recomienda modificar la co nfiguracin de Visual Basic 6.0 de la siguiente forma: 1. En el men Tools elegir el comando Options; se abre un cuadro de dilogo con 6 solap as. 2. En la solapa Environment elegir Promp to Save Changes en When a Program Starts para que pregunte antes de cada ejecucin si se desean guardar los cambios realizados. En la solada Editor elegir tambin Require Variable Declaration en Code Settings para evitar errore s al teclear los nombres de las variables. 3. En la solapa Editor, en Code Settings, dar a Tab Width un valor de 4 y elegir la o pcin Auto Indent (para que ayude a mantener el cdigo legible y ordenado). En Windows Setting s elegir Default to Full Module View (para ver todo el cdigo de un formulario en una misma v entana) y Procedure Separator (para que separe cada funcin de las dems mediante una lnea horizontal). 1.6.1 Ejemplo 1.1: Sencillo programa de colores y posiciones En la Figura 1.2 se muestra el formulario y los controles de un ejemplo muy sencillo que permite mover una caja de texto por la pantalla, permitiendo a su vez representarla con cuatro colores diferentes.
En la Tabla 1.2 se describen los controles utilizados, as como algunas de sus propiedades ms importantes (sobre todo las que se separan de los valores por defecto). Los ficheros de este proyecto se llamarn Colores0.vbp y Colores0.frm. Figura 1.2. Formulario y controles del Ejemplo 1.1.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 9 Control Propiedad Valor Control Propiedad Valor frmColores0 Name frmColores0 optVerde Name optVerde Caption Colores Caption Verde fraColores Name fraColor fraPosicion Name fraPosicion Caption Colores Caption Posicin optAzul Name optAzul optArriba Name optArriba Caption Azul Caption Arriba optRojo Name optRojo optAbajo Name optAbajo Caption Rojo Caption Abajo optAmarillo Name optAmarillo txtCaja Name txtCaja Caption Amarillo Text Tabla 1.2. Objetos y propiedades del ejemplo Colores0. A continuacin se muestra el cdigo correspondiente a los procedimientos de este eje mplo. Option Explicit Private Sub Form_Load() txtCaja.Top = 0 End Sub Private Sub optArriba_Click() txtCaja.Top = 0 End Sub Private Sub optAbajo_Click() txtCaja.Top = frmColores0.ScaleHeight - txtCaja.Height End Sub Private Sub optAzul_Click() txtCaja.BackColor = vbBlue End Sub Private Sub optRojo_Click() txtCaja.BackColor = vbRed End Sub Private Sub optVerde_Click() txtCaja.BackColor = vbGreen End Sub Private Sub optAmarillo_Click() txtCaja.BackColor = vbYellow End Sub Sobre este primer programa en Visual Basic 6.0 se pueden hacer algunos comentari os:
1. El comando Option Explicit sirve para obligar a declarar todas las variables que se utilicen. Esto impide el cometer errores en los nombres de las variables (confundir masa c on mesa, por ejemplo). En este ejemplo esto no tiene ninguna importancia, pero es conveniente acostumbrarse a incluir esta opcin. Declarar una variable es crearla con un nombre y de un tipo determinado antes de utilizarla. 2. Cada una de las partes de cdigo que empieza con un Private Sub y termina con un E nd Sub es un procedimiento, esto es, una parte de cdigo independiente y reutilizable. El nombre de uno de estos procedimientos, por ejemplo optAzul_Click(), es tpico de Visual Basi c. La primera parte es el nombre de un objeto (control); despus va un separador que es el carcte r de subrayado (_); a continuacin el nombre de un evento -click, en este caso-, y fina lmente unos parntesis entre los que iran los argumentos, en caso de que los hubiera.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 10 3. Es tambin interesante ver cmo se accede desde programa a la propiedad backColor de la caja de texto que se llama txtCaja: se hace utilizando el punto en la forma txtC aja.BackColor. Los colores se podran tambin introducir con notacin hexadecimal (comenzando con &H, seguidos por dos dgitos entre 00 y FF (es decir, entre 0 y 255 en base 10) para l os tres colores fundamentales, es decir para el Red, Green y Blue (RGB), de derecha a izquierda. Aqu se han utilizado las constantes simblicas predefinidas en Visual Basic 6.0: vbRed, v bGreen y vbBlue (ver pgina 70, en Aprenda Visual Basic como ...). 4. Recurdese que si se desea que el cdigo de todos los eventos aparezca en una misma ventana hay que activar la opcin Default to Full Module View en la solapa Editor del coma ndo Tools/Options. Tambin puede hacerse directamente en la ventana de cdigo con uno de los botones que aparecen en la parte inferior izquierda ( 5. Es muy importante crear primero el control frame y despus, estando seleccionado, colocar los botones de opcin en su interior. No sirve hacerlo a la inversa. Visual Basic supone que todos los botones de opcin que estn dentro del mismo frame forman parte del mismo grupo y slo permite que uno est seleccionado. 1.6.2 Ejemplo 1.2: Minicalculadora elemental En este ejemplo se muestra una calculadora elemental que permite hacer las cuatro operaciones aritmticas (Figura 1.3). Los ficheros de este proyecto se pueden llamar minicalc.vbp y minicalc.frm. El usuario introduce los datos y clica sobre el botn correspondiente a la operacin que desea realizar, apareciendo inmediatamente el resultado en la caja de texto de la derecha. La Tabla 1.3 muestra los objetos y las propiedades ms importantes de este ejemplo. ). Figura 1.3. Minicalculadora elemental. Control Propiedad Valor Control Propiedad Valor frmMinicalc Name frmMinicalc lblEqual Name lblEqual Caption Minicalculadora Caption = txtOper1 Name txtOper1 cmdSuma Name cmdSuma Text Caption + txtOper2 Name txtOper2 cmdResta Name cmdResta Text Caption txtResult Name txtResult cmdMulti Name cmdProd
Text Caption * lblOp Name lblOp cmdDivi Name cmdDiv Caption Caption / Tabla 1.3. Objetos y propiedades del ejemplo Minicalculadora. A continuacin se muestra el cdigo correspondiente a los procedimientos que gestion an los eventos de este ejemplo. Option Explicit Private Sub cmdDiv_Click() txtResult.Text = Val(txtOper1.Text) / Val(txtOper2.Text) lblOp.Caption = "/" End Sub
Practique Visual Basic 6.0 como si estuviera en Primero pgina 11 Private Sub cmdProd_Click() txtResult.Text = Val(txtOper1.Text) * Val(txtOper2.Text) lblOp.Caption = "*" End Sub Private Sub cmdResta_Click() txtResult.Text = Val(txtOper1.Text) - Val(txtOper2.Text) lblOp.Caption = "-" End Sub Private Sub cmdSuma_Click() txtResult.Text = Val(txtOper1.Text) + Val(txtOper2.Text) lblOp.Caption = "+" End Sub
En este ejemplo se ha utilizado repetidamente la funcin Val() de Visual Basic. Es ta funcin convierte una serie de caracteres numricos (un texto formado por cifras) en el nme ro entero o de punto flotante correspondiente. Sin la llamada a la funcin Val() el operador + ap licado a cadenas de caracteres las concatena, y como resultado, por ejemplo, 3+4 dara 34 . No es lo mis mo los caracteres 1 y 2 formando la cadena o string 12 que el nmero 12; la funcin val() co te cadenas de caracteres numricos con los que no se pueden realizar operaciones aritmt icas- en los nmeros correspondientes con los que s se puede operar matemticamente-. Visual Basic 6.0 transforma de modo automtico nmeros en cadenas de caracteres y viceversa, pero est e es un caso en el que dicha transformacin no funciona porque el operador + tiene sentido tanto con nmeros como con cadenas. 1.6.3 Ejemplo 1.3: Transformacin de unidades de temperatura La Figura 1.4 muestra un programa sencillo que permite ver la equivalencia entre las escalas de temperaturas en grados centgrados y grados Fahrenheit. Los ficheros de este proye cto se pueden llamar Temperat.vbp y Temperat.frm. En el centro del formulario aparece una barra de desplazamiento vertical que permite desplazarse con incrementos pequeos de 1 C y grandes de 10 C. Como es habitual, tambin puede cambiarse el valor arrastrando con el ratn el cursor de la barra.
Los valores mximos y mnimo de la barra son 100 C y -100 C. A ambos lados de la barra aparecen dos cuadros de texto (color de fondo blanco) donde aparecen los grados correspondientes a la barra en ambas escalas. Encima aparecen dos rtulos (labels) que indican la escala de temperaturas correspondiente. Completan la aplicacin un botn Salir que termina la ejecucin y un men File con la nica opcin Exit, que termina asimismo la ejecucin del programa. La Tabla 1.4 indica los controles utilizados en este ejemplo junto con las propi edades y los valores correspondientes. Figura 1.4. Equivalencia de temperaturas.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 12 Control Propiedad Valor Control Propiedad Valor frmTemp Name frmTemp vsbTemp Name vsbTemp Caption Conversor de temperaturas Min 100 mnuFile Name mnuFile Max -100 Caption &File SmallChange 1 mnuFileExit Name mnuFileExit LargeChange 10 Caption E&xit Value 0 cmdSalir Name cmdSalir lblCent Name lblCent Caption Salir Caption Grados Centgrados Font MS Sans Serif, Bold, 14 Font MS Sans Serif, 10 txtCent Name txtCent lblFahr Name lblFahr text 0 Caption Grados Fahrenheit txtFahr Name txtFahr Font MS Sans Serif, 10 text 32 Tabla 1.4. Controles y propiedades del Ejemplo 1.3. Por otra parte, el cdigo con el que este programa responde a los eventos es el co ntenido en los siguientes procedimientos: Option Explicit Private Sub cmbSalir_Click() Beep End End Sub Private Sub mnuFileExit_Click() End End Sub Private Sub vsbTemp_Change() txtCent.Text = vsbTemp.Value txtFahr.Text = 32 + 1.8 * vsbTemp.Value End Sub Sobre este tercer ejemplo se puede comentar lo siguiente: 1. Se ha utilizado la propiedad Value de la barra de desplazamiento, la cual da el valor actual de la misma con respecto a los lmites inferior y superior, previamente establecidos (-100 y 100). 2. Mediante el procedimiento cmdSalir_Click, se cierra el programa, gracias a la in struccin End. El cometido de Beep no es otro que el de emitir un pitido a travs del altavo z del ordenador, que indicar que en efecto se ha salido del programa.
3. La funcin mnuFileExit_Click() y activa desde el men y termina la ejecucin sin emiti r ningn sonido. 4. Finalmente, la funcin vsbTemp_Change() se activa al cambiar el valor de la barra de desplazamiento; su efecto es modificar el valor de la propiedad text en las cajas de texto que m uestran la temperatura en cada una de las dos escalas.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 13 1.6.4 Ejemplo 1.4: Colores RGB La Figura 1.5 muestra el formulario y los controles del proyecto Colores. Los ficheros de este proyecto se pueden llamar Colores.vbp y Colores. frm. En este ejemplo se dispone de tres barras de desplazamiento con las que pueden controlarse las componentes RGB del color del fondo y del color del texto de un control label. Dos botones de opcin permiten determinar si los valores de las barras se aplican al fondo o al texto. Cuando se cambia del texto al fondo o viceversa los valores de las barras de desplazamiento (y la posicin de los cursores) cambian de modo acorde. A la dcha. de las barras de desplazamiento tres cajas de texto contienen los valores numricos de los tres colores (entre 0 y 255). A la izda. tres labels indican los colores de las tres barras. La Tabla 1.5 muestra los controles y las propiedades utilizadas en el este ejemp lo. Figura 1.5. Colores de fondo y de texto. Control Propiedad Valor Control Propiedad Valor frmColores Name frmColores hsbColor Name hsbColor Caption Colores Min 0 lblCuadro Name lblCuadro Max 255 Caption INFORMTICA 1 SmallChange 1 Font MS Sans Serif, Bold, 24 LargeChange 16 cmdSalir Name cmdSalir Index 0,1,2 Caption Salir Value 0 Font MS Sans Serif, Bold, 10 txtColor Name txtColor optColor Name optColor Text 0 Index 0,1 Locked True Caption Fondo, Texto Index 0,1,2 Font MS Sans Serif, Bold, 10 lblColor Name lblColor Caption Rojo,Verde,Azul Index 0,1,2 Font MS Sans Serif, 10 Tabla 1.5. Objetos y propiedades del ejemplo Colores. Una caracterstica importante de este ejemplo es que se han utilizado vectores (ar rays) de controles. Las tres barras se llaman hsbColor y se diferencian por la propiedad Index, que toma los valores 0, 1 y 2. Tambin las tres cajas de texto, las tres labels y los dos boton es de opcin son arrays de controles. Para crear un array de controles basta crear el primero de ellos y luego hacer Copy y Paste tantas veces como se desee, respondiendo afirmativamente al cuadro de dilogo que pregunta si desea crear un array.
El procedimiento Sub que contiene el cdigo que gestiona un evento de un array es n ico para todo el array, y recibe como argumento la propiedad Index. De este modo que se p uede saber exactamente en qu control del array se ha producido el evento. As pues, una ventaja de los arr ays de controles es que pueden compartir el cdigo de los eventos y permitir un tratamien to conjunto por medio de bucles for. A continuacin se muestra el cdigo correspondiente a los proce dimientos que tratan los eventos de este ejemplo.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 14 Option Explicit Public Brojo, Bverde, Bazul As Integer Public Frojo, Fverde, Fazul As Integer Private Sub cmdSalir_Click() End End Sub Private Sub Form_Load() Brojo = 0 Bverde = 0 Bazul = 0 Frojo = 255 Fverde = 255 Fazul = 255 lblCuadro.BackColor = RGB(Brojo, Bverde, Bazul) lblCuadro.ForeColor = RGB(Frojo, Fverde, Fazul) End Sub Private Sub hsbColor_Change(Index As Integer) If optColor(0).Value = True Then lblCuadro.BackColor = RGB(hsbColor(0).Value, hsbColor(1).Value, _ hsbColor(2).Value) Dim i As Integer For i = 0 To 2 txtColor(i).Text = hsbColor(i).Value Next i Else lblCuadro.ForeColor = RGB(hsbColor(0).Value, hsbColor(1).Value, _ hsbColor(2).Value) For i = 0 To 2 txtColor(i).Text = hsbColor(i).Value Next i End If End Sub Private Sub optColor_Click(Index As Integer) If Index = 0 Then 'Se pasa a cambiar el fondo Frojo = hsbColor(0).Value Fverde = hsbColor(1).Value Fazul = hsbColor(2).Value hsbColor(0).Value = Brojo hsbColor(1).Value = Bverde hsbColor(2).Value = Bazul Else 'Se pasa a cambiar el texto Brojo = hsbColor(0).Value
Bverde = hsbColor(1).Value Bazul = hsbColor(2).Value hsbColor(0).Value = Frojo hsbColor(1).Value = Fverde hsbColor(2).Value = Fazul End If End Sub El cdigo de este ejemplo es un poco ms complicado que el de los ejemplos anteriore s y requiere unas ciertas explicaciones adicionales adelantando cuestiones que se vern posteri ormente: 1. La funcin RGB() crea un cdigo de color a partir de sus argumentos: las componentes RGB (Red, Green and Blue). Estas componentes, cuyo valor se almacena en un byte y pu ede oscilar entre 0 y 255, se determinan por medio de las tres barras de desplazamiento. 2. El color blanco se obtiene con los tres colores fundamentales a su mxima intensid ad. El color negro se obtiene con los tres colores RGB a cero. Tambin se pueden introducir con las constantes predefinidas vbWhite y vbBlack, respectivamente.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 15 3. Es importante disponer de unas variables globales que almacenen los colores del fondo y del texto, y que permitan tanto guardar los valores anteriores de las barras como ca mbiar stas a sus nuevos valores cuando se clica en los botones de opcin. Las variables globale s, definidas en la parte de definiciones generales del cdigo, fuera de cualquier procedimiento , son visibles desde cualquier parte del programa. Las variables definidas dentro de una funcin o procedimiento slo son visibles desde dentro de dicha funcin o procedimiento (variables locales). 4. La funcin hsbColor_Change(Index As Integer) se activa cada vez que se cambia el v alor en una cualquiera de las barras de desplazamiento. El argumento Index, que Visual B asic define automticamente, indica cul de las barras del array es la que ha cambiado de valor (la 0, la 1 la 2). En este ejemplo dicho argumento no se ha utilizado, pero est disponible po r si se hubiera querido utilizar en el cdigo.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 16 2 SEGUNDA PRCTICA 2.1 EJERCICIO 1. EVENTOS EN FORMULARIOS. Este ejercicio est descrito en el Apartado 4.1.1.1 (pgina 48 y siguientes) de la ltima edicin Aprenda Visual Basic 6.0 como si estuviera en Primero . Aqu se recuerdan algunos puntos de dicho Apartado. Cuando se arranca una aplicacin, o ms en concreto cuando se visualiza por primera vez un formulario se producen varios eventos consecutivos: Initialize, Load, Activate y Paint. Cada uno de estos eventos se puede aprovechar para realizar ciertas operaciones por medio de la funcin correspondiente. Para inicializar las variables definidas a nivel de mdulo se suele utilizar el ev ento Initialize, que tiene lugar antes que el Load. El evento Load se activa al cargar un formula rio. Con el formulario principal esto sucede al arrancar la ejecucin de un programa; con el resto de los formularios al mandarlos cargar desde cualquier procedimiento o al hacer referencia a alguna pr opiedad o control de un formulario que no est cargado. Al descargar un formulario se produce el eve nto Unload. Si se detiene el programa desde el botn Stop de Visual Basic 6.0 (o del men correspon diente) o con un End, no se pasa por el evento Unload. Para pasar por el evento Unload es nece sario cerrar la ventana con el botn de cerrar o llamarlo explcitamente. El evento QueryUnload se p roduce antes del evento Unload y permite por ejemplo enviar un mensaje de confirmacin. El evento Load de un formulario se suele utilizar para ejecutar una funcin que d v alor a sus propiedades y a las de los controles que dependen de dicho formulario. No se pue de utilizar para dibujar o imprimir sobre el formulario, pues en el momento en que se produce est e evento el formulario todava no est disponible para dichas operaciones. Por ejemplo, si en el formulario debe aparecer la salida del mtodo Print o de los mtodos grficos Pset, Line y Circle (que se estud ian en el Captulo 6 del manual) puede utilizarse el evento Paint u otro posterior (por ejem plo, el evento GotFocus del primer control) pero no puede utilizarse el evento Load. Se puede ocultar un formulario sin descargarlo con el mtodo Hide o haciendo la pr opiedad Visible = False. Esto hace que el formulario desaparezca de la ventana, aunque s us variables y propiedades sigan estando accesibles y conservando sus valores. Para hacer visible un formul ario oculto pero ya cargado se utiliza el mtodo Show, que equivale a hacer la propiedad Visib le = True, y
que genera los eventos Activate y Paint. Si el formulario no haba sido cargado pr eviamente, el mtodo Show genera los cuatro eventos mencionados. Cuando un formulario pasa a ser la ventana activa se produce el evento Activate y al dejar de serlo el evento Deactivate. En el caso de que el formulario que va a ser activo no estuviera cargado ya, primero sucederan los eventos Initialize, Load y luego los eventos Activate y Paint. Todo esto se puede ver y entender con un simple ejemplo, mostrado en la Figura 2 .1 Se han de crear dos formularios (frmPrincipal y frmSecundario). El primero de ellos conten dr dos botones (cmdCargar y cmdSalir) y el segundo tres (cmdHide, cmdUnload y cmdTerminate). El formulario principal ser el primero que aparece, y slo se ver el segundo si se clica en el botn Cargar Formulario. Cuando as se haga, a medida que los eventos antes mencionados se vayan sucediendo , irn apareciendo en pantalla unas cajas de mensajes que tendrn como texto el nombre del evento que se acaba de producir. Segn con cual de los tres botones se haga desaparecer e l segundo formuFigura 2.1. Eventos en formularios.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 17 lario, al volverlo a ver se producirn unos eventos u otros, segn se puede ver por los mensajes que van apareciendo con cada evento. El fichero ejecutable de este ejercicio est en el directorio Q:\Infor1\Prac02\Eje r1 y se llama Eventos.exe. El resultado de este ejercicio constar de los ficheros Events.vbp, P rincipal.frm, Secundario. frm. Se guardar en el directorio G:\Infor1\Prac02\Ejer1. El cdigo de este ejemplo es: ' cdigo del form. principal Private Sub cmdCargar_Click() frmSecundario.Show End Sub ' cdigo del form. secundario Private Sub cmdHide_Click() Hide End Sub Private Sub cmdUnload_Click() Unload Me End Sub Private Sub cmdTerminate_Click() Hide Set frmSecundario = Nothing End Sub Private Sub Form_Activate() MsgBox ("Evento Activate") End Sub Private Sub Form_Deactivate() MsgBox ("Evento Deactivate") End Sub Private Sub Form_Initialize() MsgBox ("Evento Initialize") End Sub Private Sub Form_Load() MsgBox ("Evento Load") End Sub Private Sub Form_Paint() MsgBox ("Evento Paint")
End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) MsgBox ("Evento QueryUnload") End Sub Private Sub Form_Terminate() MsgBox ("Evento Terminate") End Sub Private Sub Form_Unload(Cancel As Integer) MsgBox ("Evento Unload")
Practique Visual Basic 6.0 como si estuviera en Primero pgina 18 2.2 EJERCICIO 2. LISTAS (EXAMEN DE SEPTIEMBRE 1997) En este ejercicio se trata de incluir en un formulario una caja de texto para in troducir cantidades numricas y una lista1 en la que se podrn ir guardando las cantidades introducidas (ver Figura 2.2 n la parte inferior de la pgina). Se debern introducir los 5 botones siguientes: 1. Un botn que permita aadir nmeros de la caja de texto a la lista (Add), 2. Un botn que borre el ltimo nmero aadido a lista (Delete Last), 3. Un botn que borre todos los elementos de la lista (Delete All), 4. Un cuarto botn que calcule la media m y la desviacin tpica s (Compute). La media m es la suma de los elementos incluidos en la lista hasta ese momento dividida por el nme ro de elementos. La desviacin tpica s es la raz cuadrada de la suma de los cuadrados de cada element o menos el valor medio, dividida por el nmero de elementos menos uno. Ambas magnitu des se calculan segn las frmulas siguientes: (xi -m)2 x i i i m = s = n n -1 5. Un ltimo botn para salir de la aplicacin (Exit). Para pasar a la lista los nmeros tecleados en la caja de texto se deber poder utilizar tambin la tecla Intro. Se chequear que lo tecleado en la caja de texto corresponde a una cantidad numrica, envindose un mensaje al usuario en caso contrario para que vuelva a teclear el valor en la caja de texto (se puede utilizar la funcin IsNumeric( texto) que permite chequear si un texto representa o no un valor numrico). Es importante que la caja de el focus en todo momento, de puedan seguir metiendo datos facilidad (se puede utilizar SetFocus). texto tenga modo que se con la mxima para ello el mtodo
El ejecutable lista.exe indica cmo debe funcionar exactamente la aplicacin a desarrollar. Dicho programa est en el directorio Figura 2.2. Ejemplo de lista. Q:\Infor1\Prac02\Ejer2.
Obsrvese por ejemplo que al aadir o quitar un elemento a la lista se borran los re sultados de los clculos que se hayan hecho antes (ya no tienen sentido, pues han cambiado los datos con los que se haban calculado). El resultado de este ejercicio se guardar en el directorio G:\Infor1\Prac02\Ejer2 . Como ayuda respecto a las listas se recuerda que ListCount es una propiedad que indica el nmero de elementos de una lista (numerados desde 0) y que List(I) es la propiedad que permite acceder al elemento I de la lista.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 19 2.3 EJERCICIO 3. OPERACIONES CON NMEROS Este ejercicio es bastante similar al anterior, aunque hay tambin diferencias sig nificativas. En el directorio Q:\Infor1\Prac02\Ejer3 se encuentra un fichero ejecutable llamado Num eros.exe que se corresponde con la solucin del programa que hay que realizar en este ejercicio. Al ejecutar Numeros.exe, tras introducir algunos nmeros enteros, se obtiene una f igura similar a la mostrada. Este programa permite aadir nmeros a la lista, as como utilizar boto nes para borrar el ltimo nmero introducido o para borrar todos los nmeros de la lista. Desde el punto de vista de clculo, este programa permite ordenar los nmeros de men or a mayor (sort), as como calcular el mximo, el mnimo y la suma de los nmeros introducid os hasta ese momento. En este caso, el programa estar preparado solamente para trabajar co n nmeros enteros, aunque es fcil modificarlo para trabajar con cualquier clase de nmeros. La caja de texto que sirve para introducir los nmeros tiene el focus en todo mome nto, de modo que se puede empezar a teclear otro nmero en cualquier momento. Cuando cambia la lista, es decir cuando se introduce o se borra algn nmero, los resultados de las cajas de texto que muestran el mximo, el mnimo y la suma se ponen en blanco ya que esos resultados no tienen sentido si la lista ya no es la misma que la que sirvi para calcular. Para hacer este ejercicio hay que programar un procedimiento llamado ordenar( ) que ordena lor elementos de un vector (array) de enteros. Tambin hay que programar dos funciones llamadas maximum( ) y minimum( ) que calculan el mximo y el mnimo elemento de un vector, respectivamente. En los tres casos hay dos argumentos: el vector de enteros y el nmero de elementos de dicho vector. Estos tres programas se deben realizar en un mdulo distinto del formulario de la aplicacin. Este mdulo se l lamar Numeros. bas. As pues, en este ejercicio se debern guardar tres ficheros: el proyecto (Numeros.v bp), el formulario (Numeros.frm) y el mdulo de cdigo (Numeros.bas). Debern ser guardados en el directorio G:\Infor1\Prac02\Ejer3. Figura 2.3. Ejemplo de lista con nmeros.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 20 3 TERCERA PRCTICA 3.1 EJERCICIO 1. APLICACIN CON DIVERSOS CONTROLES Este ejemplo tiene un formulario principal y cuatro formularios secundarios, con tenidos respectivamente en ficheros llamados main.frm, semaforo.frm, label.frm, check,frm y options.frm. El formulario principal se muestra en la Figura 3.1. Los formularios secundarios ap arecen al clicar en cada uno de los botones del formulario principal o, alternativamente, al elegir la opcin correspondiente en el men Options (Habr pues dos formas de hacer lo mismo: con los botones o con e l men). Los restantes formularios aparecen en las Figuras 3.2, 3.3, 3.4 y 3.5. Figura 3.1. Formulario principal. Figura 3.2. Formulario semaforo.frm. Figura 3.3. Formulario label.frm. Figura 3.4. Formulario check.frm. Figura 3.5. Formulario options.frm.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 21 Como este ejemplo es un poco ms complejo que los hechos anteriormente, es muy imp ortante ver cmo funciona el ejecutable de este programa, que se llama Controles.exe y est en el directorio Q:\Infor1\Prac03\Ejer1. Conviene ir haciendo este ejercicio poco a poco: primero se hace el formulario p rincipal y luego se irn creando los otros cuatro formularios, pero de modo que no se pasa al siguiente hasta que no haya funcionado correctamente el anterior. Se sugiere ir haciendo los for mularios en el siguiente orden (de ms fcil a ms difcil). 1. El formulario frmCheck (fichero check.frm) contiene una caja de texto con la pro piedad Text a Unas palabras tan slo... . Con dos botones de seleccin se trata de cambiar las propie dades FontBold y FontItalic de dicha caja de texto. Se utilizar el evento Click de los botones de seleccin. 2. El formulario frmOptions (fichero options.frm) permite escribir una frase en un control Label (propiedad Caption) en la que aparece el tipo de PC seleccionado y el sistema op erativo. Para esto se puede utilizar el operador de concatenacin (&) o (+). Obsrvese que los bot ones de opcin del sistema operativo estn dentro de un frame (para formar un grupo), mientras qu e los del tipo de PC estn directamente en el formulario, con lo que tambin forman grupo. 3. El formulario frmLabel (fichero label.frm) se controlan las propiedades AutoSize y WordWrap de la Label. La primera hace que el tamao de la Label se adapte al de la propieda d Caption, mientras que WordWrap permite que el texto de Caption ocupe varias lneas, si es p reciso. 4. El formulario frmSemaforo (fichero semaforo.frm) permite cambiar el color de la luz. Para ello se crearn tres controles Image en los que se cargarn los iconos imgGreen.ico, imgY ellow.ico y imgRed.ico, que se entregan tambin en el directorio Q:\Infor1\Prac03. Estos tre s controles tendrn las mismas propiedades Left, Top, Height y Width, de modo que estarn superp uestos. Al clicar sobre el botn Cambiar Luz o sobre el propio semforo se har invisible el c ontrol que se est viendo y se har visible el siguiente. Los formularios de este proyecto tienen tambin algunos controles Label puramente explicativos de la funcin del propio formulario. Los ficheros de este proyecto pueden ser guar dados por ejemplo en el directorio G:\Infor1\Prac03\Ejer1.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 22 3.2 EJERCICIO 2: MOVIMIENTO OSCILATORIO SINUSOIDAL. Este ejercicio consiste en crear un programa en Visual Basic 6.0 que permita mover un objeto dentro de una caja de dibujo con un movimiento oscilatorio sinusoidal. Para realizar correctamente este ejercicio de la prctica es conveniente estudiar muy bien el ejecutable Oscila. exe que se encuentra en el directorio Q:\Infor1\Prac03\Ejer2 y seguir los pasos que se indican a continuacin; de lo contrario el alumno puede sentirse desorientado y desbordado por la cantidad de comandos a programar. Se debe observar el funcionamiento del programa ejecutable, viendo la funcin que realiza cada uno de los botones, y pensar en cada caso el cometido que est realizando cada uno de ellos. Cuanto mejor se entienda el funcionamiento de los botones, menos tiempo se requerir para la generacin del cdigo. Los pasos a dar para la realizacin de este ejercicio podran ser los siguientes: 1. Poner el nombre frmOscila al formulario, y cambiar la propiedad Caption adecuada mente. Clicar en el botn Save y guardar los ficheros Oscila.vbp y Oscila.frm en el direc torio G:\Infor1\Prac03\Ejer2. 2. Aadir al formulario un objeto Timer, de nombre Timer1 (es el nombre por defecto). Un objeto de este tipo no es visible en tiempo de ejecucin, pero permite definir eventos co n una periodicidad determinada. Es decir, un Timer es un objeto que entra en una funcin cada cierto nmero de milisegundos, segn est definido en una de sus propiedades (Interval). La f uncin que se ejecuta peridicamente se llama Timer1_timer. De momento no es necesario pr ogramarla. Para que un control Timer est activo, su propiedad Enabled debe estar a True. 3. Crear los botones de empezar/parar el movimiento y salir del programa, llamados cmdStart y cmdExit, con el cdigo correspondiente. El botn cmdStart debe cambiar su propiedad Caption en funcin del texto que tenga en cada caso. Es decir si la propiedad Caption es S tart Motion, y se pulsa el botn, sta debe cambiarse a Stop Motion, y viceversa. Adems en cada caso se debe modificar la propiedad Enabled del Timer.
4. Crear una caja de dibujo de nombre pctBox, y cambiarle el color de fondo a blanc o. 5. Crear el bloque mediante una etiqueta de nombre lblBloque y con la propiedad Cap tion vaca. 6. Crear la etiqueta de la amplitud del movimiento y la caja de texto con los nombr es lblAmplitud y txtAmplitud respectivamente. La amplitud del movimiento se debe guardar en una variable global (Xa), de forma que se pueda acceder a ella desde cualquier funcin. Para cr ear una variable global, basta con definirla fuera de todas las funciones, en la sec cin de general. Figura 3.6. Formulario del programa Oscila.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 23 7. Otra variable global Ind indicar cul es el botn de opcin elegido para representar el mvil (un punto, un rectngulo, una circunferencia o un control label). Los botones de o pcin correspondientes forman un array, es decir todos tienen el mismo nombre (por ejemplo, optMovil) y se diferencian en la propiedad Index, que varia de 0 a 3. El evento click en e stos botones dar valor a la variable Ind, y el programa de dibujo (en el evento Timer del cont rol Timer1) dibujar una cosa u otra segn el valor de esta variable. 8. Se deben crear tambin otras variables globales de inters para el Timer: Frec (dete rmina la frecuencia del movimiento, es decir las oscilaciones por segundo). Pi (es la con stante p). Ti (el intervalo en milisegundos entre dos eventos del Timer) y t (el tiempo total transcurrido). La amplitud puede obedecer a la siguiente expresin: X = Xa *sin(2p * frec *t) 9. Programar las opciones y la inicializacin de variables en la carga del formula rio: Private Sub Form_Load() Xa = 2000 txtAmplitud.Text = Xa cmdStart.Caption = "Stop Motion" frec = 1 txtFrec.Text = 1 Pi = 3.141592654 ' Pi=4*Atn(1) Ti = 40 ' Son milisegundos, es decir 25 imagenes por segundo Timer1.Interval = Ti pctBox.DrawWidth = 4 lblBloque.Visible = False ' fijar las coordenadas en la picture box pctBox.Scale (-2500, 100)-(2500, -100) End Sub 10. Programar la funcin Timer1_timer() del control Timer para que dibuje un mvil despl azndose a lo largo de la caja de dibujo. Private Sub Timer1_Timer()
X = Xa * Sin(2 * Pi * frec * t) pctBox.Cls Select Case Ind Case 0 pctBox.PSet (X, 0), vbBlue Case 1 pctBox.Line (X - 200, 20)-(X + 200, -20), vbRed, B Case 2 pctBox.Circle (X, 0), 200, vbGreen Case 3 lblBloque.Left = X - lblBloque.Width / 2 End Select t = t + Ti / 1000 ' incrementar el tiempo End Sub 11. Crear el frame (fraMovil) de los botones de opcin que definen el tipo de objeto q ue se mueve, y los cuatro botones de seleccin. Estos ltimos se deben crear con un array (optMov il). Programar la funcin de click. Los ficheros (.vbp y .frm) de este proyecto se pueden guardar en el directorio G:\Infor1\Prac03\Ejer2\.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 24 3.3 EJERCICIO 3: LANZAMIENTO PARABLICO CON OBSTCULO. En este ejercicio se pide realizar un programa que sea capaz de representar grfic amente el lanzamiento de una pelota de tenis en un plano vertical, intentando acertar con dicho lanzam iento a un crculo que se encuentra en el otro extremo. Se trata de un tiro parablico en un pl ano. Es muy poco probable que te d tiempo a hacer este ejercicio en el tiempo disponib le para la prctica: no dejes sin embargo de intentarlo en cuanto te sea posible. El ejecutable modelo de este ejercicio se llama Lanzador.exe y est en el director io Q:\Infor1\Prac03\Ejer3. Ejectalo y obsrvalo con detenimiento. La trayectoria del mvil est definida por su posicin y velocidad iniciales, tal y co mo se expresa en las siguientes ecuaciones: 12 x = x + vt + at . 0 xo x 2 (1) 1 2 y = y + vt + at 0 yo y . 2 donde xo e yo determinan la situacin inicial del mvil, vxo y vyo son las component es iniciales de la velocidad en los ejes cartesianos y t el tiempo. En el caso que se presenta, no existe aceleracin segn el eje x por lo que ax = 0. La aceleracin segn y es la de la gravedad ay = -g . Si se toma como origen de coordenadas el extremo desde donde parte el tiro (xo = 0, yo = 0) se t iene: x(t) = vxo t 1 con g = 9.81 (2) y(t) = vyo t -gt 2 2 El movimiento de la pelota queda determinado segn las frmulas (2). Por lo tanto co n conocer
los valores iniciales de vxo y de vyo, o lo que es lo mismo, a partir del mdulo d e la velocidad v y su ngulo de salida (entre 0 y 90 grados) es suficiente para calcular x(t) e y(t). En este caso se deben introducir los valores del mdulo v y el ngulo (en grados) en sendas cajas de texto . Se recuerda que los valores que se deben utilizar como argumentos en las funciones sin() y c os()deben estar en radianes.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 25 Entre el punto desde donde se realiza el lanzamiento y el objetivo existe un obstculo de anchura w y altura h situado a una distancia xPos del lugar de lanzamiento tal y como se aprecia en la Figura 3.7. Estos tres valores deben poder ser modificados mediante barras de desplazamiento, tal como se muestra en el ejecutable. Si la pelota choca con el obstculo, deber aparecer un mensaje comunicando dicho "percance" y se deber detener la trayectoria. A su vez si la pelota impacta sobre el crculo se deber mostrar otro mensaje indicando que se ha acertado el tiro. Si el tiro no acierta o sale de los lmites de la ventana no se emite mensaje ni se para la ejecucin. Al ejecutar el programa aparecen dos botones, uno (Lanzar) que realiza el lanzam iento, y otro (Salir) que finaliza el programa. En cualquier momento que se pulse el botn Lanza r, comenzar un nuevo lanzamiento, detenindose el anterior si an no hubiera terminado. Durante un lanzamiento no es necesario cambiar los valores de la velocidad aunque se varen los valores e n las cajas de texto. Los nuevos valores sern asignados como velocidad inicial cuando se pulse el botn L anzar. La posicin, altura y anchura del obstculo s se debern poder variar durante el lanzamien to. Metodologa de programacin: Se van a enumerar aqu las etapas en las que se puede realizar este ejercicio para que su crecimiento sea sencillo, lgico y progresivo. Es importante darse cuenta de que es intil pasar a una etapa posterior si no se han resuelto satisfactoriamente las anteriores. 1. Entender completamente el funcionamiento del programa ejecutable Lanzador.exe. 2. Pensar y decidir cmo se va a resolver el problema. 3. Escribir en un papel, aunque sea esquemticamente, cmo se van a resolver las operac iones clave (en este caso la funcin asociada con el botn Lanzar, el tamao y posicin del ob stculo, etc.). 4. Colocar el recinto del dibujo, los dos botones, las cajas de texto con sus etiqu etas y el Timer en el formulario principal. Para evitar distorsiones al dibujar el crculo, es imp ortante que el
recinto se cree en la etapa de diseo con la anchura el doble que la altura. Se re comienda utilizar Height = 3500 y Width = 7000. Al ejecutar el programa se deber realizar un cambio de escala colocando el origen en la esquina inferior izquierda, con el eje de orden adas hacia arriba, y quedando unas dimensiones para el recinto de: anchura 200m y altura 100m. Se a conseja un intervalo de 20 milisegundos para el Timer. 5. Guardar muy cuidadosamente el proyecto y el formulario. Se guardarn en el directo rio G:\Infor1\Prac03\Ejer3. El proyecto llamar Lanzador.vbp y el formulario Lanzador. frm. Figura 3.7. Tiro parablico sobre un obstculo.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 26 6. Establecer las condiciones iniciales del movimiento, es decir hacer x = 0 e y = 0 y dar un valor por defecto a la velocidad y al ngulo. Se recuerda que cada vez que se pulse Lanz ar se debern asignar nuevamente estos valores. 7. Programar los botones y comprobar que funcionan correctamente. La circunferencia (la diana) debe dibujarse con un grosor de 1 pixel mientras que la pelota ser dibujada como un punto con un grosor de 3 pixels. El obstculo ser un rectngulo construido a partir d e line con la opcin adecuada para que dibuje realmente un rectngulo. Una vez que se consiga lo anterior, se puede pasar a concretar la programacin de la variacin de dimensiones del obstculo introduciendo las barras de desplazamiento. En la rea lizacin de las barras de desplazamiento se aconseja lo siguiente: 1. Altura del obstculo: Mximo = 100, Mnimo = 1 e incrementos de 1-10. 2. Anchura del obstculo: Mximo = 100, Mnimo = 1 e incrementos de 1-10. 3. Posicin del obstculo: Mximo = 150, Mnimo = 50 e incrementos de 1-10. 4. Se recuerda que al variar cualquiera de las barras, el dibujo debe variar en ese momento, y el clculo deber tener el cuenta las nuevas dimensiones para detectar posibles colisio nes. Para calcular la colisin con el obstculo basta comprobar si x est entre xpos y xpos +w al mismo tiempo que y est entre 0 y h. Para calcular el acierto en el blanco hay que comprobar si la distancia entre la pelota y el centro de la circunferencia es menor que el radio .
Practique Visual Basic 6.0 como si estuviera en Primero pgina 27 4 CUARTA PRCTICA 4.1 EJERCICIO 1: OPERACIONES DIVERSAS SOBRE LOS ELEMENTOS DE UNA LISTA. En este ejercicio se pide realizar un programa que sea capaz de realizar distint as operaciones sobre una lista de palabras. El ejecutable ListaSelect2000.exe indica cmo debe funcionar exactamente la aplica cin a desarrollar. Dicho programa se encuentra en el directorio Q:\Infor1\Prac04\Ejer1 . Se debe copiar dicho ejecutable al directorio G:\Infor1\Prac04\Ejer1 y ejecutar desde el propio directorio, observando bien su funcionamiento. La Figura 4.1 muestra el aspecto general del programa que hay que realizar. En la columna de la izquierda aparecen: 1. Una caja de texto por medio de la cual se pueden introducir las palabras en la lista. Dicha caja de texto deber tener el focus en todo momento, de modo que est siempre preparada para empezar a teclear sobre ella. La palabra se introducir en la lista al pulsar la tecla Intro. 2. Una lista que contenga las palabras introducidas hasta ese momento. Esta lista es el elemento central de la aplicacin. Deber permitir selecciones mltiples, tal como se ve en la Figura 4.1. Ms adelante se proporciona una ayuda especial sobre este punto. 3. Un botn de comandos Salir que permite terminar la ejecucin de la aplicacin. Por otra parte, en la columna de la derecha hay seis botones de comando que dan acceso a las operaciones principales que se pueden realizar sobre la lista. A continuacin se d escribe la operacin de cada uno de estos botones: 1. Botn Poblar Lista . os para introducir en la te botn que simplemente introduce r Figura 4.1). 2. Botn Borrar Todos . Con objeto de no tener que estar tecleando continuamente element lista mientras se programa la aplicacin, se ha dispuesto es en la lista los nmeros del 1 al 10, escritos con letras (ve Este botn debe borrar todos los elementos de la lista, dejndola en
blanco. 3. Botn Seleccionar Todos . Este botn selecciona todos los elementos de la lista, sin te
ner en cuenta si anteriormente estaban o no seleccionados. 4. Botn Des-Seleccionar Todos . Este botn des-selecciona (hace que no haya ningn elemento seleccionado y perdn por el anglicismo) todos los elementos de la lista, tambin si n tener en cuenta si anteriormente estaban o no seleccionados. 5. Botn Invertir Seleccin . Este botn hace que los elementos seleccionados pases a no est arlo, y los que no estaban seleccionados pasen a estarlo. Figura 4.1: Ejecucin del programa ListaSelect2000.exe.
6. Botn Borrar Seleccin . Este ltimo botn elimina de la lista los elementos seleccionados Es quizs el ms difcil de programar, y por eso se recomienda dejarlo para el final d el ejercicio. Nota sobre la seleccin mltiple en el control ListBox En los Apuntes de Aprenda Visual Basic 6.0 como si estuviera en Primero slo se habl a de la seleccin simple y tampoco se han realizado previamente ejercicios de seleccin ml tiple. Por eso conviene prestar atencin a lo que se expone a continuacin sobre este tema, que es realmente bastante sencillo de entender y programar: El control ListBox de Visual Basic 6.0 tiene una propiedad llamada MultiSelect c on tres posibles valores: 0 none Con este valor no es posible la seleccin mltiple y por tanto al clicar sobre un el emento para seleccionarlo, se pierde la seleccin en cualquier elemento seleccionado anteriormente. sta es la opcin por defecto. 1 simple Este valor permite seleccionar mltiples elementos simplemente clicando sobre ello s. Si se clica sobre un elemento seleccionado, pierde la seleccin. 2 extended sta es la forma habitual de trabajar en Windows con las selecciones mltiples, por ejemplo con las listas de ficheros y directorios en el Explorer. Para selecciona r varios elementos separados hay que clicar sobre ellos manteniendo pulsada la tecla Ctrl . Por su parte la tecla Shift permite seleccionar rangos: por ejemplo clicando en el s egundo elemento y luego clicando en el sexto mientras se mantiene Shift pulsada hace qu e se selecciones todos los elementos entre el segundo y el sexto. Para eliminar la se leccin de un elemento sin eliminar la de los dems basta clicar sobre l manteniendo pulsada la tecla Ctrl. sta es la opcin que hay que utilizar y con la que se ha pro gramado el ejecutable modelo ListaSelect.exe. Con la propiedad MultiSelect activada (en 2 Extended) el control ListBox dispone de algunas propiedades interesantes y muy tiles para la realizacin de este ejercicio. Estas p ropiedades slo estn disponibles en tiempo de ejecucin: 1. Propiedad SelCount, que indica el nmero de elementos de la lista que estn seleccio nados en
un determinado momento de la ejecucin del programa. En realidad no es necesario u tilizar esta propiedad en este ejercicio. 2. Propiedad Selected(). Esta propiedad es un array de valores boolean que indican si un elemento est seleccionado o no (True si lo est y False si no lo est). Los valores de la prop iedad Selected se corresponden uno a uno con los de la propiedad List, que es tambin un array con las cadenas de caracteres que estn introducidas en la lista. La Tabla 6 muest ra los valores de las propiedades List(i) y Selected(i) para el ejemplo mostrado en la Figura 4 .1, en la cual aparecen seleccionados los elementos cuatro , seis , siete y nueve (ndices 3, 5, 6 y 3. La propiedad ListIndex indica el ndice del elemento seleccionado (si slo hay uno) y vale 1 en el caso de que no haya ningn elemento seleccionado. En el caso de las listas c on seleccin mltiple esta propiedad indica slo el ndice del ltimo elemento seleccionado, por lo q ue no es de especial utilidad. Es mejor basar los programas en la propiedad Selected() .
Practique Visual Basic 6.0 como si estuviera en Primero pgina 29 ndice i Valor de List(i) Valor de Selected(i) 0 uno False 1 dos False 2 tres False 3 cuatro True 4 cinco False 5 seis True 6 siete True 7 ocho False 8 nueve True 9 diez False Tabla 6. Valores de las propiedades List y Selected para los elementos de la lis ta en la Figura 4.1. Metodologa de programacin: Se van a enumerar aqu las etapas en las que se puede realizar este ejercicio para que su crecimiento sea sencillo, lgico y progresivo. Es importantsimo darse cuenta de que es intil pas ar a una etapa posterior si no se han resuelto satisfactoriamente todas las anteriores.
1. Entender completamente el funcionamiento del programa modelo que se entrega 2. Pensar y decidir a grandes rasgos cmo se va a resolver el problema. 3. Describir sobre un papel, aunque sea esquemticamente, cmo se van a resolver las op eraciones clave (en este caso los botones que indican las operaciones a realizar sobre la lista). Cuanto ms en detalle se estudie el problema en esta etapa menos tiempo se necesitar luego para programarlo. 4. Crear en el directorio Prac04 un sub-directorio llamado Ejer1. 5. Crear en Visual Basic 6.0 un nuevo proyecto y guardarlo cuanto antes en el direc torio G:\Infor1\Prac04\Ejer1 con el nombre ListaSelect2000.vbp. Guardar en ese mismo d irectorio el formulario con el nombre ListaSelect2000.frm. Asegurarse con Windows Explorer de que los ficheros han sido guardados en el directorio indicado. 6. Colocar en el formulario la caja de texto (llamada txtBox) y la lista (llamada l stBox). Programar la introduccin de palabras en la lista desde la caja de texto de modo que funcion e como en el modelo. Aadir el botn Salir y comprobar que funciona correctamente. 7. Aadir el botn Poblar Lista . Comprobar que aade los nmeros del uno al diez (con letras , borrando cualquier cosa que hubiera previamente en la lista. Aadir el botn Borrar Todos y programarlo de modo que deje la lista en blanco, sin ningn elemento.
8. Aadir los botones, Seleccionar Todos , Des-Seleccionar Todos e Invertir Seleccin . Programarlos haciendo uso de la propiedad Selected() descrita previamente. 9. Por ltimo, aadir el botn Borrar Seleccin que es el menos fcil de programar. Para pro mar este botn conviene tener en cuenta que cada vez que se borra un elemento cambia tanto el nmero de elementos de la lista (propiedad ListCount) como la posicin de l os elementos que estaban detrs del elemento eliminado. Conviene adems tener en cuenta una limit acin del bucle for de Visual Basic. Si por ejemplo se tiene un bucle; for i=0 to lstBox.Listcount-1 ... next
Practique Visual Basic 6.0 como si estuviera en Primero pgina 30 y dentro de dicho bucle se elimina un elemento de la lista, aunque la propiedad ListCount cambie el bucle for no se ejecutar menos veces. Es como si el valor que tiene Lis tCount cuando empieza el bucle fuera copiado como valor lmite y luego fuera ya inalterab le. Esta dificultad se puede subsanar utilizando en su lugar un bucle do while loop. 10. Para terminar, asegurarse de que despus de clicar cualquiera de los botones de la derecha, el focus queda siempre en la caja de texto, de modo que en cualquier momento se pue de teclear un nuevo dato. Recordar que est disponible la Ayuda de Visual Basic. Seleccionando un control y pulsando la tecla F1 aparece ayuda sobre el control seleccionado. En esa ayuda se pueden ver sus propiedades, mtodos, etc. 4.2 EJERCICIO 2. AYUDA INFORMTICA PARA LA LIGA DE LAS ESTRELLAS. Con el fin del milenio y la entrada de lleno de las cadenas de televisin en el ne gocio del ftbol no se deben ahorrar medios para que el espectculo no defraude. No basta que los tcnic os sepan tomar apuntes: es necesario que utilicen la informtica al lmite de sus posibilidades (de la informtica, no de los tcnicos). Este ejercicio se propone como ayuda a los entrenadores de ftbol. Su finalidad es ayudarles a confeccionar las alineaciones, avisndoles de ciertos errores tontos que se comete n a veces y que en unos minutos pueden echar a perder el trabajo de toda una semana e incluso de un a temporada. El ejecutable de este ejercicio se llama VanGaal2000.exe, en honor al entrenador cu yo equipo gan la liga pasada. Puedes encontrarlo en el directorio Q:\Infor1\Prac04\Ejer2\. La Figura 4.2 muestra la pantalla principal de este ejercicio, en el momento de arrancar la aplicacin. A la izquierda aparecen cuatro botones de opcin que permiten elegir la lista de jugadores por lneas (Porteros, Defensas, Medios y Delanteros). En el centro aparece una lis ta de Jugadores y a la derecha otra lista con la Alineacin (inicialmente vaca). Al arrancar el pro grama la lista de Jugadores muestra los Porteros. Clicando en uno de los nombres en la lista de Jugadores pasa a la Alineacin. En la parte inferior aparecen dos botones que dan acceso a dos form ularios con sendas fotografas de equipo (para acordarse de los jugadores de que dispone) y del propi o tcnico.
Figura 4.2. Pantalla inicial del programa. Figura 4.3. Pantalla en otro momento.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 31 La Figura 4.3 muestra el estado de la aplicacin cuando ya se est a punto de comple tar la Alineacin. Debajo de la lista de Jugadores aparecen cuatro labels con fondo gris (Porteros, Defensas, Medios y Delanteros) y otras cuatro labels con fondo blanco que indican el nmero de jugadores de cada lnea introducidos en la alineacin. Al parecer estos nmeros son muy importan tes para las tcticas. El funcionamiento de este programa es muy sencillo: 1. Al seleccionar una lnea con los botones de opcin, los jugadores de la plantilla co rrespondientes a esa lnea aparecen en la lista de Jugadores. 2. Al clicar sobre uno de los nombres en la lista de Jugadores, ese nombre se aade a la Alineacin, incrementndose en una unidad el nmero de Jugadores de la lnea correspondiente en las labels. 3. Al clicar sobre uno de los nombres en la lista de Alineacin, ese nombre se borra de dicha lista y el nmero de Jugadores de esa lnea se reduce en una unidad en los controles label . 4. El botn Salir termina la aplicacin, mientras que el botn Borrar Todos limpia la lis ta de Alineacin dejndola en blanco, y actualiza los contadores y labels. Por ejemplo, es te botn puede ser de utilidad al acabar los partidos, y tambin cuando hay cambio de entre nador. Adems del funcionamiento bsico descrito, este programa permite tambin evitar errore s tontos, de despiste, ms frecuentes en personas con responsabilidades grandes y complejas. En este ejercicio, que en realidad corresponde a una versin beta del programa, se han hec ho slo tres comprobaciones: 1. Slo conviene jugar con un portero. Por eso, si se intenta alinear ms de un portero el programa da un aviso (aunque no lo impide). 2. Como lo que gusta a los aficionados son los goles y el ftbol ofensivo, el program a da otro aviso si se alinean ms de cinco defensas (aunque tampoco lo impide). 3. Finalmente, el programa avisa tambin si en la alineacin hay ms de 11 jugadores. Para realizar este ejercicio crea un directorio llamado G:\Infor1\Prac04\Ejer2. En ese directorio guarda un proyecto llamado VanGaal2000.vbp y un formulario llamado VanGaal2000.f rm. Con objeto de no perder tiempo tecleando durante el examen la amplia plantilla del B
ara, en Q:\Infor1\Prac04\Ejer2\ hay un fichero de texto llamado Barsa.txt que puede util izarse para inicializar los vectores String correspondientes en el procedimiento Form_Load(), haciendo C opy y Paste. Dado que en Informtica la tctica y la estrategia no son menos importantes que en e l deporte (aunque estn mucho peor pagadas, desgraciadamente), a continuacin se incluyen unas sencillas recomendaciones para realizar con xito este ejercicio. Metodologa de programacin aconsejada: Se van a enumerar aqu las etapas en las que se puede realizar este ejercicio para que su crecimiento sea sencillo, lgico y progresivo. Es importantsimo darse cuenta de que es intil pas ar a una etapa posterior si no se han resuelto satisfactoriamente todas las anteriore s. 1. Entender completamente el funcionamiento del programa ejecutable VanGaal2000.exe . 2. Se sugiere que los nombres de los jugadores de cada lnea se guarden en unos vecto res llamados Por(), Def(), Med() y Del(), segn se muestra en el fichero Barsa.txt, que puede s er utilizado para dar valor a esos vectores en el evento Load. Otras variables que se pueden utilizar son nTotalPor, nTotalDef, nTotalMed y nTotalDel, que representan el nmero total d e juga
Practique Visual Basic 6.0 como si estuviera en Primero pgina 32 dores de la plantilla en cada lnea, y nPor, nDef, nMed y nDel, que representan el nmero de jugadores de cada lnea que se han incluido en la Alineacin hasta el momento (son l os nmeros que aparecen en los controles label de fondo blanco). 3. Empezar a realizar el ejercicio siguiendo los pasos a), b), c), d) y e) del punt o 4. Los elementos grficos se irn aadiendo a medida que se vayan necesitando. Se sugieren los siguient es nombres para los controles: optPor, optDef, optMed, optDel, lstJuga, lstAlin, lb lPor, lblDef, lblMed, lblDel, frmBarsa y frmVanGaal. 4. Escribir en un papel, aunque sea esquemticamente, cules son las operaciones cla ve y cmo se van a resolver. En este caso las operaciones clave podran ser las siguientes: a) La funcin asociada con los botones de opcin, que al elegir uno de ellos hace qu e la lista de jugadores de esa lnea aparezca en la lista Jugadores. Para esta etapa se neces itan slo los botones de opcin y la lista Jugadores. b) El paso de nombres de Jugadores a Alineacin, que se realiza clicando sobre uno de los nombres de la lista. La propiedad ListIndex indica el nmero del elemento sobre el que se ha clicado (contando desde cero). Se debe evitar que se pueda pasar dos veces el mismo jugador. Para esta etapa hay que comenzar aadiendo la lista Alineacin. El siguient e paso puede ser simplemente pasar el nombre. Cuando esto funcione, se debe modificar e l cdigo para que antes de aadir el nuevo nombre compruebe que no est ya en la Alineacin, comparndolo con los nombres que estn ya en Alineacin. c) El borrado individual de nombres de la lista Alineacin. Borrar el nombre clica do por el usuario es fcil, y de nuevo es conveniente empezar slo por esto. Cuando se borren los nombres correctamente se pasar a la etapa siguiente. d) El objetivo de esta etapa es mantener actualizados los contadores en las oper aciones anteriores. Pasar un nombre de la lista de Jugadores a la Alineacin es ms fcil, porque se puede saber de que lnea procede viendo qu botn de opcin est activado. Es ms difcil el actualizar los contadores cuando se elimina un nombre de la Alineacin, ya que entonces no hay ms remedio que irlo comparando con las listas de jugadores de cada lnea y ver en cul se encuentra. e) Chequear los tres tipos de errores tontos y dar el aviso correspondiente, segn el modelo. 5. El programa hay que desarrollarlo de modo incremental, paso a paso, comprobando que cada paso est bien terminado antes de pasar al siguiente. Se empieza abriendo Visual B asic y
haciendo que el formulario tenga un tamao similar al del modelo. 6. Cuando una operacin deba ser realizada varias veces en varios lugares, pensar en la posibilidad de definir una funcin o un procedimiento. Tambin se puede definir una funcin o un procedimiento para aquellas tareas que tengan un sentido claro en s mismas, aunqu e slo haya que hacerlas una vez. Las funciones hacen el cdigo ms fcil de entender y de ch equear.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 33 5 QUINTA PRCTICA 5.1 EJERCICIO 1: SIMULACIN DEL MOVIMIENTO DE UN PEZ DENTRO DE UNA PECERA En este ejercicio se pide realizar un programa que sea capaz de representar grfic amente la trayectoria recta de un pez en una pecera. Una costumbre extendida entre los ingenieros es r ealizar simplificaciones o aproximaciones del problema real para crear un modelo ms fcil de estudiar. En es te caso se va a aproximar la pecera o aquarium por un recinto plano. Como es lgico, el pez siempre se mantiene en el interior del recinto, es decir que no puede sobrepasar los lmit es del mismo. El ejecutable Aquarium.exe indica cmo debe funcionar exactamente la aplicacin a de sarrollar. Dicho programa se encuentra en el directorio Q:\Infor1\Prac05\Ejer1. Se debe cop iar al directorio G:\Infor1\Prac05\Ejer1 y observar su funcionamiento. El elemento mvil, es decir el pez, se representar por un crculo (con un control Sha pe) tal y como aparece en el programa de muestra. Su nombr ser shpPez. La pecera se represen tar utilizando un PictureBox que se llamar pctPecera. La Figura 5.1 muestra el esquema general d el resultado de esta Ejercicio. Figura 5.1: Ejecucin del programa Aquarium.exe. Se va a considerar en cada instante de tiempo que la posicin del pez es la del in stante anterior ms el desplazamiento correspondiente al incremento de tiempo. Las expresiones par a calcular la posicin vertical y horizontal son las siguientes: x = x + v Dt kk -1 x y = y + v Dt kk -1 y donde vx y vy son las componentes de la velocidad en los ejes cartesianos y D t el incremento del tiempo.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 34 Al ejecutar el programa aparecen tres paneles de control (en tres frames): On/Of f Control, Motion Control y Speed Control. En el primero de ellos tiene dos botones, uno (S tart o Stop) que permite parar cuando el mvil est en marcha y reiniciar el movimiento cuando est par ado, y otro (End) que finaliza la ejecucin cuando es pulsado. El botn Start/Stop debe cambiar su texto cada vez que se pulsa de manera que informe de la accin que va a realizar al ser pulsa do. El panel Motion Control contiene 4 controles CheckBox (Up, Down, Left y Rigth) y un label central (lblChoque). Debido a su semejanza con un botn (conseguida modificando la propiedad Style de cada control CheckBox al valor 1-Graphical ) nos referiremos a ellos como botones. Estos botones indican la direccin del movimiento del pez. Los botones Up y Down a ctivan la componente vertical (vy) de la velocidad, con signo positivo el botn Up y negativo el botn Do wn. Anlogamente los botones Left y Rigth activan o desactivan la componente horizonta l de la velocidad (vx). Lgicamente, no es posible mantener activados simultneamente los botones Up y Down ni los botones Left y Rigth. Sin embargo s que se permitir mantener pulsado uno de componente horizontal y uno de componente vertical (Up y Left, Up y Rigth, Down y Left y Do wn y Rigth). Un choque con un lmite lateral a izquierda y derecha consiste en anular el trmino de la velocidad en el eje horizontal, manteniendo la del eje vertical. En un choque con un lmite superior o inferior se mantiene la velocidad en el eje horizontal y se anula el trmino de in cremento en el eje vertical. En ambos casos hay que cambiar a rojo el color del recuadro lblChoque que aparece entre los botones Up, Down, Left y Rigth. Cuando deje de estar junto a un lmite, el col or de lblChoque ser verde. La velocidad del mvil se debe poder modificar en tiempo de ejecucin, en las dos di recciones independientemente. Para ello se deben actualizar las velocidades cada vez que s e modifiquen las barras de desplazamiento incluidas en el panel Speed Control. Metodologa de programacin: Se van a enumerar aqu las etapas en las que se puede realizar este ejercicio para que su crecimiento sea sencillo, lgico y progresivo. Es importante darse cuenta de que es intil pasar a una etapa posterior si no se han resuelto satisfactoriamente todas las anteriores.
1. Entender completamente el funcionamiento del programa. 2. Pensar y decidir a grandes rasgos cmo se va a resolver el problema. 3. Escribir en un papel, aunque sea esquemticamente, cmo se van a resolver las operac iones clave (en este caso los choques con los lmites y la modificacin de las velocidades ). Cuanto ms en detalle se estudie el problema en esta etapa menos tiempo se necesitar luego para programarlo. 4. Colocar el recinto, el pez, el panel de On/Off Control, y por ltimo los dos boton es Start/Stop y End en el formulario principal. Se recomienda utilizar Height = 3500 y Width = 8500 para el tamao del recinto y Height = 255 y Width = 255 para el tamao del pez. 5. Guardar muy cuidadosamente el proyecto y el formulario en el directorio G:\Infor1\Prac05\Ejer1. Al proyecto se le pondr el nombre de Aquarium.vbp y al fo rmulario el de Aquarium.frm. 6. Cambiar el origen de coordenadas de la pecera de modo que ste se encuentre en el centro del recinto. Establecer el punto inicial del pez y las condiciones iniciales del mov imiento (posicin inicial del pez y componentes vx y vy de la velocidad inicial).
Practique Visual Basic 6.0 como si estuviera en Primero pgina 35 7. Incluir en el formulario un control Timer. Se utilizar un intervalo de 100 milise gundos. Programar el cdigo correspondiente a los botones Start/Stop y End. 8. Crear el panel Motion Control con los 4 botones ( de tipo CheckBox: Up, Down, Le ft y Rigth) y el label central (lblChoque). Reproducir el funcionamiento de los 4 bot ones (activacin y desactivacin) sin necesidad de mover el pez. Una vez conseguido el funcionamien to deseado permitir que el mvil se desplace manteniendo constantes sus velocidades h orizontal y vertical. 9. Introducir el panel de control de la velocidad (Speed Control) para permitir la modificacin de la velocidad del mvil. La barra de desplazamiento horizontal tendr las siguientes caractersticas: Mximo = 1000, Mnimo = 100 e incrementos de 20 el mnimo (Small Change) y 100 el mximo (LargeChange). La caractersticas de la barra vertical son: Mximo = 100 , Mnimo = 1000 e incrementos de 20 el mnimo y 100 el mximo. Se recuerda que al variar cualquiera de las barras, la posicin del pez deber calcularse teniendo en cuenta l as nuevas componentes de la velocidad. 10. Por ltimo se pide introducir el cdigo necesario para comprobar si el pez alcanza a lguno de los lmites de la pecera. Modificar el color del control lblChoque : rojo si est en uno de los lmites y verde en el resto de los casos. 5.2 EJERCICIO 2: UTILIZACIN DEL DEBUGGER: DIBUJO INTERACTIVO DE POLGONOS Este ejercicio consiste en corregir un programa ya hecho en el cual se han intro ducido deliberadamente al menos 3 ERRORES. Este ejercicio consta de tres archivos: el proyecto debugPol.vbp, el formulario debugPol.frm y el ejecutable correcto debugPol.exe, que se encuentran en el directorio Q:\Inf or1\Prac05\Ejer2. Se han de copiar todos estos archivos a la cuenta propia del alumno antes de usa rlos. Se guardarn en el directorio G:\Infor1\Prac05\Ejer2. Se corregirn los errores que se encuentr en introduciendo una nueva lnea y se mantendr la sentencia que se ha cambiado comentada con el carct er ( ) y marcada con la palabra ERROR y el nmero ordinal del error encontrado (ejemplo: ERROR 1, ERROR 2, ERROR 3, ). Cuando arranca el programa tiene el aspecto mostrado en la Figura 5.2. En la par te superior aparece una caja de dibujo (PictureBox) cuyas coordenadas varan entre 100 y +100 e n el eje de
abscisas y entre 50 y +50 en el de ordenadas. Debajo aparecen dos listas cuyas et iquetas son X e Y y dos botones, uno para salir del programa y otro para volver a la situacin inici al. Obsrvese que el cursor tiene la forma de flecha. Si se empieza a clicar sobre la caja de dibujo empiezan a parecer los puntos en los que se ha clicado unidos por segmentos de recta, segn puede verse en la Figura 5.3. Al mism o tiempo, las coordenadas de los puntos en que se ha clicado van aadindose a las dos listas. Para cerrar el polgono se sigue el siguiente procedimiento: mientras se van intro duciendo puntos el cursor sigue con la forma de flecha de la Figura 5.2, pero si el curso r se acerca suficientemente al primer punto introducido su forma cambia a la de una cruz, tal como aparece e n Figura 5.3. Si en ese momento se clica el polgono se cierra y ya no se pueden introducir ms puntos, a no ser que se pulse el botn Reset, que devuelve el programa a la situacin inicial.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 36 Figura 5.2: Pantalla inicial del programa. Figura 5.3: Definicin interactiva de p olgonos. El programa tiene tres estados diferentes: 1. Al arrancar (y despus de pulsar Reset). Este estado se caracteriza porque no hay nada dibujado en la caja de dibujo y porque al mover el cursor sobre dicha caja no se realiza ninguna accin. Este estado termina cuando se clica por primera vez. En este estado la caja de d ibujo responde al evento MouseDown (que se produce al clicar2), pero no al evento Mous eMove (que se produce al mover el ratn con el cursor sobre la caja de dibujo). 2. Este segundo estado dura desde que se clica por primera vez hasta que se cierra el polgono. En este estado se dibuja el polgono con los puntos clicados hasta el momento y ap arece una lnea que sigue al cursor desde el ltimo punto clicado hasta la posicin del cursor. De este estado se sale clicando cerca del primer punto para cerrar el polgono. En este estado, l a caja de dibujo responde a los dos eventos MouseDown y MouseMove. 3. El tercer estado se desarrolla desde que se cierra el polgono hasta que se pulsa uno de los dos botones (Exit para terminar o Reset para volver al estado 1). Este estado se car acteriza porque la caja de dibujo no responde a ninguno de los eventos del ratn (ni MouseDown ni MouseMove, es decir ni clicar ni mover). Para distinguir entre estos tres estados se han creado dos variables boolean lla madas started y finished. La Tabla 7 muestra los estados del programa en relacin con el valor de dichas variables. Estado started finished 1 False False 2 True False 3 False True Tabla 7. Estados del programa DebugSep99.exe. Se utiliza el evento MouseDown y no el evento Click de la caja de dibujo porque el procedimiento que gestiona los eventos de este ltimo no recibe informacin sobre las coordenadas del punto en el q ue se ha clicado, aspecto que es esencial para poder construir el polgono.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 37 Para realizar este ejercicio se pueden hacer las siguientes recomendaciones: 1. Probar el ejecutable correcto DebugPol.exe con mucha atencin, entendiendo bien cmo funciona. 2. Abrir el proyecto correspondiente a los ficheros que se entregan DebugPol9.vbp y DebugPol. frm, e intentar ejecutarlo. 3. Usar el debugger para examinar el programa paso a paso y mirar los valores que a dquieren las variables importantes en cada momento, en particular justo antes de producir se el fallo del programa. Para parar la ejecucin en una lnea concreta del cdigo es aconsejable usar breakpoints o el comando Run/Step to Cursor. Recurdese que para este ejercicio se dispone de un tiempo en exclusiva de 30 minu tos. Listado del programa entregado Para facilitar la bsqueda de los errores se incluye con este enunciado un listado de los procedimientos y funciones del programa entregado. Option Explicit Dim xv As Single, yv As Single Dim started As Boolean, finished As Boolean Private Sub dibujarPoligono() Dim i As Integer Dim x1 As Single, y1 As Single, x2 As Single, y2 As Single ' se borra el contenido de la picture box pctBox.Cls ' se dibujan los lados del polgono For i = 1 To lstX.ListCount - 2 x1 = Val(lstX.List(i)) y1 = Val(lstY.List(i)) x2 = Val(lstX.List(i + 1)) y2 = Val(lstY.List(i + 1)) pctBox.Line (x1, y1)-(x2, y2) Next ' se dibujan los vrtices del polgono pctBox.DrawWidth = 3 For i = 0 To lstX.ListCount - 1 x1 = Val(lstX.List(i)) y1 = Val(lstY.List(i))
pctBox.PSet (x1, y1) Next pctBox.DrawWidth = 1 End Sub Private Sub cmdExit_Click() End End Sub Private Sub cmdReset_Click() pctBox.Cls lstX.Clear lstY.Clear started = False finished = False End Sub
Practique Visual Basic 6.0 como si estuviera en Primero pgina 38 Private Sub Form_Load() ' se define la escala de la picture box pctBox.Scale (-100, 50)-(100, -50) ' se inicializan los indicadores de comienzo y fin started = True finished = False End Sub Private Sub pctBox_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) ' si el programa ha terminado, no se responde a este evento If finished = True Then Exit Sub ' la primera vez que se clica se comienza la introduccin de puntos started = True ' se guardan las coordenadas del ltimo punto clicado xv = X xv = Y ' se chequea si se est cerca del primer punto (cambia el cursor) If pctBox.MousePointer = vbCrosshair Then ' si se est cerca al clicar se termina started = False lstX.AddItem (lstX.List(0)) lstY.AddItem (lstY.List(0)) Call dibujarPoligono pctBox.MousePointer = vbArrow finished = True Exit Sub Else ' si no se est cerca se aade un nuevo punto lstX.AddItem (Str(X)) lstY.AddItem (Str(Y)) End If End Sub Private Sub pctBox_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim i As Integer Dim x0 As Single, y0 As Single ' si no se ha clicado todava ninguna vez no se hace nada If started = False Then Exit Sub ' se recuperan las coordenadas del primer punto del polgono x0 = Val(lstX.List(0)) y0 = Val(lstY.List(0)) ' se chequea si el cursor est cerca del primer punto If ((X - x0) ^ 2 + (Y - y0) ^ 2) < 25 Then
' si se est cerca el cursor cambia a una cruz pctBox.MousePointer = vbCrosshair Else ' si no se est cerca el cursor es la flecha pctBox.MousePointer = vbArrow End If ' se dibuja el polgono hasta el ltimo punto clicado Call dibujarPoligono ' se dibuja una lnea desde el ltimo punto clicado ' hasta la posicin del cursor pctBox.Line (xv, yv)-(X, Y) End Sub
Practique Visual Basic 6.0 como si estuviera en Primero pgina 39 5.3 EJERCICIO 3: DEFINIR UN POLGONO Y AVERIGUAR SI UNA SERIE DE PUNTOS ESTN DENTRO O FUERA. El ejecutable-modelo de este ejercicio se llama Poligono.exe, y puede encontrars e en el directorio Q:\Infor1\Prac05\Ejer3\. Antes de abrirlo para ver cmo funciona cpiese al propio d irectorio G:\Infor1\Prac05\Ejer3. Crese para ello el directorio Ejer3 si no se ha hecho ya. Este ejercicio tiene una gran similitud con el Ejercicio 2, por lo que ser de gra n ayuda el haber entendido dicho ejercicio perfectamente (incluso aunque no se hayan encont rado todos los errores). El objetivo de este ejercicio es primero definir un polgono y luego ir clicando en distintos puntos de la caja de dibujo de modo que el programa nos diga con un nuevo mensaj e si el punto clicado est dentro o fuera del polgono. La Figura 5.4 muestra la pantalla inicial del programa: junto al formulario prin cipal aparece una caja de mensajes que indica que ya se pueden empezar a introducir los puntos con el ratn. Pulsando O.K. se ve ya el formulario del programa listo para introducir los vrtices del po lgono. Figura 5.4. Pantalla inicial del programa. Figura 5.5. Pantalla en otro momento. Si se empieza a clicar sobre la caja de dibujo empiezan a parecer los puntos en los que se ha clicado unidos por segmentos de recta, mientras el cursor aparece con forma de c ruz en todo momento. Al mismo tiempo, las coordenadas de los puntos en que se ha clicado se irn guarda ndo en dos vectores. Para cerrar el polgono hay que hacer doble clic, unindose en ese caso el punto en el que se ha clicado con el primero de todos. Practquese un poco con el ejecutable Poligono .exe para entender bien cmo funciona. Una vez que se ha cerrado el polgono el programa da un nuevo mensaje con el texto Clique sobre la caja de dibujo para definir puntos . A partir de este momento comienza la parte ms importante del programa: el usuario va clicando en distintos puntos de la caja de dibujo, d ichos puntos se representan en azul y con una anchura de 5 pixels y aparece un mensaje dicien do si el punto en el que se ha clicado est dentro o fuera del polgono. La Figura 5.5 muestra un ejemplo con un polgono y un punto que resulta estar dentro del mismo. Se puede chequear la posicin de ta
ntos puntos como se desee respecto al mismo polgono. Con el botn Reset se vuelve a la situacin inicial del programa.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 40 Algoritmo para saber si un punto est dentro o fuera de un polgono. Un punto fundamental de este ejercicio es disponer de un algoritmo sencillo que permita saber si un punto est dentro o fuera de un polgono. Dicho algoritmo se explica a continuacin. E s importante entenderlo bien, porque luego hay que programarlo y es muy difcil programar bien lo que se ha entendido mal. La Figura 5.6 muestra distintas posiciones de puntos respecto a un polgono a rbitrario. Esta figura es la base para el algoritmo que se va a explicar a continuacin. 1 2 3 4 5 6 7 Figura 5.6. Distintas posiciones de puntos respecto a un polgono. La idea es colocar en cada punto un semieje vertical ascendente y estudiar para cada uno de dichos semiejes el nmero de intersecciones con los lados del polgono: Si el nmero de intersecciones es impar el punto est dentro del polgono (puntos 2, 3 , 5 y 6 en la Figura 5.6). Si el nmero de intersecciones es par el punto est fuera del polgono (puntos 1, 4 y 7 de la Figura 5.6). NOTA: Para este ejercicio no es necesario considerar los casos en que el punto e st exactamente sobre un lado o sobre un vrtice. Con un poco ms de detalle, el algoritmo resultante podra ser como sigue: 1. Las coordenadas de los vrtices del polgono se tienen guardadas en unos vectores x1 (20) e y1(20). No hace falta considerar polgonos de ms de 20 lados. Aunque Visual Basic e mpieza a contar desde cero, el primer punto es el (x1(1),y1(1)) y el ltimo el (x1(n),y1( n)). 2. Conocidas las coordenadas (x,y) del punto a chequear es conveniente trasladar el origen de coordenadas a dicho punto, de modo que el semieje a estudiar sea el semieje y po sitivo. De este modo las expresiones sern ms sencillas. Para trasladar el origen a dicho punt o hay que restar a las coordenadas de todos los vrtices del polgono las coordenadas del punt o (x,y). Con esto se obtendrn unos nuevos vectores de coordenadas de los vrtices x2() e y2(
) que sern diferentes para cada punto (x,y) cuya posicin se quiera chequear. 3. La Figura 5.7 muestra el caso concreto del punto 3, con los ejes de coordenadas ya trasladados a dicho punto. Por conveniencia se muestra tambin la numeracin de los lados del po lgono. Ahora hay que estudiar la interseccin del eje y positivo con cada uno de los lado s del polgono. Se pueden presentar varios casos:
Practique Visual Basic 6.0 como si estuviera en Primero pgina 41 Los lados que tienen las coordenadas y de sus dos extremos negativas estn por deb ajo del eje x, y por tanto es imposible que corten al semieje y positivo. Tal sucede con los lados 4, 5, 6 y 7 de la Figura 5.7. Un If que compruebe esta situacin evita ya hacer un anl isis detallado de la interseccin. Los lados cuyos extremos tienen coordenada x del mismo signo estn a uno u otro la do del semieje y positivo, pero en cualquier caso es imposible que lo corten. Tal suced e por ejemplo con los lados 1, 6 y 7, cuyos extremos tienen ambos coordenada x positiva, y con los lados 3 y 4, cuyos extremos tienen ambos coordenada x negativa. 3 1 2 3 4 5 6 7 Figura 5.7. Anlisis de la posicin de un punto concreto. Los nicos lados que pueden cortar al semieje y positivo son aquellos que tienen u n extremo con coordenada x positiva y otro extremo con coordenada x negativa (caben dos po sibles situaciones) y que adems tienen al menos un extremo con coordenada y positiva. Pa ra estos lados hay que hacer un anlisis ms detallado: es seguro que cortan al eje y, pero pueden cortarlo por debajo del origen. La Figura 5.8 muestra tres posibles casos de interseccin del lado i-j del polgono con el eje de ordenadas trasladado. En el caso a) los dos extremos tienen coordenada y positiva y coordenada x de distinto signo, con lo cual es seguro que hay una interseccin con el semieje y positivo. En los casos b) y c) los dos puntos tienen coordenada x de distinto signo pero uno est por encima del eje x y otro por debajo. En este caso no hay ms remedio que hacer un anlisis detallado de la interseccin: se calcula la coordenada yp del punt o de interseccin; si es positiva como en el caso b) hay interseccin con el semieje y positivo. Si dicha coordenada es negativa como en el caso c) no hay interseccin con el semieje y positivo.
b) c)i Figura 5.8. Distintos casos de interseccin de un lado con el eje de ordenadas. La expresin de la coordenada yp en funcin de las coordenadas de los puntos i y j e s la siguiente (se puede deducir fcilmente aplicando el Teorema de Tales): 2( ) j -2() y yi yp = y2( ) i -xi2() 2( ) j -2() x xi Una vez que se haya calculado el nmero de lados que cortan al semieje y positivo hay que ver si este nmero es para o impar. Para ello se puede utilizar el operador Mod, q ue calcula el resto de la divisin entre enteros. Calculando el resto de dividir por 2 el nmer o de cortes se puede saber si ste es par o impar, y en funcin de que lo sea o no sacar el mens aje correspondiente. Metodologa de programacin aconsejada: Se van a enumerar aqu las etapas en las que se puede realizar este ejercicio para que su crecimiento sea sencillo, lgico y progresivo. Es importante recordar que suele ser intil pasar a una etapa posterior si no se han resuelto satisfactoriamente todas las anteriores. 1. Entender completamente el funcionamiento del programa ejecutable Poligono.exe. 2. Para realizar este ejercicio se crear un directorio llamado G:\Infor1\Prac05\Ejer
3. En ese directorio guarda un proyecto nuevo llamado Poligono.vbp y un formulario nuevo l lamado Poligono.frm. Conviene asegurarse con Windows Explorer que dichos ficheros se ha n guardado en el directorio adecuado. 3. Una vez creado y guardado el proyecto introducir los tres controles que se van a utilizar: la caja de dibujo (pctBox) y los dos botones (cmdReset y cmdSalir). Las coordenadas de la caja de dibujo oscilarn entre 100 y +100 en abscisas y entre 50 y +50 en ordenadas. 4. Escribir en un papel, aunque sea esquemticamente, cules son los estados posibles d el programa y cmo se van a distinguir unos de otros. Se sugiere utilizar variables booleanas, al igual que se hizo en el Ejercicio 2. Desde luego el programa se comporta diferen te cuando se est introduciendo el polgono y cuando se estn introduciendo los puntos para ver si estn dentro o fuera. Al igual que en el Ejercicio 2, los estados de pueden clasificar de acuerdo con la respuesta que debe tener el programa a los eventos MouseDown y MouseMove. Pue de ser conveniente definir una Tabla anloga a la presentada en el enunciado de dicho Eje rcicio. 5. El siguiente paso puede ser definir el polgono:
Practique Visual Basic 6.0 como si estuviera en Primero pgina 43 a) Cuando se inicia la aplicacin el cursor tiene forma de cruz y la caja de dibujo r esponde slo al evento MouseDown. Las variables boolean que definen este estado pueden def inirse en el evento Load del formulario. b) Cuando se clica por primera vez para introducir el primer punto la caja de dibuj o empieza a responder tambin al evento MouseMove, pues aparece una lnea que va desde el ltimo punto introducido hasta la posicin actual del cursor. La imagen se refresca, esto es, la lnea que va hasta la posicin del cursor se borra cuando se va a dibujar la siguiente. La forma ms sencilla de refrescar la imagen es borrar todo y re-dibujar todo cada ve z que sea necesario. c) Para terminar de definir el polgono basta hacer doble clic en cualquier punto de la caja de dibujo. El punto en el que se ha hecho doble clic pasa a ser el ltimo punto de l polgono, que se une con el primero para cerrarlo. A partir de este momento la caja de dib ujo deja de responder al evento MouseMove y response slo al evento MouseDown, con el que se introducen los puntos cuya posicin se va a investigar. 6. En la situacin de polgono introducido el usuario va introduciendo puntos con el ra tn y el programa responde indicando si el punto est o no dentro del polgono. Los puntos an teriores no se borran, por lo que en este estado no hace falta refrescar la imagen de la caja de dibujo. Una vez conocidas las coordenadas del punto puede llamarse a una funcin o procedi miento que determine si el punto est dentro o fuera. Esta funcin o procedimiento es el ce ntro del programa y podra llamarse por ejemplo isInside(). No se debe empezar a programar esta funcin hasta que no se est seguro de haber introducido bien el polgono. 7. En cualquier momento el usuario puede volver a la situacin inicial pulsando sobre el botn Reset. Para ello hay que borrar por completo el contenido de la caja de dibujo y volver al estado con el que arranca el programa. 8. Antes de dar por terminado el Ejercicio defnanse (si no se ha hecho ya) los mensa jes que ayudan al usuario a saber que se ha pasado de un estado a otro o que el programa espera que realice determinada operacin. Los mensajes deben ser los mismos que los del model
o Poligono. exe. Nota Final: Este Ejercicio no es difcil si se hace con orden y cuidado, increment almente y apoyndose en las partes anlogas del Ejercicio 2. Tampoco es especialmente largo.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 44 6 SEXTA PRCTICA 6.1 EJERCICIO 1: SIMULACIN DEL LLENADO Y VACIADO DE UN DEPSITO En este primer ejercicio se trata de realizar un programa en Visual Basic 6.0 que simule el llenado y vaciado de un depsito, con un caudal de lquido (velocidad de llenado) variable. El usuario puede activar o detener con un botn tanto el llenado como el vaciado del depsito. Unos botones de opcin determinan si se est llenando o vaciando. Es posible controlar la velocidad de llenado con una barra de desplazamiento horizontal. La altura alcanzada por el lquido vara entre 0 y 5000, y es indicada en una caja de texto al lado de la barra de desplazamiento. El botn Start se convierte en Stop cuando el fluido est entrando o saliendo del depsito. Se puede encontrar el fichero ejecutable de este ejercicio en Q:\Infor1\Prac06\Ejer1\. Se debe crear en G:\Infor1\Prac06 un directorio para este ejercicio llamado Ejer1. Se deber copiar en l el fichero depo99a.exe probar su funcionamiento. Los ficheros que realice el alumno se debern llamar depo99a.vbp para el fichero del proyecto y depo99a.frm para el formulario. Se recomienda observar con atencin el funcionamiento del programa ejecutable anterior, viendo la funcin que realiza cada uno de los botones y controles , y pensar en cada caso la funcin que est realizando cada uno de ellos. Cuanto mejor se entie nda el funcionamiento de los botones, menos tiempo se requerir para la generacin del cdigo. Nota: El depsito se simula mediante una Picture Box sobre la que se dibuja un cua drado de color azul, cuya altura representa la altura alcanzada por el lquido y cuya anchura es igual a la de la Picture Box. Este cuadrado se puede materializar de muchas formas, con un control Label (el sistema recomendado), con un cuadrado propiamente dicho dibujado con el mtodo Line, etc. El control Timer permitir redibujar cada cierto nmero de milisegundos. Para ello este control dispone de un evento llamado tambin Timer que se genera de modo automtico cada cierto nmero de mi lisegundos, determinado por una propiedad llamada Interval. Por ejemplo, si Interval vale 50 milisegundos, se generarn 20 eventos en Timer cada segundo. Estos eventos se utilizarn para vari ar la altura del fluido, utilizando por ejemplo la propiedad Top del label azul que re presenta el fluido. El control Timer dispone tambin de la propiedad Enabled; si est en true el reloj func iona y se producen los eventos. Si est en false el reloj se para. El incremento de la altura del lquido depende del caudal o velocidad de llenado, que se establece con la barra de desplazamiento horizontal en la parte inferior del control. Se r ecomienda tener
una variable (por ejemplo h o altura) que defina la altura alcanzada por el flui do (entre 0 y 5000) y cuyo valor sea variado por el procedimiento Timer1_Timer() con un incremento o d ecremento que dependa del valor de la barra de desplazamiento horizontal. Nota: En el directorio Ejer1b se incluye una versin muy similar de este ejercicio en la que se han mejorado los grficos para evitar el parpadeo de la imagen. Figura 6.1. Llenado de un depsito
Practique Visual Basic 6.0 como si estuviera en Primero pgina 45 6.2 EJERCICIO 2: CLCULO DE UNA RAZ DE UN POLINOMIO POR EL MTODO DE NEWTON. En este primer ejercicio se trata de realizar un programa en Visual Basic 6.0 qu e calcule una raz de una funcin por el mtodo de Newton. A continuacin se explica dicho mtodo: El mtodo de Newton permite hallar de modo iterativo (es decir, por aproximaciones sucesivas) races o ceros de funciones no lineales. Este mtodo est basado en el desarrollo en s erie de Taylor de la funcin f(x) en el punto xi, siendo xi una cierta aproximacin de la so lucin x que se desea calcular. El desarrollo en serie de Taylor produce: f (x) f (x ) + (x -x ) f (x ) + ... = 0 (1) i ii Utilizando slo los dos primeros trminos del desarrollo en serie (es decir, sustitu yendo la funcin por la tangente en el punto xi), se tiene la siguiente ecuacin lineal: f (x ) + (x -x ) f (x ) = 0 (2) i ii de donde se puede despejar el valor de la x que anula esta expresin (la raz de la ecuacin linealizada), es decir, una nueva aproximacin a la verdadera solucin. A esta nueva aproximacin le llamaremos xi+1. Este valor se puede calcular a partir de (2) con la expresin: f (x ) x = x -i (3) i+1 i f (xi ) Ahora volvemos a aplicar el mismo procedimiento, sustituyendo la funcin no lineal por los dos primeros trminos (de nuevo la tangente) de su desarrollo en serie alrededor d el punto xi+1, y calculando una nueva y mejor aproximacin xi+2: f (x ) i+1 x = x -(4) i+2 i+1 f (x ) i+1
expresin equivalente a la (3) con los subndices actualizados. El proceso prosigue de la misma manera hasta que el valor absoluto de la diferencia relativa entre dos aproximaciones c onsecutivas sea menor que un determinado nmero epsilon, x -x i+1 i < epsilon (5) x i+1 La Figura 6.2 ilustra el significado geomtrico del mtodo de Newton para hallar la raz de una funcin no lineal: se parte de un primer punto en el que se linealiza la funcin (se sutituye la funcin por la recta tangente) y se halla la raiz de la funcin linealizada. En esa raz se vuelve a linealizar la funcin original y se halla una nueva aproximacin a la verdadera solucin. El proc eso prosigue hasta que la diferencia entre dos aproximaciones consecutivas es sufici entemente pequea.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 46 f(x) xi x xi+2 xi+1 Figura 6.2. Convergencia del mtodo de Newton. Una vez expuesta la teora, se pide realizar un programa que tenga las caracterstic as que se explican a continuacin. La Figura 6.3 muestra el aspecto del formulario al arranc ar el programa y tras pulsar los botones Dibujar y Resolver. Figura 6.3. Formulario inicial y tras pulsar los botones Dibujar y Resolver Los elementos principales de este ejercicio son los siguientes: 1. Un label de fondo negro y letras blancas donde se representa la expresin del poli nomio. Este label debe construirse en funcin de los valores de los coeficientes del polinomio . 2. Un array de cuatro text boxes (con sus cuatro labels correspondientes) para pode r modificar los cuatro coeficientes del polinomio. Cuando se modifica el valor de uno de est os coeficientes y se pulsa Intro se debe hacer lo siguiente: Intro: Se comprueba que la cantidad introducida es numrica, y despus se asigna al coefici ente correspondiente del polinomio (a, b, c o d) segn el argumento Index del procedimiento que gestiona el evento KeyPress. Tras aceptar el cambio en el coef iciente se deber actualizar el Caption del control label que contiene la expresin matemtica y se deber tambin actualizar el dibujo.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 47 3. Tres botones que correspondern a: Resolver: Al clicar en este botn se calcular una raz del polinomio a partir de la aproximacin inicial dada. Si se desea podrn cambiarse los valores de Epsilon y de dicha aproximacin inicial. Cuando terminen los clculos debern aparecer el nmero de iteraciones que han sido necesarias y la solucin para la raz. Dibujar: Al clicar en este botn deber aparecer la grfica de la funcin tal y como se ve en la Figura 6.3 derecha. La barra de desplazamiento vertical es un zoom para la pi cture box y el botn de Dibujar se convierte en Borrar. Al clicar en Borrar, desaparece la figura volviendo a la situacin de la Figura 6.3 izquierda. Salir: Al clicar en este botn, finaliza la aplicacin. 4. Cuatro text boxes que correspondern a: Solucin: Lugar en el que aparecer la solucin (una de las races de la funcin) cuando terminen los clculos. Aproximacin inicial: Valor inicial que introducimos para que d comienzo la iteracin . Epsilon: Tolerancia al error que introducimos. Se iterar hasta que el error sea m enor que Epsilon. Nmero de iteraciones: Nmero de iteraciones que se han tenido que realizar para obt ener la solucin con el error Epsilon introducido. 5. Una Picture Box en la que se realizarn los dibujos. Se dibujarn los ejes de ordena das y de abscisas. La escala del eje de abscisas ser fija e ir de -10 a +10, con una pequea raya vertical para indicar cada unidad. La escala del eje de ordenadas se podr controlar con un a barra de desplazamiento vertical, dibujndose tambin unas pequeas rayas horizontales que r epresenten las decenas de unidades. Inicialmente la escala vertical variar entre -100 y +100 . 6. Una barra de desplazamiento vertical que permitir cambiar la escala en el eje de ordenadas Inicialmente se aplica este mtodo al polinomio x3-3x2-x+3=0, comenzando a iterar con un valor inicial x=10 y un Epsilon=10-9. La funcin y su derivada debern evaluarse a p artir de los coeficientes introducidos en las cajas de texto por medio de sendas funciones f() y fd() intr oducidas en el propio formulario. Crear un directorio llamado G:\Infor1\Prac06\Ejer2 y en l crear un proyecto llama do tambin
Newton99.vbp. El formulario principal se llamar Newton99.frm. Se deber realizar un mdulo llamado Dibujar99.bas, que contendr un procedimiento para dibujar la funcin. Se puede encontrar el fichero ejecutable de este ejercicio en Q:\Infor1\Prac06\E jer2\. Se deber copiar el fichero newton99.exe al propio directorio y probar su funcionamiento. Se recomienda observar con atencin el funcionamiento del programa ejecutable anterior, viendo l a funcin que realiza cada uno de los botones y controles , y pensar en cada caso la funcin que est realizando cada uno de ellos. Cuanto mejor se entienda el funcionamiento de los botones, me nos tiempo se requerir para la generacin del cdigo. 6.3 EJERCICIO 3. SIMULACIN DE LLENADO DE UN DOBLE DEPSITO En la Figura 6.4 se muestra la geometra de un ejemplo relacionado con el ejercici o 1 de esta prctica. Se trata de dos depsitos iguales y a distinta altura, unidos mediante una tubera a una determinada altura hc, que permite cuando est abierta pasar fluido de un depsito al otro.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 48 Los dos depsitos vienen definidos por las coordenadas de 4 puntos (A1, B1, A2, B2 ). La tubera de conexin est situada a una altura hc y tiene una seccin de altura 2e. La diferenc ia de altura entre los dos depsitos viene dada por h12=A1y-A2y. Las magnitudes h1 y h2 definen la altura del lquido en los dos depsitos. B1 A2 h1 h2 hc h12 2e B2 A1 Figura 6.4. Llenado/vaciado de dos depsitos conectados. Cada depsito tiene una entrada de fluido por la parte superior y un desage en la p arte inferior. La apertura de las dos entradas, los dos desages y la tubera de conexin estn goberna dos por barras de desplazamiento, segn se ve en la Figura 6.5. Figura 6.5. Formulario principal del doble depsito. El caudal de las dos entradas superiores depende directamente de la apertura de las vlvulas correspondientes, que vara de 0 a 100, con unos incrementos pequeo y grande de 1 y 10, respectivamente.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 49 Sin embargo el caudal de los desages depende de su apertura y de la presin del flu ido, que se supone igual a la altura alcanzada en ese depsito dividida por una constante q ue vale 1000. De esta forma, aunque la entrada est ms abierta que el desage, se alcanza un punto de equilibrio en el que entra tanto lquido como sale. El caudal de la vlvula que une ambos depsitos es un poco ms complicado de calcular. Se supone que esta vlvula est a una altura hc, mientras que h1 y h2 son los niveles e n los dos depsitos. El caudal en esta vlvula es tambin proporcional a su apertura y a la diferencia de presiones entre ambos lados de la conexin, dividida por una constante que vale asimismo 100 0. Este caudal q12 puede ser positivo o negativo; se supondr positivo si pasa del depsito de la i zquierda al de la derecha, y negativo si circula en sentido contrario. Se pueden presentar los sig uientes casos: 1. h1<hc and h2<hc+h12. El flujo q12 es cero, porque el nivel en ambos depsitos est p or debajo de la altura de la conexin. 2. h1>=hc and h2<hc+h12. En este caso puede pasar fluido del depsito de la izquierda al de la derecha. El caudal ser positivo y valdr: q12=A3*(h1-hc)/1000, siendo A3 la apertur a de la vlvula de paso. 3. h1<hc and h2>=hc+h12. En este caso puede pasar fluido del depsito de la derecha a l de la izquierda. El caudal ser negativo y valdr: q12=A3*(hc+h12-h2)/1000, siendo A3 la a pertura de la vlvula de paso. 4. h1>=hc and h2>=hc+h12. En este caso puede pasar fluido del depsito de la derecha al de la izquierda o viceversa, dependiendo de las alturas h1 y h2. La altura hc no influ ye. El caudal por lo tanto podr ser positivo o negativo y valdr: q12=A3*(h1-h2)/1000, siendo A3 la apertura de la vlvula de paso. Las alturas de los dos depsitos son 5000 unidades. La altura hc es 2500 y e vale 100. Las coordenadas de los puntos que determinan las conexiones son las siguientes: A1=(0, 500); B1=(400, 5500); A2=(600, 0); B2=(1000, 5000) Inicialmente todas las vlvulas estn cerradas y las alturas iniciales son h1=250 y h2=500. En el formulario de la Figura 6.5 se pueden ver los distintos controles de este ejercicio. Cada
barra de desplazamiento tiene una caja de texto que indica su valor numrico. Se i ncluyen asimismo dos cajas de texto con dos labels h1 y h2 para expresar las alturas correspondie ntes. El botn Salir permite concluir la ejecucin del programa. Los depsitos estn creados por medio de lneas trazadas sobre una picture box por med io del comando line. Tambin los fluidos se simulan mediante el comando line con la opcin BF (Box Fill). Se sugiere concentra todas las sentencias de dibujo de los depsitos en un procedimiento llamado deposito(), y todas las sentencias de dibujo de los fluidos en un procedimiento llamado fluido(). El ejecutable de este ejercicio est en Q:\Infor1\Prac06\Ejer3\depo99c.exe. Crea e l directorio G:\Infor1\Prac06\Ejer3 y guarda en l los ficheros de este ejercicio, que se llama rn depo99c.vbp y depo99c.frm.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 50 7 SPTIMA PRCTICA 7.1 EJERCICIO 1: DESARROLLO DE UN EDITOR DE TEXTO: PROYECTO MINOTEPAD El ejecutable de este ejercicio est en Q:\Infor1\Prac07\Ejer1\MiNotepad.exe. Crea el directorio G:\Infor1\Prac07\Ejer1 y guarda en l los ficheros de este ejercicio, que se llama rn MiNotepad. vbp y MiNotepad.frm. Se trata de crear un procesador de texto sencillo similar a Notepad. Este proces ador de texto se ir creando progresivamente a lo largo de la prctica. En este primer ejercicio s e crear la versin ms sencilla, que luego se ir progresivamente ampliando. Desde el punto de vista de los controles este ejemplo tiene solamente un formula rio, una caja de texto que ocupa todo el espacio disponible en el formulario, y unos mens. Es muy importante que la caja de texto ocupe siempre el mximo espacio disponible en el formulario. Para ello se puede utilizar el evento resize del formulario. En este ejercicio se deben poder utilizar los comandos New, Open, Save, Save As y Exit, de acuerdo con las siguientes descripciones: New. Este comando inicializa simplemente la caja de texto a la cadena vaca . Hasta que el fichero se guarde por primera vez en la barra de ttulo aparecer el mensaje Untit led MiNotepad . Open. Este comando abre una caja de dilogo un Common Dialog Control3para seleccionar un fichero de texto, lo lee y muestra su contenido en al caja de texto. Se establecer un filtro para seleccionar bien los ficheros de t exto, bien todos los ficheros ("Texto (*.txt) *.txt All Files (*.*) *.*"). Una vez abierto el fic hero, en la barra de ttulo aparecer un mensaje con el nombre del fichero y el nombre de la apl icacin, en la forma Fichero.txt MiNotepad . Save. Actualiza el contenido del fichero de acuerdo con el texto actual de la ca ja de texto. Si el fichero existe, simplemente lo actualiza; si no existe, realiza la misma f uncin que Save As. Save As. Utilizando el mismo Common Dialog Control se abre el cuadro de dilogo Sa ve As tpico de todas las aplicaciones de Windows. La extensin por defecto (la que se utiliza si el usuario no pone otra) ser *.txt. Despus de guardar el fichero en el disco, e n la barra
Fichero.txt
MiNotepad .
Exit. .Con este comando la aplicacin se termina tal y como est, es decir sin salva r y sin hacer ningn tipo de averiguacin adicional. Adems se deber poder cambiar el Font y el color de fondo, utilizando tambin el Comm on Dialog Control, con los comandos ShowFont y ShowColor en los eventos Click de lo s item Set Font y Set Bgnd Color, que estn en el men Edit. El programa deber funcionar a este respecto igual que el modelo, incluyendo la posibilidad de efectos especiales (color del texto, tachado, y subrayado). Si el Common Dialog Control no aparece en el ToolBox de Visual Basic 6.0, se pue de hacer que aparezca por medio del comando Components en el men Projects (se llama exactamente Microsoft Common Dialog Control 6.0).
Practique Visual Basic 6.0 como si estuviera en Primero pgina 51 7.2 EJERCICIO 2: INTRODUCCIN DE MEJORAS: TENER EN CUENTA SI EL TEXTO SE HA MODIFICADO , Y NO CERRAR LA APLICACIN SIN AVISAR QUE SE PUEDE PERDER INFORMACIN (PROYECTO MINOTEPAD2) Comienza este ejercicio creando en el directorio G:\Infor1\Prac07 una carpeta ll amada Ejer2 y copia en ella los ficheros del ejercicio anterior. Despus, cmbiales el nombre y haz que se llamen MiNotepad2.vbp y MiNotepad2.frm. Cuando hayas hecho estos cambios ya podrs abrirl os y seguir trabajando sobre ellos. El ejecutable de este ejercicio est en el directorio Q:\Infor1\Prac07\Ejer2 y se llama MiNotepad2. exe. Cpialo a tu directorio y observa detenidamente cmo funciona. La principal diferencia de este ejercicio con el anterior es la programacin de un a serie de medidas de seguridad para no perder informacin involuntariamente. Se puede perder informa cin siempre que el contenido de la caja de texto est sin guardar en el disco o siempr e que se haya introducido alguna modificacin en el texto y no se haya actualizado el fichero de disco. Para establecer estas medidas de seguridad se har lo siguiente: Se crear una variable de tipo boolean llamada Actualizado. Siempre que el fichero contenga el mismo texto que la caja de texto esta variable valdr True. Cuando la caja de t exto haya sufrido algn cambio y el fichero no est actualizado, dicha variable valdr Fals e. Para simplificar, aunque el cambio en la caja de texto la deje como estaba (por ejemp lo, aadir una letra y luego borrarla), la variable Actualizado valdr False. Algunos editores de texto indican de un modo visual que el fichero no est actuali zado (no es el caso de Notepad). En este programa cuando el fichero est sin actualizar apa recer un asterisco (*) en ltima posicin de la barra de ttulos, justamente al final del nombr e de la aplicacin. Por ejemplo, con un fichero llamado Prueba1.txt la barra de ttulos debe r mostrar Prueba1.txt MiNotepad si el fichero est actualizado y Prueba1.txt MiNotepad* si no lo est. Para conseguir esto habr que modificar la barra de ttulos cada vez qu e se introduzca un cambio en el texto (poner el asterisco) y cada vez que se guard e el texto en el disco con Save o Save As (quitar el asterisco). La segunda medida de seguridad ser pedir confirmacin antes de cerrar el programa c uando est en la situacin de Actualizado = False. La informacin se puede perder en los sup
uestos siguientes: Al cerrar la aplicacin. En este caso lo mejor es utilizar el evento QueryUnload d e los formularios. El procedimiento para gestionar este evento tiene dos argumento s. Para este ejercicio slo el primero, llamado Cancel, tiene importancia4. Si Cancel reci be cualquier valor distinto de cero, no se prosigue con el proceso de descarga del formulario. El evento QueryUnload deber sacar un mensaje de confirmacin tal como el que se ve en la Figura 7.1. Si se pulsa Yes se actualiza el fichero y se sale de la aplicacin; si se pulsa No se sale de la aplicacin sin actualizar el fichero y si se pulsa Ca ncel se vuelve a la aplicacin sin hacer nada (argumento Cancel del evento QueryUnload dis tinto de cero). El segundo argumento unloadMode sirve para saber de dnde viene la orden de descar gar el formulario.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 52 Figura 7.1. Figura 7.2 Teniendo un fichero abierto y sin actualizar, al abrir un nuevo fichero con File /Open o al crear un nuevo texto con File/New debe ofrecer la opcin de guardar los cambios en el texto anterior. Esta posibilidad debe gestionarse directamente en el evento C lick de los comandos de men correspondientes. En este caso aparecer una caja de mensajes ligeramente diferente, mostrada asimismo en la Figura 7.2. 7.3 EJERCICIO 3: INTRODUCCIN DE MEJORAS: BSQUEDA DE TEXTO (PROYECTO MINOTEPAD3) Comienza este ejercicio creando en el directorio G:\Infor1\Prac07 una carpeta ll amada Ejer3 y copia en ella los ficheros del ejercicio anterior. Despus, cmbiales el nombre y haz que se llamen MiNotepad3.vbp y MiNotepad3.frm. Cuando hayas hecho estos cambios ya podrs abrirl os y seguir trabajando sobre ellos. El ejecutable de este ejercicio est en el directorio Q:\Infor1\Prac07\Ejer3 y se llama MiNotepad3. exe. Cpialo a tu directorio y observa detenidamente cmo funciona. En primer lugar se trata de encontrar un texto (unas palabras o una frase) dentro del texto contenido en la caja de texto. Al elegir el comando Find en el men Search se abre una caja de dilogo (que en realidad es un formulario) tal como la mostrada en la Figura 7.3 no hace falta buscar en ambas direcciones ni poder distinguir entre maysculas y minsculas. Figura 7.3. Esas posibilidades aparecen en el formulario con fines nicamente decorativos ). El usuario teclear el texto a encontrar y pulsar el botn Find Next. En ese momento el programa localiza la primera aparicin del texto buscado y lo selecciona para que aparezca visible. Si no se encuentra el texto buscado aparece el mensaje de la Figura 7.4 Si se encuentra y el usuario vuelve a pulsar en Find Next busca la siguiente apari-Figura 7.4. cin y as hasta llegar al fin del fichero. Al llegar al final del fichero aparece un mensaje que lo indica y que pregunta si se quiere recomenzar la bsqueda desde el principio, como se muestra en la Figura 7.5 Este ejercicio es un poco ms complicado de lo habitual. Para seleccionar un texto en una caja de texto
Figura 7.5. se debe dar valor a las propiedades SelStart y SelLength de dicha caja de texto. De todas formas esto no es suficiente: es necesario pone r a False la propiedad HideSelection de la caja de texto, para que el texto aparezca seleccio nado aunque el control de que se trate la caja de texto- no tenga el focus.
Practique Visual Basic 6.0 como si estuviera en Primero pgina 53 Conviene tambin que el formulario frmFind (suponiendo que se llame as el formulari o de la Figura 7.3 de bsqueda de texto siempre est visible por encima del formulario princ ipal, aunque sea ste el formulario activo. Esto se consigue abrindolo de una forma especial cua ndo el usuario ejecuta el comando Search/Find. El cdigo del procedimiento que se ejecuta es el s iguiente (suponiendo que el formulario principal se llame Form1): Private Sub mnuSearchFind_Click() ' abre una ventana que no es modal, pero que est ' siempre delante de form1 (depende de form1) frmFind.Show vbModeless, Form1 End Sub Por otra parte, es conveniente que el formulario frmFind no aparezca en la barra de tareas de Windows como si fuera una aplicacin ms. Ello se consigue modificando la propiedad ShowInTaskbar en la forma frmFind.ShowInTaskbar=False.