CBTIS # 277
1 DE
204
CBTIS # 277
Antes de comenzar el aprendizaje del lenguaje de programacin Visual Basic, puede ser til comprender lo que es un lenguaje de programacin y cmo funciona, incluso alguna terminologa de programacin. El mejor punto de partida es comenzar con los conceptos bsicos.
A) CMO FUNCIONA LA PROGRAMACIN? Por s solo, un equipo no es muy inteligente. Esencialmente, un equipo es slo un gran grupo de pequeos modificadores electrnicos que estn activados o desactivados. Al establecer diferentes combinaciones de estos modificadores, se logra que el equipo realice alguna accin, por ejemplo, que muestre algo en la pantalla o que emita un sonido. Eso es la programacin en su concepto ms bsico: decirle a un equipo qu hacer. Claro est que comprender qu combinacin de modificadores lograr que el equipo haga lo que se desea ser una gran tarea; aqu es donde los lenguajes de programacin adquieren un papel importante.
B) QU ES UN LENGUAJE DE PROGRAMACIN? Las personas se expresan utilizando un lenguaje con muchas palabras. Los equipos utilizan un lenguaje simple que consta slo de nmeros 1 y 0, con un 1 que significa "activado" y un 0 que significa "desactivado". Tratar de hablar con un equipo en su propio lenguaje sera como tratar de hablar con los amigos utilizando el cdigo Morse, se puede hacer, pero para qu? Un lenguaje de programacin acta como un traductor entre el usuario y el equipo. En lugar de aprender el lenguaje nativo del equipo (conocido como lenguaje mquina), se puede utilizar un lenguaje de programacin para dar instrucciones al equipo de un modo que sea ms fcil de aprender y entender.
2 DE
204
CBTIS # 277
Un programa especializado conocido como compilador toma las instrucciones escritas en el lenguaje de programacin y las convierte en lenguaje mquina. Esto significa que, como desarrollador de Visual Basic, no precisa entender lo que el equipo hace o cmo lo hace, slo es necesario entender cmo funciona el lenguaje de programacin de Visual Basic.
1.2 EVOLUCIN DE LOS LENGUAJES DE COMPUTACIN. Para salvar la brecha que separa a sus dos lectores, o sea a la mquina y al programador, el lenguaje de computacin est ideado jerrquicamente. Recurdese que la unidad procesadora central de una computadora responde a un conjunto de varios cientos de instrucciones, a las que se llama con toda propiedad lenguaje de la mquina. En lo fundamental ste es el nico cdigo de mando que la computadora entiende, un cdigo que ms o menos est dentro de su equipo. Compuestos de unos y ceros como todo lo dems de la computadora, el lenguaje de la mquina es extremadamente dificultoso. Si un programador quiere escribir una instruccin que agregue el contenido de una palabra de memoria a una segunda, debe entender, por ejemplo, al smbolo de ocho dgitos de esta instruccin de adicin en una tabla, as como las direcciones de las dos palabras. El resultado ser una hilera de tal vez 32 dgitos, que el programador puede equivocar a la hora de copiar. Por ello, un programa que contenga varias docenas de estas instrucciones ser una pesadilla en cuanto a su escritura, a su cotejo y a su correccin. A pesar de ello en los primeros aos de la computacin los ingenieros trabajaron directamente en el lenguaje de la mquina. Luego empezaron a desarrollar cdigos ms legibles, aprovechndose de recursos mnemotcnicos. A estos nuevos cdigos se les dio el nombre de lenguajes en conjunto (assembly languages) y todava se usan.
El fundamento de los lenguajes en conjunto es que los programadores humanos recuerdan los nombres ms fcilmente que los nmeros. Nombres cortos y fijos (tales como AD, SUBS, MUL) se presentan en todas las instrucciones de la mquina, amn de que los programadores pueden componer sus propios nombres para indicar sitios de
3 DE
204
CBTIS # 277
Aunque la computadora ejecuta instrucciones slo en lenguaje de la mquina, con ayuda de un programa escrito con anterioridad, traduce automticamente del lenguaje del conjunto al lenguaje de la mquina, y enseguida ejecuta. Es decir, transforma el programa escrito con nombres en una larga hilera de dgitos binarios que el procesador entiende. Este programa de traduccin (llamado conjuntador assembler) evita al programador el trabajo de buscar cdigos binarios en una tabla y de escribirlos l mismo.
El paso siguiente fue crear cdigos que alejaron todava ms al programador de su mquina, pues le permitieron escribir en un lenguaje ms matemtico. A estos cdigos se les llaman lenguajes de alto nivel (high-level languages) y son traducidos en instrucciones a la mquina no por medio de programas conjuntadores relativamente simples, sino por medio de programas complejos llamados compiladores (compilers) Un lenguaje de programacin es una notacin para escribir programas, a travs de los cuales podemos comunicarnos con el hardware y dar as las rdenes adecuadas para la realizacin de un determinado proceso. Un lenguaje viene definido por una gramtica o conjunto de reglas que se aplican a un alfabeto constituido por el conjunto de smbolos utilizados.
Los distintos niveles en que se clasifican los lenguajes, no son ndice de la capacidad del lenguaje. Cuando se habla de lenguajes de bajo nivel implica indicar que el lenguaje es fcil de ser procesado por el microprocesador, ocupa poca lugar en memoria y de muy difcil programacin para el hombre, cuando hablamos de alto nivel nos indica que el mismo programa es de fcil programar por un programador pero ocupa mucho lugar de memoria y es de difcil acceso al hardware, de tal forma que segn utilicemos un nivel u otro as tendremos que utilizar un determinado lenguaje ligado a sus correspondientes traductores. La siguiente tabla representa la evolucin de los distintos lenguajes.
4 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Periodo 1950 1955 Influencias Ordenadores primitivos Ordenadores pequeos, caros y lentos Cintas magnticas. Compiladores e intrpretes Optimizacin del cdigo. Ordenadores grandes y caros Discos magnticos Sistemas operativos Lenguajes de propsito general. Ordenadores de diferentes tamaos, velocidades, y costes. Sistemas caros de almacenamiento masivo de datos. Sistemas operativos multitarea e interactivos. Compiladores con optimizacin. Lenguajes estndar, flexibles y generales. Micro ordenadores. Sistemas pequeos y baratos de almacenamiento masivo de datos. Programacin estructurada. Ingeniera del software. Lenguajes sencillos. Ordenadores baratos y potentes. Sistemas distribuidos. Programacin interactiva. Abstraccin de datos. Programacin con fiabifidad y fcil mantenimiento.
CBTIS # 277 Lenguajes Lenguajes ensamblador. Lenguajes experimentales de alto nivel FORTRAN ALGOL 58 y 60 COBOL LISP FORTRAN IV COBOL 61 Extendido ALGOL 60 Revisado APL (como notacin slo) PL/I FORTRAN 66 (estndar) COBOL 65 (estndar) ALGOL 68 SIMULA 67 BASIC APL/360 PASCAL COBOL 74 PL/I ADA FORTRAN 77 PROLOG C SmallTalk OOCOBOL C++ Ojective C Object Pascal (Delphi) Visual Basic Visual C++ PHP
1956 1960
1961 1965
1966 1970
1971 1975
1976 1980
1980
Ordenadores ms baratos y potentes. Mayor abstraccin de datos. Menor costo de memorias Programacin Orientada o Objetos
2000
5 DE
204
CBTIS # 277
6 DE
204
CBTIS # 277
pueden realizar esta operacin se llaman compiladores. stos, como los programas ensambladores avanzados, pueden generar muchas lneas de cdigo de mquina por cada proposicin del programa fuente. Se requiere una corrida de compilacin antes de procesar los datos de un problema. Los compiladores son aquellos cuya funcin es traducir un programa escrito en un determinado lenguaje a un idioma que la computadora entienda (lenguaje mquina con cdigo binario). Al usar un lenguaje compilado (como lo son los lenguajes del popular Visual Studio de Microsoft), el programa desarrollado nunca se ejecuta mientras haya errores, sino hasta que luego de haber compilado el programa, ya no aparecen errores en el cdigo. Lenguajes interpretados Se puede tambin utilizar una alternativa diferente de los compiladores para traducir lenguajes de alto nivel. En vez de traducir el programa fuente y grabar en forma permanente el cdigo objeto que se produce durante la corrida de compilacin para utilizarlo en una corrida de produccin futura, el programador slo carga el programa fuente en la computadora junto con los datos que se van a procesar. A continuacin, un programa intrprete, almacenado en el sistema operativo del disco, o incluido de manera permanente dentro de la mquina, convierte cada proposicin del programa fuente en lenguaje de mquina conforme vaya siendo necesario durante el proceso de los datos. No se graba el cdigo objeto para utilizarlo posteriormente. La siguiente vez que se utilice una instruccin, se le debe interpretar otra vez y traducir a lenguaje mquina. Por ejemplo, durante el procesamiento repetitivo de los pasos de un ciclo, cada instruccin del ciclo tendr que volver a ser interpretado cada vez que se ejecute el ciclo, lo cual hace que el programa sea ms lento en tiempo de ejecucin (porque se va revisando el cdigo en tiempo de ejecucin) pero ms rpido en tiempo de diseo (porque no se tiene que estar compilando a cada momento el cdigo completo). El intrprete elimina la necesidad de realizar una corrida de compilacin despus de cada modificacin del programa cuando se quiere agregar funciones o corregir errores; pero es obvio que un
7 DE
204
CBTIS # 277
programa objeto compilado con antelacin deber ejecutarse con mucha mayor rapidez que uno que se debe interpretar a cada paso durante una corrida de produccin. 1.3.3 SEGN EL PARADIGMA DE PROGRAMACIN Un paradigma de programacin representa un enfoque particular o filosofa para la construccin del software. No es mejor uno que otro sino que cada uno tiene ventajas y desventajas. Tambin hay situaciones donde un paradigma resulta ms apropiado que otro. Atendiendo al paradigma de programacin, se pueden clasificar los lenguajes en: Lenguajes imperativos BASIC, C, C++, Java, C#, Perl Lenguajes Funcionales Puros: Haskell , Miranda Hbridos:
Lenguajes Logicos
Prolog
Lenguajes orientados a objetos Action Script, Ada, C++,C#, VB.NET, Visual FoxPro,Clarion, Delphi, Harbour, Eiffel Java, JavaScript, Lexico (en castellano), Objective-C, Ocaml, Oz, Perl (soporta herencia mltiple), PHP (en su versin 5), PowerBuilder, Python, Ruby, Smalltalk Actividad extractase para entregar: investigar las caracteristicas de cada uno de los lenguajes anteriores.
1.4 MICROSOFT VISUAL BASIC. Microsoft Visual Basic es un conjunto de herramientas que posibilitan el desarrollo de aplicaciones para Windows de una manera rpida y sencilla, basado en el lenguaje BASIC y en la programacin orientada a objetos.
8 DE
204
CBTIS # 277
La palabra Visual hace referencia al mtodo que se utiliza para crear la interfaz grfica de usuario. En lugar de escribir numerosas lneas de cdigo para implementar la interfaz, simplemente se utiliza el ratn para agregar objetos prefabricados en el lugar deseado dentro de la pantalla. La palabra Basic hace referencia al lenguaje BASIC (Beginners All-Purpose Symbolic Instruction Code), un lenguaje utilizado por ms programadores que ningn otro lenguaje en la historia de la informtica. Visual Basic ha evolucionado a partir del lenguaje BASIC original y ahora contiene centenares de instrucciones, funciones y palabras clave, muchas de las cuales estn directamente relacionadas con la interfaz grfica de Windows. El lenguaje de programacin Visual Basic no es exclusivo de Microsoft Visual Basic. Este lenguaje es utilizado tambin por Microsoft Excel, Microsoft Access y muchas otras aplicaciones Windows. El lenguaje de programacin Visual Basic Script para programar en Internet es un subconjunto del lenguaje Visual Basic. De tal forma, que la inversin realizada en el aprendizaje de Visual Basic le ayudar a abarcar estas otras reas.
1.4.1 EJECUTANDO VISUAL BASIC Si ya tiene instalado Visual Basic, para ejecutarlo proceda igual que con cualquier otra aplicacin Windows: hacer click en el icono correspondiente. En seguida se presentar una ventana similar a la figura siguiente:
9 DE
204
CBTIS # 277
En la ventana anterior indicar el tipo de proyecto que desea crear (para nuestro caso seleccionar EXE estndar) y dar click sobre el botn Abrir. En ese instante se presentar el Entorno Integrado de Desarrollo (IDE) de Visual Basic:
Los elementos que componen el IDE de Visual Basic son: Barra de mens Cuadro de herramientas Explorador de proyectos Posicin del formulario Barra de herramientas Diseador de formularios Ventana de propiedades Mens contextuales
10 DE
204
CBTIS # 277
Barra de mens Presenta las rdenes que se utilizan para desarrollar una aplicacin. Las opciones ms utilizadas son: Archivo, Edicin, Ver, Ventana y Ayuda. Se proporcionan otros mens para tener acceso a funciones especficas de programacin como Proyecto, Formato o Depuracin.
Barra de herramientas Facilita el acceso rpido a las rdenes ms comnmente utilizadas. Omitimos el significado de cada botn porque le ser mostrado al pasar el puntero del ratn sobre cada uno de ellos.
Figura 3. Barra de herramientas. Puede visualizar otras barras de herramientas ejecutando la opcin Barra de herramientas del Men Ver.
Cuadro de herramientas Proporciona un conjunto de herramientas que permiten disear la interfaz grfica de usuario.
Figura 4. Cuadro de herramientas. Este cuadro es el que se utilizar con mayor frecuencia, por lo tanto a continuacin se describen todos los elementos que le pertenecen.
11 DE
204
CBTIS # 277
Icono Puntero Cuadro de imagen Etiqueta Cuadro de texto Marco Botn de comando
Descripcin
Casilla de verificacin Botn de opcin Cuadro combinado Cuadro de lista Barra de desplazamiento horizontal Barra de desplazamiento vertical Cronmetro Cuadro de lista de unidades Cuadro de lista de directorios Cuadro de lista de archivos Formas Lneas Imagen Contenedor OLE Tabla 2. Elementos del cuadro de herramientas. Para utilizar algn objeto simplemente debe hacer doble click sobre el icono correspondiente, luego puede cambiar su posicin y sus dimensiones.
Diseador de formularios
12 DE
204
CBTIS # 277
Ventana de propiedades Como veremos ms adelante, cada objeto lleva asociado un conjunto de propiedades. Para ver o especificar los valores de las propiedades de los objetos, utilizaremos la ventana de propiedades.
13 DE
204
CBTIS # 277
Posicin del formulario Esta ventana le permite especificar la posicin de los formularios de la aplicacin.
Figura 8. Posicin del formulario. Mens contextuales Es un men emergente que presenta rdenes especficas relativas a un determinado objeto. Para abrir un men contextual, dar click derecho sobre el objeto. Por ejemplo, al dar click derecho sobre el formulario se presenta el siguiente men contextual.
14 DE
204
CBTIS # 277
Se presenta cuando se hace doble click sobre un objeto que se encuentra en el Diseador de formularios. Esta ventana muestra dos cuadros combinados (combos) en la parte superior, en una aparece el nombre del objeto (izquierda) y en la otra el nombre del evento (derecha).
Figura 10. Ventana de cdigo. 1.5 MI PRIMERA APLICACIN Hay tres pasos principales para crear una aplicacin en Visual Basic: Crear la interfaz. Establecer propiedades. Escribir el cdigo. Para ver como se realiza esto, siga los pasos del siguiente ejemplo para crear una aplicacin sencilla que consiste en un formulario y un botn de comando. Cuando haga click en el botn de comando aparecer el mensaje Visual Basic es fcil en un cuadro de dilogo predefinido. Creacin de la interfaz Para el desarrollo del presente ejemplo (Practica 0) proceda a crear una nueva aplicacin. En seguida aadir un botn de comando al formulario, para ello en el Cuadro de herramientas, dar doble click sobre el control deseado, tal como se indica en la figura siguiente:
15 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Figura 11. Cuadro de Herramientas
CBTIS # 277
Estableciendo las propiedades Para ver las propiedades de un objeto, simplemente debe seleccionarlo y pulsar la tecla F4. Por ejemplo la figura siguiente muestra las propiedades del botn de comando y podemos ver que la propiedad Caption tiene el valor Command1.
16 DE
204
CBTIS # 277
Puede cambiar el valor de cualquier propiedad seleccionndolo de la ventana anterior y simplemente modificando su valor, por ejemplo para el caso anterior establezca el valor de la propiedad Caption de Command1 a Haga click aqu. De manera similar proceda cambiar la propiedad Caption del formulario a Mi primera aplicacin. La apariencia de la interfaz debe ser similar a la figura mostrada:
Escribiendo el cdigo Para ingresar el cdigo a la aplicacin debe dar doble click sobre el control al cual asociaremos dicho cdigo. Para nuestro caso dar doble click sobre el botn de comando e ingresar el cdigo que se indica a continuacin: (Nota: El comando MsgBox le indica al sistema que genere un cuadro de dialogo.)
17 DE
204
CBTIS # 277
Para guardar la aplicacin que acaba de crear, seleccione la opcin Guardar Proyecto del Men Archivo. Bueno, ahora slo falta que ejecute su aplicacin. Para ello simplemente debe pulsar la tecla F5. El resultado debe ser similar al siguiente:
Figura 16. Salida del programa. Ejercicio No. 1 coloca sobre la linea el nombre del rea que se indica.
1 2 3 4
7 5
1.4.7.-
2.5.8.-
3.6.-
18 DE
204
CBTIS # 277
Visual Basic se basa en la programacin orientada a objetos (POO), la cual es una forma de programacin que utiliza objetos (similares a los objetos del mundo real) para la solucin de problemas. La POO permite descomponer un problema en bloques relacionados. Cada bloque pasa a ser un objeto autocontenido que contiene sus propios datos e instrucciones. De esta manera, la complejidad se reduce y se pueden realizar programas ms largos de una manera sencilla.
2.2 MECANISMOS BSICOS DE LA POO Los mecanismos bsicos de la programacin orientada a objetos son: Objetos Propiedades Mtodos Eventos Mensajes Clases
Objetos Un objeto es una entidad que tiene atributos particulares (propiedades) y unas formas de operar sobre ellos (mtodos). Por tanto, un objeto contiene variables que especifican su estado y operaciones que definen su comportamiento. Son ejemplos de objetos: formularios, botones de comando, cuadros de texto, etiquetas, etc.
Propiedades
19 DE
204
CBTIS # 277
Las propiedades representan las caractersticas del objeto. Hay propiedades particulares, como Caption que la poseen los botones de comando por ejemplo, y genricas como Name que la poseen todos lo objetos.
Mtodos Los mtodos son procedimientos asociados a un objeto. Se ejecutan como respuesta a un evento, por ejemplo al dar click en un botn de comando. Tambin pueden ser invocados explcitamente en el programa. Eventos Un evento es la capacidad de un objeto de reaccionar cuando ocurre una determinada accin (accin y reaccin). Como respuesta a un evento se enva un mensaje y se ejecuta un determinado mtodo (procedimiento). Mensajes Un mensaje es una llamada a un mtodo (procedimiento), de tal forma que cuando un objeto recibe un mensaje la respuesta a ese mensaje es ejecutar el procedimiento asociado. Cuando se ejecuta un programa orientado a objetos, los objetos estn
constantemente recibiendo, interpretando y respondiendo a mensajes de otros objetos. Clases Una clase es una descripcin para producir objetos de esa clase o tipo. Es decir se trata de una generalizacin de un tipo especfico de objetos. En otras palabras, un objeto es una variable del tipo definido por una clase. Por ejemplo, piense en un molde para hacer pasteles, el molde es la clase y los pasteles los objetos.
2.3 CARACTERSTICAS DE LA POO. Las caractersticas fundamentales de la programacin orientada a objetos son: Abstraccin Encapsulamiento Herencia Polimorfismo Abstraccin
20 DE
204
CBTIS # 277
La abstraccin permite no detenernos en los detalles concretos del funcionamiento de las cosas, sino centrarnos en los aspectos que realmente nos importan y nos son tiles en un determinado momento, en cierta medida, se podra decir que es sese el objeto y olvdese de como funciona en forma interna. Por ejemplo, para manejar una computadora no necesitamos saber como funcionan sus circuitos electrnicos, en trminos de corriente, tensin, etc. Encapsulamiento Esta caracterstica permite ver un objeto como una caja negra autocontenida en la que se ha metido de alguna manera toda la informacin que maneja dicho objeto. Esto permite manipular los objetos como unidades bsicas, permaneciendo oculta su estructura interna.
Herencia La herencia es la caracterstica que permite compartir automticamente propiedades y mtodos entre objetos. Es decir, se pueden crear nuevas clases de objetos en base a clases existentes. Ms concreto, un objeto puede heredar un conjunto general de propiedades y mtodos a las que puede aadir aquellas caractersticas que son especficas suyas. El usuario de Visual Basic no dispone de esta caracterstica.
Polimorfismo Polimorfismo, del griego cuyo significado es muchas formas, es la caracterstica que permite implementar mltiples formas de un mismo mtodo, dependiendo cada una de ellas de la clase sobre la que se realiza la implementacin. Esto hace posible que se puede acceder a una variedad de mtodos distintos (todos con el mismo nombre) utilizando exactamente el mismo medio de acceso.
2.4 LOS OBJETOS DE VISUAL BASIC. Visual Basic soporta la abstraccin, la encapsulacin, el polimorfismo y la reutilizacin de cdigo.
21 DE
204
CBTIS # 277
La reutilizacin de cdigo es la capacidad de trasladar caractersticas de un objeto a otro, lo que se logra con alguna forma de herencia. Esto se consigue mediante la creacin y uso del objeto. Los objetos de Visual Basic estn divididos en dos tipos: controles y contenedores. Los controles son un medio grfico que permiten a los usuarios interactuar con la aplicacin para la manipulacin de datos y ejecucin de tareas. Son ejemplo de controles: etiquetas, cuadros de texto, botones de comando, casillas de verificacin, botones de opcin, cuadros de lista, cuadros combinados, etc. Los contenedores son objetos que pueden incluir otros objetos y permiten el acceso a los objetos que contienen. Entre los ms utilizados tenemos a los formularios, marcos y cuadrculas. El formulario ms los controles constituyen la interfaz de la aplicacin.
OBJETO.PROPIEDAD = VALOR
Por ejemplo, para establecer el ttulo de un formulario a Visual Basic es fcil, la orden sera:
2.6 LOS EVENTOS. Cada objeto responde a un conjunto de eventos. Como respuesta a un evento se ejecuta un determinado procedimiento. Los procedimientos asociados a un evento presentan la forma:
22 DE
204
CBTIS # 277
Para aclarar este concepto desarrollaremos la siguiente aplicacin (practica 00), la cual consiste en un formulario, un cuadro de texto y un botn de comando. El usuario debe ingresar un mensaje en el cuadro de texto y al pulsar el botn de comando, el mensaje recientemente ingresado, se coloca como ttulo del formulario.
Para ello proceda a construir la interfaz mostrada en la figura anterior. Luego, dar doble click sobre el botn de comando e ingrese el siguiente cdigo:
Seguidamente guarde y proceda ejecutar su aplicacin. Como puede verificar, el evento Click se dispara cada vez que el usuario pulsa (hace click) sobre un control.
2.7 CONVENCIN DE NOMBRES PARA LOS OBJETOS La convencin a seguir en el presente manual- para dar nombre a los objetos consiste en utilizar ciertos prefijos (extensin), los cuales indicaran el tipo de objeto del que se trata. Prefijo Frm Fra Formulario Marco Objeto
23 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Lbl Txt Cmd Chk Opt Lst Cbo Tim HS VS Pic Img Drv Dir Fil Ole Grd Gra Ctr Etiqueta Cuadro de texto Botn de comando Casilla de verificacin Botn de opcin Cuadro de lista Cuadro combinado Cronmetro Barra de desplazamiento horizontal Barra de desplazamiento vertical Cuadro de imagen Imagen Cuadro de lista de unidades Cuadro de lista de directorios Cuadro de lista de archivos Contenedor OLE Cuadrcula Grfico
CBTIS # 277
Control (se utiliza en procedimientos cuando el tipo de control es desconocido) Tabla 3. Extensiones para los objetos de VB.
Actidades a realizar (tarea): 1.- Realizar el resumen del capitulo. 2.- Defina los siguientes conceptos. Objetos Propiedades Mtodos Herencia Polimorfismo
24 DE
204
CBTIS # 277
CAPTULO III 3.1 EL LENGUAJE Visual Basic es un lenguaje de programacin basado en el lenguaje BASIC, al cual incorpora la funcionalidad de la programacin orientada a objetos. El cdigo de Visual Basic se almacena en mdulos, donde cada mdulo est subdividido en distintas secciones, una para cada objeto del mdulo. Cada seccin de cdigo puede contener uno o ms procedimientos, formados por declaraciones de constantes y variables, expresiones, sentencias de control y llamadas a procedimientos y/o funciones. En este captulo vamos a analizar los diferentes elementos que intervienen al momento de realizar el cdigo para una aplicacin. 3.1.1 TIPOS DE DATOS Los datos con los que trabajaremos probablemente incluyan informacin relacionada con nmeros, dinero, nombres, descripciones, fechas, etc. Cada dato corresponde a un determinado tipo, es decir, pertenece a una categora de datos que se manipulan de maneras similares. Tipo
Integer Long Single Double Currency Byte String
Descripcin
Entero (2 bytes) Entero largo (4 bytes) Punto flotante de simple precisin (4 bytes) Punto flotante de doble precisin (8 bytes) Monetario (8 bytes) Carcter (1 byte) Cadena de caracteres (1 byte por carcter)
Rango
-32768 a 32767 -2147483648 a 2147483647 -3.40E+38 a 3.40E+38 -1.79D+308 a 1.79D+308 +/-922337203685477.5807 0 a 255 Aproximadamente hasta 64K (65400 caracteres)
Boolean
Lgico (2 bytes)
True o False
25 DE
204
CBTIS # 277
01/ENERO/00 31/DICIEMBRE/9999 a
Con nmeros hasta el intervalo de un tipo Double. Con caracteres 22 bytes + 1 byte por carcter
3.2 IDENTIFICADORES Los identificadores son nombres dados a los elementos de una aplicacin, tales como constantes, variables, procedimientos, funciones, objetos, etc. Un identificador es una secuencia de caracteres que puede ser de hasta 255 caracteres. Para la construccin de identificadores debemos tener presente las siguientes reglas: Deben comenzar con una letra y no puede contener espacios en blanco. Letras, dgitos y caracteres subrayados estn permitidos despus del primer carcter. No se puede utilizar una palabra reservada como identificador. Una palabra reservada tiene un significado especial para Visual Basic.
3.3 CONSTANTES Una constante almacena un dato cuyo valor no cambia durante la ejecucin de un programa. Para declarar una constante utilice la siguiente sintaxis:
Si no se declara el tipo de constante (utilizando As TIPO) se asigna a la constante el tipo de dato ms apropiado a su valor. El valor de una constante puede ser numrico, alfanumrico, carcter o de tipo fecha y hora. Por ejemplo: Const MAXIT = 25 Const PI As Double = 3.141592 Const CADENA As String = Visual Basic es fcil Const FECHA_POR_DEFECTO = #01/01/99#
26 DE
204
CBTIS # 277
3.4 VARIABLES Una variable almacena un dato cuyo valor puede cambiar durante la ejecucin de un programa. Para declarar una variable utilice la siguiente sintaxis:
Cuando se declara una variable y no se especifica su tipo (con As TIPO), se asume que es de tipo Variant. La instruccin Dim puede realizar ms de una declaracin, teniendo en cuenta que la clusula opcional As TIPO le permite definir el tipo de dato de cada variable que vaya a declarar. Por ejemplo:
Dim X, Y As Integer La sentencia anterior le puede inducir a pensar que X e Y son de tipo Integer, lo cual no es cierto, pues X es de tipo Variant (por omisin) e Y es de tipo Integer. Para asignar valores a una variable, utilizar la siguiente sintaxis:
NOMBRE_VARIABLE = VALOR
Dim CANTIDAD As Integer, PRECIO As Double, TOTAL As Double CANTIDAD = 30 PRECIO = 1.5 TOTAL = CANTIDAD * PRECIO 3.5 OPERADORES Los operadores son smbolos que indican cmo sern manipulados los operandos. Los operandos son los datos (constantes y/o variables) sobre los que acta los operadores para producir un determinado resultado. Operadores aritmticos
27 DE
204
Tabla 5. Operadores aritmticos. Operadores relacionales Operador = Igual que Diferente que Menor que Mayor que Menor o igual que Mayor o igual que Tabla 6. Operadores relacionales. Operadores lgicos Operador Not And Or Xor Eqv Imp Negacin Conjuncin Disyuncin inclusiva Disyuncin exclusiva Equivalencia (opuesto a Xor) Implicacin (falso si primer operando verdadero y segundo operando falso) Tabla 7. Operadores lgicos. Operadores de cadenas de caracteres Operador Significado Significado Significado
28 DE
204
Elaborado por MTI.. Felipe Prez Castaeda & Like Concatenacin Compara dos cadenas de caracteres
CBTIS # 277
Tabla 8. Operadores de cadenas de caracteres. 3.6 SENTENCIAS. Una sentencia es una lnea de cdigo que indica una o ms operaciones a realizar. Una lnea puede incluir varias sentencias, separadas unas de otras por dos puntos. Por ejemplo:
Dim CANTIDAD As Integer, PRECIO As Double, TOTAL As Double CANTIDAD = 30 : PRECIO = 1.5 : TOTAL = CANTIDAD * PRECIO
Una sentencia Visual Basic puede escribirse en ms de una lnea fsica utilizando el carcter de continuacin de lnea (un espacio en blanco seguido del carcter de subrayado). Por ejemplo:
3.7 ENTRADA Y SALIDA DE DATOS Visual Basic posee una serie de objetos (controles) que pueden ser utilizados como mecanismos de entrada y salida (E/S) de datos. Sin embargo, estos sern estudiados en captulos posteriores. Otra posibilidad de proporcionar datos o de visualizarlos durante la ejecucin de una aplicacin es utilizando cajas de dilogos predefinidas. Debido a que esta es la forma ms simple de realizar la E/S de datos nos ocuparemos de ella.
Entrada de datos La entrada de datos permite proporcionar valores durante la ejecucin de una aplicacin. Estos valores son ingresados generalmente mediante el teclado y asignados a variables del programa. En Visual Basic una forma de ingresar datos a la aplicacin es
29 DE
204
CBTIS # 277
utilizando la caja de dilogo predefinida provista por la funcin InputBox. Su sintaxis es la siguiente:
Donde MENSAJE es el mensaje que indica al usuario el tipo de informacin que debe ingresar. Por ejemplo (practica 00), las sentencias:
Da lugar a que Visual Basic presente la siguiente caja de dilogo solicitando la informacin requerida:
Figura 18. Caja de dialogo Como puede observar, el resto de los parmetros son opcionales. TTULO es el texto que se muestra en la barra de ttulo del cuadro de dilogo, si se omite TTULO, el nombre de la aplicacin es la que se muestra en la barra de ttulo. PREDETERMINADO es una expresin de cadena que aparece en el cuadro de texto como respuesta predeterminada si no se proporciona ningn otro texto. Si se omite PREDETERMINADO el cuadro de texto se muestra vaco. A manera de ejemplo (practica 000) considere lo siguiente: Dim EDAD As Integer EDAD = InputBox (Ingrese su edad?, Ficha de datos, 18)
30 DE
204
CBTIS # 277
Figura 19. Caja de entrada de datos. Salida de datos La salida de datos generalmente consiste en tomar la informacin de la memoria y mostrarla en pantalla. Para realizar la operacin de salida de datos en Visual Basic, podemos utilizar el procedimiento MsgBox, cuya sintaxis es como sigue:
MsgBox MENSAJE [, ICONO, TTULO] MENSAJE es La cadena que se muestra como salida en la caja de dilogo. ICONO es se refiere al estilo de icono que se va ha utilizar y TTULO es una texto que se mostrar en la barra de ttulo de la caja de dilogo. Por ejemplo: Dim EDAD As Integer EDAD = InputBox (Ingrese su edad?) EDAD = EDAD + 10 MsgBox Dentro de 10 aos su edad ser: & Str(EDAD) Si ejecuta el cdigo anterior e ingresa su edad (en mi caso 29 aos) la salida debe ser similar a la figura siguiente:
Figura 20. Caja de salida de datos. Para que pueda ejecutar el cdigo anterior (practica 1), proceda a crear una nueva aplicacin y haga doble click sobre el formulario, luego ingrese el cdigo anterior:
31 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Dim EDAD As Integer EDAD = InputBox (Ingrese su edad?) EDAD = EDAD + 10 MsgBox Dentro de 10 aos su edad ser: & Str(EDAD) End Sub
CBTIS # 277
A manera de observacin cabe sealar que la funcin Str() se utiliza para convertir una expresin numrica a una cadena de caracteres.
3.8 ESTRUCTURAS DE CONTROL Las estructuras de control permiten tomar decisiones y realizar un proceso repetidas veces (procesos iterativos). Para ello Visual Basic dispone de las siguientes estructuras de control: If . . . Then . . . Else, If . . . Then . . . ElseIf, Select Case, For . . . Next, While . . . . Wend, Do . . . Loop y GoTo.
3.8.1 Estructura If . . . Then . . . Else Este tipo de estructura evala una determinada condicin y en funcin a ello ejecuta uno de entre dos posibles grupos de sentencias. Su sintaxis es la siguiente:
Si CONDICIN es verdadera se ejecuta el grupo de SENTENCIAS_VERDADERAS. Si CONDICIN es falsa se ejecuta el grupo de SENTENCIAS_FALSAS. Por ejemplo (practica 2), el siguiente cdigo determina si un entero A es o no divisible por otro entero B:
32 DE
204
Elaborado por MTI.. Felipe Prez Castaeda B = InputBox(Ingrese B?) If A Mod B = 0 Then MsgBox Str(A) & es divisible por & Str(B) Else MsgBox Str(A) & no es divisible por & Str(B) End If
CBTIS # 277
3.8.2 Estructura If . . . Then . . . ElseIf Este tipo de estructura se utiliza para elegir una de entre mltiples alternativas. Su sintaxis es como sigue:
Else SENTENCIAS_FALSAS End If Si CONDICIN_1 es verdadera se ejecuta el grupo de SENTENCIAS_1, y si es no se cumple, se evalan secuencialmente las condiciones siguientes hasta Else, ejecutndose las sentencias correspondientes al primer ElseIf cuya condicin sea verdadera. Si todas las condiciones son falsas, se ejecutan las SENTENCIAS_FALSAS correspondientes a Else.
Por ejemplo (practica 3) considere el siguiente cdigo, el cual imprime el nombre del mes correspondiente a los nmeros del 1 al 12.
33 DE
204
Elaborado por MTI.. Felipe Prez Castaeda MsgBox Enero ElseIf N = 2 Then : MsgBox Febrero ElseIf N = 3 Then : MsgBox Marzo ElseIf N = 4 Then : MsgBox Abril ElseIf N = 5 Then : MsgBox Mayo ElseIf N = 6 Then : MsgBox Junio ElseIf N = 7 Then : MsgBox Julio ElseIf N = 8 Then : MsgBox Agosto ElseIf N = 9 Then : MsgBox Setiembre ElseIf N = 10 Then : MsgBox Octubre ElseIf N = 11 Then : MsgBox Noviembre ElseIf N = 12 Then : MsgBox Diciembre Else: MsgBox Error de datos End If
CBTIS # 277
3.8.3 Estructura Select Case Este estructura es una alternativa a la estructura If . . . Then . . . ElseIf, cuando lo
que necesita es comparar la misma expresin con diferentes valores. Su sintaxis es la siguiente:
Select Case EXPRESIN_TEST Case EXPRESIN_1 SENTENCIAS_1 Case EXPRESIN_2 SENTENCIAS_2 . . . Case Else SENTENCIAS_FALSAS End Select
34 DE
204
CBTIS # 277
En este caso se comprueba el valor de EXPRESIN_TEST frente a la lista expresiones EXPRESIN_1, EXPRESIN_2, . . . y as sucesivamente, y busca el primer Case que incluya el valor evaluado en EXPRESIN_TEST, ejecutando a continuacin el bloque de sentencias correspondiente. Si no existe un valor igual a EXPRESIN_TEST, entonces se ejecuta las SENTENCIAS_FALSAS correspondientes al Case Else. A manera de ejemplo (practica 4) vamos a codificar el programa de la seccin anterior el cual imprime el nombre del mes correspondiente a los nmeros del 1 al 12. Pero en esta vez utilizaremos la estructura Select Case (compare con cual de ambas estructuras es ms cmodo trabajar).
Dim N As Integer N = InputBox (Ingrese N?) Select Case N Case 1 : MsgBox Enero Case 2 : MsgBox Febrero Case 3 : MsgBox Marzo Case 4 : MsgBox Abril Case 5 : MsgBox Mayo Case 6 : MsgBox Junio Case 7 : MsgBox Julio Case 8 : MsgBox Agosto Case 9 : MsgBox Setiembre Case 10 : MsgBox Octubre Case 11 : MsgBox Noviembre Case 12 : MsgBox Diciembre Case Else MsgBox Error de datos End Select
Cabe destacar que Select Case tambin se puede utilizar de la siguiente manera:
35 DE
204
Elaborado por MTI.. Felipe Prez Castaeda (Practica 5) Dim X As Integer X = InputBox(Ingrese X?) Select Case X Case 1 MsgBox X = 1 Case 2, 3 MsgBox X = 2 o X = 3 Case 4 To 10 MsgBox 4 <= X <= 10 Case Else MsgBox X < 1 o X > 10 End Select
CBTIS # 277
3.8.6 Estructura For . . . Next Esta estructura es utilizada para ejecutar un bucle un nmero determinado de veces. El nmero de iteraciones deber ser conocido de antemano. Su sintaxis es la que se presenta a continuacin:
For CONTADOR = INICIO To FINAL [Step INCREMENTO/DECREMENTO] SENTENCIAS_REPETITIVAS [Exit For] Next Donde la variable CONTADOR es inicializada con el valor de INICIO y se incrementa o decrementa hasta un valor FINAL. INCREMENTO/DECREMENTO define la manera en que cambia el valor de la variable CONTADOR en cada iteracin. La sentencia Exit For permite salir del bucle For . Next antes de que este finalice.
36 DE
204
CBTIS # 277
Por ejemplo, el siguiente cdigo imprime los cuadrados de los nmeros enteros del 1 al 25.
Para que este cdigo funcione correctamente debe establecer la propiedad AutoRedraw del formulario a True.
3.8.7 Estructura While . . . Wend La estructura While . . . Wend es aquella en la que el nmero de iteraciones no se conoce por anticipado y el cuerpo del bucle se repite mientras se cumple una determinada condicin. Su sintaxis es la siguiente:
While CONDICIN SENTENCIAS_REPETITIVAS Wend La estructura While . . . Wend evala la CONDICIN en cada iteracin y si el resultado es verdadero contina su ejecucin. El bucle termina cuando CONDICIN es falsa. A manera de ejemplo (practica 6), considere el siguiente cdigo, el cual imprime en pantalla la suma de los N primeros nmeros naturales, es decir S = 1 + 2 + 3 + 4 + . . . + N
37 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Wend MsgBox La suma es S= & Str(S)
CBTIS # 277
3.8.8 Estructura Do . . . Loop Esta estructura ejecuta un bucle mientras una condicin dada sea cierta, o hasta que una condicin dada sea cierta. La condicin puede ser verificada antes o despus de ejecutarse el cuerpo del bucle. Su sintaxis es:
Formato 1: Do [While/Until] CONDICIN SENTENCIAS_REPETITIVAS [Exit Do] Loop Formato 2: Do SENTENCIAS_REPETITIVAS [Exit Do] Loop [While/Until] CONDICIN
Esta estructura (como se puede observar en ambos formatos) permite realizar varias estructuras diferentes dependiendo si la condicin de terminacin est al principio o al final del cuerpo del bucle. Como ejemplo (practica 7), consideremos el siguiente programa, el cual calcula el factorial de un entero N ingresado por teclado:
Dim N As Integer, FACT As Integer, C As Integer FACT = 1 C=1 N = InputBox(Ingrese N?) Do FACT = FACT * C C=C+1
38 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Loop While C <= N MsgBox El factorial de & Str(N) & es= & Str(FACT)
CBTIS # 277
3.8.9 Sentencia GoTo Transfiere el control a una lnea especfica de cdigo, identificada por una etiqueta o por un nmero de lnea. Su sintaxis es: GoTo ETIQUETA/NUMERO_LNEA
Aunque el uso del GoTo se ha depreciado considerablemente, en el presente trabajo no se juzgar su validez. Sin embargo, se ha establecido que no hay situaciones de programacin que requieran el uso del GoTo, es decir, no es un elemento necesario para hacer completo el lenguaje. Sin embargo, el GoTo es una instruccin que, si su usa con cuidado, puede ser beneficiosa en ciertas situaciones de programacin. Por ejemplo podra escribir un bucle para imprimir los cuadrados de los nmeros enteros del 1 al 25. Dim X As Integer X=0 LABEL1: X=X+1 Print X ^ 2 If X < 25 Then GoTo LABEL1 Un uso abusivo de la sentencia GoTo da lugar a cdigos difciles de interpretar y de mantener. Por ello, se recomienda su uso solamente en ocasiones excepcionales. La tarea que vaya a desempear una sentencia GoTo puede suplirse utilizando cualquiera de las estructuras de control vistas en las secciones anteriores. 3.9 ARREGLOS Un arreglo o matriz es una estructura de datos en la que se almacena una coleccin finita de datos del mismo tipo, que comparten un nombre comn, a los que se puede acceder por la posicin (ndice) que ocupa cada uno de ellos dentro del arreglo. Cada elemento del
39 DE
204
CBTIS # 277
arreglo es una variable que puede contener un nmero o una cadena de caracteres, dependiendo del tipo de arreglo que se declare. Los arreglos en Visual Basic se clasifican en estticos y dinmicos.
3.9.1 Arreglos estticos Son aquellos arreglos cuyo tamao no puede cambiar en tiempo de ejecucin. La declaracin de un arreglo esttico se puede realizar mediante la siguiente sintaxis:
Donde DIMENSIONES es una lista de nmeros, separados por comas y que definen las dimensiones del arreglo. Esta lista puede ser de la siguiente forma:
Para el caso de un arreglo formado por K dimensiones, es decir un arreglo K dimensional. A manera de ejemplo considere los siguientes casos que se pueden presentar:
En el primer caso se declara un arreglo unidimensional de 10 elementos de tipo entero (por defecto los elementos de un arreglo se numeran a partir de 0). En el segundo caso se define de un arreglo bidimensional de 20 elementos (5 filas por 4 columnas) de tipo punto flotante en doble precisin. En el tercer caso se define una arreglo unidimensional de 20 elementos de tipo cadena de caracteres (cada elemento tiene una longitud fija de 30 caracteres).
40 DE
204
CBTIS # 277
Como se observa la numeracin de los elementos de un arreglo por defecto comienza en cero, para hacer que la numeracin comience en 1, debe ingresar la siguiente orden en la seccin de Declaraciones del mdulo de formulario:
Figura 21, Ventana de cdigo de arreglos. Luego, para declarar los mismos arreglos de los casos anteriores, las sentencias seran las siguientes:
Establecer la sentencia Option Base a 1 o trabajar con el valor predeterminado (cero) queda a consideracin del lector.
3.9.2 Arreglos dinmicos Son aquellos arreglos en los que su tamao puede definirse o modificarse en tiempo de ejecucin. Para declara una arreglo dinmico utilice la siguiente sintaxis:
ReDim NOMBRE_ARREGLO(NMERO_ELEMENTOS)
41 DE
204
CBTIS # 277
Cada vez que se ejecuta la sentencia ReDim, todos los valores almacenados en el arreglo se pierden. Para definir o cambiar el tamao del arreglo conservando los valores del mismo use la siguiente sintaxis: ReDim Preserve NOMBRE_ARREGLO(NMERO_ELEMENTOS) Para liberar el espacio de memoria utilizado por arreglos dinmicos que ya no son tiles, utilizar la sintaxis: Erase NOMBRE_ARREGLO
La orden Erase asigna cero a cada elemento de los arreglos numricos y nulo () a cada elemento de los arreglos de cadena de caracteres. A manera de ejemplo (practica 8) considere el siguiente cdigo que declara y hace uso de un arreglo dinmico: Dim I As Integer, N As Integer, TEMP() As Integer N = InputBox(Ingrese N?) ReDim TEMP(N - 1) For I = 0 To N - 1 TEMP(I) = I + 1 Print TEMP(I) Next Erase TEMP
3.10 REGISTROS Un registro es un nuevo tipo de dato, que se define como una coleccin de datos de diferentes tipos, conocidos como campos, los cuales se encuentran evidentemente
relacionados. Un registro slo se puede ser creado en la seccin de declaraciones de un mdulo. La sintaxis correspondiente es: Private Type NOMBRE_REGISTRO DECLARACIONES_DE_LOS_MIEMBROS End Type
42 DE
204
CBTIS # 277
Private Type ALUMNO ID_ALUMNO As String * 7 NOMBRE As String * 25 DIRECCION As String * 35 TELEFONO As String * 7 ESTADO As Boolean End Type Luego, podemos declarar una variable tipo ALUMNO de la siguiente forma: Dim X As ALUMNO Para referirse a un determinado miembro del registro se utiliza el operador selector de campos ( . ), veamos: X.ID_ALUMNO = 980976G X.NOMBRE = Carlos Castillo Peralta X.DIRECCION = Jr. C. Richardson 412 Chorrillos X.TELEFONO = 2510850 X.ESTADO = True Las mismas rdenes del prrafo anterior se pueden escribir de una manera ms fcil, ms legible y ms eficiente si utiliza la sentencia With . . . End With, del siguiente modo:
With X . ID_ALUMNO = 980976G .NOMBRE = Carlos Castillo Peralta .DIRECCION = Jr. C. Richardson 412 Chorrillos .TELEFONO = 2510850 .ESTADO = True End With
3.11 FUNCIONES Las funciones son uno de los elementos bsicos en programacin. A continuacin sern estudiadas detalladamente.
43 DE
204
CBTIS # 277
Declaracin de una funcin Una funcin es un procedimiento que cuando se ejecuta devuelve un nico resultado al procedimiento que la invoc. La sintaxis correspondiente a la declaracin de una funcin es:
Function NOMBRE_FUNCIN([LISTA_PARMETROS]) [As TIPO] SENTENCIAS [NOMBRE_FUNCIN = VALOR_RETORNADO] [Exit Function] End Function
Donde LISTA_PARMETROS es una secuencia de variables separadas por comas que se corresponden con los argumentos pasados cuando es invocada la funcin. Para especificar el tipo de datos que ser retornado por la funcin utilice la clusula opcional As TIPO, el tipo es Variant por omisin. El valor retornado por la funcin es almacenado en su propio nombre, es decir en NOMBRE_FUNCIN, que acta como variable dentro del cuerpo de la funcin. Si no se efecta esta asignacin el valor devuelto ser cero si la funcin es de tipo numrica, nulo () si la funcin es de tipo cadena, o vaco (Empty) si la funcin es de tipo Variant. La clusula opcional Exit Function permite salir de una funcin antes de que la funcin finalice, en caso sea esto necesario. La sintaxis para la llamada a una funcin es de la siguiente forma:
VARIABLE = NOMBRE_FUNCIN([LISTA_ARGUMENTOS])
Donde LISTA_ARGUMENTOS es una secuencia de constantes, variables o expresiones separadas por comas. El nmero de argumentos debe ser igual al nmero de parmetros de la funcin. Los tipos de los argumentos deben coincidir con los tipos de sus correspondientes parmetros.
44 DE
204
CBTIS # 277
f ( x) x 2 2 x 3
Function F(X As Double) As Double F=X^2+2*X+3 End Function Para invocar la funcin creada recientemente, codifique las siguientes lneas:
Dim A As Double, RESP As Double A = InputBox(Ingrese A?) RESP = F(A) MsgBox (Str(RESP))
Paso de argumentos a una funcin El paso de argumentos a una funcin es la forma como se ingresan los datos y variables al interior de la funcin y se presenta de dos formas: Por referencia Por valor Paso de argumentos por referencia En las funciones de Visual Basic, los argumentos se pasan por referencia (forma por defecto), de este modo cualquier cambio de valor que sufra un parmetro en el cuerpo de la funcin, tambin se produce en el argumento correspondiente de la llamada a la funcin. Esta forma de pasar los argumentos a una funcin es til para funciones que devuelven ms de un valor. Por ejemplo, considere la siguiente funcin que calcula las races reales de una ecuacin cuadrtica Ax 2 Bx C 0 . (Practica 10)
45 DE
204
CBTIS # 277
Function RAIZ(A As Double, B As Double, C As Double, X1 As Double, X2 As Double) As Boolean Dim D As Double D=B^2-4*A*C If D >= 0 Then X1 = (-B - Sqr(D)) / (2 * A) X2 = (-B + Sqr(D)) / (2 * A) RAIZ = True ' Verdadero si hay races reales Else RAIZ = False ' Falso si no hay races reales End If End Function
La llamada a esta funcin se puede realizar de la manera que se presenta a continuacin: Dim A As Double, B As Double, C As Double Dim X1 As Double, X2 As Double A = InputBox(Ingrese A?) B = InputBox(Ingrese B?) C = InputBox(Ingrese C?) If RAIZ(A, B, C, X1, X2) Then MsgBox X1= & Str(X1) MsgBox X2= & Str(X2) Else MsgBox NO EXISTEN RACES REALES End If
Paso de argumentos por valor Cuando se ejecuta una funcin, se podr especificar que el valor de un argumento no sea cambiado por esta funcin, pasando dicho argumento por valor. Para ello se debe
46 DE
204
CBTIS # 277
anteponer la palabra reservada ByVal a la declaracin del parmetro en la cabecera de la funcin. Por ejemplo:
La cabecera de la funcin F especifica que X ser pasado por valor y no por referencia. Funciones recursivas Se dice que una funcin es recursiva si se llama a s misma. Por ejemplo la funcin FACTORIAL cuyo cdigo se presenta a continuacin es recursiva:
Function FACTORIAL(N As Integer) As Long If N 0 Then FACTORIAL = FACTORIAL(N - 1) * N Else FACTORIAL = 1 End If End Function
Private Sub NOMBRE_PROCEDIMIENTO([LISTA_PARMETROS]) SENTENCIAS [Exit Sub] End Sub La explicacin es anloga a la dada para las funciones. Sin embargo, un procedimiento no puede ser utilizado en una expresin, ya que un procedimiento no retorna ningn valor a travs de su nombre.
47 DE
204
CBTIS # 277
La llamada a un procedimiento puede ser realizada de alguna de las dos formas siguientes: Call NOMBRE_PROCEDIMIENTO([LISTA_ARGUMENTOS]) NOMBRE_PROCEDIMIENTO([LISTA_ARGUMENTOS]) Por ejemplo, el siguiente cdigo corresponde a un procedimiento que calcula e imprime la suma de los N primeros nmeros naturales impares, es decir: S = 1 + 3 + 5 + . . + N
Private Sub SUMA_IMPAR(N As Integer) Dim S As Integer, I As Integer S=0 For I = 1 To N If I Mod 2 0 Then S=S+I End If Next MsgBox La suma es S= & Str(S) End Sub
La llamada a este procedimiento podra ser de la forma: Call SUMA_IMPAR(25) Activiades a desarrollar (tarea) Entregar resumen del capitulo Complete el siguiente cuadro. Operador
Exponenciacin Menos unario Multiplicacin y divisin Divisin entera Resto de una divisin entera Suma y resta
Significado
48 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Firma de Recibido __________________ CAPTULO 4
CBTIS # 277
4.1 USO DE LOS CONTROLES Los controles son aquellos objetos que se encuentran dentro de un contenedor y que permiten la interaccin entre el usuario y la aplicacin, ya sea para manipular datos y/o ejecutar tareas. En Visual Basic, los controles suelen ser agrupados en tres categoras: Controles bsicos Controles complementarios Controles externos Los controles bsicos son las etiquetas, cuadros de texto y botones de comando, pues utilizando estos tres controles se puede construir cualquier interfaz. Los controles complementarios son el resto de los controles, por ejemplo una casilla de verificacin, un cuadro combinado o un cronmetro. Los controles externos se refieren a aquellos controles creados por terceros. Este tipo de controles son llamados ActiveX.
4.2 CONTROLES BSICOS Los controles bsicos lo conforman las etiquetas, cuadros de texto y botones de comando, debido a que cualquier interfaz se puede implementar con slo estos tres objetos. Etiqueta Una etiqueta es un control que permite presentar texto de solo lectura. Se utiliza para mostrar ttulos y mensajes que por lo general no cambian. Sin embargo, si lo desea, puede escribir procedimientos que cambien el texto mostrado por una etiqueta como respuesta a eventos en tiempo de ejecucin. Propiedad Alignment AutoSize Descripcin Especifica la forma como se alinear el texto. Especifica si se cambia automticamente el tamao del control para que quepan sus contenidos.
49 DE
204
Elaborado por MTI.. Felipe Prez Castaeda BackColor, ForeColor BackStyle Caption WordWrap
CBTIS # 277
Especifica el color de fondo y de primer plano empleado para mostrar el texto. Especifica si el fondo del control es transparente u opaco. Especifica el texto que se muestra en el control. Especifica si la etiqueta se extiende a ms de una lnea cuando el texto es amplio. Tabla 9. Propiedades del botn etiqueta
Cuadro de texto Un cuadro de texto es un control en el que el usuario pueda ingresar datos desde el teclado o visualizar un resultado generado por la aplicacin. El valor de un cuadro de texto por lo general se asocia a una variable de memoria. Propiedad Enabled Descripcin Habilita o deshabilita el control, es decir si se puede o no modificar el contenido. Locked Permite bloquear el acceso al control en tiempo de ejecucin. MaxLenght Especifica la longitud mxima (en caracteres) que puede escribirse en el control. MultiLine PasswordChar Especifica si el control admitir mltiples lneas. Determina si se muestran en el control los caracteres escritos por el usuario o los caracteres de marcador de posicin. ScrollBars Especifica si se muestran las barras de desplazamiento horizontales o verticales. SelLength SelStart Especifica el nmero de caracteres seleccionados. Especifica el inicio del texto seleccionado. Si su valor es 0, el texto seleccionado comienza por el primer carcter. SelText Text Contiene el texto seleccionado. Contiene el texto introducido en el control. Puede inicializar
50 DE
204
CBTIS # 277
Los eventos asociados a un cuadro de texto son los siguientes: Evento Change Descripcin Ocurre cuando se cambia el contenido del control utilizando el teclado o el ratn. KeyPress Ocurre cuando se pulsa una tecla. Tabla 11. Ebentos del cuadro de texto. Botn de comando Un botn de comando es un control que suele emplearse para ejecutar una accin, como cerrar un formulario, imprimir un informe, etc. Propiedad Cancel Descripcin Especifica si el control responder a la tecla ESC, por lo general para terminar la aplicacin. Caption Default Muestra un ttulo para el control. Especifica si el control responder a la tecla ENTRAR, sin importar la ubicacin del enfoque. Enabled Picture Style Permite habilitar o deshabilitar el control. Especifica una imagen tipo icono para el control. Especifica la apariencia del control, ya sea estndar (estilo estndar de Windows) o grfica (con una imagen
Los botones de comando suelen responder al evento Click, cuya descripcin es: Evento Descripcin
51 DE
204
CBTIS # 277
Ocurre cuando el usuario hace click sobre el control. Tabla 13. Eventos del botn de comando
A manera de ejemplo (practica 11) vamos a desarrollar la siguiente aplicacin. Esta consiste en un cajero automtico el cual permite manipular cierta cantidad de dinero para lo cual dispone de los siguientes billetes: S/. 10.00; S/. 20.00; S/. 50.00; S/. 100.00 y
S/. 200.00. Elaborar una aplicacin que permita la lectura de la cantidad a retirar e indique el menor nmero de billetes a utilizar.
Figura 22. GUI de Cajero Para el desarrollo de la presente aplicacin proceda a ubicar los siguientes controles en el formulario: 6 etiquetas 6 cajas de texto 3 botones de comando
Una vez ubicados los controles, establezca las propiedades segn se indica:
52 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Label1 Nombre AutoSize Caption LblCantidad True Cantidad a retirar:
CBTIS # 277
Label2 Nombre AutoSize Caption Label3 Nombre AutoSize Caption Label4 Nombre AutoSize Caption Label5 Nombre AutoSize Caption Label6 Nombre AutoSize Caption Text1 Nombre Text Text2 TxtCantidad LblB200 True Billetes de S/. 200 LblB100 True Billetes de S/. 100 LblB50 True Billetes de S/. 50 LblB20 True Billetes de S/. 20 LblB10 True Billetes de S/. 10
53 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Nombre Text Text3 Nombre Text TxtB20 TxtB10
CBTIS # 277
Text4 Nombre Text Text5 Nombre Text Text6 Nombre Text TxtB200 TxtB100 TxtB50
Command1 Nombre Caption Command2 Nombre Caption Command3 Nombre Caption CmdSalir &Salir CmdLimpiar &Limpiar CmdAceptar &Aceptar
Para aadir cdigo a la aplicacin haga doble click sobre el botn Aceptar e ingrese lo siguiente:
54 DE
204
CBTIS # 277
Dim C As Integer, B200 As Integer, B100 As Integer, B50 As Integer, B20 As Integer, B10 As Integer C = Val(TxtCantidad) If C Mod 10 = 0 Then B200 = C \ 200 : C = C Mod 200 B100 = C \ 100 : C = C Mod 100 B50 = C \ 50 : C = C Mod 50 B20 = C \ 20 : B10 = C Mod 20 TxtB200 = Str(B200) TxtB100 = Str(B100) TxtB50 = Str(B50) TxtB20 = Str(B20) TxtB10 = Str(B10) Else MsgBox Cantidad a retirar debe ser mltiplo de 10 TxtCantidad = TxtCantidad.SetFocus End If End Sub
Luego, haga doble click sobre el botn Limpiar y aada el siguiente cdigo:
Private Sub CmdLimpiar_Click() TxtCantidad = TxtB200 = TxtB100 = TxtB50 = TxtB20 = TxtB10 = TxtCantidad.SetFocus
55 DE
204
CBTIS # 277
Finalmente dar doble click sobre el botn Salir y aada el siguiente cdigo:
Private Sub CmdSalir_Click () End End Sub En el cdigo anterior hemos utilizado el mtodo SetFocus para enfocar la caja de texto TxtCantidad, esto es, para posicionar el cursor sobre ella.
Los controles complementarios se utilizan como alternativa a los controles bsicos en aplicaciones en las cuales su uso facilita o mejora el diseo de la interfaz. Como el lector podr verificar, algunos controles son ms adecuados que otros dependiendo del tipo de aplicacin que se pretenda desarrollar.
Marco Un marco es un objeto contenedor que puede utilizarse para agrupar casillas de verificacin, botones de opcin, botones de comando, etc.
Propiedad Caption
Descripcin Muestra un ttulo para el control. Tabla 14. Propiedades del control marco.
Casilla de verificacin Una casilla de verificacin se utiliza para alternar entre dos posibles valores (Activado/Desactivado). Cada casilla de verificacin es independiente de las dems ya que cada una tiene su propio nombre (Name). Puede utilizar casillas de verificacin en grupos
56 DE
204
CBTIS # 277
para mostrar mltiples opciones entre las cuales el usuario puede seleccionar todas las que desee a la vez. Propiedad Caption Value Descripcin Muestra un ttulo para el control. Devuelve o establece el estado del control, puede ser: Desactivado (0), Activado (1). Tabla 15. Propiedades de la casilla de verificacin.
Botn de opcin Un botn de opcin se utiliza para alternar entre dos posibles valores (Activado/Desactivado), de manera similar a las casillas de verificacin, la diferencia radica en que de un grupo de botones de opcin el usuario slo puede seleccionar un nico botn a la vez.
Descripcin Muestra un ttulo para el control. Devuelve o establece el estado del control, puede ser: Desactivado (Falso), Activado ( rae). Tabla 16. Propiedades del boton de opcin.
lic.
A manera de ejemplo (practica 12) vamos a desarrollar la siguiente aplicacin, la cual permite cambiar el aspecto de un cuadro de texto, el usuario debe elegir el color (rojo, verde, azul) y el estilo (negrita, cursiva, subrayado) de la fuente a utilizar. Adicionalmente, cuando el usuario active la casilla de verificacin Convertir a maysculas, todo el texto que haya escrito en el cuadro de texto se presentar en maysculas y todo texto que escriba a continuacin (mientras la opcin est activada) tambin deber aparecer en maysculas.
57 DE
204
CBTIS # 277
Figura 23. GUI del editor Para el desarrollo de la presente aplicacin proceda a ubicar los siguientes controles en el formulario: 1 cuadro de texto 2 marcos 3 botones de opcin 4 casillas de verificacin Una vez ubicados los controles, establezca las propiedades segn se indica: Form1 Nombre BorderStyle Caption FrmEditor 3-Fixed Dialog Editor
58 DE
204
CBTIS # 277
59 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Caption Font Cursiva Arial (Cursiva)
CBTIS # 277
Una vez establecidas las propiedades, proceda a ingresar el cdigo que se indica a continuacin: Private Sub OptRojo_Click() If OptRojo.Value Then TxtMensaje.ForeColor = RGB(255, 0, 0) End If End Sub Private Sub OptVerde_Click() If OptVerde.Value Then TxtMensaje.ForeColor = RGB(0, 255, 0) End If End Sub
Private Sub OptAzul_Click() If OptAzul.Value Then TxtMensaje.ForeColor = RGB(0, 0, 255) End If End Sub
60 DE
204
CBTIS # 277
Private Sub ChkNegrita_Click() If ChkNegrita.Value Then TxtMensaje.Font.Bold = True Else TxtMensaje.Font.Bold = False End If End Sub
Private Sub ChkCursiva_Click() If ChkCursiva.Value Then TxtMensaje.Font.Italic = True Else TxtMensaje.Font.Italic = False End If End Sub Private Sub ChkSubrayado_Click() If ChkSubrayado.Value Then TxtMensaje.Font.Underline = True Else TxtMensaje.Font.Underline = False End If End Sub
Private Sub ChkMayuscula_Click() If ChkMayuscula.Value Then TxtMensaje = UCase(TxtMensaje) End If End Sub
61 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Dim CAR As String * 1 If ChkMayuscula.Value Then CAR = UCase(Chr(KeyAscii)) KeyAscii = Asc(CAR) End If End Sub
CBTIS # 277
La funcin RGB() especifica el color que se asigna a la propiedad ForeColor. La funcin UCase() retorna una cadena de caracteres en maysculas.
Cuadro de lista Un cuadro de lista es un control que presenta una lista de elementos en la que el usuario puede seleccionar uno o ms de dichos elementos. Si el nmero de elementos supera el nmero que puede mostrarse, se agregar automticamente una barra de desplazamiento al control.
Propiedad List
ListCount
Especifica el nmero de elementos de la lista. Su valor siempre es uno ms que el mayor valor de ListIndex.
ListIndex
Especifica el nmero de orden que ocupa el elemento seleccionado en la lista. Toma el valor de 0 para el primer elemento, si no ha selecciona ninguno retorna -1.
MultiSelect
SelCount Selected
62 DE
204
CBTIS # 277
Text
Especifica el valor del elemento seleccionado en ese instante. El valor es tratado como una cadena de caracteres. Tabla 17. Propiedades del cuadro de lista.
Los mtodos que se pueden utilizar para un cuadro de lista son los siguientes: Mtodo AddItem Clear RemoveItem Descripcin Agrega un nuevo elemento a la lista. Elimina todos los elementos contenidos en la lista. Elimina en elemento de la lista. Tabla 18. Metodos del cuadro de lista.
Cuadro combinado Un cuadro combinado es una mezcla de un cuadro de texto con una lista. En l no slo se podr ingresar un dato sino tambin seleccionarlo de la lista. Presenta las mismas propiedades, eventos y mtodos que el cuadro de lista a excepcin de lo siguiente: Propiedad Style Descripcin Especifica si el control se comporta como un cuadro de texto o como una lista desplegable. Un cuadro de texto permite ingresar valores. Una lista desplegable slo permite seleccionar valores. El valor predeterminado es 0-
vbComboDropDown, e incluye una lista desplegable y un cuadro de texto. El valor 1-vbComboSimple incluye tan
solo cuadro de texto. El valor 2-Dropdown List incluye slo una lista desplegable. Tabla 19. Propiedades del cuadro combinado.
63 DE
204
CBTIS # 277
Como ejemplo (practica 13) del uso de listas vamos a desarrollar una aplicacin que permita ingresar el nombre de un curso, el cual pasa a formar parte de una lista de espera antes de ser programado para su dictado. Los cursos deben ser seleccionados de la lista de espera y trasladados a la lista de cursos programados y viceversa.
Figura 24. GUI de la aplicacin cursos Para el desarrollo de la presente aplicacin proceda a ubicar los siguientes controles en el formulario:
64 DE
204
CBTIS # 277
65 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Caption Picture Style C:\FundVB\Bitmaps\AddItem.Bmp 1-Graphical
CBTIS # 277
Seguidamente proceda a ingresar el cdigo que se indica a continuacin: Private Sub CmdAnnadir_Click() LstSeleccionar.AddItem TxtCurso
66 DE
204
Elaborado por MTI.. Felipe Prez Castaeda TxtCurso = TxtCurso.SetFocus End Sub
CBTIS # 277
Private Sub CmdAgregar_Click () Dim CURSO As String, I As Integer CURSO = LstSeleccionar.Text I = LstSeleccionar.ListIndex If LstSeleccionar.ListIndex >= 0 Then LstProgramado.AddItem CURSO LstSeleccionar.RemoveItem I End If End Sub Private Sub CmdQuitar_Click () Dim CURSO As String, I As Integer CURSO = LstProgramado.Text I = LstProgramado.ListIndex If LstProgramado.ListIndex >= 0 Then LstSeleccionar.AddItem CURSO LstProgramado.RemoveItem I End If End Sub
Private Sub CmdAgregarTodo_Click () Dim I As Integer For I = 0 To LstSeleccionar.ListCount - 1 LstProgramado.AddItem LstSeleccionar.List(I) Next LstSeleccionar.Clear End Sub
67 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Private Sub CmdQuitarTodo_Click() Dim I As Integer For I = 0 To LstProgramado.ListCount - 1 LstSeleccionar.AddItem LstProgramado.List(I) Next LstProgramado.Clear End Sub A continuacin
CBTIS # 277
combinados. Para tal fin vamos a desarrollar una aplicacin que permita realizar consultas acerca de un determinado curso. La relacin de cursos se presentar mediante un cuadro combinado, del cual el usuario debe seleccionar el curso de su inters y en seguida se presentar el nombre del profesor encargado del curso (teora), el nombre del jefe de prctica (laboratorio), as como los horarios de teora y de laboratorio, respectivamente.
Figura 25. GUI de consulta de cursos. Para el desarrollo de la presente aplicacin proceda a ubicar los siguientes controles en el formulario:
68 DE
204
CBTIS # 277
En seguida proceda a establecer las propiedades segn se indica: Form1 Nombre BorderStyle Caption FrmConsultaCursos 3-Fixed Dialog Consulta de cursos
69 DE
204
Elaborado por MTI.. Felipe Prez Castaeda CboCursos.AddItem Microsoft Visual Basic Nivel I CboCursos.AddItem Microsoft Visual Basic Nivel II CboCursos.AddItem Microsoft Visual FoxPro Nivel I CboCursos.AddItem Microsoft Visual FoxPro Nivel II CboCursos.AddItem Microsoft Visual C++ Nivel I CboCursos.AddItem Microsoft Visual C++ Nivel II Matriz(0, 0) = Castillo Peralta, Carlos Matriz(1, 0) = Castillo Peralta, Carlos Matriz(2, 0) = Linares Alarcon, Adams Matriz(3, 0) = Castillo Peralta, Carlos Matriz(4, 0) = Crdoba Saavedra, Javier Matriz(5, 0) = Castillo Peralta, Carlos Matriz(0, 1) = Sa 08-11 Matriz(1, 1) = Sa 14-17 Matriz(2, 1) = Sa 08-11 Matriz(3, 1) = Do 08-11 Matriz(4, 1) = Sa 14-17 Matriz(5, 1) = Sa 17-20 Matriz(0, 2) = Castillo Peralta, Carlos Matriz(1, 2) = Linares Alarcon, Adams Matriz(2, 2) = Montes Tejada, Estela Matriz(3, 2) = Linares Alarcon, Adams Matriz(4, 2) = Crdoba Saavedra, Javier Matriz(5, 2) = Crdoba Saavedra, Javier Matriz(0, 3) = Sa 11-13 Matriz(1, 3) = Do 08-10 Matriz(2, 3) = Sa 11-13 Matriz(3, 3) = Do 14-16 Matriz(4, 3) = Sa 18-20 Matriz(5, 3) = Do 08-10 End Sub
CBTIS # 277
70 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Private Sub CboCursos_Click() Dim P_TEORIA As String, H_TEORIA As String Dim P_LAB As String, H_LAB As String
CBTIS # 277
P_TEORIA = Profesor de teora: & Matriz(CboCursos.ListIndex, 0) H_TEORIA = Horario de teora: & Matriz(CboCursos.ListIndex, 1) P_LAB = Jefe de prctica: & Matriz(CboCursos.ListIndex, 2) H_LAB = Horario laboratorio: & Matriz(CboCursos.ListIndex, 3)
TxtCurso = P_TEORIA & vbCrLf & H_TEORIA & vbCrLf & P_LAB & vbCrLf & H_LAB End Sub
La constante vbCrLf es una combinacin de retorno de carro y avance de lnea, es equivalente a Chr(13) + Chr(10). Para este ejemplo en particular hemos almacenado la informacin en memoria RAM mediante el uso de un arreglo bidimensional (Matriz).
Cronmetro Un cronmetro sirve para controlar el tiempo transcurrido desde el inicio de una accin. Propiedad Interval Descripcin Especifica el nmero de milisegundos que se esperar para disparar el evento Timer.
El control Cronmetro responde al evento Timer, cuya descripcin es: Evento Timer Descripcin Ocurre cuando el nmero de milisegundos especificado en
71 DE
204
CBTIS # 277
A manera de ejemplo de los eventos antes mencionados vamos a desarrollar la siguiente aplicacin (prctica 15) que simula el funcionamiento de un reloj digital.
Figura 26. Interfaz grafica de Usurio del Reloj digital. Para el desarrollo de la presente aplicacin proceda a ubicar los siguientes controles sobre el formulario: 1 etiqueta 1 cuadro de texto 1 cronmetro 1 botn de comando En seguida proceda a establecer las propiedades segn se indica: Form1 Nombre BorderStyle Caption FrmReloj 3-Fixed Dialog Reloj digital
Text1
72 DE
204
CBTIS # 277
Private Sub Timer1_Timer() If TxtHora Time() Then TxtHora = Time() End If End Sub
Private Sub CmdTerminar_Click() End End Sub Cuadro de imagen Un cuadro de imagen se utiliza para mostrar un archivo de imagen (BMP, GIF o JPG). Recorta el grfico si el control no es lo bastante grande para mostrar la imagen completa.
Propiedad
Descripcin
73 DE
204
CBTIS # 277
Picture
El evento que suele manejarse para este control es MouseMove, cuya descripcin es: Evento MouseMove Descripcin Ocurre cuando el usuario mueve el ratn sobre el control.
Imagen Un control imagen se utilizar para mostrar un archivo de imagen (BMP, GIF o JPG) de manera similar a un Cuadro de imagen. Sin embargo, este control utiliza menos recursos del sistema y se actualiza con ms rapidez que un cuadro de imagen. Propiedad Picture Stretch Descripcin Especifica el archivo de imagen para el control. Especifica como se ajusta el tamao del archivo grfico para que quepa dentro del control imagen.
Barras de desplazamiento horizontal Una barra de desplazamiento horizontal representa un valor entero, la cual tiene un cuadrado que se desplaza a lo largo de la misma para fijar un valor. La posicin ms a la izquierda se corresponde con el valor mnimo, la posicin ms a la derecha con el valor mximo, y cualquier otra posicin es un valor entre ellos dos.
Descripcin Especifica el valor mximo que puede tomar la propiedad Value. Especifica el valor mnimo que puede tomar la propiedad Value. Especifica en cuanto cambiar el valor de la propiedad Value cuando el
74 DE
204
CBTIS # 277
usuario haga click antes o despus del cuadrado de desplazamiento. SmallChange Especifica en cuanto cambiar el valor de la propiedad Value cuando el usuario haga click en alguna de las flechas de los extremos de la barra. Value Especifica el valor del control, este se encuentra siempre entre los valores de las propiedades Min y Max.
Las barras de desplazamientos responden a los eventos: Evento Change Descripcin Ocurre inmediatamente despus que el cuadrado de desplazamiento ha sido movido. Scroll Ocurre mientras el cuadrado de desplazamiento est siendo movido (este evento slo ocurre cuando el cuadrado es arrastrado).
Barras de desplazamiento vertical Una barra de desplazamiento vertical representa un valor entero, la cual tiene un cuadrado que se desplaza a lo largo de la misma para fijar un valor. La posicin ms hacia arriba se corresponde con el valor mnimo, la posicin ms hacia abajo se corresponde con el valor mximo, y cualquier otra posicin es un valor entre ellos dos. Las propiedades y eventos de las barras de desplazamiento horizontal y vertical son anlogas. Como ejemplo, vamos a construir una aplicacin que permita cambiar el color de fondo de un cuadro de imagen, mediante tres barras de desplazamiento (rojo, verde y azul).
75 DE
204
CBTIS # 277
Figura 27. GUI de la barra de colores. Como ejemplo del uso de las barras de desplazamiento y sus eventos desarrollaremos la siguiente aplicacin (prctica 16). Para el desarrollo de la aplicacin proceda a ubicar los siguientes controles en el formulario: 3 etiquetas 3 barras de desplazamiento horizontal 1 cuadro de imagen En seguida proceda a establecer las propiedades segn se indica: Form1 Nombre BorderStyle Caption FrmColores 3-Fixed Dialog Colores
76 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Caption Label3 Nombre Caption LblAzul Azul Verde
CBTIS # 277
HScroll1 Nombre LargeChange Max Min SmallChange Value HSRojo 10 255 0 1 255
77 DE
204
CBTIS # 277
Private Sub HSVerde_Change() PicFondo.BackColor = RGB(HSRojo, HSVerde, HSAzul) End Sub Private Sub HSAzul_Change() PicFondo.BackColor = RGB(HSRojo, HSVerde, HSAzul) End Sub
En el cdigo anterior se debi colocar HSRojo.Value, HSVerde.Value y HSAzul.Value, pero debido a que la propiedad Value es por defecto se puede omitir. Cuadro de lista de unidades Un cuadro de lista de unidades permite al usuario seleccionar una unidad de disco vlida en tiempo de ejecucin. Utilice este control para presentar una lista de todas las unidades vlidas del sistema. Propiedad Drive Descripcin Especifica la unidad seleccionada en tiempo de ejecucin.
Este control responde al evento Change, cuya descripcin es la siguiente: Evento Descripcin
78 DE
204
CBTIS # 277
Ocurre cuando el usuario hace click sobre la unidad que desea seleccionar. El evento Change tambin ocurre si se selecciona la unidad mediante el teclado.
Cuadro de lista de directorios Un cuadro de lista de directorios muestra directorios y rutas de acceso en tiempo de ejecucin. Utilice este control para mostrar una lista jerrquica de directorios.
Propiedad Path
Cuadro de lista de archivos Un cuadro de lista de archivos encuentra y muestra los archivos del directorio especificado por la propiedad Path en tiempo de ejecucin. Utilice este control para mostrar una lista de los archivos seleccionados por tipo.
Descripcin Especifica la ruta de acceso actual. Especifica el tipo de archivo que se desea visualizar en el control.
List
ListIndex
Como ejemplo vamos a desarrollar una aplicacin que permita el manejo de unidades, carpetas y archivos (prctica 17). El usuario puede seleccionar la unidad actual de trabajo,
79 DE
204
CBTIS # 277
la carpeta y el archivo y poder visualizar su contenido (en este caso archivos grficos *.JPG).
Figura 28. GUI del visor de imgenes. Para el desarrollo de la presente aplicacin proceda a ubicar los siguientes controles en el formulario: 4 etiquetas 1 cuadro de lista de unidades 1 cuadro de lista de directorios 1 cuadro de lista de archivos 1 imagen En seguida proceda a establecer las propiedades segn se indica: Form1 Nombre Caption FrmVisor Visor
Label2
80 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Nombre Caption LblCarpeta Carpeta
CBTIS # 277
81 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Exit Sub DRIVE_ERROR: MsgBox ERROR: Unidad no preparada, vbCritical, Error Exit Sub End Sub
CBTIS # 277
Private Sub File1_Click() Dim ARCHIVO As String ARCHIVO = File1.Path & \ ARCHIVO = ARCHIVO & File1.List(File1.ListIndex) ImgVista.Picture = LoadPicture(ARCHIVO) End Sub
La instruccin On Error activa una rutina de control de errores y especifica la ubicacin de la misma en un procedimiento.
LA FUNCIN MSGBOX A menudo habr situaciones en las cuales tendr que presentar algn mensaje (por ejemplo una pregunta) y en funcin de la respuesta del usuario se ejecutar una determinada accin.
82 DE
204
CBTIS # 277
La funcin MsgBox() muestra un cuadro de dilogo predefinido y retorna un valor de tipo entero dependiendo del botn seleccionado por el usuario. Su sintaxis es de la siguiente forma: VALOR = MsgBox(MENSAJE [, BOTN + ICONO, TTULO]) Donde MENSAJE se refiere a una expresin de cadena que se muestra como mensaje en el cuadro de dilogo. BOTN es una expresin numrica que se refiere al tipo y cantidad de botones a utilizar. ICONO es una expresin numrica que se refiere al estilo de icono que se va ha utilizar. TTULO es un texto que se mostrar en la barra de ttulo de la caja de dilogo. Tipo de botn Valor 0 1 2 3 4 5 Aceptar Aceptar y Cancelar Anular, Reintentar, Ignorar S, No y Cancelar S y No Reintentar y Cancelar Botn vbOKOnly vbOKCancel vbAbortRetryIgnore vbYesNoCancel vbYesNo vbRetryCancel Nombre
Tipo de icono Valor 16 32 48 64 Mensaje crtico Signo de interrogacin Signo de exclamacin Signo de informacin Icono vbCritical vbQuestion vbExclamation vbInformation Nombre
83 DE
204
Elaborado por MTI.. Felipe Prez Castaeda 2 3 4 5 6 7 Cancelar Anular Reintentar Ignorar S No vbCancel vbAbort vbRetry vbIgnore vbYes vbNo
CBTIS # 277
Como ejemplo (prctica 18) vamos a construir un formulario que presente un botn Salir, de tal forma que cuando el usuario pulse dicho botn se presente el siguiente mensaje:
Figura 30. GUI del uso de botones En caso de que el usuario elija la opcin S, la aplicacin debe terminar. En caso contrario, es decir si el usuario elige la opcin No, se debe proseguir con la aplicacin. Para el desarrollo del presente ejemplo, proceda a ubicar sobre el formulario un botn de comando (CmdSalir), a continuacin ingresar el siguiente cdigo: Private Sub CmdSalir_Click() Dim RESP As Integer RESP = MsgBox(Desea terminar la aplicacin?, vbQuestion + vbYesNo, Pregunta) If RESP = vbYes Then End End If End Sub Para ilustrar mejor (prctica 19) el uso de la funcin MsgBox () vamos a desarrollar la siguiente aplicacin que permite mostrar los diferentes tipos de botones e iconos generados por la funcin.
84 DE
204
CBTIS # 277
Figura 31. GUI Para ello proceda a ubicar los siguientes controles en el formulario: 2 cuadros de lista 1 botn de comando En seguida proceda a establecer las propiedades segn se indica:
Seguidamente proceda a ingresar el cdigo que se indica a continuacin: Private Sub Form_Load()
85 DE
204
Elaborado por MTI.. Felipe Prez Castaeda LstBoton.AddItem Aceptar LstBoton.AddItem Aceptar y Cancelar LstBoton.AddItem Anular, Reintentar, Ignorar LstBoton.AddItem S, No y Cancelar LstBoton.AddItem S y No LstBoton.AddItem Reintentar y Cancelar LstIcono.AddItem Mensaje crtico LstIcono.AddItem Signo de interrogacin LstIcono.AddItem Signo de exclamacin LstIcono.AddItem Signo de informacin End Sub
CBTIS # 277
Private Sub CmdMensaje_Click() Dim RESP As Integer, BOTON As Integer, ICONO As Integer BOTON = LstBoton.ListIndex ICONO = (LstIcono.ListIndex + 1) * 16 RESP = MsgBox(Hola Mundo, BOTON + ICONO, Ejemplo) End Sub
4.4 ARCHIVOS CON ESTRUCTURA DE BASE DE DATOS. Una base de datos es un conjunta de datos organizados y relacionados lgicamente entre si. Una base de datos se podra considerar como el almacenamiento organizado de los datos proporcionados por el programa. Los archivos con estructura de bases de datos sirven para almacenar de forma personalizada datos de un programa que luego lo podr utilizar para ejecutar operaciones internas en su aplicacin, por ejemplo, podr utilizar un archivo con estructura de base de datos para almacenar la configuracin de su programa con el objetivo de que esta quede almacenada cada vez que cierre el programa y posteriormente leer este archivo cuando la aplicacin vuelva a ser ejecutada. No pretenda almacenar en un archivo de texto datos importantes de una empresa, para esto cree bases de datos con sistemas SGBD
86 DE
204
CBTIS # 277
profesionales como SQL, ORACLE, ACCESS, etc. En el siguiente captulo tratamos este asunto. Una base de datos esta compuesta de filas y columnas que fsicamente representa una tabla. Cada columna representa un Campo en la base de datos y cada Fila un Registro. Un campo se define como la unidad de informacin ms pequea de la base de datos que tiene significado y un Registro se define como la coleccin de todos los campos de una base de datos. Toda lo que se escribe en dicha base de datos se denomina Datos y juegan un papel muy importante en la base de datos. La estructura de una base de datos es la siguiente:
La base de datos anterior se podra considerar como una estructura que representa una agenda telefnica donde los datos a almacenar son: Nombre, Apellido, Telfono y Direccin. Todos estos datos son de un mismo tipo y deben ser almacenados en un mismo archivo siguiendo una estructura organizada tal y como se muestra en la tabla anterior. Por ejemplo, en este caso el primer registro Carlos Rodrguez 809-699-5858 Carretera Mella KM 8 (Mandinga) sera la primera lnea del archivo de la base de datos, el segundo registro sera la segunda lnea del archivo, el tercer registro sera la tercera lnea del archivo y as sucesivamente. Si almacenamos estos datos en un archivo deberamos de almacenarlo de la siguiente forma: Carlos;Rodrguez;809-699-5858;Carretera Mella KM 8 (Mandinga) Pablo;Bucarelly;809-585-6325;Urb. Ralma. Calle #5 Nelson;Prez;809-755-2352;Urb. Los Mina. Res. Catanga Se ha utilizado un punto y coma (;) para separar cada uno de los campos de la base de datos. Cuando almacenemos los registros en una base de datos deberemos agregar al final de cada campo un punto y coma (;) que nos va a permitir el final de cada campo de la base de
87 DE
204
CBTIS # 277
datos. Se puede utilizar otro carcter pero el ms utilizado siempre ha sido el punto y coma (;). Crear una base de datos en Visual Basic no implica utilizar sentencias especiales para el almacenamiento de los datos, sino, que implica utilizar otros mtodos y algoritmos para almacenar y leer los datos. Vamos a utilizar las mismas sentencias Open, Line Input, Print, Output, Input y Append ya vistas anteriormente. Ahora crearemos una pequea agenda telefnica que le permitir aprender a crear archivos con estructura de base de datos. Cree una carpeta llamada Agenda en el disco duro para almacenar nuestro proyecto y nuestra base de datos. Abra un nuevo proyecto y dibuje el siguiente entorno (prctica 19 bis Agenda):
37 Figura 32. Men Agenda. El primer botn servir para agregar un nuevo contacto o una nueva persona. El segundo botn permitir buscar algn contacto, ya sea por nombre o por el nmero de telfono. El tercer botn ser utilizado para eliminar un contacto de la base de datos. El cuarto botn se utilizar para obtener una lista de todos los contactos que han sido agregado a la base de datos.
88 DE
204
Elaborado por MTI.. Felipe Prez Castaeda El quinto botn ser utilizado para salir de la aplicacin.
CBTIS # 277
Establezca los siguientes valores a los controles del formulario anterior para que quede como se muestra en la imagen anterior:
89 DE
204
CBTIS # 277
90 DE
204
CBTIS # 277
Ahora vamos a agregar un nuevo formulario (Form2) para la primera opcin del men principal. Haga clic en el men Project y luego haga clic en la opcin Add Form. En el cuadro de dialogo que aparece haga clic en el botn Open (abrir). Ahora aparecer un formulario en blanco. En este formulario pondremos todo lo necesario para agregar un nuevo contacto en la base de datos. Ahora dibuje el siguiente entorno en el nuevo formulario (Form2):
91 DE
204
CBTIS # 277
El primer botn ser utilizado para guardar los datos del nuevo contacto. El segundo botn ser utilizado para limpiar las cajas de texto y permitir agregar un nuevo contacto. El tercer botn cerrar la ventana de Agregar nuevo contacto. Establezca los siguientes valores en los controles del nuevo formulario:
92 DE
204
CBTIS # 277
Active o seleccione el primer formulario (Form1) de la ventana de Proyectos (Project) haciendo doble clic sobre el mismo. Ahora haga clic en el primer botn Agregar un nuevo contacto y escriba en el evento Click la siguiente lnea de cdigo: Form2.Show 1, Me La lnea de cdigo anterior permite mostrar el segundo formulario. El mtodo Show permite mostrar un formulario en la pantalla. El 1, Me es un mtodo utilizado para que el formulario que se muestra sea el nico activo en la pantalla, es decir, hasta que este no sea cerrado no se podr activar ninguna otra opcin del men principal.
93 DE
204
CBTIS # 277
Active el segundo formulario (Form2) de la ventana de Proyecto (Project) haciendo doble clic sobre el mismo. Ahora vamos a codificar el botn de Guardar: En el evento Click del botn Guardar escriba lo siguiente: Open "C:\AGENDA\Agenda.dat" For Append As #1 Print #1, Text1.Text & ";" & Text2.Text & ";" & Text3.Text & ";" & Text4.Text Close #1 Text1.Text = "" Text2.Text = "" Text3.Text = "" Text4.Text = "" Text1.SetFocus MsgBox ("El nuevo contacto ha sido agregado.") Explicacin del cdigo anterior: - Primera lnea: Open "C:\AGENDA\Agenda.dat" For Append As #1 En esta lnea de cdigo la nica novedad es el mtodo Append que permite agregar informacin al final del archivo y si este no existe entonces se crea. No utilizamos el mtodo Output por la razn de que este mtodo crea nuevamente el archivo y elimina los datos que tenia anteriormente para sustituirlo con los nuevos datos. - Segunda lnea: Print #1, Text1.Text & ";" & Text2.Text & ";" & Text3.Text & ";" & Text4.Text Esta lnea permite escribir en una lnea del archivo el contenido de cada unas de las cajas de texto separado con un punto y coma (;), como habamos explicamos anteriormente. - Ultimas lneas: Close #1 Text1.Text = "" Text2.Text = "" Text3.Text = "" Text4.Text = ""
94 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Text1.SetFocus MsgBox ("El nuevo contacto ha sido agregado.")
CBTIS # 277
En estas ltimas lneas no hay nada nuevo. Se cierra el archivo, se limpian cada unas de las cajas de texto, se hace que el cursor se posicione en la primera caja de texto y se muestra un mensaje. _ Corra la aplicacin y, a continuacin, haga clic en el botn Agregar un nuevo contacto. Debe de aparecer el segundo formulario (Form2). Bien agregue un contacto y haga clic en el botn Guardar. Inmediatamente este registro se agrega en la base de datos. Ms adelante veremos como leer estos registros. Detenga la aplicacin. Haga doble clic en el botn Nuevo del segundo formulario (Form2) y escriba lo siguiente: 382 Text3.Text = "" Text4.Text = "" Text1.SetFocus MsgBox ("El nuevo contacto ha sido agregado.") Text1.Text = "" Text2.Text = "" Text3.Text = "" Text4.Text = "" Text1.SetFocus Explicacin del cdigo anterior: Ninguna novedad. Limpia todas las cajas de texto y hace que el cursor se posicione en la primera caja. En el evento Click del botn Cancelar escriba: Unload Me Explicacin del cdigo anterior: Esta lnea de cdigo permite cerrar el formulario y no la aplicacin completa. El significado de esta lnea al castellano es: DESCARGADME.
95 DE
204
CBTIS # 277
Active el primer formulario desde la ventana de Proyectos (Project) haciendo doble clic sobre el mismo. Ahora vamos a crear un nuevo formulario que ser el formulario de la segunda opcin del men principal. En este formulario agregaremos todo lo necesario para buscar un contacto, ya sea por nmero telefnico o por nombre. Agregue un nuevo formulario haciendo clic en el men Project y a continuacin, en Add Form. En el cuadro de dialogo que aparece haga clic en el botn Open. Aparecer un nuevo formulario (Form3). Dibuje un entorno similar al que se muestra en la imagen siguiente en un tercer formulario (Form3). Hgalo tal y como se ve, no dar los valores de los controles como lo haba echo anteriormente.
Figura 34. Buscar En el evento Click del botn de comando Buscar escriba el siguiente bloque de cdigo: Unload Me If Len(Trim(Text1.Text)) = 0 Then MsgBox ("Debe escribir algo en la caja de texto.") Text1.SetFocus ElseIf Option1.Value = False And Option2.Value = False Then MsgBox ("Debe seleccionar el tipo de bsqueda.") Else On Error GoTo NOarchivo:
96 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Dim Linea As String Dim Campo1, Campo2, Campo3, Campo4 As String Dim Posicion1, Posicion2, Posicion3 As Integer Dim Encontro As Integer Encontro = 0 Open "C:\AGENDA\Agenda.dat" For Input As #1 While Not EOF(1) Line Input #1, Linea Posicion1 = InStr(1, Linea, ";", vbTextCompare) Posicion2 = InStr(Posicion1 + 1, Linea, ";", vbTextCompare) Posicion3 = InStr(Posicion2 + 1, Linea, ";", vbTextCompare) Campo1 = Mid(Linea, 1, Posicion1 - 1) Campo2 = Mid(Linea, Posicion1 + 1, Posicion2 - 1 - Posicion1) Campo3 = Mid(Linea, Posicion2 + 1, Posicion3 - 1 - Posicion2) Campo4 = Mid(Linea, Posicion3 + 1, Len(Linea))
CBTIS # 277
If UCase(Campo1) = UCase(Text1.Text) And Option1.Value = True Then MsgBox ("Nombre: " & Campo1 & " Apellido: " & Campo2 & " Telfono: " & Campo3 & " Direccin: " & Campo4) Encontro = 1 End If If Campo3 = Text1.Text And Option2.Value = True Then MsgBox ("Nombre: " & Campo1 & " Apellido: " & Campo2 & " Telfono: " & Campo3 & " Direccin: " & Campo4) Encontro = 1 End If Wend If Encontro = 0 Then MsgBox ("No se ha encontrado el contacto especificado.") End If Close #1 End If
97 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Exit Sub NOarchivo: MsgBox ("La base de datos no existe.")
CBTIS # 277
Explicacin del bloque de cdigo anterior: Las primeras tres lneas: If Len(Trim(Text1.Text)) = 0 Then MsgBox ("Debe escribir algo en la caja de texto.") Text1.SetFocus Este bloque de cdigo permite verificar si la caja de texto se deja vaca, en caso de que se deje vaca entonces se muestra un mensaje y el cursor se enva a la caja de texto. La sentencia Len permite obtener la longitud de una cadena de caracteres, en este caso la longitud de la caja de texto. La sentencia Trim permite eliminar los espacios en blanco que posiblemente se escriban al final de la caja de texto. La traduccin del cdigo anterior sera la siguiente: SI LA LONGITUD DE LA CAJA DE TEXTO ES IGUAL A CERO ENTONCES MUESTRA EL MENSAJE (Debe escribir algo en la caja de texto) HAS QUE LA CAJA DE TEXTO RESIVA EL ENFOQUE - Lnea 4, 5 y 6: ElseIf Option1.Value = False And Option2.Value = False Then MsgBox ("Debe seleccionar el tipo de bsqueda.") Else Este bloque de cdigo permite verificar si se selecciona una de las opciones del tipo de bsqueda. La propiedad Value permite verificar si el botn de opcin esta seleccionado o no. Cando tiene el valor False indica que el botn no esta seleccionado. La traduccin del bloque anterior es la siguiente: SI PRIMERA OPCION = no seleccionada Y SEGUNDA OPCION = no seleccionada ENTONCES MUESTRA EL MENSAJE (Debe seleccionar el tipo de bsqueda.)
98 DE
204
CBTIS # 277
El operador lgico And permite enlazar dos expresiones. Si ambas expresiones se cumplen, entonces, se ejecutan las lneas de cdigos de ms abajo. La clusula Else (De lo contrario) se ha utilizado para tomar una decisin en caso de que no se cumpla la condicin, es decir, en caso de que se seleccione alguna de las opciones. Si una da las opciones se selecciona, entonces, toda la codificacin que se encuentra debajo de la clusula Else se ejecutar. - Lnea 7: On Error GoTo NOarchivo: Esta lnea de cdigo activa el detector de errores. Si ocurre algn error en la apertura del archivo, entonces, se ejecuta la codificacin que se encuentra debajo en la etiqueta NOarchivo. - Lneas 8, 9, 10, 11 y 12: Dim Linea As String Dim Campo1, Campo2, Campo3, Campo4 As String Dim Posicion1, Posicion2, Posicion3 As Integer Dim Encontro As Integer Encontro = 0 En esta seccin se declararon todas las variables necesarias para proceder con la codificacin. La primera variable Linea se utilizar para almacenar cada unas de las lneas de texto del documento. Las variables Campo1, Campo2, Campo3, Campo4 son variables de tipo cadena donde se almacenarn temporalmente el contenido de cada campo de la base de datos. Las variables Posicion1, Posicion2, Posicion3 son variables de tipo entero, donde se almacenarn las posiciones de cada uno de el punto y la coma (;) que utilizamos para separar los campos Tres posiciones porque utilizamos solamente tres punto y coma. La variable Encontro como tipo entero, donde se almacenar un valor que indicar si se encontr o no la bsqueda realizada. Si la variable tiene el valor cero entonces no se encontr ningn elemento y si tiene el valor uno entonces se encontr el elemento. Encontro = 0 se ha especificado para darle un valor inicial a la variable. - Lneas 13, 14, 15:
99 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Open "C:\AGENDA\Agenda.dat" For Input As #1 While Not EOF(1) Line Input #1, Linea
CBTIS # 277
Nada que no haya visto. Primero se abre el archivo para modo de lectura, segundo se inicia el bucle y por ultimo se lee cada lnea del archivo y se almacena en la variable Linea. - Lneas 16, 17, 18: Posicion1 = InStr(1, Linea, ";", vbTextCompare) Posicion2 = InStr(Posicion1 + 1, Linea, ";", vbTextCompare) Posicion3 = InStr(Posicion2 + 1, Linea, ";", vbTextCompare) Posiblemente aqu encuentre muchas cosas extraas pero tratar de explicarlo con algunos ejemplos. Primeramente empezar definiendo la funcin de la sentencia InStr. Esta sentencia permite obtener la posicin de un carcter especificado en la cadena de caracteres, es decir, te devuelve el nmero de la posicin donde se encuentra ese carcter en la cadena de texto. Ejemplo: Carlos;Manuel;809-589-5858;Urb. Ralma, Calle #4 Puede observar que utilic tres punto y coma (;) para separar los tres campos (nombre, apellido, telfono y direccin). Esas posiciones de esos tres punto y coma lo almacenar en cada una de las variables ya vistas anteriormente. Por ejemplo, la posicin del primer punto y coma (;) lo almacenar en la variable Posicion1, al posicin del segundo punto y coma (;) lo almacenar en la variable Posicion2 y la posicin del tercer punto y coma (;) lo almacenar en la variable Posicion3. En el ejemplo anterior las posiciones que se almacenaran en las variables son los siguientes: Posicion1 = 7 Posicion2 = 14 Posicion3 = 27 Esto es por lo siguiente: Carlos;Manuel;8095895858;Urb.Ralma,Calle#4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 ..
100 DE
204
CBTIS # 277
Cada carcter tiene una posicin en la cadena. Estas posiciones que hemos ledo sern de mucha utilidad a la hora de leer los campos de la base de datos. Eso lo veremos a continuacin. El formato de la sentencia InStr es el siguiente: InStr(Valor_Inicial, Cadena_Principal, Cadena_a_Buscar, Tipo_de_busqueda) Donde: Valor_Inicial: Es un nmero de una posicin de algn carcter de la cadena de texto principal. Por ejemplo, si el valor inicial es 1 entonces la bsqueda comienza desde el principio de la cadena, es decir, desde el primer carcter. Cadena_Principal: Representa la cadena de caracteres en donde se realizar la bsqueda. Cadena_a_Buscar: Representa la cadena a buscar. Tipo_de_busqueda: Es una constante que representa el tipo de bsqueda. Se ha especificado la constante vbTextCompare que indica que la bsqueda que se realizar es de tipo texto. a) Posicion1 = InStr(1, Linea, ";", vbTextCompare) Esta lnea busca el primer punto y coma que aparece en el registro. La bsqueda se realiza a partir del primer carcter, por eso se especifica el nmero 1. b) Posicion2 = InStr(Posicion1 + 1, Linea, ";", vbTextCompare) Esta lnea busca el segundo punto y coma que aparece en el registro. La bsqueda se realiza a partir de la posicin del primer punto y coma, por eso se especifica Posicion1 + 1. c) Posicion3 = InStr(Posicion2 + 1, Linea, ";", vbTextCompare) Esta lnea busca el tercer punto y coma que aparece en el registro. La bsqueda se realiza a partir de la posicin del segundo punto y coma, por eso se especifica Posicion2 + 1. - Lneas 19, 20, 21 y 22: Campo1 = Mid(Linea, 1, Posicion1 - 1) Campo2 = Mid(Linea, Posicion1 + 1, Posicion2 - 1 - Posicion1) Campo3 = Mid(Linea, Posicion2 + 1, Posicion3 - 1 - Posicion2) Campo4 = Mid(Linea, Posicion3 + 1, Len(Linea))
Estas cuatro lneas de cdigo permiten leer cada uno de los campos de la base de datos. Antes de explicar cada lnea de cdigo, vamos a definir la sentencia Mid.
101 DE
204
CBTIS # 277
La sentencia Mid permite copiar una cadena de caracteres de otra cadena de caracteres, llamada cadena principal. En esta funcin se debe especificar la cadena de donde se har la copia que es la cadena principal. Se debe especificar tambin la posicin en la cadena desde donde se quiere iniciar la copia y por ultimo, se debe especificar la cantidad de caracteres a copiar. Su formato es: Mid (cadena_principal, posicin_inicial, cantidad_de_caracteres_a_copiar) a) Campo1 = Mid(Linea, 1, Posicion1 - 1) Esta lnea de cdigo lee el campo Nombre. La variable Linea es la variable que tiene el registro completo, o ms bien, la cadena principal. El nmero uno, indica que la copia iniciar desde el primer carcter de la cadena principal. Posicion1 1 indica la cantidad de caracteres a copiar, es decir, se copiarn todos los caracteres hasta el primer punto y coma (;). Recuerde que la variable Posicion1 tiene la posicin del primer punto y coma. El menos uno -1 se especifico para que en la copia no se incluya el punto y coma. b) Campo2 = Mid(Linea, Posicion1 + 1, Posicion2 - 1 - Posicion1) Esta lnea de cdigo lee el campo Apellido. Posicion1 + 1 indica que la copia iniciar despus del primer punto y coma (;), es decir, a partir de la posicin del primer punto y coma (;). Posicion2 1 Posicion1 indica la cantidad de caracteres a copiar. Se lo explicar grficamente: Carlos;Manuel;8095895858;Urb.Ralma,Calle#4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 .. Campo2 = Mid(Linea, 8, 14 1 7) El 8 es por Posicion1 + 1 que es la posicin del primer punto y coma (;). El 14 es por Posicion2 que es la posicin del segundo punto y coma (;). El -1 es para que en la copia no se incluya el primer punto y coma (;). Posicion1 es la posicin del primer punto y coma que se le resta a la segunda posicin menos uno, esto le dar la cantidad de caracteres del segundo campo. 14 1 7 = 6 que es la longitud del campo Apellido. c) Campo3 = Mid(Linea, Posicion2 + 1, Posicion3 - 1 - Posicion2)
102 DE
204
CBTIS # 277
Esta lnea lee el campo Telfono. Se aplica lo mismo que al campo anterior pero iniciando desde la posicin2. d) Campo4 = Mid(Linea, Posicion3 + 1, Len(Linea)) Esta lnea lee el campo Direccin. Se aplica lo mismo que el campo anterior pero iniciando desde la posicin3. Len(Linea) es lo nico diferente y se especifica porque no existe una ultima posicin que indique la longitud del ltimo campo. Siempre tendr que utilizar esta sentencia para leer el ltimo campo, pero todo lo dems es igual. Lnea 23, 24, 25, 26 y 27: If UCase(Campo1) = UCase(Text1.Text) And Option1.Value = True Then MsgBox ("Nombre: " & Campo1 & " Apellido: " & _ Campo2 & " Telfono: " & Campo3 & " Direccin: " & Campo4) Encontro = 1 End If Este bloque de cdigo permite verificar si el contenido del campo nombre es igual al contenido de la caja de texto para luego mostrar el registro completo en una caja de mensaje. La sentencia Ucase permite convertir un texto en mayscula. Esta sentencia se utilizo para que no exista problema de mayscula y minscula, es decir, si el usuario escribe el nombre en mayscula y en la base de datos esta en minscula entonces habr un problema, porque no sera el mismo texto aunque dijera lo mismo, por esa razn se ha convertido el valor del campo y el valor de la caja de texto en mayscula. La traduccin del bloque anterior es la siguiente: SI el campo nombre en mayscula = al contenido de la caja de texto en mayscula Y la primera opcin esta seleccionada (la opcin bsqueda por nombre) Entonces Muestra (El nombre, el apellido, el telfono y la direccin) Asigna el valor uno a la variable Encontr para saber que se encontr el registro Finaliza el SI - Lneas 28, 29, 30, 31 y 32: If Campo3 = Text1.Text And Option2.Value = True Then MsgBox ("Nombre: " & Campo1 & " Apellido: " & Campo2 & " Telfono: " & Campo3 & " Direccin: " & Campo4) Encontro = 1
103 DE
204
CBTIS # 277
Lo mismo que el bloque de cdigo anterior. La nica diferencia es que la comparacin se hace con el Campo3, es decir, con el campo telfono. Esto es en caso de que se seleccione la segunda opcin que es buscar por telfono. La traduccin del bloque anterior es: SI el campo nombre en mayscula = al contenido de la caja de texto en mayscula Y la primera opcin esta seleccionada (la opcin bsqueda por nombre) Entonces Muestra (El nombre, el apellido, el telfono y la direccin) Asigna el valor uno a la variable Encontr para saber que se encontr el registro Finaliza el SI - Lneas 28, 29, 30, 31 y 32: If Campo3 = Text1.Text And Option2.Value = True Then MsgBox ("Nombre: " & Campo1 & " Apellido: " & Campo2 & " Telfono: " & Campo3 & " Direccin: " & Campo4) Encontro = 1 End If Lo mismo que el bloque de cdigo anterior. La nica diferencia es que la comparacin se hace con el Campo3, es decir, con el campo telfono. Esto es en caso de que se seleccione la segunda opcin que es buscar por telfono. La traduccin del bloque anterior es: SI el campo telfono = al contenido de la caja de texto Y la segunda opcin esta seleccionada (la opcin bsqueda por nombre) Entonces Muestra (El nombre, el apellido, el telfono y la direccin) Asigna el valor uno a la variable Encontr para saber que se encontr el registro Finaliza el SI En este bloque no se utilizo la sentencia Ucase por la razn de que los nmeros no se escriben ni en mayscula ni en minscula. - Lnea 33: Wend Esta sentencia ya la he explicado anteriormente y se utiliza para indicar el final del bucle, o bien, hasta donde se repetir el bucle. - Lneas 34, 35 y 36: If Encontro = 0 Then
104 DE
204
Elaborado por MTI.. Felipe Prez Castaeda MsgBox ("No se ha encontrado el contacto especificado.") End If
CBTIS # 277
Este bloque de cdigo permite mostrar un mensaje en caso de que no se encuentre el registro especificado. Cuando el valor de la variable Encontro es igual a cero entonces no se encontr ningn registro y si el valor es uno entonces se encontr el registro. - Ultimas lneas: Close #1 End If Exit Sub NOarchivo: MsgBox ("La base de datos no existe.") Close #1 Close #2 En el evento Click del botn Cancelar escriba: Unload Me Corra la aplicacin. Haga clic en el botn Agregar un nuevo contacto y, a continuacin, agregue un nuevo contacto. Cierre la ventana de Agregar un nuevo contacto, y a continuacin, haga clic en el botn Buscar contacto. Escriba el nombre del contacto y seleccione la opcin Buscar por nombre, y a continuacin, haga clic en el botn Buscar.
Actidades a desarrollar: Resumen del capitulo. Complete el proyecto con las aplicaciones faltantes.
105 DE
204
CBTIS # 277
CAPTULO 5 EL FORMULARIO
Un formulario es un objeto contenedor que sirve para disear la interfaz de usuario. En el formulario se colocan los controles para que el usuario pueda interactuar con la aplicacin de una manera fcil e intuitiva.
Figura 35. Formularios Los formularios tienen sus propias propiedades, eventos y mtodos con los que se puede controlar su apariencia y comportamiento, muchos de los cuales ya han sido
106 DE
204
CBTIS # 277
utilizados en las aplicaciones de los captulos anteriores y que a continuacin pasamos a describir. Propiedad AutoRedraw Descripcin Especifica si se activa el redibujado automtico del formulario. BackColor BorderStyle Caption Especifica el color de fondo del formulario. Especifica un estilo de borde para el formulario. Especifica el texto que se muestra en la barra de ttulo del formulario. ControlBox Especifica si aparece un icono de men desplegable en el ngulo superior izquierdo del formulario. ForeColor Especifica el color de primer plano utilizado para mostrar texto sobre el formulario. Height Icon MaxButton MinButton Picture Especifica el alto del formulario. Se mide en twips. Especifica el icono que se muestra para un formulario. Especifica si el formulario tiene un botn Maximizar. Especifica si el formulario tiene un botn Minimizar. Especifica el archivo de imagen que se va ha mostrar como fondo para el formulario. StartUpPosition Especifica la posicin del formulario la primera vez que se ejecuta. Visible Width WindowState Establece si el formulario es visible o est oculto. Especifica el ancho del formulario. Se mide en twips. Establece el estado del formulario (normal, minimizado o maximizado). Nota Un twip es una unidad independiente de la pantalla utilizada para asegurar que la colocacin y la proporcin de los elementos de la pantalla de la aplicacin son los mismos en todos los sistemas de pantallas. Un twip es igual a 1/20 de un punto de impresora. Existen aproximadamente 1440 twips en una pulgada o 567 twips en un centmetro.
107 DE
204
CBTIS # 277
Descripcin Ocurre cuando el formulario se convierte en ventana activa. Ocurre cuando el formulario deja de ser la ventana activa. Ocurre cuando el formulario se carga en la memoria. Ocurre cuando el usuario pulsa el botn derecho del ratn sobre el formulario.
QueryUnload
Ocurre antes de iniciarse el proceso de descarga del formulario (antes del evento Unload).
Resize
Unload
Los mtodos que se pueden utilizar con un formulario son los siguientes: Mtodo Hide PopupMenu Print Refresh Oculta un formulario. Presenta un men popup en la posicin actual del ratn. Imprime un valor sobre el formulario. Vuelve a pintar un formulario y actualiza todos los valores contenidos en l. Show Muestra un formulario y determina si es modal o carece de modo. Si el formulario a mostrar no est cargado Visual Basic lo carga automticamente. Descripcin
Como ejemplo (prctica 20) vamos a desarrollar una aplicacin que utilice dos formularios. Desde el primer formulario el usuario podr ir al segundo formulario y viceversa.
108 DE
204
CBTIS # 277
Figura 36. Formularios y Boptones Para el desarrollo de la presente aplicacin proceda a crear un nuevo proyecto. Seguidamente debe ubicar dos botones de comando en el formulario. Luego establezca las siguientes propiedades:
109 DE
204
CBTIS # 277
Private Sub CmdSalir_Click() End End Sub Luego debe aadir un formulario adicional al proyecto. Para tal fin, seleccione el men Proyecto y elija la opcin Agregar formulario.
Del cuadro de dilogo que se presenta elija el icono Formulario y haga click en el botn Abrir, tal como se indica en la figura. En ese instante se aadir un nuevo formulario al proyecto. Luego, proceda a ubicar un botn de comandos en el formulario que acaba de aadir y establezca las siguientes propiedades:
110 DE
204
CBTIS # 277
ESTILOS DE FORMULARIO Visual Basic cuenta con seis diferentes estilos de formulario, cuya descripcin es la siguiente:
Valor 0 1 None
Estilo
Descripcin No presenta ningn borde. Puede incluir un Men de control, una Barra de ttulo, un botn Maximizar y un botn
Fixed Single
Minimizar. Slo puede cambiar de tamao mediante los botones Maximizar y Minimizar. 2 Sizable (Predeterminado). Puede cambiar de tamao mediante cualquiera de los elementos
opcionales de borde indicados para Fixed Single. Valor 3 Estilo Fixed Dialog Descripcin Puede incluir un Men de control y una Barra de ttulo, pero no los botones Maximizar ni
111 DE
204
CBTIS # 277
Minimizar. No puede cambiar de tamao. 4 Fixed ToolWindow Slo muestra el botn Cerrar y el texto de la barra de ttulo aparece con un tamao de fuente reducido. No puede cambiar su tamao. 5 Sizable ToolWindow Slo muestra el botn Cerrar y el texto de la barra de ttulo aparece con un tamao de fuente reducido. Puede cambiar de tamao.
Como ejemplo (prctica 21) vamos a desarrollar una aplicacin que permita representar los diferentes estilos de formulario de Visual Basic.
Figura 38. Dimensiones del formulario. Para el desarrollo de la presente aplicacin proceda a crear un nuevo proyecto y luego ubique los siguientes controles en el formulario:
112 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Form1 Nombre Caption BorderStyle FrmPrincipal Estilos de formulario 3-Fixed Dialog
CBTIS # 277
List1 Nombre List LstTipoForm 0-None 1-Fixed Single 2-Sizable 3-Fixed Dialog 4-Fixed ToolWindow 5-Sizable ToolWindow
Private Sub Form_Load() Load FrmNone Load FrmFixedSingle Load FrmSizable Load FrmFixedDialog Load FrmFixedToolWindow Load FrmSizableToolWindow
113 DE
204
CBTIS # 277
Private Sub CmdMostrar_Click() Dim OP As Integer OP = LstTipoForm.ListIndex Select Case OP Case 0 : FrmNone.Show vbModal Case 1 : FrmFixedSingle.Show vbModal Case 2 : FrmSizable.Show vbModal Case 3 : FrmFixedDialog.Show vbModal Case 4 : FrmFixedToolWindow.Show vbModal Case 5 : FrmSizableToolWindow.Show vbModal Case Else MsgBox Debe seleccionar estilo de formulario End Select End Sub Private Sub LstTipoForm_DblClick() Call CmdMostrar_Click End Sub
Seguidamente proceda a aadir los formularios para las diferentes opciones del cuadro de lista. Cambie los nombres de los formularios segn se indica:
Nombre
FrmFixedSingle
114 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Form4 Form5 Form6 Form7 FrmSizable FrmFixedDialog FrmFixedToolWindow FrmSizableToolWindow
CBTIS # 277
Luego debe activar el formulario FrmNone, ubicar un botn de comandos sobre el mismo y establecer las siguientes propiedades: Form2 Nombre BorderStyle Caption FrmNone 0-None None
Una vez establecidas las propiedades, proceda a ingresar el cdigo que se muestra a continuacin:
Private Sub CmdVolver_Click() Unload Me End Sub Para concluir con el diseo de la aplicacin, simplemente repita el procedimiento anterior para los dems tipos de formularios. Como habr podido observar, al mostrar un formulario mediante el mtodo Show podemos hacerlo de forma modal (vbModal) o no modal (opcin por defecto). Un formulario modal es aquel que necesita cerrarse antes de pasar el enfoque a otro formulario. Un formulario no modal no requiere cerrarse para pasar el enfoque a otro formulario.
115 DE
204
CBTIS # 277
Muchas veces se requieren pasar valores de un formulario a otro, esto se puede realizar mediante el uso mdulos estndar, los cuales son contenedores de procedimientos y declaraciones a los que tienen acceso otros mdulos de la aplicacin. Como ejemplo (practica 22) vamos a construir la siguiente aplicacin, la cual enva un mensaje de texto del primer formulario hacia el segundo formulario.
Para el desarrollo de la presente aplicacin proceda a crear un nuevo proyecto y aada un formulario adicional, de tal forma que tenga los formularios Form1 y Form2. Seguidamente ubicar los siguientes controles:
Form1 Text1 Command1 Command2 TxtMensaje1 CmdEnviar CmdSalir Text1 Command1 Command2
A continuacin proceda a ingresar el cdigo que se indica para el primer formulario (Form1): Private Sub CmdEnviar_Click() Mensaje = TxtMensaje1 Form1.Hide Form2.Show
116 DE
204
CBTIS # 277
Para el segundo formulario (Form2) proceda a ingresar el cdigo siguiente: Private Sub CmdRecibir_Click() TxtMensaje2 = Mensaje End Sub
Seguidamente debe aadir un mdulo estndar al proyecto, para ello, seleccione el Men Proyecto y elija la opcin Agregar mdulo, se debe presentar un cuadro de dilogo similar a la figura mostrada, en el cual debe dar click en el botn Abrir.
117 DE
204
CBTIS # 277
Seguidamente proceda a declarar la variable Mensaje como pblica en la seccin de declaraciones del mdulo que acaba de aadir:
Una variable pblica (Public) es una variable que se declara a nivel de mdulo y se le puede acceder desde cualquier otro mdulo.
FORMULARIOS MDI Un formulario MDI (Interfaz de Documentos Mltiples) es una ventana que acta como fondo de una aplicacin y es el contenedor (ventana padre) de otros formularios (ventanas hijas).
118 DE
204
CBTIS # 277
Figura 41. Formularios multimodales. En una aplicacin MDI puede haber varias ventanas hijas, pero slo una ventana padre por aplicacin. Para que una ventana acte como hija debe tener su propiedad MDIChild establecida a clicK. Como ejemplo vamos (prctica 23) a desarrollar una aplicacin MDI que incluya tres ventanas hijas. Para tal fin proceda a crear un nuevo proyecto y seguidamente agregar dos formularios (simples) al mismo.
No olvide establecer la propiedad MDIChild de los formularios Form1, Form2 y Form3 a clic. Luego, debemos agregar el formulario MDI, para ello acceder al Men Proyecto y elegir la opcin Agregar formulario MDI, del cuadro de dilogo que se presenta hacer clic en el botn Abrir.
119 DE
204
CBTIS # 277
Figura 42. Ventana de formularios MDI A continuacin dar doble click sobre el formulario MDI e ingresar el siguiente cdigo: Private Sub MDIForm_Load() Form1.Show Form2.Show Form3.Show End Sub Ahora slo tiene que indicarle a Visual Basic que el formulario de arranque (inicial) ser el formulario MDI. Para ello vaya al Men Proyecto y elija la opcin Propiedades de Proyecto. En el cuadro combinado Objeto inicial seleccionar MDIForm1, tal como se indica en la figura:
120 DE
204
CBTIS # 277
Eso es todo, ahora simplemente tiene que ejecutar su aplicacin. Cabe destacar que en los formularios MDI por lo general no se pueden incluir controles, debido a ello se suele trabajar con mens de opciones o barras de herramientas para indicar alguna accin a realizar.
CREACIN DE MENS Un men es un conjunto de opciones que se presentan al usuario, entre las cuales debe elegir una de ellas. Dependiendo de la decisin se realizarn una serie de acciones.
Figura 44. Creacin de Menues. Para disear un men cualquiera dar clic derecho sobre el formulario y del men emergente que se presenta elegir la opcin Editor de mens.
121 DE
204
CBTIS # 277
Figura 45. Ventana de Menus. Para crear un men, se deben tener en cuenta los siguientes procedimientos: Ingresar el Editor de mens. Introducir el ttulo del men en el cuadro de texto Caption, el cual aparecer en la barra de mens. Introducir un nombre para el men en el cuadro de texto Name, el cual ser utilizado en el cdigo para referirse al men. Introducir los elementos que componen el men, para ello escriba en los cuadros de texto Caption y Name el ttulo y el nombre del correspondiente elemento del men. Para diferenciar un elemento del men del propio men, hay que sangrar el ttulo del elemento, para tal fin, seleccinelo y haga click en el botn flecha hacia la derecha ( ).
Un elemento de men puede ser una orden (si el elemento siguiente aparece sangrado al mismo nivel) o un submen (si el elemento siguiente aparece sangrado un nivel ms). Utilizando separadores puede agrupar las rdenes en funcin de lo que realizan. Para insertar un separador, escriba un nico guin (-) en el cuadro Caption del Editor de mens. Tiene que especificar tambin un nombre para el separador.
122 DE
204
CBTIS # 277
Para aadir un acelerador (una tecla o combinacin de teclas que permiten activar un men), utilizar la propiedad Shortcut. La propiedad Checked es til para indicar si una orden est activa o no lo est. Cuando se especifica esta propiedad aparece una marca ( ) a la izquierda del elemento de men. La propiedad Enabled es til para desactivar una orden en un momento en el cual no tiene sentido que est activa. La propiedad Visible es til cuando durante la ejecucin se desea ocultar un elemento de men. Cerrar el Editor de mens, para ello una vez que haya finalizado su diseo pulse el botn Aceptar. Como ejercicio (prctica 24) intente construir el men mostrado en la figura anterior.
Caption &Archivo . . . &Artculo . . . &Cliente . . . &Vendedor .... . . &Salir &Proceso . . . &Pedido . . . &Facturacin &Reporte . . . &Registro de ventas . . . Catlogo de &artculos .... . . &Cliente del mes . . . &Vendedor del mes Ay&uda . . . &Contenido
Name MnuArchivo MnuArchivoArticulo MnuArchivoCliente MnuArchivoVendedor MnuArchivoLinea MnuArchivoSalir MnuProceso MnuProcesoPedido MnuProcesoFacturacion MnuReporte MnuReporteRegVentas
ShortCut Ninguno Ninguno Ninguno Ninguno Ninguno Ctrl + X Ninguno Ninguno Ninguno Ninguno Ninguno Ninguno
123 DE
204
Elaborado por MTI.. Felipe Prez Castaeda . . . &Indice . . . &Bsqueda .... . . &Acerca de MnuAyudaIndice MnuAyudaBusqueda MnuAyudaLinea MnuAyudaAbout
Private Sub MDIForm_Unload(Cancel As Integer) Dim RESP As Integer RESP = MsgBox(Desea terminar la aplicacin?, vbQuestion + vbYesNo, Pregunta) If RESP = vbYes Then End Else: Cancel = True End If End Sub
124 DE
204
CBTIS # 277
Luego al ejecutar su aplicacin y seleccionar el men Archivo, opcin Artculo, el resultado ser similar a la figura mostrada:
Figura 46. GUI del Menu. Hasta ahora hemos programado la salida de una aplicacin, asociando el cdigo al botn Salir. Sin embargo, cuando el usuario hace click en el botn Cerrar de la barra de ttulo o en la opcin Salir del Men de control del formulario, el cdigo escrito para el botn Salir es ignorado. Para remediar esta situacin, en el ejemplo anterior cuando el usuario pulsa el botn Salir, se invoca al evento Unload. La palabra reservada Me proporciona una forma de referirse al formulario desde donde se est ejecutando el cdigo. Recordar que el evento Unload del formulario se desencadena cuando el usuario intenta cerrar el formulario mediante cualquiera de las formas descritas anteriormente. Para determinar si ocurre la descarga del formulario utilice el parmetro Cancel. Si Cancel es False ocurre la descarga, si Cancel es True impide que el formulario se quite.
CREACIN DE UNA BARRA DE HERRAMIENTAS Una barra de herramientas contiene botones con las opciones ms utilizadas de un men, de tal manera que el usuario haciendo click en dicho control activara la opcin indicada de una manera ms rpida. Para crear una barra de herramientas debemos utilizar dos controles que no estn en la lista de controles estndar, por tanto debemos agregar dichos controles que se encuentran en el componente Microsoft Windows Common Controls 6.0, tal como se indica a continuacin:
125 DE
204
CBTIS # 277
Figura 47. Agregar botones Como ejemplo (prctica 25), vamos a crear la barra de herramientas de la figura mostrada:
126 DE
204
CBTIS # 277
Para ello, ubicar un control ImageList sobre el formulario, para establecer sus propiedades dar clic derecho sobre el control y elija la opcin Propiedades.
Figura 48. Ventana de propiedades. Activar la ficha Imgenes y pulsar el botn Insertar imagen para seleccionar las imgenes que se incluirn en el control ImageList. Para el ejemplo, debe incluir ocho imgenes que corresponden a cada uno de los botones de la barra de herramientas.
127 DE
204
CBTIS # 277
Concluido el proceso anterior, proceda a ubicar un control Toolbar sobre el formulario. Luego hacer click derecho sobre dicho control y del men emergente que se presenta seleccionar la opcin Propiedades. Del cuadro de dilogo que se presenta en la ficha General establecer las siguientes propiedades:
Figura 50. Toolbar Luego, en la ficha Botones pulse el botn Insertar botn. En el cuadro de texto Image se debe indicar un nmero que corresponde al orden de imagen a mostrar.
128 DE
204
CBTIS # 277
El lector debe continuar (prctica 26) con este proceso hasta completar los botones restantes, segn: Index 1 2 3 4 5 6 7 8 Artculo Cliente Vendedor Pedido Facturacin Registro de ventas Catlogo de artculos Ayuda ToolTipText Image 1 2 3 4 5 6 7 8
Como el cdigo a ejecutar tiene que ser el mismo cuando el usuario elija una opcin del men o de un click sobre un botn de la barra de herramientas se pueden programar procedimientos de usuario que realicen dichas tareas, luego se deben invocar a estos procedimientos tanto para las opciones del men como para la barra de herramientas. Sin embargo, para el ejemplo el cdigo es muy sencillo, ya que slo muestra un mensaje con la opcin seleccionada (esto por razones de simplicidad). Para probar la funcionalidad de la barra de herramientas que acaba de crear ingrese el siguiente cdigo: Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) Select Case Button.Index Case 1: MsgBox Seleccion la opcin Artculo Case 2: MsgBox Seleccion la opcin Cliente Case 3: MsgBox Seleccion la opcin Vendedor Case 4: MsgBox Seleccion la opcin Pedido Case 5: MsgBox Seleccion la opcin Facturacin Case 6: MsgBox Seleccion la opcin Registro de ventas Case 7: MsgBox Seleccion opcin Catlogo de artculos Case 8: MsgBox Seleccion la opcin Ayuda End Select
129 DE
204
CBTIS # 277
El evento ButtonClick se dispara cuando el usuario hace click sobre un botn de la barra de herramientas. La propiedad Index permite identificar el nmero de botn pulsado.
CREACIN DE UNA BARRA DE ESTADO Una barra de estado es un marco que se ubica en la parte inferior del formulario y puede contener varios paneles que informan al usuario acerca del estado de la aplicacin. Para crear una barra de estado utilizar el control StatusBar, el cual forma de los controles personalizados que se encuentran en el componente Microsoft Windows Common Controls 6.0. Como ejemplo vamos a crear (prctica 27) una barra de estado similar a la de la figura mostrada:
Figura 51. Sistemas. Para ello ubicar un control StatusBar sobre el formulario, dar click derecho sobre el mismo y en la ficha Paneles incluir una imagen para la hora del sistema.
130 DE
204
CBTIS # 277
Private Sub MDIForm_Load() Dim I As Integer For I = 1 To 2 StatusBar1.Panels.Add Next With StatusBar1.Panels .Item(1).Style = sbrTime .Item(2).Style = sbrCaps .Item(3).Style = sbrIns End With End Sub ' Se agregan 2 paneles ms
La propiedad Style permite mostrar el estado de las teclas, la hora y la fecha del sistema con un mnimo de cdigo.
131 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Constante sbrText sbrCaps sbrNum sbrIns sbrScrl sbrTime sbrDate Valor 0 1 2 3 4 5 6 Descripcin (Predeterminado). Texto o mapa de bits. Tecla BLOQ MAYS. Tecla BLOQ NM. Tecla INS. Tecla BLOQ DESPL.
CBTIS # 277
Muestra la hora actual con el formato del sistema. Muestra la fecha actual con el formato del sistema.
CREACIN DE UN MEN CONTEXTUAL Un men contextual es un men emergente (flotante) que se muestra sobre un formulario, independiente de la barra de mens. Para mostrar un men contextual el usuario debe pulsar el botn derecho del ratn sobre el formulario. A menudo querr usar un men contextual para tener acceso a opciones que no se encuentran disponibles en la barra de mens. Para crear (prctica 28) un men que no se presente en la barra de mens, haga invisible un elemento de men de nivel superior en tiempo de diseo (asegrese de que la casilla de verificacin Visible del Editor de mens no est activada). Cuando Visual Basic presenta un men emergente, pasa por alto la propiedad Visible del men de nivel superior especificado.
132 DE
204
CBTIS # 277
Para crear el men contextual de la figura, debe ingresar al Editor de mens y aadir lo siguiente:
Name
Visible
Private Sub MDIForm_MouseDown(Button As Integer, _ Shift As Integer, X As Single, Y As Single) If Button = vbRightButton Then PopupMenu MnuTools End If End Sub
133 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Dim I I = Shell(C:\WINDOWS\CALC.EXE, 1) End Sub
CBTIS # 277
Private Sub MnuToolsCalen_Click() FrmCalendario.Show End Sub Private Sub MnuToolsSol_Click() Dim I I = Shell(C:\WINDOWS\SOL.EXE, 1) End Sub
En el ejemplo anterior se asume que existe otro formulario de nombre FrmCalendario. Este puede ser construido usando el control MonthView. La funcin Shell ejecuta un programa ejecutable y devuelve un tipo Variant (Double) que representa la identificacin de la tarea del programa si se ha ejecutado con xito, en caso contrario devuelve cero.
134 DE
204
CBTIS # 277
CAPTULO 6 CONTROLES ACTIVEX Los controles ActiveX son objetos que no forman parte del conjunto de controles estndar de Visual Basic, sino ms bien han sido desarrollados por terceras personas. Los controles ActiveX existen como archivos independientes con extensin .OCX y deben ser cargados antes de utilizarse. Para ello ingresar al Men Proyecto y elija la opcin Componentes.
135 DE
204
CBTIS # 277
CONTROL ANIMATION El control Animation permite reproducir archivos de extensin .AVI que no tengan sonido para crear animaciones. Para agregar este control debe seleccionar el componente Microsoft Windows Common Controls-2 6.0.
Propiedad AutoPlay
Descripcin Cierra el archivo AVI abierto actualmente. Permite abrir el archivo AVI. Reproduce el archivo AVI en el control Animation. Termina la reproduccin del archivo AVI.
136 DE
204
CBTIS # 277
Como ejemplo vamos (prctica 29) a desarrollar un formulario que permita reproducir un archivo AVI, tal como se muestra en la figura:
Para ello crear un nuevo formulario y agregar un control Animation (Animation1) y dos botones de comando (CmdIniciar y CmdTerminar, respectivamente). Luego ingrese el cdigo que se muestra: Private Sub CmdIniciar_Click() Dim RUTA As String RUTA = C:\Archivos de programa\Microsoft Visual Studio\ RUTA = RUTA & Common\Graphics\Videos\Filenuke.avi Animation1.Open (RUTA) Animation1.Play End Sub
Private Sub CmdTerminar_Click() Animation1.Close End End Sub CONTROL COMMONDIALOG El control CommonDialog proporciona un conjunto de cuadros de dilogo estndar que permiten realizar las operaciones ms comnmente empleadas en el diseo de aplicaciones, como abrir y guardar archivos, seleccionar colores y fuentes, imprimir, etc. Para agregar este control seleccionar el componente Microsoft Common Dialog Control 6.0. Propiedad Descripcin
137 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Color FileName Filter Especifica el color seleccionado.
CBTIS # 277
Especifica la ruta y nombre del archivo seleccionado. Especifica el tipo de archivos que se han de mostrar en un cuadro de dilogo Abrir o Guardar como.
FilterIndex
Especifica el filtro predeterminado para un cuadro de dilogo Abrir o Guardar como, en caso se est utilizando varios filtros.
Descripcin Presenta la paleta de colores. Presenta el cuadro de dilogo Fuentes. Presenta la ayuda de Windows. Presenta el cuadro de dilogo Abrir. Presenta el cuadro de dilogo Imprimir. Presenta el cuadro de dilogo Guardar como.
Como ejemplo (prctica 30) vamos a desarrollar una aplicacin que permite cambiar el color de fondo de un formulario en tiempo de ejecucin. Para ello el usuario debe dar click en el botn Cambiar color y en seguida se presentar la paleta de colores de donde debe elegir el color deseado, tal como se muestra en la figura siguiente:
138 DE
204
CBTIS # 277
Para
ello
crear
un
nuevo
formulario,
agregarle
un
botn
de
comando
Como siguiente ejemplo (prctica 31) vamos a desarrollar una aplicacin que permita mostrar el contenido de un archivo JPG. Este deber ser seleccionado por el usuario de un cuadro de dilogo Abrir, tal como se indica en la figura:
139 DE
204
CBTIS # 277
Al hacer click en el botn Abrir, el archivo seleccionado debe ser mostrado en el formulario:
Para el diseo de esta aplicacin crear un nuevo formulario y ubicar un botn de comando (CmdAbrirArchivo), un control imagen y un control CommonDialog. Seguidamente ingrese el cdigo que se indica a continuacin:
140 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Dim FILTRO As String, FILE As String FILTRO = Imgenes JPEG (*.JPG)|*.JPG CommonDialog1.Filter = FILTRO CommonDialog1.ShowOpen FILE = CommonDialog1.FileName Image1.Picture = LoadPicture(FILE) End Sub
CBTIS # 277
CONTROL MARCHOSO El control Marchoso tiene como funcin reproducir archivos GIF animados. Para agregar este control seleccionar el componente Marchoso ActiveX Control Module. Este control fue creado en Visual Basic y si no lo tiene en su disco duro lo puede bajar de Internet.
Propiedad FileName
A manera de ejemplo vamos a disear un formulario que permita mostrar archivos GIF animados.
Para ello proceda (practica 32) a crear un nuevo formulario y ubicar un botn de comando (CmdVerGIFAnimado), un control Marchoso y un control CommonDialog. Luego, ingresar el siguiente cdigo:
141 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Private Sub CmdVerGIFAnimado_Click() Dim FILTRO As String, FILE As String FILTRO = Archivos GIF Animados (*.GIF)|*.GIF CommonDialog1.Filter = FILTRO CommonDialog1.ShowOpen FILE = CommonDialog1.FileName Marchoso1.FileName = FILE End Sub
CBTIS # 277
CONTROL HIERARCHICAL FLEXGRID El control Hierarchical FlexGrid presenta una cuadrcula la cual permite mostrar datos en forma de celdas. Una celda es la regin formada por la interseccin de una fila y una columna. Para agregar este control debe seleccionar el componente Microsoft Hierarchical FlexGrid Control 6.0 (OLEDB).
Descripcin Especifica el nmero de columna de la celda actual. Especifica el nmero total de columnas, fijas y no fijas. Especifica el nmero de columnas fijas. El valor por defecto es 1.
Especifica el nmero de filas fijas. El valor por defecto es 1. Especifica el nmero de fila de la celda actual. Especifica el nmero total de filas, fijas y no fijas. Especifica el contenido de la celda actual. Especifica el contenido de una celda elegida
aleatoriamente, se debe especificar el ndice de la celda a la cual se desea acceder. ScrollBars Especifica si la cuadrcula presenta barras de
142 DE
204
CBTIS # 277
Como ejemplo
cuadrado mgico de orden impar N . Un cuadrado mgico se compone de nmeros enteros comprendidos entre 1 y N 2 . La suma de los nmeros que figuran en cada fila, cada columna y cada diagonal son idnticos. Por ejemplo para N = 5 tenemos el siguiente arreglo de nmeros:
Un mtodo de construccin del cuadrado consiste en situar el nmero 1 en el centro de la primera fila, el nmero siguiente en la casilla situada encima y a la derecha, y as sucesivamente. Es preciso considerar que el cuadrado se cierra sobre s mismo, la fila encima de la primera es de hecho la ltima y la columna a la derecha de la ltima es la primera. Sin embargo, cuando la posicin del nmero caiga en una celda ocupada, se elige la casilla situada por debajo del nmero que acaba de ser situado. Para el desarrollo de la presente aplicacin proceda a crear un nuevo formulario y ubicar una etiqueta (N?), un cuadro de texto (TxtN) y un control Hierarchical FlexGrid. Seguidamente debe ingresar el cdigo que se indica: Private Sub TxtN_Change() Dim N As Integer, I As Integer Dim FIL As Integer, COL As Integer N = Val(TxtN) FIL = 1 COL = (N \ 2) + 1
143 DE
204
Elaborado por MTI.. Felipe Prez Castaeda MSHFlexGrid1.Cols = N MSHFlexGrid1.Rows = N MSHFlexGrid1.FixedCols = 0 MSHFlexGrid1.FixedRows = 0 For I = 1 To N ^ 2 MSHFlexGrid1.COL = COL - 1 MSHFlexGrid1.Row = FIL - 1 MSHFlexGrid1.Text = Str(I) If I Mod N = 0 Then FIL = FIL + 1 If FIL = N + 1 Then FIL = 1 Else FIL = FIL - 1 If FIL = 0 Then FIL = N COL = COL + 1 If COL = N + 1 Then COL = 1 End If Next End Sub CONTROL UPDOWN
CBTIS # 277
El control UpDown tiene dos botones con flechas en los que el usuario puede hacer clic para incrementar o disminuir un valor de un control asociado, denominado control auxiliar. A menudo, al usuario le parecer que el control UpDown y su control auxiliar son un nico control. Por lo general se usa un control UpDown con un cuadro de texto para solicitar al usuario una entrada numrica, una combinacin que en ocasiones se denomina control Spinner. Para agregar un control UpDown debe seleccionar el componente Microsoft Windows Common Controls-2 6.0.
Propiedad
Descripcin
144 DE
204
Elaborado por MTI.. Felipe Prez Castaeda BuddyControl BuddyProperty Especifica el control utilizado como auxiliar.
CBTIS # 277
Increment
Especifica un valor que determina la cantidad en que vara la propiedad Value cuando se hace click en los botones del control UpDown.
Max
Min
SyncBuddy
Especifica si el control UpDown sincroniza la propiedad Value con una propiedad del control auxiliar.
Como ejemplo
Para tal fin crear un nuevo formulario y ubicar los siguientes controles: 2 etiquetas (Cdigo ANSI, Carcter), 2 cuadros de texto (TxtANSI, TxtCaracter) y 1 control UpDown. Luego establezca las propiedades que se indican:
145 DE
204
Elaborado por MTI.. Felipe Prez Castaeda BuddyProperty Increment Max Min SyncBuddy Text 1 255 0 True
CBTIS # 277
Private Sub TxtANSI_Change() TxtCaracter = Chr(TxtANSI) End Sub CONTROL MONTHVIEW El control MonthView permite al usuario la posibilidad de ver y establecer informacin de fechas mediante una interfaz similar a un calendario. Para agregar este control seleccionar el componente Microsoft Windows Common Controls-2 6.0.
Descripcin Especifica el nmero de da mostrado. Especifica el nmero de mes mostrado. Especifica el nmero de ao mostrado. Especifica la fecha mostrada. Especifica el da de la semana correspondiente a la fecha mostrada.
Week
MultiSelect
MaxSelCount
Especifica el nmero mximo de das que pueden seleccionarse mediante la propiedad MultiSelect.
SelStart
146 DE
204
Elaborado por MTI.. Felipe Prez Castaeda SelEnd MonthColumns MonthRows intervalo de fechas seleccionado.
CBTIS # 277
Permiten mostrar ms de un mes simultneamente. MonthColumns especifica el nmero de meses que se mostrarn en sentido horizontal. MonthRows especifica el nmero de meses que se mostrarn en sentido vertical.
Descripcin Ocurre cada vez que el usuario hace click sobre el control. Ocurre cada vez que el usuario hace click sobre una fecha mostrada en el control.
Como ejemplo (prctica 35) vamos a crear un sencillo calendario. Cuando el usuario haga click sobre alguna fecha, esta aparecer en el cuadro de texto. Pamela Anderson representar la parte atractiva de nuestra aplicacin.
Para ello crear un nuevo formulario y agregar una etiqueta (La fecha selecciona es), un cuadro de texto (TxtFecha), un control imagen (ImgPamela) y un control MonthView. Luego ingresar el siguiente cdigo:
147 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Private Sub MonthView1_DateClick(ByVal DateClicked As Date)
CBTIS # 277
TxtFecha = WeekdayName(MonthView1.DayOfWeek) & , & Str(MonthView1.Day) & de _& MonthName(MonthView1.Month) & de _& Str(MonthView1.Year) End Sub
La funcin WeekdayName retorna una cadena con el nombre del da de la semana especificado. Requiere como argumento el nmero de da de la semana. La funcin MonthName retorna una cadena con el nombre del mes especificado. Requiere como argumento el nmero de mes. El evento DateClick tiene un parmetro DateClicked que especifica la fecha seleccionada. Puede utilizar este valor (DateClicked) para obtener la fecha en la que el usuario hizo click.
CONTROL CALENDAR El control Calendar es similar en funcionalidad al control MonthView, pues tambin presenta un calendario. Para agregar este control seleccionar el componente Control Calendar de Microsoft 9.0.
Descripcin Especifica el nmero de da mostrado. Especifica el nmero de mes mostrado. Especifica el nmero de ao mostrado.
148 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Value Especifica la fecha mostrada.
CBTIS # 277
Como ejemplo (prctica 36) vamos a desarrollar la aplicacin anterior, pero esta vez haciendo uso de un control Calendar.
Para ello crear un nuevo formulario y agregar una etiqueta (La fecha selecciona es), un cuadro de texto (TxtFecha), un control imagen (ImgPamela) y un control Calendar. Luego ingresar el siguiente cdigo:
Private Sub Calendar1_Click() TxtFecha = WeekdayName(Weekday(Calendar1.Value)) & , _& Str(Calendar1.Day) & de _& MonthName(Calendar1.Month) & de _& Str(Calendar1.Year) End Sub
La funcin Weekday retorna un nmero entero que representa el da de la semana de una fecha dada. Se utiliza para suplir a la propiedad DayOfWeek la cual no est permitida para el control Calendar.
149 DE
204
CBTIS # 277
CAPTULO 7 ARCHIVOS Un archivo (fichero) es un conjunto de informacin relacionada entre s, almacenada como una unidad en un dispositivo de almacenamiento secundario (disquete, disco duro). Los datos almacenados en un archivo son de manera permanente de modo que pueden ser manipulados en cualquier momento. Cada archivo est referenciado por un identificador, su nombre.
CONCEPTO DE ARCHIVO BAJO WINDOWS/VISUAL BASIC Un archivo tiene un nombre almacenado en una carpeta junto con otros archivos de disco. Los nombres de los archivos en Windows y Visual Basic requieren de 1 a 215 caracteres (incluidos espacios en blanco), y pueden incluir tambin una extensin de 1 a 3 letras, normalmente son significativas y relativas al contenido del mismo. Por ejemplo:
Unidad (Especificador de unidad, por ejemplo A, B, C) Camino (Especificador de ruta, por ejemplo \DATA\) Nombre (Especificador de archivo, por ejemplo DEMO.DAT)
150 DE
204
CBTIS # 277
Como ejemplo, suponga que el archivo DEMO.DAT est en la carpeta DATA de la unidad C (disco duro); la descripcin completa del nombre del archivo es:
C:\DATA\DEMO.DAT
Ahora, suponga que el archivo CONSTANTES.DAT se encuentra en la carpeta LIB, que a su vez est contenida en la carpeta DATA de la unidad C. La descripcin completa del nombre de dicho archivo est dada por:
C:\DATA\LIB\CONSTANTES.DAT
Desde el punto de vista de Visual Basic un archivo almacena los datos como un conjunto de registros, conteniendo todos ellos, generalmente, los mismos campos. Cada campo almacena un dato de tipo predefinido o de un tipo definido por el usuario. El elemento de informacin ms simple estara formado por un carcter. OPERACIONES SOBRE EL SISTEMA DE ARCHIVOS Para manipular el sistema de archivos de un disco, Visual Basic proporciona las sentencias que a continuacin se describen.
Kill NOMBRE_ARCHIVO
Donde NOMBRE_ARCHIVO es una cadena de caracteres que identifica al archivo que se desea borrar. Se permiten caracteres comodn (* y ?). Si el archivo no existe se produce un error. Por ejemplo:
Kill C:\TEMP\TEMPO.DAT
151 DE
204
CBTIS # 277
Sentencia Name Permite cambiar el nombre (renombrar) de un archivo del disco y moverlo a otro directorio si fuera preciso. Su sintaxis es la siguiente:
Donde NOMBRE_ACTUAL es una cadena de caracteres que especifica el nombre actual del archivo y NOMBRE_NUEVO es otra cadena de caracteres que indica el nuevo nombre que se desea dar al archivo. Este nombre no debe existir, de lo contrario se obtendr un error. Por ejemplo:
La instruccin anterior cambia el nombre del archivo TEMPO.DAT por el nombre CURSO.DAT. El contenido del archivo permanece inalterado y su localizacin fsica se cambia de la carpeta C:\TEMP a C:\DATA.
MkDir NUEVA_CARPETA
Donde NUEVA_CARPETA es una cadena de caracteres que identifica la carpeta que se va ha crear. Por ejemplo:
MkDir C:\DATA\TEMP
Sentencia RmDir
152 DE
204
CBTIS # 277
RmDir NOMBRE_CARPETA
Donde NOMBRE_CARPETA es una cadena de caracteres que identifica la carpeta que se desea eliminar. Por ejemplo:
RmDir C:\DATA\TEMP
ChDir NOMBRE_CARPETA
Donde NOMBRE_CARPETA es una cadena de caracteres que identifica la nueva ruta de acceso predeterminada. Por ejemplo:
ChDrive UNIDAD
Donde UNIDAD es un carcter que especifica la nueva unidad de disco. Si el parmetro UNIDAD es una cadena de mltiples caracteres slo se lee la primera letra. Por ejemplo:
153 DE
204
Elaborado por MTI.. Felipe Prez Castaeda ChDrive A OPERACIONES CON ARCHIVOS
CBTIS # 277
Para realizar alguna operacin sobre un archivo hay referenciarlo mediante su nombre completo. Las operaciones bsicas que se pueden realizar con los archivos son:
Abrir, preparar un archivo para hacer referencia a l. Escribir, introducir un elemento de informacin a un archivo. Leer, obtener un elemento de informacin de un archivo. Modificar, alterar un elemento de informacin ya existente en un archivo. Cerrar, evitar cualquier otra referencia al archivo en tanto no se le abra otra vez.
TIPOS DE ARCHIVOS Los tipos de archivos dependen del modo como estn organizados los registros y de la forma de accesar a la los datos contenidos en ellos. En Visual Basic existen tres tipos de archivos de datos, estos son:
Archivos secuenciales (acceso secuencial). Archivos aleatorios (acceso aleatorio). Archivos binarios (acceso binario).
A continuacin pasamos a describir cada uno de ellos en forma detallada. ARCHIVOS DE ACCESO SECUENCIAL En un archivo de acceso secuencial los registros se almacenan siguiendo una a otro, segn el orden en que son ingresados. Cuando se lee la informacin, se empieza por el primer registro y se continua al siguiente hasta alcanzar el final. Las sentencias y funciones necesarias para manipular archivos de tipo secuencial se presentan a continuacin.
Sentencia Open Permite abrir un archivo. La sintaxis para esta sentencia es la siguiente:
154 DE
204
CBTIS # 277
Donde NOMBRE_ARCHIVO es una cadena que especifica el nombre del archivo que se debe ser abierto en MODO Output, Append o Input.
Modo Output
Descripcin Escritura de datos. Si el archivo existe, su contenido actual se destruye. Si el archivo no existe, se crea.
Append
Aadir datos. Los datos son aadidos a partir de los ltimos existentes. Si el archivo no existe, se crea.
Input
Lectura de datos. La lectura empieza desde el principio del archivo. Si el archivo no existe, se produce un error. El parmetro NMERO_ARCHIVO es un entero cuyo valor debe estar comprendido
entre 1 y 511. Este nmero ser asociado al nombre del archivo mientras ste permanezca abierto. Para obtener el nmero del siguiente archivo disponible se utiliza la funcin FreeFile(). Como ejemplo (prctica 36) suponga que se requiere abrir el archivo DEMO.DAT ubicado en la carpeta C:\DATA, la instruccin sera la siguiente:
155 DE
204
CBTIS # 277
Donde NMERO_ARCHIVO es el nmero utilizado cuando el archivo fue abierto. LISTA_DE_EXPRESIONES es un conjunto de expresiones (numricas, de cadena, de fecha, etc.) separadas por punto y coma (;) que sern escritas en el archivo. La sentencia Print escribe en el archivo una imagen de los datos tal y como se habran visualizado sobre el formulario con la sentencia Print. Por ejemplo: Dim N1 As Integer N1 = FreeFile() Open C:\DATA\DEMO.DAT For Output As # N1 Print # N1, Visual Basic es fcil; , ; Date()
Como se observa, al utilizar la sentencia Print se deben delimitar los datos para que se impriman correctamente.
Donde NMERO_ARCHIVO es el nmero utilizado cuando el archivo fue abierto. LISTA_DE_EXPRESIONES es un conjunto de expresiones (numricas, de cadena, de fecha, etc.) separadas por punto y coma (;) que sern escritas en el archivo. La sentencia Write inserta comas (,) entre las expresiones de la
LISTA_DE_EXPRESIONES, por tanto no es necesario poner delimitadores explcitamente como en el caso de la sentencia Print. Cuando se utiliza la sentencia Write para escribir informacin en un archivo, se siguen distintas convenciones universales, de modo que los datos siempre se pueden leer e
156 DE
204
CBTIS # 277
convenciones son:
Los datos numricos siempre se escriben utilizando la coma (,) como separador decimal. Para datos de tipo Boolean se imprime # TRUE # o # FALSE #. Los datos de tipo Date se escriben en el archivo usando el formato de fecha universal (fechas como # aaaa-mm-dd # y horas como # hh:mm:ss #).
Dim N1 As Integer N1 = FreeFile() Open C:\DATA\DEMO.DAT For Output As # N1 Write # N1, Visual Basic es fcil; Date()
Sentencia Close Cierra uno archivo abierto mediante la sentencia Open. Su sintaxis es la siguiente:
Close # 1, # 2
La instruccin anterior cierra los archivos asociados con los nmeros 1 y 2. La siguiente sentencia cierra todos los archivos abiertos.
157 DE
204
CBTIS # 277
Close
Sentencia Input Permite leer datos de un archivo secuencial y los asigna a las variables especificadas. Su sintaxis es:
Donde NMERO_ARCHIVO es el nmero utilizado cuando el archivo fue abierto. VARIABLE1, VARIABLE2, . . . son los nombres de las variables que han de recibir los correspondientes datos del archivo. Los datos del archivo deben aparecer en el mismo orden que tienen las variables en la sentencia Input y deben coincidir con variables del mismo tipo de datos. Por ejemplo:
Dim N1 As Integer N1 = FreeFile() Open C:\DATA\DEMO.DAT For Input As # N1 Dim A As Integer Dim B As Double Dim S As String Dim F As Date Input # N1, A, B, S, F
El segmento de cdigo anterior espera encontrar en el archivo un entero, un real, una cadena y una fecha, en ese orden (separados por comas o un retorno de carro).
Sentencia Line Input Permite leer una lnea de un archivo secuencial ignorando los delimitadores (comas) y la asigna a una variable tipo cadena. Su sintaxis es:
158 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Line Input # NMERO_ARCHIVO, VARIABLE
CBTIS # 277
Donde NMERO_ARCHIVO es el nmero utilizado cuando el archivo fue abierto. VARIABLE es el nombre de una variable tipo cadena de caracteres. La sentencia Line Input se utiliza especialmente para leer un archivo de texto lnea a lnea, ya que esta sentencia lee todos los caracteres del archivo hasta que encuentra un retorno de carro, entonces continua en la siguiente lnea y as sucesivamente. Por ejemplo: Prctica 38. Dim N1 As Integer, LINE1 As String, LINE2 As String N1 = FreeFile() Open C:\DATA\DEMO.TXT For Output As # N1 Print # N1, Lnea de prueba 1 Print # N1, Lnea de prueba 2 Close # N1 Open C:\DATA\DEMO.TXT For Input As # N1 Line Input # N1, LINE1 MsgBox LINE1 Line Input # N1, LINE2 MsgBox LINE2
Funcin Input Retorna los siguientes N caracteres de un archivo secuencial y los asigna a una variable de cadena. Su sintaxis es de la forma:
159 DE
204
CBTIS # 277
A diferencia de la sentencia Input, la funcin Input() retorna todos los caracteres que lee, incluyendo comas, retornos de carro, continuaciones de lnea, etc. Por ejemplo: Prctica 39. Dim N1 As Integer, S As String N1 = FreeFile() Open C:\DATA\DEMO.TXT For Output As # N1 Print # N1, Lnea de prueba 1 Print # N1, Lnea de prueba 2 Close # N1 Open C:\DATA\DEMO.TXT For Input As # N1 S = Input(24, # N1) MsgBox S
VARIABLE = EOF(NMERO_ARCHIVO) Se utiliza EOF() para evitar producir un error al intentar obtener informacin ms all del final del archivo. EOF() retorna un valor True si se ha alcanzado el final del archivo y False en caso contrario. Por ejemplo: Dim N1 As Integer Dim CADENA As String
160 DE
204
Elaborado por MTI.. Felipe Prez Castaeda N1 = FreeFile() Open C:\DATA\DEMO.TXT For Input As # N1 While Not EOF(N1) Line Input # N1, CADENA Print CADENA Wend Close # N1
CBTIS # 277
Este segmento de cdigo lee y visualiza cada lnea del archivo de texto DEMO.TXT. El bucle finaliza cuando se detecta el final del archivo. Para que el cdigo anterior funcione correctamente, no olvide poner la propiedad AutoRedraw del formulario a True. Como ejemplo (prctica 40) final del uso de archivos secuenciales vamos a desarrollar un sencillo editor de texto. Este editor aunque sus prestaciones son bastante limitadas va ha servir para poner en prctica lo aprendido recientemente.
El men que se muestra en la figura obedece a la siguiente descripcin: Caption &Archivo . . . &Nuevo . . . &Abrir . . . &Guardar ...Name MnuArchivo MnuArchivoNuevo MnuArchivoAbrir MnuArchivoGuardar MnuArchivoLinea ShortCut Ninguno Ninguno Ninguno Ninguno Ninguno
161 DE
204
Seguidamente debe establecer las propiedades que se indican: Form1 Nombre Caption FrmEditor Editor
Una vez establecidas las propiedades de la interfaz ingresar el cdigo que se muestra:
Private Sub Form_Resize() TxtEditor.Move 0, 0, ScaleWidth, ScaleHeight End Sub Private Sub MnuArchivoNuevo_Click() TxtEditor = End Sub
162 DE
204
CBTIS # 277
Private Sub MnuArchivoAbrir_Click() Dim FILTRO As String, FILE As String Dim N1 As Integer, CADENA As String On Error GoTo ERROR_ABRIR FILTRO = Archivos de texto (*.TXT)|*.TXT CommonDialog1.Filter = FILTRO CommonDialog1.ShowOpen FILE = CommonDialog1.FileName N1 = FreeFile() CADENA = TxtEditor = Open FILE For Input As # N1 While Not EOF(N1) Input # N1, CADENA TxtEditor = TxtEditor & CADENA & vbCrLf Wend Close # N1 FrmEditor.Caption = Editor - & FILE SALIR_ABRIR: Exit Sub ERROR_ABRIR: MsgBox Err.Description Resume SALIR_ABRIR End Sub Private Sub MnuArchivoGuardar_Click() Dim FILTRO As String, FILE As String Dim N1 As Integer On Error GoTo ERROR_GUARDAR FILTRO = Archivos de texto (*.TXT)|*.TXT CommonDialog1.Filter = FILTRO
163 DE
204
Elaborado por MTI.. Felipe Prez Castaeda CommonDialog1.ShowSave FILE = CommonDialog1.FileName N1 = FreeFile() Open FILE For Output As # N1 Print # N1, TxtEditor Close # N1 FrmEditor.Caption = Editor - & FILE SALIR_GUARDAR: Exit Sub ERROR_GUARDAR: MsgBox Err.Description Resume SALIR_GUARDAR End Sub
CBTIS # 277
La sentencia Err.Description retorna una cadena que contiene la descripcin asociada a un error en tiempo de ejecucin. La sentencia Resume continua la ejecucin en la etiqueta especificada cuando termina una rutina de gestin de errores.
ARCHIVOS DE ACCESO ALEATORIO En los archivo de acceso aleatorio el almacenamiento de los datos se hace mediante registros (todos de la misma longitud), lo cuales son identificados mediante un nico nmero denominado ndice. El primer registro de un archivo tiene como ndice 1, el segundo tiene ndice 2 y as sucesivamente. La informacin contenida en un archivo de este tipo puede ser accedida en cualquier secuencia, ya que cada registro individual se asocia con su respectivo ndice y puede ser ledo, escrito o actualizado. Las sentencias y funciones necesarias para manipular archivos de tipo aleatorio se presentan a continuacin.
Sentencia Open Permite abrir un archivo. La sintaxis para acceder aleatoriamente a un archivo es:
164 DE
204
CBTIS # 277
Donde NOMBRE_ARCHIVO es una cadena que especifica el nombre del archivo que se debe ser abierto en modo Random. El parmetro NMERO_ARCHIVO es un entero cuyo valor est comprendido entre 1 y 511. Este nmero ser asociado con el nombre del archivo mientras permanezca abierto. LON_REG es un entero que establece la longitud del registro para archivos aleatorios. Sentencia Put Permite grabar un registro en un archivo abierto para acceso aleatorio. Su sintaxis es:
Donde NMERO_ARCHIVO es el nmero bajo el cual se abri el archivo, NMERO_REG es el nmero correspondiente al registro que se va ha grabar y VARIABLE contiene los datos a escribir en el archivo. Por ejemplo (prctica 41):
Dim N1 As Integer, REG As DISTRITO REG.ID_DISTRITO = L09 REG.NOMBRE = Chorrillos N1 = FreeFile() Open C:\DATA\RAND1.DAT For Random As # N1 Len = Len(REG) Put # N1, 1, REG Close # N1
El segmento de cdigo anterior utiliza una variable REG de tipo DISTRITO, cuya definicin es la siguiente:
165 DE
204
Elaborado por MTI.. Felipe Prez Castaeda NOMBRE As String * 30 End Type Sentencia Get
CBTIS # 277
Permite leer un registro procedente de un archivo de acceso aleatorio, almacenando los datos en una variable especfica. Su sintaxis es de la forma:
Donde NMERO_ARCHIVO es el nmero bajo el cual se abri el archivo, NMERO_REG es el nmero correspondiente al registro que se va ha leer y VARIABLE almacena los datos del registro ledo. Por ejemplo:
Dim N1 As Integer, I As Integer, REG As DISTRITO N1 = FreeFile() Open C:\DATA\RAND1.DAT For Random As # N1 Len = Len(REG) I=1 While Not EOF(# N1) Get # N1, I, REG MsgBox REG.ID_DISTRITO & & REG.NOMBRE I=I+1 Wend Close # N1
Cuando EOF() se utiliza con un archivo aleatorio, retorna un valor True si una sentencia Get intenta leer y no puede porque ha alcanzado el final del archivo. Funcin LOF Retorna el nmero de bytes (caracteres) que ocupa un determinado archivo abierto mediante la sentencia Open. Su sintaxis es:
166 DE
204
CBTIS # 277
Donde NMERO_ARCHIVO es el nmero con el que se abri el archivo. Esta funcin es de utilidad, porque aplicada a un archivo de acceso aleatorio, permite conocer el nmero de registros almacenados en el archivo. Para ello debe dividir el valor retornado entre la longitud del registro. Como ejemplo (prctica 42), considere lo siguiente:
Dim N1 As Integer, REG As DISTRITO Dim NUM_REGS As Integer, I As Integer N1 = FreeFile() Open C:\DATA\RAND1.DAT For Random As # N1 Len = Len(REG) NUM_REGS = LOF(N1) / Len(REG) For I = 1 To NUM_REGS Get # N1, I, REG MsgBox REG.ID_DISTRITO & & REG.NOMBRE Next Close # N1
Funcin Loc Esta funcin retorna la posicin actual dentro de un fichero. Su sintaxis es:
La funcin Loc() aplicada a un archivo de acceso aleatorio retorna el nmero del ltimo registro ledo o grabado en el archivo especificado. Por ejemplo (prctica 43):
Dim N1 As Integer, REG As DISTRITO Dim NUM_REGS As Integer, I As Integer N1 = FreeFile() Open C:\DATA\RAND1.DAT For Random As # N1 Len = Len(REG) NUM_REGS = LOF(N1) / Len(REG) I=1 Do While True
167 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Get # N1, I, REG MsgBox REG.ID_DISTRITO & & REG.NOMBRE I=I+1 If Loc(N1) = NUM_REGS Then Exit Do Loop Close # N1
CBTIS # 277
La sentencia If finaliza el bucle si se ha alcanzado el ltimo registro. Como ejemplo ( prctica 44) final vamos a desarrollar una aplicacin que permita realizar el mantenimiento de los datos almacenados en el archivo C:\DATA\CURSO.DAT.
Los botones ubicados en el marco Navegador (Primero, Anterior, Siguiente y Ultimo, de izquierda a derecha) permiten desplazarse a travs de los registros del archivo. Los botones ubicados en el marco Mantenimiento (Nuevo, Editar, Guardar y Eliminar, de izquierda a derecha) permiten realizar las operaciones bsicas de mantenimiento de los registros. Para el desarrollo de la presente aplicacin ubicar los siguientes controles al formulario:
3 marcos
168 DE
204
Elaborado por MTI.. Felipe Prez Castaeda 4 etiquetas 4 cuadros de texto 9 botones de comando
CBTIS # 277
Form1 Nombre Caption BorderStyle StarUpPosition FrmCurso Mantenimiento de cursos 3-Fixed Dialog 2-CenterScreen
Label2
169 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Nombre Caption LblNombre Nombre:
CBTIS # 277
170 DE
204
CBTIS # 277
Command1 Nombre Caption Picture Style Command2 Nombre Caption Picture Style C:\FundVB\Bitmaps\Previous.bmp 1-Graphical CmdAnterior C:\FundVB\Bitmaps\First.bmp 1-Graphical CmdPrimero
171 DE
204
CBTIS # 277
Command6 Nombre Caption Picture Style Command7 Nombre Caption Picture Style C:\FundVB\Bitmaps\Save.bmp 1-Graphical CmdGuardar C:\FundVB\Bitmaps\Edit.bmp 1-Graphical CmdEditar
Luego, proceda a transcribir el cdigo mostrado a continuacin: Private Type CURSO ID_CURSO As String * 3
172 DE
204
Elaborado por MTI.. Felipe Prez Castaeda NOMBRE As String * 30 VACANTES As Integer PROFESOR As String * 25 ESTADO As Boolean End Type
CBTIS # 277
Dim N1 As Integer, POSICION As Integer Dim REG As CURSO Private Sub MODO_EDITAR(ByVal Ok As Boolean) TxtCodigo.Locked = Not Ok TxtNombre.Locked = Not Ok TxtVacantes.Locked = Not Ok TxtProfesor.Locked = Not Ok CmdNuevo.Enabled = Not Ok CmdEditar.Enabled = Not Ok CmdGuardar.Enabled = Ok CmdEliminar.Enabled = Not Ok CmdPrimero.SetFocus If Ok Then TxtCodigo.SetFocus End Sub
Private Sub ABRIR_ARCHIVO() On Error GoTo ERROR_ABRIR: N1 = FreeFile() Open C:\DATA\CURSO.DAT For Random As # N1 Len = Len(REG) SALIR_ABRIR: Exit Sub ERROR_ABRIR: MsgBox Err.Description Resume SALIR_ABRIR: End Sub
173 DE
204
CBTIS # 277
Private Sub Form_Load() Call ABRIR_ARCHIVO End Sub Private Sub Form_Activate() MODO_EDITAR False Call CmdPrimero_Click End Sub
Private Sub CmdPrimero_Click() POSICION = 1 Get # N1, POSICION, REG TxtCodigo = REG.ID_CURSO TxtNombre = REG.NOMBRE TxtVacantes = Str(REG.VACANTES) TxtProfesor = REG.PROFESOR End Sub
Private Sub CmdAnterior_Click() POSICION = Loc(N1) - 1 If POSICION = 0 Then Get # N1, 1, REG MsgBox Estamos en el primer registro Else Get # N1, POSICION, REG End If TxtCodigo = REG.ID_CURSO TxtNombre = REG.NOMBRE TxtVacantes = Str(REG.VACANTES) TxtProfesor = REG.PROFESOR End Sub
174 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Private Sub CmdSiguiente_Click() Dim ULTIMO As Integer ULTIMO = LOF(N1) / Len(REG) POSICION = Loc(N1) + 1 If POSICION = ULTIMO + 1 Then Get # N1, ULTIMO, REG MsgBox Estamos en el ltimo registro Else Get # N1, POSICION, REG End If TxtCodigo = REG.ID_CURSO TxtNombre = REG.NOMBRE TxtVacantes = Str(REG.VACANTES) TxtProfesor = REG.PROFESOR End Sub
CBTIS # 277
Private Sub CmdUltimo_Click() POSICION = LOF(N1) / Len(REG) If POSICION <> 0 Then Get #N1, POSICION, REG TxtCodigo = REG.ID_CURSO TxtNombre = REG.NOMBRE TxtVacantes = Str(REG.VACANTES) TxtProfesor = REG.PROFESOR End If End Sub Private Sub CmdNuevo_Click() POSICION = LOF(N1) / Len(REG) + 1 MODO_EDITAR True TxtCodigo = TxtNombre =
175 DE
204
Elaborado por MTI.. Felipe Prez Castaeda TxtVacantes = TxtProfesor = TxtCodigo.SetFocus End Sub
CBTIS # 277
Private Sub CmdGuardar_Click() REG.ID_CURSO = Trim(TxtCodigo) REG.NOMBRE = Trim(TxtNombre) REG.VACANTES = TxtVacantes REG.PROFESOR = Trim(TxtProfesor) REG.ESTADO = True Put # N1, POSICION, REG MODO_EDITAR False End Sub
Private Sub CmdEliminar_Click() Dim N2 As Integer Dim I As Integer, J As Integer REG.ESTADO = False Put # N1, POSICION, REG N2 = FreeFile() Open C:\DATA\TEMPO.DAT For Random As # N2 Len = Len(REG) I=1 J=1 While Not EOF(N1) Get # N1, I, REG If REG.ESTADO Then
176 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Put # N2, J, REG J=J+1 End If I=I+1 Wend Close # N1, # N2 Kill C:\DATA\CURSO.DAT Name C:\DATA\TEMPO.DAT As C:\DATA\CURSO.DAT Call ABRIR_ARCHIVO Call CmdPrimero_Click End Sub
CBTIS # 277
Private Sub CmdSalir_Click() Close # N1 End End Sub ARCHIVOS DE ACCESO BINARIO Un archivo binario contiene ms que simplemente texto. Puede contener imgenes, sonido, hojas de clculo, o documentos concebidos para el procesamiento de texto. El acceso binario permite la posibilidad de tratar cualquier archivo como una secuencia numerada de bytes, independientemente de la estructura del mismo. Los bytes ocupan las posiciones 1, 2, 3, etc. Por ejemplo, si se requiere recuperar un dato de tipo entero (Integer, 2 bytes) de la posicin 3 del archivo, seran recuperados los bytes 3 y 4 para poder formar el valor del entero. Por tanto, antes de trabajar con archivos binarios es necesario conocer cmo fueron escritos los datos que contiene para poder recuperarlos correctamente.
Sentencia Open Permite abrir un archivo para acceso binario. Su sintaxis es de la forma:
177 DE
204
CBTIS # 277
Donde NOMBRE_ARCHIVO es una cadena que especifica el nombre del archivo que se debe ser abierto en modo Binary. El parmetro NMERO_ARCHIVO es un entero cuyo valor est comprendido entre 1 y 511. Este nmero ser asociado con el nombre del archivo mientras permanezca abierto.
Sentencia Put Permite grabar en un archivo binario tantos bytes como haya en una variable. Su sintaxis es:
Donde NMERO_ARCHIVO es el nmero bajo el cual se abri el archivo. POSICIN es el nmero de byte a partir del cual se han de grabar los datos contenidos en VARIABLE.
Sentencia Get Permite leer de un archivo binario tantos bytes como quepan en una variable. Su sintaxis es de la forma:
Donde NMERO_ARCHIVO es el nmero bajo el cual se abri el archivo. POSICIN es el nmero de byte a partir del cual se han de leer los datos almacenados en VARIABLE.
Sentencia Seek Permite situar la posicin de lectura o de escritura en una posicin determinada dentro del archivo. Su sintaxis es: Get # NMERO_ARCHIVO, POSICIN, VARIABLE Donde POSICIN es el nmero de byte a partir del cual queremos leer o escribir dentro del archivo.
178 DE
204
CBTIS # 277
Como ejemplo vamos a desarrollar una aplicacin que permite guardar cifrados los textos ingresados en un cuadro de texto. Para ello crear un nuevo proyecto y ubicar en el formulario un cuadro de texto (TxtMensaje) y un botn de comando (CmdCifrar). Luego, ingrese el siguiente cdigo: Const CLAVE As Integer = 3 Private Sub CmdCifrar_Click() Dim N1 As Integer, I As Integer Dim CAR As String * 1 N1 = FreeFile() Open C:\DATA\DEMO.BIN For Binary As # N1 For I = 1 To Len(TxtMensaje) CAR = Chr((Asc(Mid(TxtMensaje, I, 1)) + CLAVE) Mod 256) Put # N1, , CAR Next Close # N1 End Sub En el cdigo la funcin Mid() obtiene el carcter I de la caja de texto, la funcin Asc() obtiene su cdigo ANSI, al que sumamos el valor de CLAVE, para despus obtener el resto de la divisin entre 256, con el fin de mantenernos en el rango de 0 a 255 (rango de valores de la tabla de caracteres ANSI). Por ltimo, la funcin Chr() retorna el carcter correspondiente al valor obtenido, el cual es almacenado en el archivo binario. Por ejemplo si ingresa el mensaje HOLA se almacena en el archivo como KROD (lo puede comprobar mediante el Bloc de notas), ya que el valor ANSI de la H es 72, este carcter al sumarle el valor de CLAVE sera el 75 (72 + 3), que es la K, y as sucesivamente (ver la tabla de caracteres ANSI). El descifrado sera el proceso inverso, para ello crear un nuevo formulario y ubicar un botn de comando (CmdDescifrar), luego ingresar el cdigo siguiente:
179 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Dim CAR As String * 1, CADENA As String N1 = FreeFile() Open C:\DATA\DEMO.BIN For Binary As # N1 Get # N1, , CAR While Not EOF(N1) CAR = Chr((Asc(CAR) + (256 - Val(CLAVE))) Mod 256) CADENA = CADENA & CAR Get # N1, , CAR Wend MsgBox CADENA End Sub
CBTIS # 277
CAPTULO 8 GRFICOS Un grfico tiene por finalidad facilitar la legibilidad de la informacin que se presenta: un grfico vale ms que mil palabras. LOS COLORES En Visual Basic se pueden manipular los colores mediante tres formas diferentes: cdigo hexadecimal, la funcin RGB() y la funcin QBColor().
Cdigo Hexadecimal Un cdigo de color se compone de seis dgitos hexadecimales, cuyos valores van desde &H000000& (cero) hasta &HFFFFFF& (16 777 215). De forma prctica podemos guiarnos mediante:
&HAAVVRR&
Donde AA representa al color azul, VV al color verde y RR al color rojo. Todos los dems colores se obtienen mezclando estos tres colores. Como ejemplo considere los siguientes cdigos de colores que se presentan a continuacin:
180 DE
204
CBTIS # 277
La funcin RGB() La funcin RGB() retorna un nmero de tipo entero largo (Long) que representa el valor de un color. Su sintaxis es:
Donde nROJO, nVERDE, nAZUL son enteros comprendidos entre 0 y 255. La siguiente tabla muestra algunos colores estndar y sus valores de nROJO, nVERDE y nAZUL:
181 DE
204
CBTIS # 277
La funcin QBColor() La funcin QBColor() retorna un nmero de tipo entero largo (Long) que representa el cdigo de color RGB correspondiente al nmero de color especificado. Su sintaxis es: COLOR = QBColor(nCOLOR) Donde el argumento nCOLOR es un entero entre 0 y 15; los valores que puede tomar se presentan en la siguiente tabla:
Color
Nmero 8 9 10 11 12 13 14 15 Gris
Color
Azul claro Verde claro Cin claro Rojo claro Magenta claro Amarillo claro Blanco brillante
El ejemplo inicial (cdigo hexadecimal) utilizando la funcin QBColor() se soluciona como se muestra a continuacin:
EL SISTEMA DE COORDENADAS Todas las operaciones grficas descritas en este captulo utilizan el sistema de coordenadas del rea de dibujo (que puede ser la pantalla, un formulario, un cuadro de imagen, o cualquier otro contenedor).
182 DE
204
CBTIS # 277
El sistema de coordenadas es una cuadrcula bidimensional que define ubicaciones del rea de dibujo. Las ubicaciones de esta cuadrcula se definen mediante las coordenadas del rea de dibujo:
( X ,Y )
Donde el valor de X es la ubicacin del punto sobre el eje X, con la ubicacin predeterminada (cero) en el extremo izquierdo. El valor de Y es la ubicacin del punto sobre el eje Y , con la ubicacin predeterminada (cero) en el extremo superior. Este sistema de coordenadas se ilustra en la siguiente figura:
El sistema de coordenadas predeterminado de cualquier contenedor empieza por la coordenada (0, 0) en la esquina superior izquierda del contenedor. Las unidades de medida utilizadas para definir las ubicaciones a lo largo de los ejes se denominan colectivamente escala. En Visual Basic, cada eje del sistema de coordenadas puede tener su propia escala. Todos los mtodos grficos utilizan el sistema de coordenadas del contenedor. Por ejemplo, las instrucciones que dibujan dentro de un cuadro de imagen utilizan el sistema de coordenadas de dicho control.
183 DE
204
CBTIS # 277
Para establecer las coordenadas de dibujo del contenedor se utilizan las propiedades CurrentX y CurrentY de dicho contenedor. Por ejemplo, las instrucciones siguientes establecen las coordenadas de dibujo a la esquina superior izquierda de un cuadro de imagen:
Picture1.CurrentX = 0 Picture1.CurrentY = 0
De forma predeterminada, los formularios y los cuadros de imagen utilizan un sistema de coordenadas en el que cada unidad corresponde a un twip (1 440 twips equivalen a una pulgada y 567 twips son aproximadamente un centmetro).
Cambiar la unidad de medida del sistema de coordenadas Para cambiar la unidad de medida del sistema de coordenadas su establece la propiedad ScaleMode a uno de los valores enumerados en la tabla siguiente:
Valor de ScaleMode 1 2 3 4 5 6 7
Descripcin
Picture1.ScaleMode = 5
184 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Crear una escala personalizada
CBTIS # 277
Para crear una escala personalizada se pueden utilizar las propiedades ScaleLeft, ScaleTop, ScaleWidth y ScaleHeight de un determinado objeto. Las propiedades ScaleLeft y ScaleTop asignan valores numricos a la esquina superior izquierda de un objeto. Por ejemplo, las instrucciones siguientes establecen el valor de la esquina superior izquierda de un cuadro de imagen:
Las propiedades ScaleWidth y ScaleHeight definen las unidades segn el ancho y el alto real del rea de dibujo (si el objeto cambia de tamao posteriormente, las unidades siguen siendo las mismas). Por ejemplo las instrucciones siguientes definen la unidad horizontal como 1/1 000 del ancho interno actual del cuadro de imagen y la unidad vertical como 1/500 del alto interno actual del cuadro de imagen:
Picture1.ScaleWidth = 1000 Picture1.ScaleHeight = 500 A manera de ejemplo considere la escala mostrada en la siguiente figura, la cual tiene ScaleLeft, ScaleTop, ScaleWidth y ScaleHeight establecidas todas a 100.
185 DE
204
CBTIS # 277
Una forma ms eficiente de personalizar la escala de un sistema de coordenadas es utilizando el mtodo Scale. Su sintaxis es:
Donde los valores de (X1, Y1) determinan las coordenadas de la esquina superior izquierda, los valores de (X2, Y2) determinan los valores de la esquina inferior derecha. Para obtener el mismo sistema de coordenadas de ejemplo anterior (donde se utiliz las propiedades ScaleLeft, ScaleTop, ScaleWidth y ScaleHeight) la orden sera la siguiente:
Scale (100, 100)-(200, 200) Donde es evidente que las diferencias entre las dos coordenadas X y las dos coordenadas Y determinan los valores de ScaleWidth y ScaleHeight, respectivamente.
MTODOS GRFICOS Visual Basic proporciona varios mtodos para la creacin de grficos. Los mtodos grficos, resumidos en la tabla siguiente, son aplicables a los formularios y a los cuadros de imagen.
Descripcin Borra todos los grficos y el resultado del mtodo Print. Dibuja un punto individual. Devuelve el color de un punto especificado. Dibuja una lnea, un rectngulo o un cuadro relleno. Dibuja una crculo, una elipse o un arco. Dibuja grficos en ubicaciones arbitrarias. Imprime texto en formularios y cuadros de imagen.
186 DE
204
CBTIS # 277
Para que la mayora de los mtodos grficos funcionen correctamente la propiedad AutoRedraw del formulario debe est activada, caso contrario el dibujo no se visualizar. Puntos Para el dibujo de puntos se usar el mtodo Pset, cuya sintaxis es:
Donde X, Y son valores de tipo Single que indican las coordenadas horizontal (eje X) y vertical (eje Y) del punto que se va a dibujar. COLOR es un entero largo (Long) que indica el color RGB especificado para el punto, si se omite se usar el valor actual de la propiedad ForeColor de OBJETO. Como ejemplo vamos a crear una sencilla aplicacin que permita dibujar puntos en la posicin especificada mediante el ratn, con la posibilidad de poder seleccionar colores (tipo Paint).
Para el desarrollo de la presente aplicacin proceda a crear un nuevo proyecto y agregar al formulario ( prctica 46) cuadros de imagen. Luego ingresar el cdigo mostrado.
187 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Objeto Picture1 . . . Picture32 Picture33 Picture34 Nombre PicColor PicMuestra PicLienzo
CBTIS # 277 Descripcin Opciones de color Color actual utilizado Area de dibujo
Dim COLOR As Single Private Sub Form_Load() PicLienzo.ScaleMode = 3 PicLienzo.DrawWidth = 5 COLOR = RGB(0, 0, 0) End Sub
Private Sub PicColor_Click(Index As Integer) COLOR = PicColor(Index).BackColor PicMuestra.BackColor = COLOR End Sub
Private Sub PicLienzo_MouseDown(Button As Integer, _ Shift As Integer, X As Single, Y As Single) If Button = vbLeftButton Then PicLienzo.PSet (X, Y), COLOR End If End Sub En el ejemplo anterior se utiliza la propiedad DrawWidth, la cual sirve para fijar el tamao del punto dibujado. Para que el mtodo Pset funcione correctamente la propiedad ScaleMode debe estar establecida a pixeles.
Lneas, rectngulos y cuadros rellenos Para dibujar lneas, rectngulos o cuadros rellenos utilice el mtodo Line, cuya sintaxis es:
188 DE
204
CBTIS # 277
Donde X1, Y1 son valores de tipo Single que indican las coordenadas del punto inicial para la lnea o el rectngulo. X2, Y2 son valores de tipo Single que indican las coordenadas del punto final para la lnea o el rectngulo que se est dibujando. COLOR es un entero largo (Long) que indica el color RGB especificado para dibujar la lnea, si se omite se usar el valor actual de la propiedad ForeColor de OBJETO. Los parmetros B y BF son opcionales: B hace que se dibuje un rectngulo usando las coordenadas para especificar las esquinas opuestas del mismo. BF especifica que el cuadro se rellena con el mismo color especificado mediante el parmetro COLOR. A manera de ejemplo vamos a mejorar nuestro sencillo Editor grfico, de tal forma que adems de dibujar puntos permita tambin dibujar lneas cuando se mantenga pulsado el botn izquierdo del ratn.
Private Sub PicLienzo_MouseMove(Button As Integer, _ Shift As Integer, X As Single, Y As Single) If Button = vbLeftButton Then PicLienzo.Line -(X, Y), COLOR End If
189 DE
204
CBTIS # 277
Otro ejemplo (prctica 47) sencillo para ilustrar como se usa el mtodo Line para dibujar rectngulos y cuadros rellenos se presenta a continuacin, consiste en dibujar una bandera directamente sobre el formulario.
Para este ejemplo crear una nueva aplicacin e ingresar el cdigo mostrado: Private Sub Form_Click() Height = 3 * 1440 Width = 5 * 1440 BackColor = QBColor(12) ForeColor = QBColor(15) Line (Width / 3, 0) - ((Width / 3) * 2, Height), , BF End Sub Crculos, elipses y arcos Para dibujar crculos, elipses o arcos se utiliza el mtodo Circle, cuya sintaxis es:
OBJETO.Circle (X, Y), RADIO, COLOR, INICIO, FIN, ASPECTO Donde X, Y son valores de tipo Single que indican las coordenadas para el punto central del crculo, elipse o arco. RADIO es un valor de tipo Single que indica el radio del crculo, elipse o arco. COLOR es un valor entero de tipo Long que indica el color RGB del contorno del crculo, elipse o arco (es opcional). INICIO y FIN son valores de tipo Single, que especifican (en radianes) las posiciones de inicio y de fin del arco (son opcionales).
190 DE
204
CBTIS # 277
ASPECTO es un valor de tipo Single que indica la relacin de aspecto del crculo, el valor predeterminado es 1.0, lo que produce un crculo perfecto (no elptico) en cualquier pantalla (opcional). A manera de ejemplo (prctica 48) vamos a mejor an ms nuestro Editor grfico de tal manera que se podr dibujar puntos, lneas, rectngulos, crculos y elipses.
Para el desarrollo de la presente aplicacin se debe aadir al ejemplo anterior 5 botones de comandos y formar una matriz de controles (CmdForma). Luego ingresar el siguiente cdigo:
Dim COLOR As Single Dim FORMA As Integer Dim X1 As Single, Y1 As Single, X2 As Single, Y2 As Single Private Sub CmdForma_Click(Index As Integer) FORMA = Index + 1 End Sub
Private Sub Form_Load() COLOR = RGB(0, 0, 0) FORMA = 1 PicLienzo.ScaleMode = 3 PicLienzo.DrawWidth = 3 End Sub
191 DE
204
CBTIS # 277
Private Sub PicColor_Click(Index As Integer) COLOR = PicColor(Index).BackColor PicMuestra.BackColor = COLOR End Sub
Private Sub PicLienzo_MouseDown(Button As Integer, Shift As Integer, _X As Single, Y As Single) If Button = vbLeftButton Then X1 = X Y1 = Y End If End Sub Private Sub PicLienzo_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = vbLeftButton Then X2 = X Y2 = Y RADIO = Sqr((X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2)) / 2 Select Case FORMA Case 1 PicLienzo.PSet (X, Y), COLOR Case 2 PicLienzo.Line -(X, Y), COLOR Case 3 PicLienzo.Line (X1, Y1)-(X2, Y2), COLOR, B Case 4 PicLienzo.Circle (X, Y), RADIO, COLOR Case 5 PicLienzo.Circle (X, Y), RADIO, COLOR, , , 0.5 End Select
192 DE
204
CBTIS # 277
CONTROLES GRFICOS Visual Basic proporciona tres controles grficos diseados para crear efectos grficos en las aplicaciones:
Control Image (estudiado en el Captulo 4) Control Line Control Shape Control Line Line es un control grfico que se muestra como una lnea horizontal, vertical o diagonal. El control Line tiene una funcionalidad limitada y est pensado para usos sencillos. Para usos ms avanzados debe usar el mtodo Line.
Descripcin Devuelve o establece el color de la lnea. Devuelve o establece el estilo de la lnea. Devuelve o establece el ancho de la lnea. Devuelven o establecen las coordenadas del punto inicial (X1, Y1) y del punto final (X2, Y2) de la lnea.
Control Shape Shape es un control grfico que se muestra como un rectngulo, un cuadrado, una elipse, un crculo, un rectngulo redondeado o un cuadrado redondeado. El control Shape presenta propiedades similares al control Line (BorderColor, BorderStyle, BorderWidth). Adicionalmente, la propiedad Shape del control Shape proporciona seis formas predefinidas. En la tabla siguiente se enumeran todas las formas predefinidas, sus valores y las constantes de Visual Basic equivalentes:
193 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Forma Rectngulo Cuadrado Elipse Crculo Rectngulo redondeado Cuadrado redondeado Estilo 0 1 2 3 4 5
Las seis formas predefinidas que presenta el control Shape se muestran en el siguiente formulario:
GRAFICACIN MATEMTICA Como la mayor parte de las ecuaciones matemticas expresa relaciones complicadas en una, dos tres o ms dimensiones, tratar de entenderlas sin grficas es casi lo mismo que tratar de caminar con los ojos vendados. Funciones algebraicas. Como ejemplo (prctica 49) de este tipo de grficas vamos a dibujar una parbola, cuya ecuacin matemtica (ecuacin general de segundo grado) es de la forma:
f ( x ) Ax 2 Bx C
194 DE
204
CBTIS # 277
Para realizar la presente aplicacin crear un nuevo proyecto y aadir al formulario un cuadro de imagen (PicPlano), tres cuadros de texto (TxtA, TxtB, TxtC) y un botn de comandos (CmdVisualizar). Los aspectos decorativos (etiquetas, marcos, etc.) quedan a criterio del lector. Luego ingresar el siguiente cdigo: Dim A As Double, B As Double, C As Double Function F(ByVal X As Single) As Single F = A * (X * X) + B * X + C End Function
Private Sub CmdVisualizar_Click() Dim X As Single A = TxtA B = TxtB C = TxtC PicPlano.Cls PicPlano.Scale (-100, 100)-(100, -100) PicPlano.Line (-100, 0)-(100, 0)
195 DE
204
Elaborado por MTI.. Felipe Prez Castaeda PicPlano.Line (0, -100)-(0, 100) PicPlano.CurrentX = -10 PicPlano.CurrentY = F(-10) For X = -10 To 10 PicPlano.Line -(X, F(X)) Next End Sub
CBTIS # 277
Funciones trigonomtricas Graficar funciones trigonomtricas (seno, coseno, tangente, cotangente, secante, cosecante) no es nada complicado, sino analice el siguiente ejemplo.
Para realizar nuestra aplicacin de ejemplo (prctica 50) crear un nuevo proyecto y aadir al formulario un cuadro de imagen (PicPlano) y 6 botones de comandos (CmdFuncion, es decir se trata de una matriz de controles). Luego ingresar el cdigo siguiente:
196 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Private Sub Dibuja(OP As Integer) PicPlano.Scale (-5, 5)-(5, -5) PicPlano.Line (-5, 0)-(5, 0) PicPlano.Line (0, -5)-(0, 5) DosPi = 8 * Atn(1) Dim X As Single For X = -DosPi To DosPi Step 0.025 Select Case OP Case 0 Y = Sin(X) Case 1 Y = Cos(X) Case 2 Y = Sin(X) / Cos(X) Case 3 If X < -0.001 Or X > 0.001 Then Y = Cos(X) / Sin(X) End If Case 4 Y = 1 / Cos(X) Case 5 If X < -0.001 Or X > 0.001 Then Y = 1 / Sin(X) End If End Select PicPlano.PSet (X, Y) Next End Sub
CBTIS # 277
197 DE
204
CBTIS # 277
Para el caso de las grficas de ecuaciones polares tampoco es complicado, slo hay que tener presente las siguientes consideraciones. Dado un punto P( x, y ) del plano, tal punto se encuentra a una distancia r del origen, y a un ngulo respecto del semieje horizontal positivo.
(r , )
entonces
se
cumplen
las
siguientes relaciones de
transformacin:
x r cos
y r sen
De donde: r 2 x 2 y 2 ; tan
y x
r n
r 2 cos 2 r 1 cos r 1 2 cos
198 DE
204
CBTIS # 277
r 2 cos 2
r sen 4
r
Espiral logartmica Astroide Nefroide Concoide
2n
r en
r (cos 2 )3
r 3 cos 2 cos 6
r
Estrofoide
1 1 cos 2
1 cos 2 tan 2
Para realizar una aplicacin que permita dibujar (prctica 51) ecuaciones polares crear un nuevo proyecto y aadir al formulario 1 cuadro de imagen (PicPlano), un cuadro de lista (LstEcuacion) y un botn de comandos (CmdVisualizar). La apariencia de la interfaz debe ser similar a la de la figura mostrada:
Dim OP As Integer Function F(ByVal THETA As Single) As Single Select Case OP Case 0 : F = 2 Case 1 : F = 2 * Cos(2 * THETA) Case 2 : F = 1 + Cos(THETA)
199 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Case 3 : F = 1 + 2 * Cos(THETA) Case 4 : If Cos(2 * THETA) >= 0 Then F = Sqr(Cos(2 * THETA)) Case 5 : F = Sin(4 * THETA) Case 6 : F = THETA / 2 Case 7 : F = Exp(THETA / 8)
CBTIS # 277
Case 8 : F = Cos(2 * THETA) * Cos(2 * THETA) * Cos(2 * THETA) Case 9 : F = 3 * Cos(2 * THETA) - Cos(6 * THETA) Case 10: F = 1 / Cos(2 * THETA) + 1 Case 11: If Int(THETA / 45) <> THETA / 45 Or THETA <> 0 _ Then F = 1 / (Cos(2 * THETA) + Tan(2 * THETA)) End Select End Function
Private Sub CmdVisualizar_Click() Dim X As Single, Y As Single Dim I As Single, R As Single DosPi = 8 * Atn(1) PicPlano.Cls PicPlano.ScaleMode = 3 PicPlano.Scale (-3.25, 3.25)-(3.25, -3.25) PicPlano.Line (-3.25, 0)-(3.25, 0) PicPlano.Line (0, -3.25)-(0, 3.25) For I = 0 To DosPi Step 0.01 R = F(I) X = R * Cos(I) Y = R * Sin(I) PicPlano.PSet (X, Y), QBColor(1)
200 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Next End Sub Fractales
CBTIS # 277
La matemtica fractal es producto de la interaccin de un matemtico genial (Benoit B. Mandelbrot) y la computadora. El ahora ubicuo trmino fractal se debe al hecho de que la matemtica fractal trabaja con fracciones, las figuras generadas no tienen una relacin de enteros entre sus componentes, de modo que ninguna dimensin es producto de otra multiplicada por un entero. Es decir, al dividir una dimensin entre otra nunca se obtiene un resultado exacto. Los fractales generan figuras y estas figuras resultan tener una extraa similitud con algunas formas que genera la naturaleza. Entre las ecuaciones para generar fractales Mandelbrot ha producido una en particular que ha recibido el nombre de Conjunto de Mandelbrot. Esta ecuacin se resuelve en el campo de los nmeros comprendidos entre las longitudes -2.0 a +0.5 y las latitudes 1.25 a +1.25, est dominado por un gran mar fractal con bahas y entrantes. La expresin matemtica del Conjunto de Mandelbrot es:
2 Z n1 Z n C
Donde C es un nmero complejo constante y Z es un nmero complejo variable que permite obtener las respectivas iteraciones (los valores de cada punto del paisaje fractal, latitud y longitud). Como ejemplo vamos a obtener las tres primeras iteraciones. Para ello asignamos valores a C de cualquier posicin arbitraria dentro del conjunto, digamos C 1 i y para arrancar las iteraciones podemos comenzar con Z 0 0 , luego:
Z1 (0) 2 (1 i) 1 i Z 2 (1 i )2 (1 i ) 1 3i Z 3 (1 3i) 2 (1 i ) 7 7i
201 DE
204
CBTIS # 277
Cuando se contina desarrollando el Conjunto de Mandelbrot se obtiene una figura similar a la mostrada:
Para el desarrollo de la presente aplicacin crear (prctica 52) un nuevo proyecto y aadir sobre el formulario un cuadro de imagen (PicPlano) y un botn de comandos (CmdVisualizar), luego ingresar el cdigo siguiente:
Function Hipotenusa(ByVal A As Double, ByVal B As Double) As Double Hipotenusa = Sqr(A * A + B * B) End Function
Private Sub CmdVisualizar_Click() Dim MaxX As Integer, MaxY As Integer Dim Limite As Integer, Pasos As Integer Dim I As Integer, J As Integer Dim PasoX As Double, PasoY As Double
202 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Dim PosX As Double, PosY As Double Dim OrigX As Double, OrigY As Double Dim DimX As Double, DimY As Double Dim IterX As Double, IterY As Double, TempX As Double Dim Terminar As Boolean PicPlano.ScaleMode = 3 MaxX = PicPlano.ScaleWidth MaxY = PicPlano.ScaleHeight Limite = 16 OrigX = -2 OrigY = -1.25 DimX = 0.5 DimY = 1.25 PasoX = (DimX - OrigX) / MaxX PasoY = (DimY - OrigY) / MaxY For I = 0 To MaxX For J = 0 To MaxY PosX = OrigX + I * PasoX PosY = OrigY + J * PasoY IterX = 0 : IterY = 0 Terminar = False Pasos = 0 While (Not Terminar) TempX = (IterX * IterX) - (IterY * IterY) + PosX IterY = 2 * (IterX * IterY) + PosY IterX = TempX Pasos = Pasos + 1 If Hipotenusa(Abs(IterX), Abs(IterY)) >= 2 Then Terminar = True End If If (Pasos >= Limite) Then
CBTIS # 277
203 DE
204
Elaborado por MTI.. Felipe Prez Castaeda Terminar = True End If Wend If (Pasos < Limite) Then PicPlano.PSet (I, J), QBColor(Pasos) End If Next Next End Sub
CBTIS # 277
En este captulo, debido a las limitaciones de espacio y materia, tan slo se ofrece el camino de acceso a unos pocos de los diversos temas que abarca el fascinante mundo de la programacin de grficos por computadora. Muchos de estos temas siguen siendo materia de investigacin (como el caso de los fractales), por lo que si Ud. desea profundizar en este laberinto de fascinacin, no hay la garanta de un retorno sano y salvo a nuestro universo mundano.
204 DE
204