Sunteți pe pagina 1din 204

Elaborado por MTI..

Felipe Prez Castaeda

CBTIS # 277

1 DE

204

Elaborado por MTI.. Felipe Prez Castaeda CAPTULO I

CBTIS # 277

1.1 CONCEPTOS BSICOS: FUNCIONAMIENTO DE LA PROGRAMACIN

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

Elaborado por MTI.. Felipe Prez Castaeda

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

almacenamiento, es decir, variables en el sentido matemtico (nombres AL, RAPID, SUM).

3 DE

204

Elaborado por MTI.. Felipe Prez Castaeda

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

Hypertext Pre-processor o de procesamiento de textp

Tabla 1. Evolucion de los lenguajes de programacin.

5 DE

204

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

1.3 CLASIFICACIN DE LOS LENGUAJES DE PROGRAMACIN


Los lenguajes de programacin se determinan segn el nivel de abstraccin, Segn la forma de ejecucin y Segn el paradigma de programacin que poseen cada uno de ellos y esos pueden ser: 1.3.1 SEGN SU NIVEL DE ABSTRACCIN Lenguajes de bajo nivel Los lenguajes de bajo nivel son lenguajes de programacin que se acercan al funcionamiento de una computadora. El lenguaje de ms bajo nivel es, por excelencia, el cdigo mquina. A ste le sigue el lenguaje ensamblador, ya que al programar en ensamblador se trabajan con los registros de memoria de la computadora de forma directa. Lenguajes de medio nivel Hay lenguajes de programacin que son considerados por algunos expertos como lenguajes de medio nivel (como es el caso del lenguaje C) al tener ciertas caractersticas que los acercan a los lenguajes de bajo nivel pero teniendo, al mismo tiempo, ciertas cualidades que lo hacen un lenguaje ms cercano al humano y, por tanto, de alto nivel. Lenguajes de alto nivel Los lenguajes de alto nivel son normalmente fciles de aprender porque estn formados por elementos de lenguajes naturales, como el ingls. En BASIC, el lenguaje de alto nivel ms conocido, los comandos como "IF CONTADOR = 10 THEN STOP" pueden utilizarse para pedir a la computadora que pare si CONTADOR es igual a 10. Por desgracia para muchas personas esta forma de trabajar es un poco frustrante, dado que a pesar de que las computadoras parecen comprender un lenguaje natural, lo hacen en realidad de una forma rgida y sistemtica. 1.3.2 SEGN LA FORMA DE EJECUCIN. Lenguajes compilados Naturalmente, un programa que se escribe en un lenguaje de alto nivel tambin tiene que traducirse a un cdigo que pueda utilizar la mquina. Los programas traductores que

6 DE

204

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

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:

Lisp, Scheme, Ocaml, Standard ML, ML, Scala.

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda Figura 1. Ventana de Proyectos.

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:

Figura 2. Ventana de desarrollo

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

Es la ventana sobre la que colocaremos los objetos (controles) de la interfaz de usuario.

Figura 5. Diseador de formularios.

Explorador de proyectos Contiene el conjunto de archivos que constituyen la aplicacin o proyecto.

Figura 6. Explorador de proyectos.

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

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

Figura 7. Ventana de propiedades.

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.

Figura 9. Menus contextuales.

14 DE

204

Elaborado por MTI.. Felipe Prez Castaeda Ventana de cdigo

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

La apariencia de la interfaz debe ser similar a la figura mostrada:

Figura 12. Interfaz Grfica de Usuario (GUI)

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.

Figura 13. Ventana de propiedades.

16 DE

204

Elaborado por MTI.. Felipe Prez Castaeda

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:

Figura 14. GUI de la primera aplicacin.

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.)

Figura 15. Ventana de cdigo.

17 DE

204

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

Tarea entregar resumen del capitulo 1 CAPTULO II 2.1 LOS OBJETOS

Firma de Recibido. ____________________

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

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.

2.5 REFERENCIANDO OBJETOS. La sintaxis para referenciar objetos es la siguiente:

OBJETO.PROPIEDAD = VALOR

Por ejemplo, para establecer el ttulo de un formulario a Visual Basic es fcil, la orden sera:

Form1.Caption = Visual Basic es fcil

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:

Private Sub OBJETO_EVENTO () SENTENCIAS End Sub

22 DE

204

Elaborado por MTI.. Felipe Prez Castaeda

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.

Figura 17. Ventana de eventos.

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:

Private Sub Command1_Click() Form1.Caption = Text1.Text End Sub

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda


Date Fecha/Hora (8 bytes)

CBTIS # 277
01/ENERO/00 31/DICIEMBRE/9999 a

Variant (por omisin)

Cualquier tipo de dato

Con nmeros hasta el intervalo de un tipo Double. Con caracteres 22 bytes + 1 byte por carcter

Tabla 4. Tipos de datos en VB.

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:

Const NOMBRE_CONSTANTE [As TIPO] = VALOR

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

Elaborado por MTI.. Felipe Prez Castaeda

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:

Dim NOMBRE_VARIABLE [As TIPO]

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

A manera de ejemplo considere lo siguiente:

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

Elaborado por MTI.. Felipe Prez Castaeda Operador


^ * / \ Mod + Exponenciacin Menos unario Multiplicacin y divisin Divisin entera Resto de una divisin entera Suma y resta

CBTIS # 277 Significado

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:

Dim CH4_ENTRADA As Double, CH4_SALIDA As Double, _ CH4_GENERA As Double, CH4_CONSUME AS Double

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

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

utilizando la caja de dilogo predefinida provista por la funcin InputBox. Su sintaxis es la siguiente:

VARIABLE = InputBox(MENSAJE [, TTULO] [, PREDETERMINADO])

Donde MENSAJE es el mensaje que indica al usuario el tipo de informacin que debe ingresar. Por ejemplo (practica 00), las sentencias:

Dim EDAD As Integer EDAD = InputBox(Ingrese su edad?)

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)

En este caso se visualiza la caja de dilogo que se presenta en la figura siguiente:

30 DE

204

Elaborado por MTI.. Felipe Prez Castaeda

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:

Private Sub Form_Load ()

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:

If CONDICIN Then SENTENCIAS_VERDADERAS Else SENTENCIAS_FALSAS End If

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:

Dim A As Integer, B As Integer A = InputBox(Ingrese A?)

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:

If CONDICIN_1 Then SENTENCIAS_1 ElseIf CONDICIN_2 Then SENTENCIAS_2 .

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.

Dim N As Integer N = InputBox(Ingrese N?) If N = 1 Then

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

Por ejemplo, el siguiente cdigo imprime los cuadrados de los nmeros enteros del 1 al 25.

Dim C As Integer For C = 1 To 25 Print C Next

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

Dim N As Integer, S As Integer S=0 N = InputBox(Ingrese N?) While N 0 S=S+N N=N-1

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

Elaborado por MTI.. Felipe Prez Castaeda

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:

Dim NOMBRE_ARREGLO(DIMENSONES) As TIPO

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:

DIMENSIN_1, DIMENSIN_2, DIMENSIN_3, . . ., DIMENSIN_ K

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:

Dim LISTA(9) As Integer Dim MATRIZ(4, 3) As Double Dim NOMBRES(19) As String * 30

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

Elaborado por MTI.. Felipe Prez Castaeda

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:

Dim LISTA(10) As Integer Dim MATRIZ(5, 4) As Double Dim NOMBRES(20) As String * 30

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:

Dim NOMBRE_ARREGLO() As TIPO

Para definir el tamao del arreglo utilizar la siguiente sintaxis:

ReDim NOMBRE_ARREGLO(NMERO_ELEMENTOS)

41 DE

204

Elaborado por MTI.. Felipe Prez Castaeda

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

Por ejemplo considere el siguiente cdigo que define la estructura ALUMNO:

42 DE

204

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

A manera de ejemplo (practica 9) considere la implementacin de la siguiente funcin:

f ( x) x 2 2 x 3

En la seccin de Declaraciones del mdulo de formulario ingrese el siguiente cdigo:

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

anteponer la palabra reservada ByVal a la declaracin del parmetro en la cabecera de la funcin. Por ejemplo:

Function F(ByVal X As Double) As Double F=X^2+2*X+3 End Function

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

3.12 PROCEDIMIENTOS La sintaxis para definir un procedimiento es la siguiente:

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda el contenido en tiempo de diseo.

CBTIS # 277

Tabla 10. Propiedades del botn cuadro de texto

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

personalizada). Tabla 12. Propiedades del botn botn de comando

Los botones de comando suelen responder al evento Click, cuya descripcin es: Evento Descripcin

51 DE

204

Elaborado por MTI.. Felipe Prez Castaeda Click

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:

Form1 Nombre BorderStyle Caption FrmCajero 3-Fixed Dialog Cajero automtico

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

Elaborado por MTI.. Felipe Prez Castaeda Private Sub CmdAceptar_Click ()

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

Elaborado por MTI.. Felipe Prez Castaeda End Sub

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.

4.3 CONTROLES COMPLEMENTARIOS

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

Elaborado por MTI.. Felipe Prez Castaeda

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.

Las casillas de verificacin suelen responder al evento true.

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.

Propiedad Caption Value

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.

Los botones de opcin tambin suelen responder al evento

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Text1 Nombre ForeColor Text TxtMensaje &H000000FF&

Frame1 Nombre Caption FraColor Color

58 DE

204

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

Frame2 Nombre Caption FraEstilo Estilo

Option1 Nombre Caption ForeColor Value OptRojo Rojo &H000000FF& True

Option2 Nombre Caption ForeColor OptVerde Verde &H00008000&

Option3 Nombre Caption ForeColor OptAzul Azul &H00C00000&

Check1 Nombre Caption Font ChkNegrita Negrita Arial (Negrita)

Check2 Nombre ChkCursiva

59 DE

204

Elaborado por MTI.. Felipe Prez Castaeda Caption Font Cursiva Arial (Cursiva)

CBTIS # 277

Check3 Nombre Caption Font ChkSubrayado Subrayado Arial (Subrayado)

Check4 Nombre Caption ChkMayuscula Convertir a maysculas

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Private Sub TxtMensaje_KeyPress(KeyAscii As Integer)

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

Descripcin Contiene los elementos de la lista. Puede definirlos en tiempo de diseo.

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

Especifica si se pueden seleccionar varios elementos de la lista.

SelCount Selected

Devuelve el nmero de elementos seleccionados. Especifica si un elemento de la lista est seleccionado.

62 DE

204

Elaborado por MTI.. Felipe Prez Castaeda Sorted

CBTIS # 277

Especifica si los elementos de la lista se ordenan alfabticamente.

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

Elaborado por MTI.. Felipe Prez Castaeda

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:

3 etiquetas 1 cuadro de texto 2 listas 5 botones de comando

En seguida proceda a establecer las propiedades segn se indica:

Form1 Nombre BorderStyle FrmCursos 3-Fixed Dialog

64 DE

204

Elaborado por MTI.. Felipe Prez Castaeda Caption Cursos

CBTIS # 277

Label1 Nombre AutoSize Caption LblCurso True Ingrese nuevo curso:

Label2 Nombre AutoSize Caption LblSeleccionar True Seleccione un curso:

Label3 Nombre AutoSize Caption LblProgramado True Curso programado:

Text1 Nombre Text TxtCurso

List1 Nombre LstSeleccionar

List2 Nombre LstProgramado

Command1 Nombre CmdAgregar

65 DE

204

Elaborado por MTI.. Felipe Prez Castaeda Caption Picture Style C:\FundVB\Bitmaps\AddItem.Bmp 1-Graphical

CBTIS # 277

Command2 Nombre Caption Picture Style C:\FundVB\Bitmaps\AddAll.Bmp 1-Graphical CmdAgregarTodo

Command3 Nombre Caption Picture Style C:\FundVB\Bitmaps\Remove.Bmp 1-Graphical CmdQuitar

Command4 Nombre Caption Picture Style C:\FundVB\Bitmaps\RemoveAll.Bmp 1-Graphical CmdQuitarTodo

Command5 Nombre Caption Default CmdAnnadir &Aadir True

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

mostraremos un ejemplo (prctica 14) del uso de los cuadros

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:

1 etiqueta 1 cuadro de texto 1 cuadro combinado

68 DE

204

Elaborado por MTI.. Felipe Prez Castaeda 1 botn de comando

CBTIS # 277

En seguida proceda a establecer las propiedades segn se indica: Form1 Nombre BorderStyle Caption FrmConsultaCursos 3-Fixed Dialog Consulta de cursos

Label1 Nombre Caption LblCursos Cursos:

Text1 Nombre MultiLine ScrollBars Text TxtCurso True 2-Vertical

Combo1 Nombre Text Style 2-Dropdown List CboCursos

Command1 Nombre Caption CmdSalir &Salir

Seguidamente proceda a ingresar el cdigo que se indica a continuacin:

Dim Matriz(5, 3) As String Private Sub Form_Load()

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

Private Sub CmdSalir_Click() End 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

Elaborado por MTI.. Felipe Prez Castaeda la propiedad Interval ha transcurrido.

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

Label1 Nombre Caption LblHora Hora

Text1

72 DE

204

Elaborado por MTI.. Felipe Prez Castaeda Nombre Text TxtHora

CBTIS # 277

Timer1 Nombre Interval Timer1 500

Command1 Nombre Caption CmdTerminar &Terminar

Seguidamente proceda a ingresar el cdigo que se indica a continuacin:

Private Sub Form_Activate() TxtHora = Time() End Sub

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

Elaborado por MTI.. Felipe Prez Castaeda AutoSize

CBTIS # 277

Especifica si el control ajusta automticamente su tamao para mostrar un grfico completo.

Picture

Especifica el archivo de imagen para el control.

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.

Para este control tambin se suele manejar el evento MouseMove.

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.

Propiedad Max Min LargeChange

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Label1 Nombre Caption LblRojo Rojo

Label2 Nombre LblVerde

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

HScroll2 Nombre LargeChange Max Min SmallChange Value HSVerde 10 255 0 1 0

HScroll3 Nombre LargeChange Max Min SmallChange Value HSAzul 10 255 0 1 0

77 DE

204

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

Picture1 Nombre BackColor PicFondo &H000000FF&

Seguidamente proceda a ingresar el cdigo que se indica a continuacin:

Private Sub HSRojo_Change() PicFondo.BackColor = RGB(HSRojo, HSVerde, HSAzul) End Sub

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

Elaborado por MTI.. Felipe Prez Castaeda Change

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

Descripcin Especifica la ruta de acceso actual.

Un cuadro de lista de directorios tambin responde al evento Change.

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.

Propiedad Path Pattern

Descripcin Especifica la ruta de acceso actual. Especifica el tipo de archivo que se desea visualizar en el control.

List

Devuelve los elementos contenidos en la parte de lista del control.

ListIndex

Especifica el ndice del elemento seleccionado actualmente en el control.

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Label1 Nombre Caption LblUnidad Unidad

Label2

80 DE

204

Elaborado por MTI.. Felipe Prez Castaeda Nombre Caption LblCarpeta Carpeta

CBTIS # 277

Label3 Nombre Caption LblArchivo Archivo

Label4 Nombre Caption LblVista Vista previa

Drive1 Nombre Drive1

Dir1 Nombre Dir1

File1 Nombre Pattern File1 *.JPG

Image1 Nombre Stretch ImgVista True

Seguidamente proceda a ingresar el cdigo que se indica a continuacin:

Private Sub Drive1_Change () On Error GoTo DRIVE_ERROR Dir1.Path = Drive1.Drive

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 Dir1_Change() File1.Path = Dir1.Path End Sub

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.

Figura 29. GUI de msgbox.

82 DE

204

Elaborado por MTI.. Felipe Prez Castaeda

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

Valores retornados Valor 1 Aceptar Botn vbOK 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

Elaborado por MTI.. Felipe Prez Castaeda

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:

Form1 Nombre BorderStyle Caption FrmFuncionMsgBox 3-Fixed Dialog Funcin MsgBox

List1 Nombre LstBoton

List2 Nombre LstIcono

Command1 Nombre Caption CmdMensaje &Mensaje

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

90 DE

204

Elaborado por MTI.. Felipe Prez Castaeda

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):

Figura 33.Nuevo contacto.

91 DE

204

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda DE LO CONTRARIO

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda End If

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

Los eventos a los que responde un formulario son los siguientes:

Evento Activate Deactivate Load MouseDown

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

Ocurre cuando se muestra primero el formulario o se cambian sus dimensiones.

Unload

Ocurre cuando el formulario se descarga de la memoria.

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

Elaborado por MTI.. Felipe Prez Castaeda

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:

Form1 Nombre Caption Form1 Primer formulario

Command1 Nombre Caption CmdIr &Ir

Command2 Nombre Caption CmdSalir &Salir

Seguidamente procede a ingresar el cdigo que se muestra a continuacin:

Private Sub CmdIr_Click() Form2.Show Form1.Hide

109 DE

204

Elaborado por MTI.. Felipe Prez Castaeda End Sub

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.

Figura 37. Agregar formulariuo.

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:

Form2 Nombre Caption Form2 Segundo formulario

110 DE

204

Elaborado por MTI.. Felipe Prez Castaeda ControlBox False

CBTIS # 277

Command2 Nombre Caption CmdVolver &Volver

En seguida proceda a ingresar el cdigo que se indica a continuacin:

Private Sub CmdVolver_Click() Form1.Show Form2.Hide End Sub

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

Elaborado por MTI.. Felipe Prez Castaeda

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:

1 cuadro de lista 2 botones de comando

Luego debe establecer las propiedades que se indican a continuacin:

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

Command1 Nombre Caption CmdMostrar &Mostrar

Command2 Nombre Caption CmdSalir &Salir

Seguidamente procede a ingresar el cdigo que se muestra a continuacin:

Private Sub Form_Load() Load FrmNone Load FrmFixedSingle Load FrmSizable Load FrmFixedDialog Load FrmFixedToolWindow Load FrmSizableToolWindow

113 DE

204

Elaborado por MTI.. Felipe Prez Castaeda End Sub

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

Private Sub CmdSalir_Click() End 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:

Formulario Form2 Form3 FrmNone

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

Command1 Nombre Caption CmdVolver &Volver

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.

PASANDO VALORES ENTRE FORMULARIOS

115 DE

204

Elaborado por MTI.. Felipe Prez Castaeda

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.

Figura 39. Valores entre formularios

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

Form2 TxtMensaje2 CmdRecibir CmdVolver

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

Elaborado por MTI.. Felipe Prez Castaeda End Sub

CBTIS # 277

Private Sub CmdSalir_Click() End End Sub

Para el segundo formulario (Form2) proceda a ingresar el cdigo siguiente: Private Sub CmdRecibir_Click() TxtMensaje2 = Mensaje End Sub

Private Sub CmdVolver_Click() Form2.Hide Form1.Show 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

Elaborado por MTI.. Felipe Prez Castaeda Figura 40. Modulos

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

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:

Figura 43. Propiedades del Proyecto.

120 DE

204

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

En seguida se ha de presentar el Editor de mens de Visual Basic.

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

Elaborado por MTI.. Felipe Prez Castaeda

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

MnuReporteLinea MnuReporteClienteMes MnuReporteVendMes MnuAyuda MnuAyudaContenido

Ninguno Ninguno Ninguno Ninguno Ninguno

123 DE

204

Elaborado por MTI.. Felipe Prez Castaeda . . . &Indice . . . &Bsqueda .... . . &Acerca de MnuAyudaIndice MnuAyudaBusqueda MnuAyudaLinea MnuAyudaAbout

CBTIS # 277 Ninguno Ninguno Ninguno Ninguno

Para probar el men que acaba de crear, ingrese el siguiente cdigo:

Private Sub MnuArchivoArticulo_Click() MsgBox Seleccion la opcin Artculo End Sub

Private Sub MnuArchivoCliente_Click() MsgBox Seleccion la opcin Cliente End Sub

Private Sub MnuArchivoVendedor_Click() MsgBox Seleccion la opcin Vendedor End Sub

Private Sub MnuArchivoSalir_Click() Unload Me End Sub

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

Figura 47. Agregar botones Como ejemplo (prctica 25), vamos a crear la barra de herramientas de la figura mostrada:

126 DE

204

Elaborado por MTI.. Felipe Prez Castaeda

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.

Se ha de presentar un cuadro de dilogo similar a la figura mostrada:

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda End Sub

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

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

El resto de propiedades se establecern mediante cdigo al momento de la carga del formulario.

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

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

Para crear el men contextual de la figura, debe ingresar al Editor de mens y aadir lo siguiente:

Caption &Herramientas . . . Calculadora . . . Calendario . . . Solitario MnuTools

Name

Visible

MnuToolsCalc MnuToolsCalen MnuToolsSol

Seguidamente proceda a ingresar el cdigo que se indica a continuacin:

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

Private Sub MnuToolsCalc_Click()

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

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 Especifica si el archivo AVI se reproducir automticamente al cargarse el control.

Mtodo Close Open Play Stop

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

Elaborado por MTI.. Felipe Prez Castaeda

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.

Mtodo ShowColor ShowFont ShowHelp ShowOpen ShowPrinter ShowSave

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

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

Para

ello

crear

un

nuevo

formulario,

agregarle

un

botn

de

comando

(CmdCambiarColor) y un control CommonDialog. Luego ingresar el siguiente cdigo:

Private Sub CmdCambiarColor_Click() CommonDialog1.ShowColor Form1.BackColor = CommonDialog1.Color End Sub

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

Elaborado por MTI.. Felipe Prez Castaeda

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:

Private Sub CmdAbrirArchivo_Click()

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

Descripcin Especifica la ruta y nombre del archivo GIF animado.

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).

Propiedad Col Cols FixedCols

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.

FixedRows Row Rows Text TextArray

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

desplazamiento horizontales, verticales o ambas a la vez.

142 DE

204

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

Como ejemplo

(prctica 33) vamos a desarrollar una aplicacin que visualice un

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

Especifica la propiedad utilizada para sincronizar el control UpDown con su auxiliar.

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

Especifica el valor mximo del intervalo de desplazamiento del control UpDown.

Min

Especifica el valor mnimo del intervalo de desplazamiento del control UpDown.

SyncBuddy

Especifica si el control UpDown sincroniza la propiedad Value con una propiedad del control auxiliar.

Como ejemplo

(prctica 34) vamos a desarrollar una aplicacin que permita mostrar el

cdigo ANSI de un carcter especificado.

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:

UpDown1 Nombre BuddyControl UpDown1 TxtANSI

145 DE

204

Elaborado por MTI.. Felipe Prez Castaeda BuddyProperty Increment Max Min SyncBuddy Text 1 255 0 True

CBTIS # 277

Seguidamente proceda a transcribir el siguiente cdigo:

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.

Propiedad Day Month Year Value DayOfWeek

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

Especifica el nmero de la semana en que cae la fecha mostrada.

MultiSelect

Especifica si se puede seleccionar un intervalo contiguo de fechas.

MaxSelCount

Especifica el nmero mximo de das que pueden seleccionarse mediante la propiedad MultiSelect.

SelStart

Especifica los lmite inferior y superior respectivamente del

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.

Evento Click DateClick

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

Private Sub MonthView1_Click() Call MonthView1_DateClick(MonthView1.Value) End Sub

Private Sub Form_Load() Call MonthView1_DateClick(MonthView1.Value) 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.

Propiedad Day Month Year

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

Elaborado por MTI.. Felipe Prez Castaeda

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:

LEAME.TXT MISDATOS.DAT PLANILLA.XLS SHAKIRA.BMP

Archivo de texto Archivo de datos Archivo de MS-Excel Archivo de mapa de bits

El nombre de un archivo para ser referenciado correctamente consta de:

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

Elaborado por MTI.. Felipe Prez Castaeda

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.

Sentencia Kill Permite eliminar un archivo almacenado en un disco. Su sintaxis es de la forma:

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

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

La instruccin anterior elimina el archivo TEMPO.DAT ubicado en la carpeta C:\TEMP.

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:

Name NOMBRE_ACTUAL As NOMBRE_NUEVO

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:

Name C:\TEMP\TEMPO.DAT As C:\DATA\CURSO.DAT

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.

Sentencia MkDir Permite crear una nueva carpeta. Su sintaxis es:

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

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

Elimina una carpeta vaca existente en el disco. Su sintaxis es de la forma:

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

Sentencia ChDir Permite cambiar la carpeta actual. Su sintaxis es:

ChDir NOMBRE_CARPETA

Donde NOMBRE_CARPETA es una cadena de caracteres que identifica la nueva ruta de acceso predeterminada. Por ejemplo:

ChDir C:\DATA\GRAFICOS MsgBox App.Path

La propiedad Path del objeto App especifica la ruta de acceso actual.

Sentencia ChDrive Permite cambiar la unidad de disco actual. Su sintaxis es:

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

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

Open NOMBRE_ARCHIVO For MODO As # NMERO_ARCHIVO

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:

Dim N1 As Integer N1 = FreeFile() Open C:\DATA\DEMO.DAT For Output As # N1

Sentencia Print Permite escribir datos secuencialmente en un archivo. Su sintaxis es:

Print # NMERO_ARCHIVO, LISTA_DE_EXPRESIONES

155 DE

204

Elaborado por MTI.. Felipe Prez Castaeda

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()

Al ejecutarse el cdigo anterior se escribira en el archivo la siguiente informacin:

Visual Basic es fcil, 24/04/2001

Como se observa, al utilizar la sentencia Print se deben delimitar los datos para que se impriman correctamente.

Sentencia Write Permite escribir datos secuencialmente en un archivo. Su sintaxis es:

Write # NMERO_ARCHIVO, LISTA_DE_EXPRESIONES

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

Elaborado por MTI.. Felipe Prez Castaeda interpretar correctamente,

CBTIS # 277

independientemente de la configuracin regional, estas

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 #).

A manera de ejemplo (prctica 37) considere el siguiente segmento de cdigo:

Dim N1 As Integer N1 = FreeFile() Open C:\DATA\DEMO.DAT For Output As # N1 Write # N1, Visual Basic es fcil; Date()

La ejecucin de este cdigo escribira en el archivo la siguiente informacin:

Visual Basic es fcil", # 2002-04-11 #

Sentencia Close Cierra uno archivo abierto mediante la sentencia Open. Su sintaxis es la siguiente:

Close # NMERO_ARCHIVO [, # NMERO_ARCHIVO, . . .]

Donde NMERO_ARCHIVO es el nmero con el cual se abri el archivo. Por ejemplo:

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

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

Close

Sentencia Input Permite leer datos de un archivo secuencial y los asigna a las variables especificadas. Su sintaxis es:

Input # NMERO_ARCHIVO, VARIABLE1 [, VARIABLE2, . . .]

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

La ejecucin del cdigo anterior produce la siguiente salida:

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

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

VARIABLE = Input( N , # NMERO_ARCHIVO)

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

La ejecucin del cdigo anterior produce la siguiente salida:

Funcin EOF Especifica si se ha llegado al final de un archivo. Su sintaxis es de la forma:

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

Elaborado por MTI.. Felipe Prez Castaeda . . . &Salir MnuArchivoSalir

CBTIS # 277 Ctrl + X

Luego proceda a ubicar los siguientes controles sobre el formulario:

1 cuadro de texto 1 control CommonDialog

Seguidamente debe establecer las propiedades que se indican: Form1 Nombre Caption FrmEditor Editor

Text1 Nombre MultiLine ScrollBars Text TxtEditor True 3-Both

CommonDialog1 Nombre CancelError CommonDialog1 True

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

Open NOMBRE_ARCHIVO For Random As # NMERO_ARCHIVO Len = LON_REG

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:

Put # NMERO_ARCHIVO, NMERO_REG, VARIABLE

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:

Private Type DISTRITO ID_DISTRITO As String * 3

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:

Get # NMERO_ARCHIVO, NMERO_REG, VARIABLE

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:

VARIABLE = LOF(# NMERO_ARCHIVO)

166 DE

204

Elaborado por MTI.. Felipe Prez Castaeda

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:

VARIABLE = Loc(# NMERO_ARCHIVO)

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

Seguidamente proceda a establecer las propiedades que se indican:

Form1 Nombre Caption BorderStyle StarUpPosition FrmCurso Mantenimiento de cursos 3-Fixed Dialog 2-CenterScreen

Frame1 Nombre Caption FraIngreso

Frame2 Nombre Caption FraNavegador Navegador

Frame3 Nombre Caption FraMantenimiento Mantenimiento

Label1 Nombre Caption LblCodigo Cdigo:

Label2

169 DE

204

Elaborado por MTI.. Felipe Prez Castaeda Nombre Caption LblNombre Nombre:

CBTIS # 277

Label3 Nombre Caption LblVacantes Vacantes:

Label4 Nombre Caption LblProfesor Profesor:

Text1 Nombre Locked Text TxtCodigo True

Text2 Nombre Locked Text TxtNombre True

Text3 Nombre Locked Text TxtVacantes True

Text4 Nombre Locked Text TxtProfesor True

170 DE

204

Elaborado por MTI.. Felipe Prez Castaeda

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

Command3 Nombre Caption Picture Style C:\FundVB\Bitmaps\Next.bmp 1-Graphical CmdSiguiente

Command4 Nombre Caption Picture Style C:\FundVB\Bitmaps\Last.bmp 1-Graphical CmdUltimo

Command5 Nombre Caption Picture C:\FundVB\Bitmaps\New.bmp CmdNuevo

171 DE

204

Elaborado por MTI.. Felipe Prez Castaeda Style 1-Graphical

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

Command8 Nombre Caption Picture Style C:\FundVB\Bitmaps\Delete.bmp 1-Graphical CmdEliminar

Command9 Nombre Caption Picture Style CmdSalir &Salir C:\FundVB\Bitmaps\Exit.bmp 1-Graphical

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

Elaborado por MTI.. Felipe Prez Castaeda

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 CmdEditar_Click() MODO_EDITAR True End Sub

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:

Open NOMBRE_ARCHIVO For Binary As # NMERO_ARCHIVO

177 DE

204

Elaborado por MTI.. Felipe Prez Castaeda

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:

Put # NMERO_ARCHIVO, POSICIN, VARIABLE

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:

Get # NMERO_ARCHIVO, POSICIN, VARIABLE

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

Elaborado por MTI.. Felipe Prez Castaeda

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:

Const CLAVE As Integer = 3 Private Sub CmdDescifrar_Click() Dim N1 As Integer, I As Integer

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

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

AZUL = &HFF0000& VERDE = &H00FF00& ROJO = &H0000FF& NEGRO = &H000000&

La funcin RGB() La funcin RGB() retorna un nmero de tipo entero largo (Long) que representa el valor de un color. Su sintaxis es:

COLOR = RGB(nROJO, nVERDE, nAZUL)

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:

Color Negro Azul Verde Cin Rojo Magenta Amarillo Blanco

nROJO 0 0 0 0 255 255 255 255

nVERDE 0 0 255 255 0 0 255 255

nAZUL 0 255 0 255 0 255 0 255

El ejemplo anterior (cdigo hexadecimal) utilizando la funcin RGB() ser similar a:

AZUL = RGB(0, 0, 255) VERDE = RGB(0, 255, 0) ROJO = RGB(255, 0, 0)

181 DE

204

Elaborado por MTI.. Felipe Prez Castaeda NEGRO = RGB(0, 0, 0)

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:

Nmero 0 1 2 3 4 5 6 7 Negro Azul Verde Cin Rojo

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

Magenta Amarillo Blanco

El ejemplo inicial (cdigo hexadecimal) utilizando la funcin QBColor() se soluciona como se muestra a continuacin:

AZUL = QBColor(1) VERDE = QBColor(2) ROJO = QBColor(4) NEGRO = QBColor(0)

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

Elaborado por MTI.. Felipe Prez Castaeda

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 de Visual Basic tiene las siguientes reglas:

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.

Establecer las coordenadas de dibujo

183 DE

204

Elaborado por MTI.. Felipe Prez Castaeda

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

Twips Puntos Pixeles Caracteres Pulgadas Milmetros Centmetros

Por ejemplo la siguiente orden establece la escala a pulgadas de un cuadro de imagen:

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:

Picture1.ScaleLeft = 100 Picture1.ScaleTop = 100

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

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

Una forma ms eficiente de personalizar la escala de un sistema de coordenadas es utilizando el mtodo Scale. Su sintaxis es:

OBJETO.Scale (X1, Y1) (X2, Y2)

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.

Mtodo Cls Pset Point Line Circle PaintPicture Print

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

Elaborado por MTI.. Felipe Prez Castaeda

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:

OBJETO.Pset (X, Y), COLOR

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

Elaborado por MTI.. Felipe Prez Castaeda

CBTIS # 277

OBJETO.Line (X1, Y1) - (X2, Y2), COLOR, B/BF

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.

Para lograr nuestro cometido aadir el siguiente cdigo a la aplicacin anterior:

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

Elaborado por MTI.. Felipe Prez Castaeda End Sub

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda

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

Elaborado por MTI.. Felipe Prez Castaeda End If End Sub

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.

Propiedad BorderColor BorderStyle BorderWidth X1, Y1, X2, Y2

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

CBTIS # 277 Constante vbShapeRectangle vbShapeSquare vbShapeOval vbShapeCircle vbShapeRoundedRectangle vbShapeRoundedSquare

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

Elaborado por MTI.. Felipe Prez Castaeda

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:

Private Sub CmdFuncion_Click(Index As Integer) PicPlano.Cls Dibuja (Index) End Sub

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

Elaborado por MTI.. Felipe Prez Castaeda Grficas en coordenadas polares

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.

De la grfica se tiene que el punto P tiene coordenadas rectangulares ( x, y ) y coordenadas polares

(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

A continuacin presentamos algunas ecuaciones polares caractersticas:


Nombre Circunferencia de radio n Trbol de cuatro hojas Cardioide Limazn Ecuacin

r n
r 2 cos 2 r 1 cos r 1 2 cos

198 DE

204

Elaborado por MTI.. Felipe Prez Castaeda


Lemniscata Ptalo de rosa Espiral

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:

Luego proceda a ingresar el cdigo que se presenta a continuacin:

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 LstEcuacion_Click() OP = LstEcuacion.ListIndex End Sub

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

Elaborado por MTI.. Felipe Prez Castaeda

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

S-ar putea să vă placă și