apuntes de sistemas de informacion con poo

204
Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277 1 DE 204

Upload: el-mero-machin

Post on 29-Jul-2015

103 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

1 DE 204

Page 2: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

2 DE 204

CAPÍTULO I

1.1 CONCEPTOS BÁSICOS: FUNCIONAMIENTO DE LA PROGRAMACIÓN

Antes de comenzar el aprendizaje del lenguaje de programación Visual Basic, puede

ser útil comprender lo que es un lenguaje de programación y cómo funciona, incluso alguna

terminología de programación. El mejor punto de partida es comenzar con los conceptos

básicos.

A) CÓMO FUNCIONA LA PROGRAMACIÓN?

Por sí solo, un equipo no es muy inteligente.

Esencialmente, un equipo es sólo un gran grupo de pequeños modificadores

electrónicos que están activados o desactivados. Al establecer diferentes combinaciones de

estos modificadores, se logra que el equipo realice alguna acción, por ejemplo, que muestre

algo en la pantalla o que emita un sonido. Eso es la programación en su concepto más

básico: decirle a un equipo qué hacer.

Claro está que comprender qué combinación de modificadores logrará que el equipo haga lo

que se desea será una gran tarea; aquí es donde los lenguajes de programación adquieren

un papel importante.

B) ¿QUÉ ES UN LENGUAJE DE PROGRAMACIÓN?

Las personas se expresan utilizando un lenguaje con muchas palabras. Los equipos

utilizan un lenguaje simple que consta sólo de números 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 sería como tratar de hablar con los amigos utilizando el código Morse, se puede

hacer, pero ¿para qué?

Un lenguaje de programación actúa como un traductor entre el usuario y el equipo. En

lugar de aprender el lenguaje nativo del equipo (conocido como lenguaje máquina), se

puede utilizar un lenguaje de programación para dar instrucciones al equipo de un modo que

sea más fácil de aprender y entender.

Page 3: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

3 DE 204

Un programa especializado conocido como compilador toma las instrucciones escritas

en el lenguaje de programación y las convierte en lenguaje máquina. Esto significa que,

como desarrollador de Visual Basic, no precisa entender lo que el equipo hace o cómo lo

hace, sólo es necesario entender cómo funciona el lenguaje de programación de Visual

Basic.

1.2 EVOLUCIÓN DE LOS LENGUAJES DE COMPUTACIÓN.

Para salvar la brecha que separa a sus dos lectores, o sea a la máquina y al

programador, el lenguaje de computación está ideado jerárquicamente. Recuérdese 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 máquina. En lo

fundamental éste es el único código de mando que la computadora entiende, un código que

más o menos está dentro de su equipo. Compuestos de unos y ceros como todo lo demás de

la computadora, el lenguaje de la máquina es extremadamente dificultoso. Si un

programador quiere escribir una instrucción que agregue el contenido de una palabra de

memoria a una segunda, debe entender, por ejemplo, al símbolo de ocho dígitos de esta

instrucción de adición en una tabla, así como las direcciones de las dos palabras. El

resultado será una hilera de tal vez 32 dígitos, 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 corrección. A pesar de ello en

los primeros años de la computación los ingenieros trabajaron directamente en el lenguaje

de la máquina. Luego empezaron a desarrollar códigos más legibles, aprovechándose de

recursos mnemotécnicos. A estos nuevos códigos se les dio el nombre de lenguajes en

conjunto (assembly languages) y todavía se usan.

El fundamento de los lenguajes en conjunto es que los programadores humanos

recuerdan los nombres más fácilmente que los números. Nombres cortos y fijos (tales como

AD, SUBS, MUL) se presentan en todas las instrucciones de la máquina, amén de que los

programadores pueden componer sus propios nombres para indicar sitios de

almacenamiento, es decir, variables en el sentido matemático (nombres AL, RAPID, SUM).

Page 4: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

4 DE 204

Aunque la computadora ejecuta instrucciones sólo en lenguaje de la máquina, con

ayuda de un programa escrito con anterioridad, traduce automáticamente del lenguaje del

conjunto al lenguaje de la máquina, y enseguida ejecuta. Es decir, transforma el programa

escrito con nombres en una larga hilera de dígitos binarios que el procesador entiende. Este

programa de traducción (llamado conjuntador —assembler—) evita al programador el trabajo

de buscar códigos binarios en una tabla y de escribirlos él mismo.

El paso siguiente fue crear códigos que alejaron todavía más al programador de su

máquina, pues le permitieron escribir en un lenguaje más matemático. A estos códigos se les

llaman lenguajes de alto nivel (high-level languages) y son traducidos en instrucciones a la

máquina no por medio de programas conjuntadores relativamente simples, sino por medio

de programas complejos llamados compiladores (compilers)

Un lenguaje de programación es una notación para escribir programas, a través de

los cuales podemos comunicarnos con el hardware y dar así las órdenes adecuadas para la

realización de un determinado proceso. Un lenguaje viene definido por una gramática o

conjunto de reglas que se aplican a un alfabeto constituido por el conjunto de símbolos

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

fácil de ser procesado por el microprocesador, ocupa poca lugar en memoria y de muy difícil

programación para el hombre, cuando hablamos de alto nivel nos indica que el mismo

programa es de fácil programar por un programador pero ocupa mucho lugar de memoria y

es de difícil acceso al hardware, de tal forma que según utilicemos un nivel u otro así

tendremos que utilizar un determinado lenguaje ligado a sus correspondientes traductores.

La siguiente tabla representa la evolución de los distintos lenguajes.

Page 5: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

5 DE 204

Periodo Influencias Lenguajes

1950 - 1955 Ordenadores primitivos

Lenguajes ensamblador. Lenguajes experimentales de alto nivel

1956 - 1960

Ordenadores pequeños, caros y lentos Cintas magnéticas. Compiladores e intérpretes Optimización del código.

FORTRAN ALGOL 58 y 60 COBOL LISP

1961 - 1965

Ordenadores grandes y caros Discos magnéticos Sistemas operativos Lenguajes de propósito general.

FORTRAN IV COBOL 61 Extendido ALGOL 60 Revisado APL (como notación sólo)

1966 - 1970

Ordenadores de diferentes tamaños, velocidades, y costes. Sistemas caros de almacenamiento masivo de datos. Sistemas operativos multitarea e interactivos. Compiladores con optimización. Lenguajes estándar, flexibles y generales.

PL/I FORTRAN 66 (estándar) COBOL 65 (estándar) ALGOL 68 SIMULA 67 BASIC APL/360

1971 - 1975

Micro ordenadores. Sistemas pequeños y baratos de almacenamiento masivo de datos. Programación estructurada. Ingeniería del software. Lenguajes sencillos.

PASCAL COBOL 74 PL/I

1976 - 1980

Ordenadores baratos y potentes. Sistemas distribuidos. Programación interactiva. Abstracción de datos. Programación con fiabifidad y fácil mantenimiento.

ADA FORTRAN 77 PROLOG C

1980

Ordenadores más baratos y potentes. Mayor abstracción de datos. Menor costo de memorias Programación Orientada o Objetos

SmallTalk OOCOBOL C++ Ojective C Object Pascal (Delphi) Visual Basic Visual C++

2000

Hypertext Pre-processor o de procesamiento de textp

PHP

Tabla 1. Evolucion de los lenguajes de programación.

Page 6: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

6 DE 204

1.3 CLASIFICACIÓN DE LOS LENGUAJES DE PROGRAMACIÓN Los lenguajes de programación se determinan según el nivel de abstracción, Según la

forma de ejecución y Según el paradigma de programación que poseen cada uno de ellos y

esos pueden ser:

1.3.1 SEGÚN SU NIVEL DE ABSTRACCIÓN

Lenguajes de bajo nivel

Los lenguajes de bajo nivel son lenguajes de programación que se acercan al

funcionamiento de una computadora. El lenguaje de más bajo nivel es, por excelencia, el

código máquina. 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 programación que son considerados por algunos expertos como

lenguajes de medio nivel (como es el caso del lenguaje C) al tener ciertas características

que los acercan a los lenguajes de bajo nivel pero teniendo, al mismo tiempo, ciertas

cualidades que lo hacen un lenguaje más cercano al humano y, por tanto, de alto nivel.

Lenguajes de alto nivel

Los lenguajes de alto nivel son normalmente fáciles de aprender porque están

formados por elementos de lenguajes naturales, como el inglés. En BASIC, el lenguaje de

alto nivel más 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 rígida y sistemática.

1.3.2 SEGÚN LA FORMA DE EJECUCIÓN.

Lenguajes compilados

Naturalmente, un programa que se escribe en un lenguaje de alto nivel también tiene

que traducirse a un código que pueda utilizar la máquina. Los programas traductores que

Page 7: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

7 DE 204

pueden realizar esta operación se llaman compiladores. Éstos, como los programas

ensambladores avanzados, pueden generar muchas líneas de código de máquina por cada

proposición del programa fuente. Se requiere una corrida de compilación antes de procesar

los datos de un problema.

Los compiladores son aquellos cuya función es traducir un programa escrito en un

determinado lenguaje a un idioma que la computadora entienda (lenguaje máquina con

código 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 código.

Lenguajes interpretados

Se puede también 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 código objeto que se produce durante la corrida de compilación para utilizarlo en una

corrida de producción futura, el programador sólo carga el programa fuente en la

computadora junto con los datos que se van a procesar. A continuación, un programa

intérprete, almacenado en el sistema operativo del disco, o incluido de manera permanente

dentro de la máquina, convierte cada proposición del programa fuente en lenguaje de

máquina conforme vaya siendo necesario durante el proceso de los datos. No se graba el

código objeto para utilizarlo posteriormente.

La siguiente vez que se utilice una instrucción, se le debe interpretar otra vez y

traducir a lenguaje máquina. Por ejemplo, durante el procesamiento repetitivo de los pasos

de un ciclo, cada instrucción del ciclo tendrá que volver a ser interpretado cada vez que se

ejecute el ciclo, lo cual hace que el programa sea más lento en tiempo de ejecución (porque

se va revisando el código en tiempo de ejecución) pero más rápido en tiempo de diseño

(porque no se tiene que estar compilando a cada momento el código completo). El intérprete

elimina la necesidad de realizar una corrida de compilación después de cada modificación

del programa cuando se quiere agregar funciones o corregir errores; pero es obvio que un

Page 8: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

8 DE 204

programa objeto compilado con antelación deberá ejecutarse con mucha mayor rapidez que

uno que se debe interpretar a cada paso durante una corrida de producción.

1.3.3 SEGÚN EL PARADIGMA DE PROGRAMACIÓN

Un paradigma de programación representa un enfoque particular o filosofía para la

construcción del software. No es mejor uno que otro sino que cada uno tiene ventajas y

desventajas. También hay situaciones donde un paradigma resulta más apropiado que otro.

Atendiendo al paradigma de programación, se pueden clasificar los lenguajes en:

Lenguajes imperativos

BASIC, C, C++, Java, C#, Perl

Lenguajes Funcionales

Puros:

Haskell , Miranda

Híbridos:

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 múltiple), PHP (en su versión 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 rápida y sencilla, basado en el lenguaje BASIC

y en la programación orientada a objetos.

Page 9: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

9 DE 204

La palabra “Visual” hace referencia al método que se utiliza para crear la interfaz

gráfica de usuario. En lugar de escribir numerosas líneas de código para implementar la

interfaz, simplemente se utiliza el ratón 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 más programadores que ningún otro

lenguaje en la historia de la informática. Visual Basic ha evolucionado a partir del lenguaje

BASIC original y ahora contiene centenares de instrucciones, funciones y palabras clave,

muchas de las cuales están directamente relacionadas con la interfaz gráfica de Windows.

El lenguaje de programación Visual Basic no es exclusivo de Microsoft Visual Basic.

Este lenguaje es utilizado también por Microsoft Excel, Microsoft Access y muchas otras

aplicaciones Windows. El lenguaje de programación Visual Basic Script para programar en

Internet es un subconjunto del lenguaje Visual Basic. De tal forma, que la inversión 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 aplicación Windows: hacer click en el icono correspondiente.

En seguida se presentará una ventana similar a la figura siguiente:

Page 10: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

10 DE 204

Figura 1. Ventana de Proyectos.

En la ventana anterior indicar el tipo de proyecto que desea crear (para nuestro caso

seleccionar EXE estándar) y dar click sobre el botón “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 menús Barra de herramientas

Cuadro de herramientas Diseñador de formularios

Explorador de proyectos Ventana de propiedades

Posición del formulario Menús contextuales

Page 11: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

11 DE 204

Barra de menús

Presenta las órdenes que se utilizan para desarrollar una aplicación. Las opciones

más utilizadas son: Archivo, Edición, Ver, Ventana y Ayuda. Se proporcionan otros menús

para tener acceso a funciones específicas de programación como Proyecto, Formato o

Depuración.

Barra de herramientas

Facilita el acceso rápido a las órdenes más comúnmente utilizadas. Omitimos el

significado de cada botón porque le será mostrado al pasar el puntero del ratón sobre cada

uno de ellos.

Figura 3. Barra de herramientas.

Puede visualizar otras barras de herramientas ejecutando la opción Barra de

herramientas del Menú Ver.

Cuadro de herramientas

Proporciona un conjunto de herramientas que permiten diseñar la interfaz gráfica de

usuario.

Figura 4. Cuadro de herramientas.

Este cuadro es el que se utilizará con mayor frecuencia, por lo tanto a continuación se

describen todos los elementos que le pertenecen.

Page 12: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

12 DE 204

Icono Descripción

Puntero

Cuadro de imagen

Etiqueta

Cuadro de texto

Marco

Botón de comando

Casilla de verificación

Botón de opción

Cuadro combinado

Cuadro de lista

Barra de desplazamiento horizontal

Barra de desplazamiento vertical

Cronómetro

Cuadro de lista de unidades

Cuadro de lista de directorios

Cuadro de lista de archivos

Formas

Líneas

Imagen

Contenedor OLE

Tabla 2. Elementos del cuadro de herramientas.

Para utilizar algún objeto simplemente debe hacer doble click sobre el icono

correspondiente, luego puede cambiar su posición y sus dimensiones.

Diseñador de formularios

Page 13: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

13 DE 204

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

usuario.

Figura 5. Diseñador de formularios.

Explorador de proyectos

Contiene el conjunto de archivos que constituyen la aplicación o proyecto.

Figura 6. Explorador de proyectos.

Ventana de propiedades

Como veremos más 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.

Page 14: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

14 DE 204

Figura 7. Ventana de propiedades.

Posición del formulario

Esta ventana le permite especificar la posición de los formularios de la aplicación.

Figura 8. Posición del formulario.

Menús contextuales

Es un menú emergente que presenta órdenes específicas 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.

Page 15: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

15 DE 204

Ventana de código

Se presenta cuando se hace doble click sobre un objeto que se encuentra en el

Diseñador 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 código.

1.5 MI PRIMERA APLICACIÓN

Hay tres pasos principales para crear una aplicación en Visual Basic:

Crear la interfaz.

Establecer propiedades.

Escribir el código.

Para ver como se realiza esto, siga los pasos del siguiente ejemplo para crear una

aplicación sencilla que consiste en un formulario y un botón de comando. Cuando haga click

en el botón de comando aparecerá el mensaje “Visual Basic es fácil” en un cuadro de

diálogo predefinido.

Creación de la interfaz

Para el desarrollo del presente ejemplo (Practica 0) proceda a crear una nueva

aplicación. En seguida añadir un botón 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:

Page 16: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

16 DE 204

Figura 11. Cuadro de Herramientas

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

Figura 12. Interfaz Gráfica 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 botón de comando y

podemos ver que la propiedad Caption tiene el valor “Command1”.

Figura 13. Ventana de propiedades.

Page 17: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

17 DE 204

Puede cambiar el valor de cualquier propiedad seleccionándolo 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

aplicación”. La apariencia de la interfaz debe ser similar a la figura mostrada:

Figura 14. GUI de la primera aplicación.

Escribiendo el código

Para ingresar el código a la aplicación debe dar doble click sobre el control al cual

asociaremos dicho código. Para nuestro caso dar doble click sobre el botón de comando e

ingresar el código que se indica a continuación: (Nota: El comando MsgBox le indica al

sistema que genere un cuadro de dialogo.)

Figura 15. Ventana de código.

Page 18: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

18 DE 204

Para guardar la aplicación que acaba de crear, seleccione la opción Guardar

Proyecto del Menú Archivo.

Bueno, ahora sólo falta que ejecute su aplicación. 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.- 5.- 6.-

7.- 8.-

3

2

1

4

5

6

7

8

Page 19: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

19 DE 204

Tarea entregar resumen del capitulo 1 Firma de Recibido. ____________________

CAPÍTULO II

2.1 LOS OBJETOS

Visual Basic se basa en la programación orientada a objetos (POO), la cual es una

forma de programación que utiliza objetos (similares a los objetos del mundo real) para la

solución 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 más largos de una manera sencilla.

2.2 MECANISMOS BÁSICOS DE LA POO

Los mecanismos básicos de la programación orientada a objetos son:

Objetos

Propiedades

Métodos

Eventos

Mensajes

Clases

Objetos

Un objeto es una entidad que tiene atributos particulares (propiedades) y unas formas

de operar sobre ellos (métodos). 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

Page 20: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

20 DE 204

Las propiedades representan las características del objeto. Hay propiedades

particulares, como Caption que la poseen los botones de comando por ejemplo, y genéricas

como Name que la poseen todos lo objetos.

Métodos

Los métodos son procedimientos asociados a un objeto. Se ejecutan como respuesta

a un evento, por ejemplo al dar click en un botón de comando. También pueden ser

invocados explícitamente en el programa.

Eventos

Un evento es la capacidad de un objeto de reaccionar cuando ocurre una

determinada acción (acción y reacción). Como respuesta a un evento se envía un mensaje y

se ejecuta un determinado método (procedimiento).

Mensajes

Un mensaje es una llamada a un método (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 están

constantemente recibiendo, interpretando y respondiendo a mensajes de otros objetos.

Clases

Una clase es una descripción para producir objetos de esa clase o tipo. Es decir se

trata de una generalización de un tipo específico 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 CARACTERÍSTICAS DE LA POO.

Las características fundamentales de la programación orientada a objetos son:

Abstracción

Encapsulamiento

Herencia

Polimorfismo

Abstracción

Page 21: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

21 DE 204

La abstracción 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 podría decir que es “úsese el objeto y

olvídese de como funciona en forma interna”.

Por ejemplo, para manejar una computadora no necesitamos saber como funcionan

sus circuitos electrónicos, en términos de corriente, tensión, etc.

Encapsulamiento

Esta característica permite ver un objeto como una “caja negra” autocontenida en la

que se ha metido de alguna manera toda la información que maneja dicho objeto. Esto

permite manipular los objetos como unidades básicas, permaneciendo oculta su estructura

interna.

Herencia

La herencia es la característica que permite compartir automáticamente propiedades y

métodos entre objetos. Es decir, se pueden crear nuevas clases de objetos en base a clases

existentes. Más concreto, un objeto puede heredar un conjunto general de propiedades y

métodos a las que puede añadir aquellas características que son específicas suyas. El

usuario de Visual Basic no dispone de esta característica.

Polimorfismo

Polimorfismo, del griego cuyo significado es “muchas formas”, es la característica que

permite implementar múltiples formas de un mismo método, dependiendo cada una de ellas

de la clase sobre la que se realiza la implementación. Esto hace posible que se puede

acceder a una variedad de métodos distintos (todos con el mismo nombre) utilizando

exactamente el mismo medio de acceso.

2.4 LOS OBJETOS DE VISUAL BASIC.

Visual Basic soporta la abstracción, la encapsulación, el polimorfismo y la reutilización

de código.

Page 22: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

22 DE 204

La reutilización de código es la capacidad de trasladar características de un objeto a

otro, lo que se logra con alguna forma de herencia. Esto se consigue mediante la creación y

uso del objeto.

Los objetos de Visual Basic están divididos en dos tipos: controles y contenedores.

Los controles son un medio gráfico que permiten a los usuarios interactuar con la

aplicación para la manipulación de datos y ejecución de tareas. Son ejemplo de controles:

etiquetas, cuadros de texto, botones de comando, casillas de verificación, botones de

opción, 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 más utilizados tenemos a los formularios, marcos y

cuadrículas.

El formulario más los controles constituyen la interfaz de la aplicación.

2.5 REFERENCIANDO OBJETOS.

La sintaxis para referenciar objetos es la siguiente:

OBJETO.PROPIEDAD = VALOR

Por ejemplo, para establecer el título de un formulario a “Visual Basic es fácil”, la

orden sería:

Form1.Caption = “Visual Basic es fácil”

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

Page 23: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

23 DE 204

Para aclarar este concepto desarrollaremos la siguiente aplicación (practica 00), la

cual consiste en un formulario, un cuadro de texto y un botón de comando. El usuario debe

ingresar un mensaje en el cuadro de texto y al pulsar el botón de comando, el mensaje

recientemente ingresado, se coloca como título 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 botón de comando e ingrese el siguiente código:

Private Sub Command1_Click()

Form1.Caption = Text1.Text

End Sub

Seguidamente guarde y proceda ejecutar su aplicación. Como puede verificar, el

evento Click se dispara cada vez que el usuario pulsa (hace click) sobre un control.

2.7 CONVENCIÓN DE NOMBRES PARA LOS OBJETOS

La convención a seguir en el presente manual- para dar nombre a los objetos -

consiste en utilizar ciertos prefijos (extensión), los cuales indicaran el tipo de objeto del que

se trata.

Prefijo Objeto

Frm Formulario

Fra Marco

Page 24: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

24 DE 204

Lbl Etiqueta

Txt Cuadro de texto

Cmd Botón de comando

Chk Casilla de verificación

Opt Botón de opción

Lst Cuadro de lista

Cbo Cuadro combinado

Tim Cronómetro

HS Barra de desplazamiento horizontal

VS Barra de desplazamiento vertical

Pic Cuadro de imagen

Img Imagen

Drv Cuadro de lista de unidades

Dir Cuadro de lista de directorios

Fil Cuadro de lista de archivos

Ole Contenedor OLE

Grd Cuadrícula

Gra Gráfico

Ctr 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

Métodos

Herencia

Polimorfismo

Page 25: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

25 DE 204

CAPÍTULO III

3.1 EL LENGUAJE

Visual Basic es un lenguaje de programación basado en el lenguaje BASIC, al cual

incorpora la funcionalidad de la programación orientada a objetos.

El código de Visual Basic se almacena en módulos, donde cada módulo está

subdividido en distintas secciones, una para cada objeto del módulo. Cada sección de

código puede contener uno o más procedimientos, formados por declaraciones de

constantes y variables, expresiones, sentencias de control y llamadas a procedimientos y/o

funciones. En este capítulo vamos a analizar los diferentes elementos que intervienen al

momento de realizar el código para una aplicación.

3.1.1 TIPOS DE DATOS

Los datos con los que trabajaremos probablemente incluyan información relacionada

con números, dinero, nombres, descripciones, fechas, etc. Cada dato corresponde a un

determinado tipo, es decir, pertenece a una categoría de datos que se manipulan de

maneras similares.

Tipo Descripción Rango

Integer Entero (2 bytes) -32768 a 32767

Long Entero largo (4 bytes) -2147483648 a 2147483647

Single Punto flotante de simple precisión (4 bytes) -3.40E+38 a 3.40E+38

Double Punto flotante de doble precisión (8 bytes) -1.79D+308 a 1.79D+308

Currency Monetario (8 bytes) +/-922337203685477.5807

Byte Carácter (1 byte) 0 a 255

String Cadena de caracteres (1 byte por carácter) Aproximadamente hasta 64K (65400

caracteres)

Boolean Lógico (2 bytes) True o False

Page 26: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

26 DE 204

Date Fecha/Hora (8 bytes) 01/ENERO/00 a

31/DICIEMBRE/9999

Variant

(por omisión)

Cualquier tipo de dato Con números hasta el intervalo de

un tipo Double. Con caracteres 22

bytes + 1 byte por carácter

Tabla 4. Tipos de datos en VB.

3.2 IDENTIFICADORES

Los identificadores son nombres dados a los elementos de una aplicación, tales como

constantes, variables, procedimientos, funciones, objetos, etc. Un identificador es una

secuencia de caracteres que puede ser de hasta 255 caracteres. Para la construcción de

identificadores debemos tener presente las siguientes reglas:

Deben comenzar con una letra y no puede contener espacios en blanco.

Letras, dígitos y caracteres subrayados están permitidos después del primer carácter.

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 ejecución 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 más apropiado a su valor.

El valor de una constante puede ser numérico, alfanumérico, carácter o de tipo fecha

y hora. Por ejemplo:

Const MAXIT = 25

Const PI As Double = 3.141592

Const CADENA As String = “Visual Basic es fácil”

Const FECHA_POR_DEFECTO = #01/01/99#

Page 27: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

27 DE 204

3.4 VARIABLES

Una variable almacena un dato cuyo valor puede cambiar durante la ejecución 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 instrucción Dim puede realizar más de una declaración, teniendo en cuenta que la

cláusula 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 omisión) 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 símbolos que indican cómo serán manipulados los operandos.

Los operandos son los datos (constantes y/o variables) sobre los que actúa los operadores

para producir un determinado resultado.

Operadores aritméticos

Page 28: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

28 DE 204

Operador Significado

^ Exponenciación

- Menos unario

* / Multiplicación y división

\ División entera

Mod Resto de una división entera

+ - Suma y resta

Tabla 5. Operadores aritméticos.

Operadores relacionales

Operador Significado

= Igual que

Diferente que

Menor que

Mayor que

Menor o igual que

Mayor o igual que

Tabla 6. Operadores relacionales.

Operadores lógicos

Operador Significado

Not Negación

And Conjunción

Or Disyunción inclusiva

Xor Disyunción exclusiva

Eqv Equivalencia (opuesto a Xor)

Imp Implicación (falso si primer operando verdadero y

segundo operando falso)

Tabla 7. Operadores lógicos.

Operadores de cadenas de caracteres

Operador Significado

Page 29: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

29 DE 204

& Concatenación

Like Compara dos cadenas de caracteres

Tabla 8. Operadores de cadenas de caracteres.

3.6 SENTENCIAS.

Una sentencia es una línea de código que indica una o más operaciones a realizar.

Una línea 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 más de una línea física utilizando el

carácter de continuación de línea (un espacio en blanco seguido del carácter 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 serán estudiados en

capítulos posteriores.

Otra posibilidad de proporcionar datos o de visualizarlos durante la ejecución de una

aplicación es utilizando cajas de diálogos predefinidas. Debido a que esta es la forma más

simple de realizar la E/S de datos nos ocuparemos de ella.

Entrada de datos

La entrada de datos permite proporcionar valores durante la ejecución de una

aplicación. Estos valores son ingresados generalmente mediante el teclado y asignados a

variables del programa. En Visual Basic una forma de ingresar datos a la aplicación es

Page 30: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

30 DE 204

utilizando la caja de diálogo predefinida provista por la función InputBox. Su sintaxis es la

siguiente:

VARIABLE = InputBox(MENSAJE [, TÍTULO] [, PREDETERMINADO])

Donde MENSAJE es el mensaje que indica al usuario el tipo de información 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 diálogo solicitando la

información requerida:

Figura 18. Caja de dialogo

Como puede observar, el resto de los parámetros son opcionales. TÍTULO es el texto que se

muestra en la barra de título del cuadro de diálogo, si se omite TÍTULO, el nombre de la

aplicación es la que se muestra en la barra de título. PREDETERMINADO es una expresión

de cadena que aparece en el cuadro de texto como respuesta predeterminada si no se

proporciona ningún otro texto. Si se omite PREDETERMINADO el cuadro de texto se

muestra vacío. 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 diálogo que se presenta en la figura siguiente:

Page 31: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

31 DE 204

Figura 19. Caja de entrada de datos.

Salida de datos

La salida de datos generalmente consiste en tomar la información de la memoria y

mostrarla en pantalla. Para realizar la operación de salida de datos en Visual Basic,

podemos utilizar el procedimiento MsgBox, cuya sintaxis es como sigue:

MsgBox MENSAJE [, ICONO, TÍTULO]

MENSAJE es La cadena que se muestra como salida en la caja de diálogo. ICONO es

se refiere al estilo de icono que se va ha utilizar y TÍTULO es una texto que se mostrará en

la barra de título de la caja de diálogo. Por ejemplo:

Dim EDAD As Integer

EDAD = InputBox (“Ingrese su edad?”)

EDAD = EDAD + 10

MsgBox “Dentro de 10 años su edad será:” & Str(EDAD)

Si ejecuta el código anterior e ingresa su edad (en mi caso 29 años) la salida debe

ser similar a la figura siguiente:

Figura 20. Caja de salida de datos.

Para que pueda ejecutar el código anterior (practica 1), proceda a crear una nueva

aplicación y haga doble click sobre el formulario, luego ingrese el código anterior:

Private Sub Form_Load ()

Page 32: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

32 DE 204

Dim EDAD As Integer

EDAD = InputBox (“Ingrese su edad?”)

EDAD = EDAD + 10

MsgBox “Dentro de 10 años su edad será:” & Str(EDAD)

End Sub

A manera de observación cabe señalar que la función Str() se utiliza para convertir

una expresión numérica 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 evalúa una determinada condición y en función a ello ejecuta

uno de entre dos posibles grupos de sentencias. Su sintaxis es la siguiente:

If CONDICIÓN Then

SENTENCIAS_VERDADERAS

Else

SENTENCIAS_FALSAS

End If

Si CONDICIÓN es verdadera se ejecuta el grupo de SENTENCIAS_VERDADERAS.

Si CONDICIÓN es falsa se ejecuta el grupo de SENTENCIAS_FALSAS.

Por ejemplo (practica 2), el siguiente código determina si un entero A es o no

divisible por otro entero B:

Dim A As Integer, B As Integer

A = InputBox(“Ingrese A?”)

Page 33: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

33 DE 204

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

3.8.2 Estructura If . . . Then . . . ElseIf

Este tipo de estructura se utiliza para elegir una de entre múltiples alternativas. Su

sintaxis es como sigue:

If CONDICIÓN_1 Then

SENTENCIAS_1

ElseIf CONDICIÓN_2 Then

SENTENCIAS_2

.

Else

SENTENCIAS_FALSAS

End If

Si CONDICIÓN_1 es verdadera se ejecuta el grupo de SENTENCIAS_1, y si es no se

cumple, se evalúan secuencialmente las condiciones siguientes hasta Else, ejecutándose

las sentencias correspondientes al primer ElseIf cuya condición sea verdadera. Si todas las

condiciones son falsas, se ejecutan las SENTENCIAS_FALSAS correspondientes a Else.

Por ejemplo (practica 3) considere el siguiente código, el cual imprime el nombre del

mes correspondiente a los números del 1 al 12.

Dim N As Integer

N = InputBox(“Ingrese N?”)

If N = 1 Then

Page 34: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

34 DE 204

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

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 expresión con diferentes valores. Su sintaxis es la

siguiente:

Select Case EXPRESIÓN_TEST

Case EXPRESIÓN_1

SENTENCIAS_1

Case EXPRESIÓN_2

SENTENCIAS_2

.

.

.

Case Else

SENTENCIAS_FALSAS

End Select

Page 35: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

35 DE 204

En este caso se comprueba el valor de EXPRESIÓN_TEST frente a la lista

expresiones EXPRESIÓN_1, EXPRESIÓN_2, . . . y así sucesivamente, y busca el primer

Case que incluya el valor evaluado en EXPRESIÓN_TEST, ejecutando a continuación el

bloque de sentencias correspondiente. Si no existe un valor igual a EXPRESIÓN_TEST,

entonces se ejecuta las SENTENCIAS_FALSAS correspondientes al Case Else.

A manera de ejemplo (practica 4) vamos a codificar el programa de la sección

anterior el cual imprime el nombre del mes correspondiente a los números del 1 al 12. Pero

en esta vez utilizaremos la estructura Select Case (compare con cual de ambas estructuras

es más cómodo 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 también se puede utilizar de la siguiente manera:

Page 36: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

36 DE 204

(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

3.8.6 Estructura For . . . Next

Esta estructura es utilizada para ejecutar un bucle un número determinado de veces.

El número de iteraciones deberá ser conocido de antemano. Su sintaxis es la que se

presenta a continuación:

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 iteración.

La sentencia Exit For permite salir del bucle For . . . Next antes de que este finalice.

Page 37: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

37 DE 204

Por ejemplo, el siguiente código imprime los cuadrados de los números enteros del 1

al 25.

Dim C As Integer

For C = 1 To 25

Print C

Next

Para que este código 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 número de iteraciones no se

conoce por anticipado y el cuerpo del bucle se repite mientras se cumple una determinada

condición. Su sintaxis es la siguiente:

While CONDICIÓN

SENTENCIAS_REPETITIVAS

Wend

La estructura While . . . Wend evalúa la CONDICIÓN en cada iteración y si el

resultado es verdadero continúa su ejecución. El bucle termina cuando CONDICIÓN es

falsa.

A manera de ejemplo (practica 6), considere el siguiente código, el cual imprime en

pantalla la suma de los N primeros números 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

Page 38: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

38 DE 204

Wend

MsgBox “La suma es S= ” & Str(S)

3.8.8 Estructura Do . . . Loop

Esta estructura ejecuta un bucle mientras una condición dada sea cierta, o hasta que

una condición dada sea cierta. La condición puede ser verificada antes o después de

ejecutarse el cuerpo del bucle. Su sintaxis es:

Formato 1: Do [While/Until] CONDICIÓN

SENTENCIAS_REPETITIVAS

[Exit Do]

Loop

Formato 2: Do

SENTENCIAS_REPETITIVAS

[Exit Do]

Loop [While/Until] CONDICIÓN

Esta estructura (como se puede observar en ambos formatos) permite realizar varias

estructuras diferentes dependiendo si la condición de terminación 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

Page 39: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

39 DE 204

Loop While C <= N

MsgBox “El factorial de ” & Str(N) & “ es=” & Str(FACT)

3.8.9 Sentencia GoTo

Transfiere el control a una línea específica de código, identificada por una etiqueta o

por un número de línea. Su sintaxis es:

GoTo ETIQUETA/NUMERO_LÍNEA

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

programación que requieran el uso del GoTo, es decir, no es un elemento necesario para

hacer completo el lenguaje.

Sin embargo, el GoTo es una instrucción que, si su usa con cuidado, puede ser

beneficiosa en ciertas situaciones de programación.

Por ejemplo podría escribir un bucle para imprimir los cuadrados de los números

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 códigos difíciles de interpretar y de

mantener. Por ello, se recomienda su uso solamente en ocasiones excepcionales. La tarea

que vaya a desempeñar 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 colección

finita de datos del mismo tipo, que comparten un nombre común, a los que se puede acceder

por la posición (índice) que ocupa cada uno de ellos dentro del arreglo. Cada elemento del

Page 40: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

40 DE 204

arreglo es una variable que puede contener un número o una cadena de caracteres,

dependiendo del tipo de arreglo que se declare.

Los arreglos en Visual Basic se clasifican en estáticos y dinámicos.

3.9.1 Arreglos estáticos

Son aquellos arreglos cuyo tamaño no puede cambiar en tiempo de ejecución. La

declaración de un arreglo estático se puede realizar mediante la siguiente sintaxis:

Dim NOMBRE_ARREGLO(DIMENSONES) As TIPO

Donde DIMENSIONES es una lista de números, separados por comas y que definen

las dimensiones del arreglo. Esta lista puede ser de la siguiente forma:

DIMENSIÓN_1, DIMENSIÓN_2, DIMENSIÓN_3, . . ., DIMENSIÓN_ 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 precisión.

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

Page 41: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

41 DE 204

Como se observa la numeración de los elementos de un arreglo por defecto comienza

en cero, para hacer que la numeración comience en 1, debe ingresar la siguiente orden en

la sección de Declaraciones del módulo de formulario:

Figura 21, Ventana de código de arreglos.

Luego, para declarar los mismos arreglos de los casos anteriores, las sentencias

serían 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 consideración del lector.

3.9.2 Arreglos dinámicos

Son aquellos arreglos en los que su tamaño puede definirse o modificarse en tiempo

de ejecución. Para declara una arreglo dinámico utilice la siguiente sintaxis:

Dim NOMBRE_ARREGLO() As TIPO

Para definir el tamaño del arreglo utilizar la siguiente sintaxis:

ReDim NOMBRE_ARREGLO(NÚMERO_ELEMENTOS)

Page 42: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

42 DE 204

Cada vez que se ejecuta la sentencia ReDim, todos los valores almacenados en el

arreglo se pierden. Para definir o cambiar el tamaño del arreglo conservando los valores del

mismo use la siguiente sintaxis:

ReDim Preserve NOMBRE_ARREGLO(NÚMERO_ELEMENTOS)

Para liberar el espacio de memoria utilizado por arreglos dinámicos que ya no son

útiles, utilizar la sintaxis:

Erase NOMBRE_ARREGLO

La orden Erase asigna cero a cada elemento de los arreglos numéricos y nulo (“”) a

cada elemento de los arreglos de cadena de caracteres.

A manera de ejemplo (practica 8) considere el siguiente código que declara y hace

uso de un arreglo dinámico:

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 colección de datos de

diferentes tipos, conocidos como “campos”, los cuales se encuentran evidentemente

relacionados. Un registro sólo se puede ser creado en la sección de declaraciones de un

módulo. La sintaxis correspondiente es:

Private Type NOMBRE_REGISTRO

DECLARACIONES_DE_LOS_MIEMBROS

End Type

Por ejemplo considere el siguiente código que define la estructura ALUMNO:

Page 43: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

43 DE 204

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 párrafo anterior se pueden escribir de una manera más fácil,

más legible y más 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 básicos en programación. A continuación

serán estudiadas detalladamente.

Page 44: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

44 DE 204

Declaración de una función

Una función es un procedimiento que cuando se ejecuta devuelve un único resultado

al procedimiento que la invocó. La sintaxis correspondiente a la declaración de una función

es:

Function NOMBRE_FUNCIÓN([LISTA_PARÁMETROS]) [As TIPO]

SENTENCIAS

[NOMBRE_FUNCIÓN = VALOR_RETORNADO]

[Exit Function]

End Function

Donde LISTA_PARÁMETROS es una secuencia de variables separadas por comas

que se corresponden con los argumentos pasados cuando es invocada la función.

Para especificar el tipo de datos que será retornado por la función utilice la cláusula

opcional As TIPO, el tipo es Variant por omisión.

El valor retornado por la función es almacenado en su propio nombre, es decir en

NOMBRE_FUNCIÓN, que actúa como variable dentro del cuerpo de la función. Si no se

efectúa esta asignación el valor devuelto será cero si la función es de tipo numérica, nulo

(“”) si la función es de tipo cadena, o vacío (Empty) si la función es de tipo Variant.

La cláusula opcional Exit Function permite salir de una función antes de que la

función finalice, en caso sea esto necesario.

La sintaxis para la llamada a una función es de la siguiente forma:

VARIABLE = NOMBRE_FUNCIÓN([LISTA_ARGUMENTOS])

Donde LISTA_ARGUMENTOS es una secuencia de constantes, variables o

expresiones separadas por comas. El número de argumentos debe ser igual al número de

parámetros de la función. Los tipos de los argumentos deben coincidir con los tipos de sus

correspondientes parámetros.

Page 45: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

45 DE 204

A manera de ejemplo (practica 9) considere la implementación de la siguiente

función:

32)( 2 xxxf

En la sección de Declaraciones del módulo de formulario ingrese el siguiente código:

Function F(X As Double) As Double

F = X ^ 2 + 2 * X + 3

End Function

Para invocar la función creada recientemente, codifique las siguientes líneas:

Dim A As Double, RESP As Double

A = InputBox(“Ingrese A?”)

RESP = F(A)

MsgBox (Str(RESP))

Paso de argumentos a una función

El paso de argumentos a una función es la forma como se ingresan los datos y

variables al interior de la función 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 parámetro en el cuerpo de la

función, también se produce en el argumento correspondiente de la llamada a la función.

Esta forma de pasar los argumentos a una función es útil para funciones que devuelven más

de un valor. Por ejemplo, considere la siguiente función que calcula las raíces reales de una

ecuación cuadrática Ax Bx C2 0 .

(Practica 10)

Page 46: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

46 DE 204

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 raíces reales

Else

RAIZ = False ' Falso si no hay raíces reales

End If

End Function

La llamada a esta función se puede realizar de la manera que se presenta a

continuación:

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 RAÍCES REALES”

End If

Paso de argumentos por valor

Cuando se ejecuta una función, se podrá especificar que el valor de un argumento no

sea cambiado por esta función, pasando dicho argumento por valor. Para ello se debe

Page 47: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

47 DE 204

anteponer la palabra reservada ByVal a la declaración del parámetro en la cabecera de la

función. Por ejemplo:

Function F(ByVal X As Double) As Double

F = X ^ 2 + 2 * X + 3

End Function

La cabecera de la función F especifica que X será pasado por valor y no por

referencia.

Funciones recursivas

Se dice que una función es recursiva si se llama a sí misma. Por ejemplo la función

FACTORIAL cuyo código se presenta a continuación 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_PARÁMETROS])

SENTENCIAS

[Exit Sub]

End Sub

La explicación es análoga a la dada para las funciones. Sin embargo, un

procedimiento no puede ser utilizado en una expresión, ya que un procedimiento no retorna

ningún valor a través de su nombre.

Page 48: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

48 DE 204

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 código corresponde a un procedimiento que calcula e

imprime la suma de los N primeros números 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 podría ser de la forma: Call SUMA_IMPAR(25)

Activiades a desarrollar (tarea)

Entregar resumen del capitulo

Complete el siguiente cuadro.

Operador Significado

Exponenciación

Menos unario

Multiplicación y división

División entera

Resto de una división entera

Suma y resta

Page 49: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

49 DE 204

Firma de Recibido __________________

CAPÍTULO 4

4.1 USO DE LOS CONTROLES

Los controles son aquellos objetos que se encuentran dentro de un contenedor y que

permiten la interacción entre el usuario y la aplicación, ya sea para manipular datos y/o

ejecutar tareas.

En Visual Basic, los controles suelen ser agrupados en tres categorías:

Controles básicos

Controles complementarios

Controles externos

Los controles básicos 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 verificación, un cuadro combinado o un cronómetro.

Los controles externos se refieren a aquellos controles creados por terceros. Este tipo

de controles son llamados ActiveX.

4.2 CONTROLES BÁSICOS

Los controles básicos lo conforman las etiquetas, cuadros de texto y botones de

comando, debido a que cualquier interfaz se puede implementar con sólo estos tres objetos.

Etiqueta

Una etiqueta es un control que permite presentar texto de solo lectura. Se utiliza para

mostrar títulos 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 ejecución.

Propiedad Descripción

Alignment Especifica la forma como se alineará el texto.

AutoSize Especifica si se cambia automáticamente el tamaño del control para que

quepan sus contenidos.

Page 50: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

50 DE 204

BackColor,

ForeColor

Especifica el color de fondo y de primer plano empleado para mostrar el

texto.

BackStyle Especifica si el fondo del control es transparente u opaco.

Caption Especifica el texto que se muestra en el control.

WordWrap Especifica si la etiqueta se extiende a más de una línea cuando el texto es

amplio.

Tabla 9. Propiedades del botón “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 aplicación. El valor de un cuadro de texto

por lo general se asocia a una variable de memoria.

Propiedad Descripción

Enabled 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

ejecución.

MaxLenght Especifica la longitud máxima (en caracteres) que puede

escribirse en el control.

MultiLine Especifica si el control admitirá múltiples líneas.

PasswordChar Determina si se muestran en el control los caracteres

escritos por el usuario o los caracteres de marcador de

posición.

ScrollBars Especifica si se muestran las barras de desplazamiento

horizontales o verticales.

SelLength Especifica el número de caracteres seleccionados.

SelStart Especifica el inicio del texto seleccionado. Si su valor es 0,

el texto seleccionado comienza por el primer carácter.

SelText Contiene el texto seleccionado.

Text Contiene el texto introducido en el control. Puede inicializar

Page 51: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

51 DE 204

el contenido en tiempo de diseño.

Tabla 10. Propiedades del botón “cuadro de texto”

Los eventos asociados a un cuadro de texto son los siguientes:

Evento Descripción

Change Ocurre cuando se cambia el contenido del control utilizando

el teclado o el ratón.

KeyPress Ocurre cuando se pulsa una tecla.

Tabla 11. Ebentos del cuadro de texto.

Botón de comando

Un botón de comando es un control que suele emplearse para ejecutar una acción,

como cerrar un formulario, imprimir un informe, etc.

Propiedad Descripción

Cancel Especifica si el control responderá a la tecla ESC, por lo

general para terminar la aplicación.

Caption Muestra un título para el control.

Default Especifica si el control responderá a la tecla ENTRAR, sin

importar la ubicación del enfoque.

Enabled Permite habilitar o deshabilitar el control.

Picture Especifica una imagen tipo icono para el control.

Style Especifica la apariencia del control, ya sea estándar (estilo

estándar de Windows) o gráfica (con una imagen

personalizada).

Tabla 12. Propiedades del botón “botón de comando”

Los botones de comando suelen responder al evento Click, cuya descripción es:

Evento Descripción

Page 52: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

52 DE 204

Click Ocurre cuando el usuario hace click sobre el control.

Tabla 13. Eventos del “botón de comando”

A manera de ejemplo (practica 11) vamos a desarrollar la siguiente aplicación. Esta

consiste en un cajero automático 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 aplicación que permita la lectura de la cantidad a retirar e indique el

menor número de billetes a utilizar.

Figura 22. GUI de Cajero

Para el desarrollo de la presente aplicación 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 según se indica:

Form1

Nombre FrmCajero

BorderStyle 3-Fixed Dialog

Caption Cajero automático

Page 53: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

53 DE 204

Label1

Nombre LblCantidad

AutoSize True

Caption Cantidad a retirar:

Label2

Nombre LblB10

AutoSize True

Caption Billetes de S/. 10

Label3

Nombre LblB20

AutoSize True

Caption Billetes de S/. 20

Label4

Nombre LblB50

AutoSize True

Caption Billetes de S/. 50

Label5

Nombre LblB100

AutoSize True

Caption Billetes de S/. 100

Label6

Nombre LblB200

AutoSize True

Caption Billetes de S/. 200

Text1

Nombre TxtCantidad

Text

Text2

Page 54: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

54 DE 204

Nombre TxtB10

Text

Text3

Nombre TxtB20

Text

Text4

Nombre TxtB50

Text

Text5

Nombre TxtB100

Text

Text6

Nombre TxtB200

Text

Command1

Nombre CmdAceptar

Caption &Aceptar

Command2

Nombre CmdLimpiar

Caption &Limpiar

Command3

Nombre CmdSalir

Caption &Salir

Para añadir código a la aplicación haga doble click sobre el botón “Aceptar” e ingrese

lo siguiente:

Page 55: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

55 DE 204

Private Sub CmdAceptar_Click ()

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 múltiplo de 10”

TxtCantidad = “”

TxtCantidad.SetFocus

End If

End Sub

Luego, haga doble click sobre el botón “Limpiar” y añada el siguiente código:

Private Sub CmdLimpiar_Click()

TxtCantidad = “”

TxtB200 = “”

TxtB100 = “”

TxtB50 = “”

TxtB20 = “”

TxtB10 = “”

TxtCantidad.SetFocus

Page 56: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

56 DE 204

End Sub

Finalmente dar doble click sobre el botón “Salir” y añada el siguiente código:

Private Sub CmdSalir_Click ()

End

End Sub

En el código anterior hemos utilizado el método 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 básicos en

aplicaciones en las cuales su uso facilita o mejora el diseño de la interfaz. Como el lector

podrá verificar, algunos controles son más adecuados que otros dependiendo del tipo de

aplicación que se pretenda desarrollar.

Marco

Un marco es un objeto contenedor que puede utilizarse para agrupar casillas de

verificación, botones de opción, botones de comando, etc.

Propiedad Descripción

Caption Muestra un título para el control.

Tabla 14. Propiedades del control marco.

Casilla de verificación

Una casilla de verificación se utiliza para alternar entre dos posibles valores

(Activado/Desactivado). Cada casilla de verificación es independiente de las demás ya que

cada una tiene su propio nombre (Name). Puede utilizar casillas de verificación en grupos

Page 57: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

57 DE 204

para mostrar múltiples opciones entre las cuales el usuario puede seleccionar todas las que

desee a la vez.

Propiedad Descripción

Caption Muestra un título para el control.

Value Devuelve o establece el estado del control, puede ser:

Desactivado (0), Activado (1).

Tabla 15. Propiedades de la casilla de verificación.

Las casillas de verificación suelen responder al evento true.

Botón de opción

Un botón de opción se utiliza para alternar entre dos posibles valores

(Activado/Desactivado), de manera similar a las casillas de verificación, la diferencia radica

en que de un grupo de botones de opción el usuario sólo puede seleccionar un único botón

a la vez.

Propiedad Descripción

Caption Muestra un título para el control.

Value Devuelve o establece el estado del control, puede ser:

Desactivado (Falso), Activado ( rae).

Tabla 16. Propiedades del boton de opción.

Los botones de opción también suelen responder al evento lic.

A manera de ejemplo (practica 12) vamos a desarrollar la siguiente aplicación, 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 verificación “Convertir a mayúsculas”, todo el texto que haya

escrito en el cuadro de texto se presentará en mayúsculas y todo texto que escriba a

continuación (mientras la opción esté activada) también deberá aparecer en mayúsculas.

Page 58: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

58 DE 204

Figura 23. GUI del editor

Para el desarrollo de la presente aplicación proceda a ubicar los siguientes controles

en el formulario:

1 cuadro de texto

2 marcos

3 botones de opción

4 casillas de verificación

Una vez ubicados los controles, establezca las propiedades según se indica:

Form1

Nombre FrmEditor

BorderStyle 3-Fixed Dialog

Caption Editor

Text1

Nombre TxtMensaje

ForeColor &H000000FF&

Text

Frame1

Nombre FraColor

Caption Color

Page 59: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

59 DE 204

Frame2

Nombre FraEstilo

Caption Estilo

Option1

Nombre OptRojo

Caption Rojo

ForeColor &H000000FF&

Value True

Option2

Nombre OptVerde

Caption Verde

ForeColor &H00008000&

Option3

Nombre OptAzul

Caption Azul

ForeColor &H00C00000&

Check1

Nombre ChkNegrita

Caption Negrita

Font Arial (Negrita)

Check2

Nombre ChkCursiva

Page 60: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

60 DE 204

Caption Cursiva

Font Arial (Cursiva)

Check3

Nombre ChkSubrayado

Caption Subrayado

Font Arial (Subrayado)

Check4

Nombre ChkMayuscula

Caption Convertir a mayúsculas

Una vez establecidas las propiedades, proceda a ingresar el código que se indica a

continuación:

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

Page 61: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

61 DE 204

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)

Page 62: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

62 DE 204

Dim CAR As String * 1

If ChkMayuscula.Value Then

CAR = UCase(Chr(KeyAscii))

KeyAscii = Asc(CAR)

End If

End Sub

La función RGB() especifica el color que se asigna a la propiedad ForeColor.

La función UCase() retorna una cadena de caracteres en mayúsculas.

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 más de dichos elementos. Si el número de elementos

supera el número que puede mostrarse, se agregará automáticamente una barra de

desplazamiento al control.

Propiedad Descripción

List Contiene los elementos de la lista. Puede definirlos en

tiempo de diseño.

ListCount Especifica el número de elementos de la lista. Su valor

siempre es uno más que el mayor valor de ListIndex.

ListIndex Especifica el número 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 Devuelve el número de elementos seleccionados.

Selected Especifica si un elemento de la lista está seleccionado.

Page 63: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

63 DE 204

Sorted Especifica si los elementos de la lista se ordenan

alfabéticamente.

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 métodos que se pueden utilizar para un cuadro de lista son los siguientes:

Método Descripción

AddItem Agrega un nuevo elemento a la lista.

Clear Elimina todos los elementos contenidos en la lista.

RemoveItem 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

sólo se podrá ingresar un dato sino también seleccionarlo de la lista. Presenta las mismas

propiedades, eventos y métodos que el cuadro de lista a excepción de lo siguiente:

Propiedad Descripción

Style 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 sólo 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 sólo

una lista desplegable.

Tabla 19. Propiedades del cuadro combinado.

Page 64: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

64 DE 204

Como ejemplo (practica 13) del uso de listas vamos a desarrollar una aplicación 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 aplicación cursos

Para el desarrollo de la presente aplicación 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 según se indica:

Form1

Nombre FrmCursos

BorderStyle 3-Fixed Dialog

Page 65: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

65 DE 204

Caption Cursos

Label1

Nombre LblCurso

AutoSize True

Caption Ingrese nuevo curso:

Label2

Nombre LblSeleccionar

AutoSize True

Caption Seleccione un curso:

Label3

Nombre LblProgramado

AutoSize True

Caption Curso programado:

Text1

Nombre TxtCurso

Text

List1

Nombre LstSeleccionar

List2

Nombre LstProgramado

Command1

Nombre CmdAgregar

Page 66: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

66 DE 204

Caption

Picture C:\FundVB\Bitmaps\AddItem.Bmp

Style 1-Graphical

Command2

Nombre CmdAgregarTodo

Caption

Picture C:\FundVB\Bitmaps\AddAll.Bmp

Style 1-Graphical

Command3

Nombre CmdQuitar

Caption

Picture C:\FundVB\Bitmaps\Remove.Bmp

Style 1-Graphical

Command4

Nombre CmdQuitarTodo

Caption

Picture C:\FundVB\Bitmaps\RemoveAll.Bmp

Style 1-Graphical

Command5

Nombre CmdAnnadir

Caption &Añadir

Default True

Seguidamente proceda a ingresar el código que se indica a continuación:

Private Sub CmdAnnadir_Click()

LstSeleccionar.AddItem TxtCurso

Page 67: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

67 DE 204

TxtCurso = “”

TxtCurso.SetFocus

End Sub

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

Page 68: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

68 DE 204

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 continuación mostraremos un ejemplo (práctica 14) del uso de los cuadros

combinados. Para tal fin vamos a desarrollar una aplicación que permita realizar consultas

acerca de un determinado curso. La relación de cursos se presentará mediante un cuadro

combinado, del cual el usuario debe seleccionar el curso de su interés y en seguida se

presentará el nombre del profesor encargado del curso (teoría), el nombre del jefe de

práctica (laboratorio), así como los horarios de teoría y de laboratorio, respectivamente.

Figura 25. GUI de consulta de cursos.

Para el desarrollo de la presente aplicación proceda a ubicar los siguientes controles

en el formulario:

1 etiqueta

1 cuadro de texto

1 cuadro combinado

Page 69: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

69 DE 204

1 botón de comando

En seguida proceda a establecer las propiedades según se indica:

Form1

Nombre FrmConsultaCursos

BorderStyle 3-Fixed Dialog

Caption Consulta de cursos

Label1

Nombre LblCursos

Caption Cursos:

Text1

Nombre TxtCurso

MultiLine True

ScrollBars 2-Vertical

Text

Combo1

Nombre CboCursos

Text

Style 2-Dropdown List

Command1

Nombre CmdSalir

Caption &Salir

Seguidamente proceda a ingresar el código que se indica a continuación:

Dim Matriz(5, 3) As String

Private Sub Form_Load()

Page 70: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

70 DE 204

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) = “Córdoba 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) = “Córdoba Saavedra, Javier”

Matriz(5, 2) = “Córdoba 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

Page 71: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

71 DE 204

Private Sub CboCursos_Click()

Dim P_TEORIA As String, H_TEORIA As String

Dim P_LAB As String, H_LAB As String

P_TEORIA = “Profesor de teoría: ” & Matriz(CboCursos.ListIndex, 0)

H_TEORIA = “Horario de teoría: ” & Matriz(CboCursos.ListIndex, 1)

P_LAB = “Jefe de práctica: ” & 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 combinación de retorno de carro y avance de línea, es

equivalente a Chr(13) + Chr(10).

Para este ejemplo en particular hemos almacenado la información en memoria RAM

mediante el uso de un arreglo bidimensional (Matriz).

Cronómetro

Un cronómetro sirve para controlar el tiempo transcurrido desde el inicio de una

acción.

Propiedad Descripción

Interval Especifica el número de milisegundos que se esperará para

disparar el evento Timer.

El control Cronómetro responde al evento Timer, cuya descripción es:

Evento Descripción

Timer Ocurre cuando el número de milisegundos especificado en

Page 72: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

72 DE 204

la propiedad Interval ha transcurrido.

A manera de ejemplo de los eventos antes mencionados vamos a desarrollar la

siguiente aplicación (práctica 15) que simula el funcionamiento de un reloj digital.

Figura 26. Interfaz grafica de Usurio del Reloj digital.

Para el desarrollo de la presente aplicación proceda a ubicar los siguientes controles

sobre el formulario:

1 etiqueta

1 cuadro de texto

1 cronómetro

1 botón de comando

En seguida proceda a establecer las propiedades según se indica:

Form1

Nombre FrmReloj

BorderStyle 3-Fixed Dialog

Caption Reloj digital

Label1

Nombre LblHora

Caption Hora

Text1

Page 73: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

73 DE 204

Nombre TxtHora

Text

Timer1

Nombre Timer1

Interval 500

Command1

Nombre CmdTerminar

Caption &Terminar

Seguidamente proceda a ingresar el código que se indica a continuación:

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 gráfico si el control no es lo bastante grande para mostrar la imagen completa.

Propiedad Descripción

Page 74: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

74 DE 204

AutoSize Especifica si el control ajusta automáticamente su tamaño

para mostrar un gráfico completo.

Picture Especifica el archivo de imagen para el control.

El evento que suele manejarse para este control es MouseMove, cuya descripción es:

Evento Descripción

MouseMove Ocurre cuando el usuario mueve el ratón 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 más rapidez que un cuadro de imagen.

Propiedad Descripción

Picture Especifica el archivo de imagen para el control.

Stretch Especifica como se ajusta el tamaño del archivo gráfico para

que quepa dentro del control imagen.

Para este control también 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 posición más a la izquierda se corresponde con el valor mínimo, la posición más a

la derecha con el valor máximo, y cualquier otra posición es un valor entre ellos dos.

Propiedad Descripción

Max Especifica el valor máximo que puede tomar la propiedad Value.

Min Especifica el valor mínimo que puede tomar la propiedad Value.

LargeChange Especifica en cuanto cambiará el valor de la propiedad Value cuando el

Page 75: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

75 DE 204

usuario haga click antes o después 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 Descripción

Change Ocurre inmediatamente después que el cuadrado de

desplazamiento ha sido movido.

Scroll Ocurre mientras el cuadrado de desplazamiento está siendo

movido (este evento sólo 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 posición más hacia arriba se corresponde con el valor mínimo, la posición más

hacia abajo se corresponde con el valor máximo, y cualquier otra posición es un valor entre

ellos dos.

Las propiedades y eventos de las barras de desplazamiento horizontal y vertical son

análogas.

Como ejemplo, vamos a construir una aplicación que permita cambiar el color de

fondo de un cuadro de imagen, mediante tres barras de desplazamiento (rojo, verde y azul).

Page 76: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

76 DE 204

Figura 27. GUI de la barra de colores.

Como ejemplo del uso de las barras de desplazamiento y sus eventos

desarrollaremos la siguiente aplicación (práctica 16). Para el desarrollo de la aplicación

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 según se indica:

Form1

Nombre FrmColores

BorderStyle 3-Fixed Dialog

Caption Colores

Label1

Nombre LblRojo

Caption Rojo

Label2

Nombre LblVerde

Page 77: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

77 DE 204

Caption Verde

Label3

Nombre LblAzul

Caption Azul

HScroll1

Nombre HSRojo

LargeChange 10

Max 255

Min 0

SmallChange 1

Value 255

HScroll2

Nombre HSVerde

LargeChange 10

Max 255

Min 0

SmallChange 1

Value 0

HScroll3

Nombre HSAzul

LargeChange 10

Max 255

Min 0

SmallChange 1

Value 0

Page 78: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

78 DE 204

Picture1

Nombre PicFondo

BackColor &H000000FF&

Seguidamente proceda a ingresar el código que se indica a continuación:

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 código 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

válida en tiempo de ejecución. Utilice este control para presentar una lista de todas las

unidades válidas del sistema.

Propiedad Descripción

Drive Especifica la unidad seleccionada en tiempo de ejecución.

Este control responde al evento Change, cuya descripción es la siguiente:

Evento Descripción

Page 79: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

79 DE 204

Change Ocurre cuando el usuario hace click sobre la unidad que

desea seleccionar. El evento Change también 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

ejecución. Utilice este control para mostrar una lista jerárquica de directorios.

Propiedad Descripción

Path Especifica la ruta de acceso actual.

Un cuadro de lista de directorios también 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 ejecución. Utilice este control para mostrar

una lista de los archivos seleccionados por tipo.

Propiedad Descripción

Path Especifica la ruta de acceso actual.

Pattern 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 aplicación que permita el manejo de unidades,

carpetas y archivos (práctica 17). El usuario puede seleccionar la unidad actual de trabajo,

Page 80: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

80 DE 204

la carpeta y el archivo y poder visualizar su contenido (en este caso archivos gráficos

*.JPG).

Figura 28. GUI del visor de imágenes.

Para el desarrollo de la presente aplicación 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 según se indica:

Form1

Nombre FrmVisor

Caption Visor

Label1

Nombre LblUnidad

Caption Unidad

Label2

Page 81: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

81 DE 204

Nombre LblCarpeta

Caption Carpeta

Label3

Nombre LblArchivo

Caption Archivo

Label4

Nombre LblVista

Caption Vista previa

Drive1

Nombre Drive1

Dir1

Nombre Dir1

File1

Nombre File1

Pattern *.JPG

Image1

Nombre ImgVista

Stretch True

Seguidamente proceda a ingresar el código que se indica a continuación:

Private Sub Drive1_Change ()

On Error GoTo DRIVE_ERROR

Dir1.Path = Drive1.Drive

Page 82: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

82 DE 204

Exit Sub

DRIVE_ERROR:

MsgBox “ERROR: Unidad no preparada”, vbCritical, “Error”

Exit Sub

End Sub

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 instrucción On Error activa una rutina de control de errores y especifica la

ubicación de la misma en un procedimiento.

LA FUNCIÓN MSGBOX

A menudo habrá situaciones en las cuales tendrá que presentar algún mensaje (por

ejemplo una pregunta) y en función de la respuesta del usuario se ejecutará una

determinada acción.

Figura 29. GUI de msgbox.

Page 83: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

83 DE 204

La función MsgBox() muestra un cuadro de diálogo predefinido y retorna un valor de

tipo entero dependiendo del botón seleccionado por el usuario. Su sintaxis es de la siguiente

forma:

VALOR = MsgBox(MENSAJE [, BOTÓN + ICONO, TÍTULO])

Donde MENSAJE se refiere a una expresión de cadena que se muestra como

mensaje en el cuadro de diálogo.

BOTÓN es una expresión numérica que se refiere al tipo y cantidad de botones a

utilizar.

ICONO es una expresión numérica que se refiere al estilo de icono que se va ha

utilizar.

TÍTULO es un texto que se mostrará en la barra de título de la caja de diálogo.

Tipo de botón

Valor Botón Nombre

0 Aceptar vbOKOnly

1 Aceptar y Cancelar vbOKCancel

2 Anular, Reintentar, Ignorar vbAbortRetryIgnore

3 Sí, No y Cancelar vbYesNoCancel

4 Sí y No vbYesNo

5 Reintentar y Cancelar vbRetryCancel

Tipo de icono

Valor Icono Nombre

16 Mensaje crítico vbCritical

32 Signo de interrogación vbQuestion

48 Signo de exclamación vbExclamation

64 Signo de información vbInformation

Valores retornados

Valor Botón Nombre

1 Aceptar vbOK

Page 84: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

84 DE 204

2 Cancelar vbCancel

3 Anular vbAbort

4 Reintentar vbRetry

5 Ignorar vbIgnore

6 Sí vbYes

7 No vbNo

Como ejemplo (práctica 18) vamos a construir un formulario que presente un botón

“Salir”, de tal forma que cuando el usuario pulse dicho botón se presente el siguiente

mensaje:

Figura 30. GUI del uso de botones

En caso de que el usuario elija la opción “Sí”, la aplicación debe terminar. En caso

contrario, es decir si el usuario elige la opción “No”, se debe proseguir con la aplicación.

Para el desarrollo del presente ejemplo, proceda a ubicar sobre el formulario un botón

de comando (CmdSalir), a continuación ingresar el siguiente código:

Private Sub CmdSalir_Click()

Dim RESP As Integer

RESP = MsgBox(“Desea terminar la aplicación?”, vbQuestion + vbYesNo, “Pregunta”)

If RESP = vbYes Then

End

End If

End Sub

Para ilustrar mejor (práctica 19) el uso de la función MsgBox () vamos a desarrollar la

siguiente aplicación que permite mostrar los diferentes tipos de botones e iconos generados

por la función.

Page 85: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

85 DE 204

Figura 31. GUI

Para ello proceda a ubicar los siguientes controles en el formulario:

2 cuadros de lista

1 botón de comando

En seguida proceda a establecer las propiedades según se indica:

Form1

Nombre FrmFuncionMsgBox

BorderStyle 3-Fixed Dialog

Caption Función MsgBox

List1

Nombre LstBoton

List2

Nombre LstIcono

Command1

Nombre CmdMensaje

Caption &Mensaje

Seguidamente proceda a ingresar el código que se indica a continuación:

Private Sub Form_Load()

Page 86: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

86 DE 204

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 crítico”

LstIcono.AddItem “Signo de interrogación”

LstIcono.AddItem “Signo de exclamación”

LstIcono.AddItem “Signo de información”

End Sub

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 lógicamente entre si.

Una base de datos se podría 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 aplicación, por ejemplo, podrá utilizar un archivo con estructura de base de

datos para almacenar la configuración de su programa con el objetivo de que esta quede

almacenada cada vez que cierre el programa y posteriormente leer este archivo cuando la

aplicación 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

Page 87: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

87 DE 204

profesionales como SQL, ORACLE, ACCESS, etc. En el siguiente capítulo tratamos este

asunto.

Una base de datos esta compuesta de filas y columnas que físicamente 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 información más pequeña de la base de datos que tiene

significado y un Registro se define como la colección 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 podría considerar como una estructura que representa una

agenda telefónica donde los datos a almacenar son: Nombre, Apellido, Teléfono y Dirección.

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 Rodríguez 809-699-5858 Carretera Mella KM 8 ½

(Mandinga)” sería la primera línea del archivo de la base de datos, el segundo registro sería

la segunda línea del archivo, el tercer registro sería la tercera línea del archivo y así

sucesivamente. Si almacenamos estos datos en un archivo deberíamos de almacenarlo de

la siguiente forma:

Carlos;Rodríguez;809-699-5858;Carretera Mella KM 8 ½ (Mandinga) Pablo;Bucarelly;809-585-6325;Urb. Ralma. Calle #5

Nelson;Pérez;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

Page 88: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

88 DE 204

datos. Se puede utilizar otro carácter pero el más 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 métodos 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 pequeña agenda telefónica 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 (práctica 19 bis “Agenda”):

37

Figura 32. Menú Agenda.

El primer botón servirá para agregar un nuevo contacto o una nueva persona.

• El segundo botón permitirá buscar algún contacto, ya sea por nombre o por el número de

teléfono.

• El tercer botón será utilizado para eliminar un contacto de la base de datos.

• El cuarto botón se utilizará para obtener una lista de todos los contactos que han sido

agregado a la base de datos.

Page 89: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

89 DE 204

• El quinto botón será utilizado para salir de la aplicación.

Establezca los siguientes valores a los controles del formulario anterior para que quede

como se muestra en la imagen anterior:

Page 90: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

90 DE 204

Page 91: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

91 DE 204

Ahora vamos a agregar un nuevo formulario (Form2) para la primera opción del menú

principal.

Haga clic en el menú Project y luego haga clic en la opción Add Form. En el cuadro de

dialogo que aparece haga clic en el botón 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.

Page 92: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

92 DE 204

• El primer botón será utilizado para guardar los datos del nuevo contacto.

• El segundo botón será utilizado para limpiar las cajas de texto y permitir agregar un nuevo

contacto.

• El tercer botón cerrará la ventana de Agregar nuevo contacto.

Establezca los siguientes valores en los controles del nuevo formulario:

Page 93: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

93 DE 204

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 botón “Agregar un nuevo contacto” y escriba en el evento Click

la siguiente línea de código:

Form2.Show 1, Me

La línea de código anterior permite mostrar el segundo formulario. El método Show permite

mostrar un formulario en la pantalla. El “1, Me” es un método 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 opción del menú principal.

Page 94: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

94 DE 204

Active el segundo formulario (Form2) de la ventana de Proyecto (Project) haciendo doble

clic sobre el mismo.

Ahora vamos a codificar el botón de Guardar:

En el evento Click del botón 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.")

Explicación del código anterior:

- Primera línea:

Open "C:\AGENDA\Agenda.dat" For Append As #1

En esta línea de código la única novedad es el método Append que permite agregar

información al final del archivo y si este no existe entonces se crea. No utilizamos el método

Output por la razón de que este método crea nuevamente el archivo y elimina los datos que

tenia anteriormente para sustituirlo con los nuevos datos.

- Segunda línea:

Print #1, Text1.Text & ";" & Text2.Text & ";" & Text3.Text & ";" & Text4.Text

Esta línea permite escribir en una línea del archivo el contenido de cada unas de las cajas

de texto separado con un punto y coma (;), como habíamos explicamos anteriormente.

- Ultimas líneas:

Close #1

Text1.Text = ""

Text2.Text = ""

Text3.Text = ""

Text4.Text = ""

Page 95: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

95 DE 204

Text1.SetFocus

MsgBox ("El nuevo contacto ha sido agregado.")

En estas últimas líneas 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 aplicación y, a continuación, haga clic en el botón Agregar un nuevo contacto.

Debe de aparecer el segundo formulario (Form2). Bien agregue un contacto y haga clic en el

botón Guardar. Inmediatamente este registro se agrega en la base de datos. Más adelante

veremos como leer estos registros.

Detenga la aplicación.

Haga doble clic en el botón 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

Explicación del código 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 botón Cancelar escriba:

Unload Me

Explicación del código anterior:

Esta línea de código permite cerrar el formulario y no la aplicación completa.

El significado de esta línea al castellano es: “DESCARGADME”.

Page 96: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

96 DE 204

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 opción del

menú principal. En este formulario agregaremos todo lo necesario para buscar un contacto,

ya sea por número telefónico o por nombre.

Agregue un nuevo formulario haciendo clic en el menú Project y a continuación, en Add

Form. En el cuadro de dialogo que aparece haga clic en el botón Open.

Aparecerá un nuevo formulario (Form3).

Dibuje un entorno similar al que se muestra en la imagen siguiente en un tercer formulario

(Form3). Hágalo tal y como se ve, no daré los valores de los controles como lo había echo

anteriormente.

Figura 34. Buscar

En el evento Click del botón de comando Buscar escriba el siguiente bloque de código:

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 búsqueda.")

Else

On Error GoTo NOarchivo:

Page 97: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

97 DE 204

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

If UCase(Campo1) = UCase(Text1.Text) And Option1.Value = True Then

MsgBox ("Nombre: " & Campo1 & " Apellido: " & Campo2 & " Teléfono: " & Campo3 & "

Dirección: " & Campo4)

Encontro = 1

End If

If Campo3 = Text1.Text And Option2.Value = True Then

MsgBox ("Nombre: " & Campo1 & " Apellido: " & Campo2 & " Teléfono: " & Campo3 & "

Dirección: " & Campo4)

Encontro = 1

End If

Wend

If Encontro = 0 Then

MsgBox ("No se ha encontrado el contacto especificado.")

End If

Close #1

End If

Page 98: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

98 DE 204

Exit Sub

NOarchivo:

MsgBox ("La base de datos no existe.")

Explicación del bloque de código anterior:

Las primeras tres líneas:

If Len(Trim(Text1.Text)) = 0 Then

MsgBox ("Debe escribir algo en la caja de texto.")

Text1.SetFocus

Este bloque de código permite verificar si la caja de texto se deja vacía, en caso de que se

deje vacía entonces se muestra un mensaje y el cursor se envía 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 traducción del código anterior sería 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

- Línea 4, 5 y 6:

ElseIf Option1.Value = False And Option2.Value = False Then

MsgBox ("Debe seleccionar el tipo de búsqueda.")

Else

Este bloque de código permite verificar si se selecciona una de las opciones del tipo de

búsqueda.

La propiedad Value permite verificar si el botón de opción esta seleccionado o no. Cando

tiene el

valor False indica que el botón no esta seleccionado.

La traducción 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 búsqueda.”)

Page 99: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

99 DE 204

DE LO CONTRARIO

El operador lógico And permite enlazar dos expresiones. Si ambas expresiones se cumplen,

entonces, se ejecutan las líneas de códigos de más abajo.

La cláusula Else (De lo contrario) se ha utilizado para tomar una decisión en caso de que no

se cumpla la condición, es decir, en caso de que se seleccione alguna de las opciones. Si

una da las opciones se selecciona, entonces, toda la codificación que se encuentra debajo

de la cláusula Else se ejecutará.

- Línea 7:

On Error GoTo NOarchivo:

Esta línea de código activa el detector de errores. Si ocurre algún error en la apertura del

archivo, entonces, se ejecuta la codificación que se encuentra debajo en la etiqueta

NOarchivo.

- Líneas 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 sección se declararon todas las variables necesarias para proceder con la

codificación.

La primera variable Linea se utilizará para almacenar cada unas de las líneas de texto del

documento. Las variables Campo1, Campo2, Campo3, Campo4 son variables de tipo

cadena donde se almacenarán temporalmente el contenido de cada campo de la base de

datos. Las variables Posicion1, Posicion2, Posicion3 son variables de tipo entero, donde se

almacenarán 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 búsqueda realizada. Si la variable tiene el valor cero entonces no se

encontró ningún 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.

- Líneas 13, 14, 15:

Page 100: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

100 DE 204

Open "C:\AGENDA\Agenda.dat" For Input As #1

While Not EOF(1)

Line Input #1, Linea

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 línea del archivo y se almacena en la variable Linea.

- Líneas 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 extrañas pero trataré de explicarlo con algunos

ejemplos.

Primeramente empezaré definiendo la función de la sentencia InStr. Esta sentencia permite

obtener la posición de un carácter especificado en la cadena de caracteres, es decir, te

devuelve el número de la posición donde se encuentra ese carácter 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, teléfono y dirección). Esas posiciones de esos tres punto y coma lo almacenaré en

cada una de las variables ya vistas anteriormente.

Por ejemplo, la posición del primer punto y coma (;) lo almacenaré en la variable Posicion1,

al posición del segundo punto y coma (;) lo almacenaré en la variable Posicion2 y la posición

del tercer punto y coma (;) lo almacenaré en la variable Posicion3.

En el ejemplo anterior las posiciones que se almacenarían en las variables son los

siguientes:

Posicion1 = 7

Posicion2 = 14

Posicion3 = 27

Esto es por lo siguiente:

C a r l o s ; M a n u e l ; 8 0 9 – 5 8 9 – 5 8 5 8 ; U r b . R a l m a , C a l l e # 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 …………………..

Page 101: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

101 DE 204

Cada carácter tiene una posición en la cadena. Estas posiciones que hemos leído serán de

mucha utilidad a la hora de leer los campos de la base de datos. Eso lo veremos a

continuación.

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 número de una posición de algún carácter de la cadena de texto

principal. Por ejemplo, si el valor inicial es 1 entonces la búsqueda comienza desde el

principio de la cadena, es decir, desde el primer carácter.

Cadena_Principal: Representa la cadena de caracteres en donde se realizará la búsqueda.

Cadena_a_Buscar: Representa la cadena a buscar.

Tipo_de_busqueda: Es una constante que representa el tipo de búsqueda. Se ha

especificado la constante vbTextCompare que indica que la búsqueda que se realizará es

de tipo texto.

a) Posicion1 = InStr(1, Linea, ";", vbTextCompare)

Esta línea busca el primer punto y coma que aparece en el registro. La búsqueda se realiza

a partir del primer carácter, por eso se especifica el número 1.

b) Posicion2 = InStr(Posicion1 + 1, Linea, ";", vbTextCompare)

Esta línea busca el segundo punto y coma que aparece en el registro. La búsqueda se

realiza a partir de la posición del primer punto y coma, por eso se especifica Posicion1 + 1.

c) Posicion3 = InStr(Posicion2 + 1, Linea, ";", vbTextCompare)

Esta línea busca el tercer punto y coma que aparece en el registro. La búsqueda se realiza a

partir de la posición del segundo punto y coma, por eso se especifica Posicion2 + 1.

- Líneas 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 líneas de código permiten leer cada uno de los campos de la base de datos.

Antes de explicar cada línea de código, vamos a definir la sentencia Mid.

Page 102: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

102 DE 204

La sentencia Mid permite copiar una cadena de caracteres de otra cadena de caracteres,

llamada cadena principal. En esta función se debe especificar la cadena de donde se hará la

copia que es la cadena principal. Se debe especificar también la posición 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, posición_inicial, cantidad_de_caracteres_a_copiar)

a) Campo1 = Mid(Linea, 1, Posicion1 - 1)

Esta línea de código lee el campo “Nombre”. La variable Linea es la variable que tiene el

registro completo, o más bien, la cadena principal. El número uno, indica que la copia

iniciará desde el primer carácter de la cadena principal. Posicion1 – 1 indica la cantidad de

caracteres a copiar, es decir, se copiarán todos los caracteres hasta el primer punto y coma

(;). Recuerde que la variable Posicion1 tiene la posición 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 línea de código lee el campo “Apellido”. Posicion1 + 1 indica que la copia iniciará

después del primer punto y coma (;), es decir, a partir de la posición del primer punto y coma

(;). Posicion2 – 1 – Posicion1 indica la cantidad de caracteres a copiar. Se lo explicaré

gráficamente:

C a r l o s ; M a n u e l ; 8 0 9 – 5 8 9 – 5 8 5 8 ; U r b . R a l m a , C a l l e # 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 posición del primer punto y coma (;).

El 14 es por Posicion2 que es la posición del segundo punto y coma (;).

El -1 es para que en la copia no se incluya el primer punto y coma (;).

Posicion1 es la posición del primer punto y coma que se le resta a la segunda posición

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)

Page 103: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

103 DE 204

Esta línea lee el campo “Teléfono”. Se aplica lo mismo que al campo anterior pero iniciando

desde la posición2.

d) Campo4 = Mid(Linea, Posicion3 + 1, Len(Linea))

Esta línea lee el campo “Dirección”. Se aplica lo mismo que el campo anterior pero iniciando

desde la posición3. Len(Linea) es lo único diferente y se especifica porque no existe una

ultima posición que indique la longitud del último campo. Siempre tendrá que utilizar esta

sentencia para leer el último campo, pero todo lo demás es igual.

Línea 23, 24, 25, 26 y 27:

If UCase(Campo1) = UCase(Text1.Text) And Option1.Value = True Then

MsgBox ("Nombre: " & Campo1 & " Apellido: " & _

Campo2 & " Teléfono: " & Campo3 & " Dirección: " & Campo4)

Encontro = 1

End If

Este bloque de código 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 mayúscula. Esta sentencia se utilizo para

que no exista problema de mayúscula y minúscula, es decir, si el usuario escribe el nombre

en mayúscula y en la base de datos esta en minúscula entonces habrá un problema, porque

no sería el mismo texto aunque dijera lo mismo, por esa razón se ha convertido el valor del

campo y el valor de la caja de texto en mayúscula.

La traducción del bloque anterior es la siguiente:

SI el campo nombre en mayúscula = al contenido de la caja de texto en mayúscula Y la

primera opción esta seleccionada (la opción búsqueda por nombre) Entonces Muestra

(El nombre, el apellido, el teléfono y la dirección) Asigna el valor uno a la variable

Encontró para saber que se encontró el registro Finaliza el SI

- Líneas 28, 29, 30, 31 y 32:

If Campo3 = Text1.Text And Option2.Value = True Then

MsgBox ("Nombre: " & Campo1 & " Apellido: " & Campo2 & " Teléfono: " & Campo3 & "

Dirección: " & Campo4)

Encontro = 1

Page 104: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

104 DE 204

End If

Lo mismo que el bloque de código anterior. La única diferencia es que la comparación se

hace con el Campo3, es decir, con el campo teléfono. Esto es en caso de que se seleccione

la segunda opción que es buscar por teléfono.

La traducción del bloque anterior es:

SI el campo nombre en mayúscula = al contenido de la caja de texto en mayúscula Y la

primera opción esta seleccionada (la opción búsqueda por nombre) Entonces Muestra

(El nombre, el apellido, el teléfono y la dirección) Asigna el valor uno a la variable

Encontró para saber que se encontró el registro Finaliza el SI

- Líneas 28, 29, 30, 31 y 32:

If Campo3 = Text1.Text And Option2.Value = True Then

MsgBox ("Nombre: " & Campo1 & " Apellido: " & Campo2 & " Teléfono: " & Campo3 & "

Dirección: " & Campo4)

Encontro = 1

End If

Lo mismo que el bloque de código anterior. La única diferencia es que la comparación se

hace con el Campo3, es decir, con el campo teléfono. Esto es en caso de que se seleccione

la segunda opción que es buscar por teléfono. La traducción del bloque anterior es:

SI el campo teléfono = al contenido de la caja de texto Y la segunda opción esta

seleccionada (la opción búsqueda por nombre) Entonces Muestra (El nombre, el

apellido, el teléfono y la dirección) 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 razón de que los números no se

escriben ni en mayúscula ni en minúscula.

- Línea 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.

- Líneas 34, 35 y 36:

If Encontro = 0 Then

Page 105: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

105 DE 204

MsgBox ("No se ha encontrado el contacto especificado.")

End If

Este bloque de código 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ó ningún registro y si el valor es uno entonces se encontró el registro.

- Ultimas líneas:

Close #1

End If

Exit Sub

NOarchivo:

MsgBox ("La base de datos no existe.")

Close #1

Close #2

En el evento Click del botón Cancelar escriba: Unload Me

Corra la aplicación. Haga clic en el botón Agregar un nuevo contacto y, a continuación,

agregue un nuevo contacto.

Cierre la ventana de Agregar un nuevo contacto, y a continuación, haga clic en el botón

Buscar contacto.

Escriba el nombre del contacto y seleccione la opción Buscar por nombre, y a continuación,

haga clic en el botón Buscar.

Actidades a desarrollar:

Resumen del capitulo.

Complete el proyecto con las aplicaciones faltantes.

Page 106: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

106 DE 204

CAPÍTULO 5

EL FORMULARIO

Un formulario es un objeto contenedor que sirve para diseñar la interfaz de usuario.

En el formulario se colocan los controles para que el usuario pueda interactuar con la

aplicación de una manera fácil e intuitiva.

Figura 35. Formularios

Los formularios tienen sus propias propiedades, eventos y métodos con los que se

puede controlar su apariencia y comportamiento, muchos de los cuales ya han sido

Page 107: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

107 DE 204

utilizados en las aplicaciones de los capítulos anteriores y que a continuación pasamos a

describir.

Propiedad Descripción

AutoRedraw Especifica si se activa el redibujado automático del

formulario.

BackColor Especifica el color de fondo del formulario.

BorderStyle Especifica un estilo de borde para el formulario.

Caption Especifica el texto que se muestra en la barra de título 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 Especifica el alto del formulario. Se mide en “twips”.

Icon Especifica el icono que se muestra para un formulario.

MaxButton Especifica si el formulario tiene un botón Maximizar.

MinButton Especifica si el formulario tiene un botón Minimizar.

Picture Especifica el archivo de imagen que se va ha mostrar como

fondo para el formulario.

StartUpPosition Especifica la posición del formulario la primera vez que se

ejecuta.

Visible Establece si el formulario es visible o está oculto.

Width Especifica el ancho del formulario. Se mide en “twips”.

WindowState Establece el estado del formulario (normal, minimizado o

maximizado).

Nota

Un twip es una unidad independiente de la pantalla utilizada para asegurar que la

colocación y la proporción de los elementos de la pantalla de la aplicación 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 centímetro.

Page 108: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

108 DE 204

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

Evento Descripción

Activate Ocurre cuando el formulario se convierte en ventana activa.

Deactivate Ocurre cuando el formulario deja de ser la ventana activa.

Load Ocurre cuando el formulario se carga en la memoria.

MouseDown Ocurre cuando el usuario pulsa el botón derecho del ratón

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 métodos que se pueden utilizar con un formulario son los siguientes:

Método Descripción

Hide Oculta un formulario.

PopupMenu Presenta un menú popup en la posición actual del ratón.

Print Imprime un valor sobre el formulario.

Refresh 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 automáticamente.

Como ejemplo (práctica 20) vamos a desarrollar una aplicación que utilice dos

formularios. Desde el primer formulario el usuario podrá ir al segundo formulario y viceversa.

Page 109: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

109 DE 204

Figura 36. Formularios y Boptones

Para el desarrollo de la presente aplicación proceda a crear un nuevo proyecto.

Seguidamente debe ubicar dos botones de comando en el formulario. Luego establezca las

siguientes propiedades:

Form1

Nombre Form1

Caption Primer formulario

Command1

Nombre CmdIr

Caption &Ir

Command2

Nombre CmdSalir

Caption &Salir

Seguidamente procede a ingresar el código que se muestra a continuación:

Private Sub CmdIr_Click()

Form2.Show

Form1.Hide

Page 110: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

110 DE 204

End Sub

Private Sub CmdSalir_Click()

End

End Sub

Luego debe añadir un formulario adicional al proyecto. Para tal fin, seleccione el

menú Proyecto y elija la opción Agregar formulario.

Figura 37. Agregar formulariuo.

Del cuadro de diálogo que se presenta elija el icono Formulario y haga click en el

botón “Abrir”, tal como se indica en la figura. En ese instante se añadirá un nuevo formulario

al proyecto. Luego, proceda a ubicar un botón de comandos en el formulario que acaba de

añadir y establezca las siguientes propiedades:

Form2

Nombre Form2

Caption Segundo formulario

Page 111: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

111 DE 204

ControlBox False

Command2

Nombre CmdVolver

Caption &Volver

En seguida proceda a ingresar el código que se indica a continuación:

Private Sub CmdVolver_Click()

Form1.Show

Form2.Hide

End Sub

ESTILOS DE FORMULARIO

Visual Basic cuenta con seis diferentes estilos de formulario, cuya descripción es la

siguiente:

Valor Estilo Descripción

0 None No presenta ningún borde.

1 Fixed Single Puede incluir un Menú de control, una Barra de

título, un botón Maximizar y un botón

Minimizar. Sólo puede cambiar de tamaño

mediante los botones Maximizar y Minimizar.

2 Sizable (Predeterminado). Puede cambiar de tamaño

mediante cualquiera de los elementos

opcionales de borde indicados para Fixed

Single.

Valor Estilo Descripción

3 Fixed Dialog Puede incluir un Menú de control y una Barra

de título, pero no los botones Maximizar ni

Page 112: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

112 DE 204

Minimizar. No puede cambiar de tamaño.

4 Fixed ToolWindow Sólo muestra el botón Cerrar y el texto de la

barra de título aparece con un tamaño de

fuente reducido. No puede cambiar su tamaño.

5 Sizable ToolWindow Sólo muestra el botón Cerrar y el texto de la

barra de título aparece con un tamaño de

fuente reducido. Puede cambiar de tamaño.

Como ejemplo (práctica 21) vamos a desarrollar una aplicación que permita

representar los diferentes estilos de formulario de Visual Basic.

Figura 38. Dimensiones del formulario.

Para el desarrollo de la presente aplicación 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 continuación:

Page 113: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

113 DE 204

Form1

Nombre FrmPrincipal

Caption Estilos de formulario

BorderStyle 3-Fixed Dialog

List1

Nombre LstTipoForm

List 0-None

1-Fixed Single

2-Sizable

3-Fixed Dialog

4-Fixed ToolWindow

5-Sizable ToolWindow

Command1

Nombre CmdMostrar

Caption &Mostrar

Command2

Nombre CmdSalir

Caption &Salir

Seguidamente procede a ingresar el código que se muestra a continuación:

Private Sub Form_Load()

Load FrmNone

Load FrmFixedSingle

Load FrmSizable

Load FrmFixedDialog

Load FrmFixedToolWindow

Load FrmSizableToolWindow

Page 114: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

114 DE 204

End Sub

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 añadir los formularios para las diferentes opciones del

cuadro de lista. Cambie los nombres de los formularios según se indica:

Formulario Nombre

Form2 FrmNone

Form3 FrmFixedSingle

Page 115: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

115 DE 204

Form4 FrmSizable

Form5 FrmFixedDialog

Form6 FrmFixedToolWindow

Form7 FrmSizableToolWindow

Luego debe activar el formulario FrmNone, ubicar un botón de comandos sobre el

mismo y establecer las siguientes propiedades:

Form2

Nombre FrmNone

BorderStyle 0-None

Caption None

Command1

Nombre CmdVolver

Caption &Volver

Una vez establecidas las propiedades, proceda a ingresar el código que se muestra a

continuación:

Private Sub CmdVolver_Click()

Unload Me

End Sub

Para concluir con el diseño de la aplicación, simplemente repita el procedimiento

anterior para los demás tipos de formularios.

Como habrá podido observar, al mostrar un formulario mediante el método Show

podemos hacerlo de forma modal (vbModal) o no modal (opción 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

Page 116: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

116 DE 204

Muchas veces se requieren pasar valores de un formulario a otro, esto se puede

realizar mediante el uso módulos estándar, los cuales son contenedores de procedimientos

y declaraciones a los que tienen acceso otros módulos de la aplicación.

Como ejemplo (practica 22) vamos a construir la siguiente aplicación, la cual envía un

mensaje de texto del primer formulario hacia el segundo formulario.

Figura 39. Valores entre formularios

Para el desarrollo de la presente aplicación proceda a crear un nuevo proyecto y

añada un formulario adicional, de tal forma que tenga los formularios Form1 y Form2.

Seguidamente ubicar los siguientes controles:

Form1 Form2

Text1 TxtMensaje1 Text1 TxtMensaje2

Command1 CmdEnviar Command1 CmdRecibir

Command2 CmdSalir Command2 CmdVolver

A continuación proceda a ingresar el código que se indica para el primer formulario

(Form1):

Private Sub CmdEnviar_Click()

Mensaje = TxtMensaje1

Form1.Hide

Form2.Show

Page 117: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

117 DE 204

End Sub

Private Sub CmdSalir_Click()

End

End Sub

Para el segundo formulario (Form2) proceda a ingresar el código siguiente:

Private Sub CmdRecibir_Click()

TxtMensaje2 = Mensaje

End Sub

Private Sub CmdVolver_Click()

Form2.Hide

Form1.Show

End Sub

Seguidamente debe añadir un módulo estándar al proyecto, para ello, seleccione el

Menú Proyecto y elija la opción Agregar módulo, se debe presentar un cuadro de diálogo

similar a la figura mostrada, en el cual debe dar click en el botón “Abrir”.

Page 118: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

118 DE 204

Figura 40. Modulos

Seguidamente proceda a declarar la variable Mensaje como “pública” en la sección de

declaraciones del módulo que acaba de añadir:

Una variable pública (Public) es una variable que se declara a nivel de módulo y se le

puede acceder desde cualquier otro módulo.

FORMULARIOS MDI

Un formulario MDI (Interfaz de Documentos Múltiples) es una ventana que actúa como

fondo de una aplicación y es el contenedor (ventana padre) de otros formularios (ventanas

hijas).

Page 119: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

119 DE 204

Figura 41. Formularios multimodales.

En una aplicación MDI puede haber varias ventanas hijas, pero sólo una ventana

padre por aplicación. Para que una ventana actúe como hija debe tener su propiedad

MDIChild establecida a clicK.

Como ejemplo vamos (práctica 23) a desarrollar una aplicación 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 opción Agregar formulario MDI, del cuadro de diálogo que se presenta hacer clic en

el botón “Abrir”.

Page 120: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

120 DE 204

Figura 42. Ventana de formularios MDI

A continuación dar doble click sobre el formulario MDI e ingresar el siguiente código:

Private Sub MDIForm_Load()

Form1.Show

Form2.Show

Form3.Show

End Sub

Ahora sólo 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 opción Propiedades de

Proyecto. En el cuadro combinado “Objeto inicial” seleccionar MDIForm1, tal como se indica

en la figura:

Figura 43. Propiedades del Proyecto.

Page 121: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

121 DE 204

Eso es todo, ahora simplemente tiene que ejecutar su aplicación.

Cabe destacar que en los formularios MDI por lo general no se pueden incluir

controles, debido a ello se suele trabajar con menús de opciones o barras de herramientas

para indicar alguna acción a realizar.

CREACIÓN DE MENÚS

Un menú es un conjunto de opciones que se presentan al usuario, entre las cuales

debe elegir una de ellas. Dependiendo de la decisión se realizarán una serie de acciones.

Figura 44. Creación de Menues.

Para diseñar un menú cualquiera dar clic derecho sobre el formulario y del menú

emergente que se presenta elegir la opción Editor de menús.

Page 122: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

122 DE 204

En seguida se ha de presentar el Editor de menús de Visual Basic.

Figura 45. Ventana de Menus.

Para crear un menú, se deben tener en cuenta los siguientes procedimientos:

Ingresar el Editor de menús.

Introducir el título del menú en el cuadro de texto Caption, el cual aparecerá en la barra

de menús.

Introducir un nombre para el menú en el cuadro de texto Name, el cual será utilizado en el

código para referirse al menú.

Introducir los elementos que componen el menú, para ello escriba en los cuadros de texto

Caption y Name el título y el nombre del correspondiente elemento del menú.

Para diferenciar un elemento del menú del propio menú, hay que sangrar el título del

elemento, para tal fin, selecciónelo y haga click en el botón 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 más).

Utilizando separadores puede agrupar las órdenes en función de lo que realizan. Para

insertar un separador, escriba un único guión (-) en el cuadro Caption del Editor de

menús. Tiene que especificar también un nombre para el separador.

Page 123: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

123 DE 204

Para añadir un acelerador (una tecla o combinación 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 ejecución se desea ocultar un elemento de

menú.

Cerrar el Editor de menús, para ello una vez que haya finalizado su diseño pulse el botón

“Aceptar”.

Como ejercicio (práctica 24) intente construir el menú mostrado en la figura anterior.

Caption Name ShortCut

&Archivo MnuArchivo Ninguno

. . . &Artículo MnuArchivoArticulo Ninguno

. . . &Cliente MnuArchivoCliente Ninguno

. . . &Vendedor MnuArchivoVendedor Ninguno

. . . - MnuArchivoLinea Ninguno

. . . &Salir MnuArchivoSalir Ctrl + X

&Proceso MnuProceso Ninguno

. . . &Pedido MnuProcesoPedido Ninguno

. . . &Facturación MnuProcesoFacturacion Ninguno

&Reporte MnuReporte Ninguno

. . . &Registro de ventas MnuReporteRegVentas Ninguno

. . . Catálogo de &artículos Ninguno

. . . - MnuReporteLinea Ninguno

. . . &Cliente del mes MnuReporteClienteMes Ninguno

. . . &Vendedor del mes MnuReporteVendMes Ninguno

Ay&uda MnuAyuda Ninguno

. . . &Contenido MnuAyudaContenido Ninguno

Page 124: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

124 DE 204

. . . &Indice MnuAyudaIndice Ninguno

. . . &Búsqueda MnuAyudaBusqueda Ninguno

. . . - MnuAyudaLinea Ninguno

. . . &Acerca de MnuAyudaAbout Ninguno

Para probar el menú que acaba de crear, ingrese el siguiente código:

Private Sub MnuArchivoArticulo_Click()

MsgBox “Seleccionó la opción Artículo”

End Sub

Private Sub MnuArchivoCliente_Click()

MsgBox “Seleccionó la opción Cliente”

End Sub

Private Sub MnuArchivoVendedor_Click()

MsgBox “Seleccionó la opción 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 aplicación?”, vbQuestion + vbYesNo,

“Pregunta”)

If RESP = vbYes Then

End

Else: Cancel = True

End If

End Sub

Page 125: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

125 DE 204

Luego al ejecutar su aplicación y seleccionar el menú Archivo, opción Artículo, el

resultado será similar a la figura mostrada:

Figura 46. GUI del Menu.

Hasta ahora hemos programado la salida de una aplicación, asociando el código al

botón “Salir”. Sin embargo, cuando el usuario hace click en el botón “Cerrar” de la barra de

título o en la opción “Salir” del Menú de control del formulario, el código escrito para el botón

“Salir” es ignorado.

Para remediar esta situación, en el ejemplo anterior cuando el usuario pulsa el botón

“Salir”, se invoca al evento Unload. La palabra reservada “Me” proporciona una forma de

referirse al formulario desde donde se está ejecutando el código.

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 parámetro Cancel. Si

Cancel es False ocurre la descarga, si Cancel es True impide que el formulario se quite.

CREACIÓN DE UNA BARRA DE HERRAMIENTAS

Una barra de herramientas contiene botones con las opciones más utilizadas de un

menú, de tal manera que el usuario haciendo click en dicho control activaría la opción

indicada de una manera más rápida.

Para crear una barra de herramientas debemos utilizar dos controles que no están en

la lista de controles estándar, por tanto debemos agregar dichos controles que se

encuentran en el componente Microsoft Windows Common Controls 6.0, tal como se indica a

continuación:

Page 126: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

126 DE 204

Figura 47. Agregar botones

Como ejemplo (práctica 25), vamos a crear la barra de herramientas de la figura

mostrada:

Page 127: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

127 DE 204

Para ello, ubicar un control ImageList sobre el formulario, para establecer sus

propiedades dar clic derecho sobre el control y elija la opción Propiedades.

Se ha de presentar un cuadro de diálogo similar a la figura mostrada:

Figura 48. Ventana de propiedades.

Activar la ficha Imágenes y pulsar el botón “Insertar imagen” para seleccionar las

imágenes que se incluirán en el control ImageList.

Para el ejemplo, debe incluir ocho imágenes que corresponden a cada uno de los

botones de la barra de herramientas.

Page 128: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

128 DE 204

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 opción Propiedades. Del cuadro de diálogo que se presenta en la ficha

General establecer las siguientes propiedades:

Figura 50. Toolbar

Luego, en la ficha Botones pulse el botón “Insertar botón”. En el cuadro de texto

Image se debe indicar un número que corresponde al orden de imagen a mostrar.

Page 129: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

129 DE 204

El lector debe continuar (práctica 26) con este proceso hasta completar los botones

restantes, según:

Index ToolTipText Image

1 Artículo 1

2 Cliente 2

3 Vendedor 3

4 Pedido 4

5 Facturación 5

6 Registro de ventas 6

7 Catálogo de artículos 7

8 Ayuda 8

Como el código a ejecutar tiene que ser el mismo cuando el usuario elija una opción

del menú o de un click sobre un botón 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 código es muy sencillo, ya que sólo muestra un

mensaje con la opción seleccionada (esto por razones de simplicidad). Para probar la

funcionalidad de la barra de herramientas que acaba de crear ingrese el siguiente código:

Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)

Select Case Button.Index

Case 1: MsgBox “Seleccionó la opción Artículo”

Case 2: MsgBox “Seleccionó la opción Cliente”

Case 3: MsgBox “Seleccionó la opción Vendedor”

Case 4: MsgBox “Seleccionó la opción Pedido”

Case 5: MsgBox “Seleccionó la opción Facturación”

Case 6: MsgBox “Seleccionó la opción Registro de ventas”

Case 7: MsgBox “Seleccionó opción Catálogo de artículos”

Case 8: MsgBox “Seleccionó la opción Ayuda”

End Select

Page 130: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

130 DE 204

End Sub

El evento ButtonClick se dispara cuando el usuario hace click sobre un botón de la

barra de herramientas. La propiedad Index permite identificar el número de botón pulsado.

CREACIÓN 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 aplicación.

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 (práctica 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.

Page 131: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

131 DE 204

El resto de propiedades se establecerán mediante código al momento de la carga del

formulario.

Private Sub MDIForm_Load()

Dim I As Integer

For I = 1 To 2

StatusBar1.Panels.Add ' Se agregan 2 paneles más

Next

With StatusBar1.Panels

.Item(1).Style = sbrTime

.Item(2).Style = sbrCaps

.Item(3).Style = sbrIns

End With

End Sub

La propiedad Style permite mostrar el estado de las teclas, la hora y la fecha del

sistema con un mínimo de código.

Page 132: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

132 DE 204

Constante Valor Descripción

sbrText 0 (Predeterminado). Texto o mapa de bits.

sbrCaps 1 Tecla BLOQ MAYÚS.

sbrNum 2 Tecla BLOQ NÚM.

sbrIns 3 Tecla INS.

sbrScrl 4 Tecla BLOQ DESPL.

sbrTime 5 Muestra la hora actual con el formato del sistema.

sbrDate 6 Muestra la fecha actual con el formato del sistema.

CREACIÓN DE UN MENÚ CONTEXTUAL

Un menú contextual es un menú emergente (flotante) que se muestra sobre un

formulario, independiente de la barra de menús. Para mostrar un menú contextual el usuario

debe pulsar el botón derecho del ratón sobre el formulario.

A menudo querrá usar un menú contextual para tener acceso a opciones que no se

encuentran disponibles en la barra de menús. Para crear (práctica 28) un menú que no se

presente en la barra de menús, haga invisible un elemento de menú de nivel superior en

tiempo de diseño (asegúrese de que la casilla de verificación Visible del Editor de menús no

esté activada). Cuando Visual Basic presenta un menú emergente, pasa por alto la

propiedad Visible del menú de nivel superior especificado.

Page 133: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

133 DE 204

Para crear el menú contextual de la figura, debe ingresar al Editor de menús y añadir

lo siguiente:

Caption Name Visible

&Herramientas MnuTools

. . . Calculadora MnuToolsCalc

. . . Calendario MnuToolsCalen

. . . Solitario MnuToolsSol

Seguidamente proceda a ingresar el código que se indica a continuación:

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

Page 134: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

134 DE 204

Dim I

I = Shell(“C:\WINDOWS\CALC.EXE”, 1)

End Sub

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 función Shell ejecuta un programa ejecutable y devuelve un tipo Variant (Double)

que representa la identificación de la tarea del programa si se ha ejecutado con éxito, en

caso contrario devuelve cero.

Page 135: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

135 DE 204

CAPÍTULO 6

CONTROLES ACTIVEX

Los controles ActiveX son objetos que no forman parte del conjunto de controles

estándar de Visual Basic, sino más bien han sido desarrollados por terceras personas.

Los controles ActiveX existen como archivos independientes con extensión .OCX y

deben ser cargados antes de utilizarse. Para ello ingresar al Menú Proyecto y elija la opción

Componentes.

Page 136: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

136 DE 204

CONTROL ANIMATION

El control Animation permite reproducir archivos de extensión .AVI que no tengan

sonido para crear animaciones. Para agregar este control debe seleccionar el componente

Microsoft Windows Common Controls-2 6.0.

Propiedad Descripción

AutoPlay Especifica si el archivo AVI se reproducirá automáticamente

al cargarse el control.

Método Descripción

Close Cierra el archivo AVI abierto actualmente.

Open Permite abrir el archivo AVI.

Play Reproduce el archivo AVI en el control Animation.

Stop Termina la reproducción del archivo AVI.

Page 137: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

137 DE 204

Como ejemplo vamos (práctica 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 código

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 diálogo estándar

que permiten realizar las operaciones más comúnmente empleadas en el diseño 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 Descripción

Page 138: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

138 DE 204

Color Especifica el color seleccionado.

FileName Especifica la ruta y nombre del archivo seleccionado.

Filter Especifica el tipo de archivos que se han de mostrar en un

cuadro de diálogo Abrir o Guardar como.

FilterIndex Especifica el filtro predeterminado para un cuadro de

diálogo Abrir o Guardar como, en caso se esté utilizando

varios filtros.

Método Descripción

ShowColor Presenta la paleta de colores.

ShowFont Presenta el cuadro de diálogo Fuentes.

ShowHelp Presenta la ayuda de Windows.

ShowOpen Presenta el cuadro de diálogo Abrir.

ShowPrinter Presenta el cuadro de diálogo Imprimir.

ShowSave Presenta el cuadro de diálogo Guardar como.

Como ejemplo (práctica 30) vamos a desarrollar una aplicación que permite cambiar

el color de fondo de un formulario en tiempo de ejecución. Para ello el usuario debe dar click

en el botón “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:

Page 139: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

139 DE 204

Para ello crear un nuevo formulario, agregarle un botón de comando

(CmdCambiarColor) y un control CommonDialog. Luego ingresar el siguiente código:

Private Sub CmdCambiarColor_Click()

CommonDialog1.ShowColor

Form1.BackColor = CommonDialog1.Color

End Sub

Como siguiente ejemplo (práctica 31) vamos a desarrollar una aplicación que permita

mostrar el contenido de un archivo JPG. Este deberá ser seleccionado por el usuario de un

cuadro de diálogo Abrir, tal como se indica en la figura:

Page 140: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

140 DE 204

Al hacer click en el botón “Abrir”, el archivo seleccionado debe ser mostrado en el

formulario:

Para el diseño de esta aplicación crear un nuevo formulario y ubicar un botón de

comando (CmdAbrirArchivo), un control imagen y un control CommonDialog.

Seguidamente ingrese el código que se indica a continuación:

Private Sub CmdAbrirArchivo_Click()

Page 141: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

141 DE 204

Dim FILTRO As String, FILE As String

FILTRO = “Imágenes JPEG (*.JPG)|*.JPG”

CommonDialog1.Filter = FILTRO

CommonDialog1.ShowOpen

FILE = CommonDialog1.FileName

Image1.Picture = LoadPicture(FILE)

End Sub

CONTROL MARCHOSO

El control Marchoso tiene como función 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 Descripción

FileName Especifica la ruta y nombre del archivo GIF animado.

A manera de ejemplo vamos a diseñar un formulario que permita mostrar archivos GIF

animados.

Para ello proceda (practica 32) a crear un nuevo formulario y ubicar un botón de

comando (CmdVerGIFAnimado), un control Marchoso y un control CommonDialog. Luego,

ingresar el siguiente código:

Page 142: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

142 DE 204

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

CONTROL HIERARCHICAL FLEXGRID

El control Hierarchical FlexGrid presenta una cuadrícula la cual permite mostrar datos

en forma de celdas. Una celda es la región formada por la intersección de una fila y una

columna.

Para agregar este control debe seleccionar el componente Microsoft Hierarchical

FlexGrid Control 6.0 (OLEDB).

Propiedad Descripción

Col Especifica el número de columna de la celda actual.

Cols Especifica el número total de columnas, fijas y no fijas.

FixedCols Especifica el número de columnas fijas. El valor por defecto

es 1.

FixedRows Especifica el número de filas fijas. El valor por defecto es 1.

Row Especifica el número de fila de la celda actual.

Rows Especifica el número total de filas, fijas y no fijas.

Text Especifica el contenido de la celda actual.

TextArray 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 cuadrícula presenta barras de

desplazamiento horizontales, verticales o ambas a la vez.

Page 143: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

143 DE 204

Como ejemplo (práctica 33) vamos a desarrollar una aplicación que visualice un

cuadrado mágico de orden impar N . Un cuadrado mágico se compone de números enteros

comprendidos entre 1 y 2N . La suma de los números que figuran en cada fila, cada columna

y cada diagonal son idénticos.

Por ejemplo para N = 5 tenemos el siguiente arreglo de números:

Un método de construcción del cuadrado consiste en situar el número 1 en el centro

de la primera fila, el número 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 posición del número caiga en una celda ocupada, se elige

la casilla situada por debajo del número que acaba de ser situado.

Para el desarrollo de la presente aplicación 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 código 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

Page 144: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

144 DE 204

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

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 numérica, una combinación que en ocasiones se denomina control

Spinner.

Para agregar un control UpDown debe seleccionar el componente Microsoft Windows

Common Controls-2 6.0.

Propiedad Descripción

Page 145: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

145 DE 204

BuddyControl Especifica el control utilizado como auxiliar.

BuddyProperty Especifica la propiedad utilizada para sincronizar el control

UpDown con su auxiliar.

Increment Especifica un valor que determina la cantidad en que varía

la propiedad Value cuando se hace click en los botones del

control UpDown.

Max Especifica el valor máximo del intervalo de desplazamiento

del control UpDown.

Min Especifica el valor mínimo 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 (práctica 34) vamos a desarrollar una aplicación que permita mostrar el

código ANSI de un carácter especificado.

Para tal fin crear un nuevo formulario y ubicar los siguientes controles: 2 etiquetas

(Código ANSI, Carácter), 2 cuadros de texto (TxtANSI, TxtCaracter) y 1 control UpDown.

Luego establezca las propiedades que se indican:

UpDown1

Nombre UpDown1

BuddyControl TxtANSI

Page 146: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

146 DE 204

BuddyProperty Text

Increment 1

Max 255

Min 0

SyncBuddy True

Seguidamente proceda a transcribir el siguiente código:

Private Sub TxtANSI_Change()

TxtCaracter = Chr(TxtANSI)

End Sub

CONTROL MONTHVIEW

El control MonthView permite al usuario la posibilidad de ver y establecer información

de fechas mediante una interfaz similar a un calendario. Para agregar este control

seleccionar el componente Microsoft Windows Common Controls-2 6.0.

Propiedad Descripción

Day Especifica el número de día mostrado.

Month Especifica el número de mes mostrado.

Year Especifica el número de año mostrado.

Value Especifica la fecha mostrada.

DayOfWeek Especifica el día de la semana correspondiente a la fecha

mostrada.

Week Especifica el número de la semana en que cae la fecha

mostrada.

MultiSelect Especifica si se puede seleccionar un intervalo contiguo de

fechas.

MaxSelCount Especifica el número máximo de días que pueden

seleccionarse mediante la propiedad MultiSelect.

SelStart Especifica los límite inferior y superior respectivamente del

Page 147: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

147 DE 204

SelEnd intervalo de fechas seleccionado.

MonthColumns

MonthRows

Permiten mostrar más de un mes simultáneamente.

MonthColumns especifica el número de meses que se

mostrarán en sentido horizontal. MonthRows especifica el

número de meses que se mostrarán en sentido vertical.

Evento Descripción

Click Ocurre cada vez que el usuario hace click sobre el control.

DateClick Ocurre cada vez que el usuario hace click sobre una fecha

mostrada en el control.

Como ejemplo (práctica 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 aplicación.

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 código:

Page 148: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

148 DE 204

Private Sub MonthView1_DateClick(ByVal DateClicked As Date)

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 función WeekdayName retorna una cadena con el nombre del día de la semana

especificado. Requiere como argumento el número de día de la semana.

La función MonthName retorna una cadena con el nombre del mes especificado.

Requiere como argumento el número de mes.

El evento DateClick tiene un parámetro 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 también

presenta un calendario. Para agregar este control seleccionar el componente Control

Calendar de Microsoft 9.0.

Propiedad Descripción

Day Especifica el número de día mostrado.

Month Especifica el número de mes mostrado.

Year Especifica el número de año mostrado.

Page 149: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

149 DE 204

Value Especifica la fecha mostrada.

Como ejemplo (práctica 36) vamos a desarrollar la aplicación 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 código:

Private Sub Calendar1_Click()

TxtFecha = WeekdayName(Weekday(Calendar1.Value)) & “ , ” _& Str(Calendar1.Day)

& “ de ” _& MonthName(Calendar1.Month) & “ de ” _& Str(Calendar1.Year)

End Sub

La función Weekday retorna un número entero que representa el día de la semana de

una fecha dada. Se utiliza para suplir a la propiedad DayOfWeek la cual no está permitida

para el control Calendar.

Page 150: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

150 DE 204

CAPÍTULO 7

ARCHIVOS

Un archivo (fichero) es un conjunto de información 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 también una extensión de 1 a 3

letras, normalmente son significativas y relativas al contenido del mismo. Por ejemplo:

LEAME.TXT Archivo de texto

MISDATOS.DAT Archivo de datos

PLANILLA.XLS Archivo de MS-Excel

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

Page 151: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

151 DE 204

Como ejemplo, suponga que el archivo DEMO.DAT está en la carpeta DATA de la

unidad C (disco duro); la descripción 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 descripción 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 información más simple estaría formado por un carácter.

OPERACIONES SOBRE EL SISTEMA DE ARCHIVOS

Para manipular el sistema de archivos de un disco, Visual Basic proporciona las

sentencias que a continuación 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 comodín (* y ?). Si el archivo no existe se

produce un error. Por ejemplo:

Kill “C:\TEMP\TEMPO.DAT”

Page 152: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

152 DE 204

La instrucción 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 instrucción anterior cambia el nombre del archivo TEMPO.DAT por el nombre

CURSO.DAT. El contenido del archivo permanece inalterado y su localización física 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

Page 153: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

153 DE 204

Elimina una carpeta vacía 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 carácter que especifica la nueva unidad de disco. Si el

parámetro UNIDAD es una cadena de múltiples caracteres sólo se lee la primera letra. Por

ejemplo:

Page 154: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

154 DE 204

ChDrive “A”

OPERACIONES CON ARCHIVOS

Para realizar alguna operación sobre un archivo hay referenciarlo mediante su

nombre completo. Las operaciones básicas que se pueden realizar con los archivos son:

Abrir, preparar un archivo para hacer referencia a él.

Escribir, introducir un elemento de información a un archivo.

Leer, obtener un elemento de información de un archivo.

Modificar, alterar un elemento de información 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 están 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 continuación 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,

según el orden en que son ingresados. Cuando se lee la información, 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 continuación.

Sentencia Open

Permite abrir un archivo. La sintaxis para esta sentencia es la siguiente:

Page 155: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

155 DE 204

Open NOMBRE_ARCHIVO For MODO As # NÚMERO_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 Descripción

Output Escritura de datos. Si el archivo existe, su contenido actual se

destruye. Si el archivo no existe, se crea.

Append Añadir datos. Los datos son añadidos 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 parámetro NÚMERO_ARCHIVO es un entero cuyo valor debe estar comprendido

entre 1 y 511. Este número será asociado al nombre del archivo mientras éste permanezca

abierto. Para obtener el número del siguiente archivo disponible se utiliza la función

FreeFile().

Como ejemplo (práctica 36) suponga que se requiere abrir el archivo DEMO.DAT

ubicado en la carpeta C:\DATA, la instrucción sería 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 # NÚMERO_ARCHIVO, LISTA_DE_EXPRESIONES

Page 156: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

156 DE 204

Donde NÚMERO_ARCHIVO es el número utilizado cuando el archivo fue abierto.

LISTA_DE_EXPRESIONES es un conjunto de expresiones (numéricas, de cadena, de fecha,

etc.) separadas por punto y coma (;) que serán escritas en el archivo.

La sentencia Print escribe en el archivo una imagen de los datos tal y como se

habrían 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 fácil”; “, ”; Date()

Al ejecutarse el código anterior se escribiría en el archivo la siguiente información:

Visual Basic es fácil, 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 # NÚMERO_ARCHIVO, LISTA_DE_EXPRESIONES

Donde NÚMERO_ARCHIVO es el número utilizado cuando el archivo fue abierto.

LISTA_DE_EXPRESIONES es un conjunto de expresiones (numéricas, de cadena, de fecha,

etc.) separadas por punto y coma (;) que serán escritas en el archivo.

La sentencia Write inserta comas (,) entre las expresiones de la

LISTA_DE_EXPRESIONES, por tanto no es necesario poner delimitadores explícitamente

como en el caso de la sentencia Print.

Cuando se utiliza la sentencia Write para escribir información en un archivo, se

siguen distintas convenciones universales, de modo que los datos siempre se pueden leer e

Page 157: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

157 DE 204

interpretar correctamente, independientemente de la configuración regional, estas

convenciones son:

Los datos numéricos 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 (práctica 37) considere el siguiente segmento de código:

Dim N1 As Integer

N1 = FreeFile()

Open “C:\DATA\DEMO.DAT” For Output As # N1

Write # N1, “Visual Basic es fácil”; Date()

La ejecución de este código escribiría en el archivo la siguiente información:

Visual Basic es fácil", # 2002-04-11 #

Sentencia Close

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

Close # NÚMERO_ARCHIVO [, # NÚMERO_ARCHIVO, . . .]

Donde NÚMERO_ARCHIVO es el número con el cual se abrió el archivo. Por

ejemplo:

Close # 1, # 2

La instrucción anterior cierra los archivos asociados con los números 1 y 2. La

siguiente sentencia cierra todos los archivos abiertos.

Page 158: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

158 DE 204

Close

Sentencia Input

Permite leer datos de un archivo secuencial y los asigna a las variables

especificadas. Su sintaxis es:

Input # NÚMERO_ARCHIVO, VARIABLE1 [, VARIABLE2, . . .]

Donde NÚMERO_ARCHIVO es el número 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 código 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 línea de un archivo secuencial ignorando los delimitadores (comas) y

la asigna a una variable tipo cadena. Su sintaxis es:

Page 159: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

159 DE 204

Line Input # NÚMERO_ARCHIVO, VARIABLE

Donde NÚMERO_ARCHIVO es el número 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 línea a

línea, ya que esta sentencia lee todos los caracteres del archivo hasta que encuentra un

retorno de carro, entonces continua en la siguiente línea y así sucesivamente. Por ejemplo:

Práctica 38.

Dim N1 As Integer, LINE1 As String, LINE2 As String

N1 = FreeFile()

Open “C:\DATA\DEMO.TXT” For Output As # N1

Print # N1, “Línea de prueba 1”

Print # N1, “Línea 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 ejecución del código anterior produce la siguiente salida:

Función Input

Retorna los siguientes N caracteres de un archivo secuencial y los asigna a una

variable de cadena. Su sintaxis es de la forma:

Page 160: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

160 DE 204

VARIABLE = Input( N , # NÚMERO_ARCHIVO)

A diferencia de la sentencia Input, la función Input() retorna todos los caracteres que

lee, incluyendo comas, retornos de carro, continuaciones de línea, etc. Por ejemplo:

Práctica 39.

Dim N1 As Integer, S As String

N1 = FreeFile()

Open “C:\DATA\DEMO.TXT” For Output As # N1

Print # N1, “Línea de prueba 1”

Print # N1, “Línea de prueba 2”

Close # N1

Open “C:\DATA\DEMO.TXT” For Input As # N1

S = Input(24, # N1)

MsgBox S

La ejecución del código anterior produce la siguiente salida:

Función EOF

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

VARIABLE = EOF(NÚMERO_ARCHIVO)

Se utiliza EOF() para evitar producir un error al intentar obtener información más 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

Page 161: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

161 DE 204

N1 = FreeFile()

Open “C:\DATA\DEMO.TXT” For Input As # N1

While Not EOF(N1)

Line Input # N1, CADENA

Print CADENA

Wend

Close # N1

Este segmento de código lee y visualiza cada línea del archivo de texto DEMO.TXT.

El bucle finaliza cuando se detecta el final del archivo. Para que el código anterior funcione

correctamente, no olvide poner la propiedad AutoRedraw del formulario a True.

Como ejemplo (práctica 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 práctica lo aprendido recientemente.

El menú que se muestra en la figura obedece a la siguiente descripción:

Caption Name ShortCut

&Archivo MnuArchivo Ninguno

. . . &Nuevo MnuArchivoNuevo Ninguno

. . . &Abrir MnuArchivoAbrir Ninguno

. . . &Guardar MnuArchivoGuardar Ninguno

. . . - MnuArchivoLinea Ninguno

Page 162: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

162 DE 204

. . . &Salir MnuArchivoSalir 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 FrmEditor

Caption Editor

Text1

Nombre TxtEditor

MultiLine True

ScrollBars 3-Both

Text

CommonDialog1

Nombre CommonDialog1

CancelError True

Una vez establecidas las propiedades de la interfaz ingresar el código que se

muestra:

Private Sub Form_Resize()

TxtEditor.Move 0, 0, ScaleWidth, ScaleHeight

End Sub

Private Sub MnuArchivoNuevo_Click()

TxtEditor = “”

End Sub

Page 163: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

163 DE 204

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

Page 164: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

164 DE 204

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

La sentencia Err.Description retorna una cadena que contiene la descripción asociada

a un error en tiempo de ejecución.

La sentencia Resume continua la ejecución en la etiqueta especificada cuando

termina una rutina de gestión 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 número

denominado índice. El primer registro de un archivo tiene como índice 1, el segundo tiene

índice 2 y así sucesivamente. La información 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 leído, escrito o actualizado.

Las sentencias y funciones necesarias para manipular archivos de tipo aleatorio se

presentan a continuación.

Sentencia Open

Permite abrir un archivo. La sintaxis para acceder aleatoriamente a un archivo es:

Page 165: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

165 DE 204

Open NOMBRE_ARCHIVO For Random As # NÚMERO_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 parámetro NÚMERO_ARCHIVO es un entero cuyo valor está comprendido entre 1

y 511. Este número 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 # NÚMERO_ARCHIVO, NÚMERO_REG, VARIABLE

Donde NÚMERO_ARCHIVO es el número bajo el cual se abrió el archivo,

NÚMERO_REG es el número correspondiente al registro que se va ha grabar y VARIABLE

contiene los datos a escribir en el archivo. Por ejemplo (práctica 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 código anterior utiliza una variable REG de tipo DISTRITO, cuya

definición es la siguiente:

Private Type DISTRITO

ID_DISTRITO As String * 3

Page 166: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

166 DE 204

NOMBRE As String * 30

End Type

Sentencia Get

Permite leer un registro procedente de un archivo de acceso aleatorio, almacenando

los datos en una variable específica. Su sintaxis es de la forma:

Get # NÚMERO_ARCHIVO, NÚMERO_REG, VARIABLE

Donde NÚMERO_ARCHIVO es el número bajo el cual se abrió el archivo,

NÚMERO_REG es el número correspondiente al registro que se va ha leer y VARIABLE

almacena los datos del registro leído. 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.

Función LOF

Retorna el número de bytes (caracteres) que ocupa un determinado archivo abierto

mediante la sentencia Open. Su sintaxis es:

VARIABLE = LOF(# NÚMERO_ARCHIVO)

Page 167: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

167 DE 204

Donde NÚMERO_ARCHIVO es el número con el que se abrió el archivo.

Esta función es de utilidad, porque aplicada a un archivo de acceso aleatorio, permite

conocer el número de registros almacenados en el archivo. Para ello debe dividir el valor

retornado entre la longitud del registro. Como ejemplo (práctica 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

Función Loc

Esta función retorna la posición actual dentro de un fichero. Su sintaxis es:

VARIABLE = Loc(# NÚMERO_ARCHIVO)

La función Loc() aplicada a un archivo de acceso aleatorio retorna el número del

último registro leído o grabado en el archivo especificado. Por ejemplo (práctica 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

Page 168: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

168 DE 204

Get # N1, I, REG

MsgBox REG.ID_DISTRITO & “ ” & REG.NOMBRE

I = I + 1

If Loc(N1) = NUM_REGS Then Exit Do

Loop

Close # N1

La sentencia If finaliza el bucle si se ha alcanzado el último registro.

Como ejemplo ( práctica 44) final vamos a desarrollar una aplicación 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 través 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 básicas de mantenimiento de los

registros.

Para el desarrollo de la presente aplicación ubicar los siguientes controles al

formulario:

3 marcos

Page 169: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

169 DE 204

4 etiquetas

4 cuadros de texto

9 botones de comando

Seguidamente proceda a establecer las propiedades que se indican:

Form1

Nombre FrmCurso

Caption Mantenimiento de cursos

BorderStyle 3-Fixed Dialog

StarUpPosition 2-CenterScreen

Frame1

Nombre FraIngreso

Caption

Frame2

Nombre FraNavegador

Caption Navegador

Frame3

Nombre FraMantenimiento

Caption Mantenimiento

Label1

Nombre LblCodigo

Caption Código:

Label2

Page 170: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

170 DE 204

Nombre LblNombre

Caption Nombre:

Label3

Nombre LblVacantes

Caption Vacantes:

Label4

Nombre LblProfesor

Caption Profesor:

Text1

Nombre TxtCodigo

Locked True

Text

Text2

Nombre TxtNombre

Locked True

Text

Text3

Nombre TxtVacantes

Locked True

Text

Text4

Nombre TxtProfesor

Locked True

Text

Page 171: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

171 DE 204

Command1

Nombre CmdPrimero

Caption

Picture C:\FundVB\Bitmaps\First.bmp

Style 1-Graphical

Command2

Nombre CmdAnterior

Caption

Picture C:\FundVB\Bitmaps\Previous.bmp

Style 1-Graphical

Command3

Nombre CmdSiguiente

Caption

Picture C:\FundVB\Bitmaps\Next.bmp

Style 1-Graphical

Command4

Nombre CmdUltimo

Caption

Picture C:\FundVB\Bitmaps\Last.bmp

Style 1-Graphical

Command5

Nombre CmdNuevo

Caption

Picture C:\FundVB\Bitmaps\New.bmp

Page 172: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

172 DE 204

Style 1-Graphical

Command6

Nombre CmdEditar

Caption

Picture C:\FundVB\Bitmaps\Edit.bmp

Style 1-Graphical

Command7

Nombre CmdGuardar

Caption

Picture C:\FundVB\Bitmaps\Save.bmp

Style 1-Graphical

Command8

Nombre CmdEliminar

Caption

Picture C:\FundVB\Bitmaps\Delete.bmp

Style 1-Graphical

Command9

Nombre CmdSalir

Caption &Salir

Picture C:\FundVB\Bitmaps\Exit.bmp

Style 1-Graphical

Luego, proceda a transcribir el código mostrado a continuación:

Private Type CURSO

ID_CURSO As String * 3

Page 173: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

173 DE 204

NOMBRE As String * 30

VACANTES As Integer

PROFESOR As String * 25

ESTADO As Boolean

End Type

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

Page 174: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

174 DE 204

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

Page 175: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

175 DE 204

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

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 = “”

Page 176: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

176 DE 204

TxtVacantes = “”

TxtProfesor = “”

TxtCodigo.SetFocus

End Sub

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

Page 177: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

177 DE 204

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

Private Sub CmdSalir_Click()

Close # N1

End

End Sub

ARCHIVOS DE ACCESO BINARIO

Un archivo binario contiene más que simplemente texto. Puede contener imágenes,

sonido, hojas de cálculo, 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 posición 3 del archivo, serían recuperados los bytes 3 y 4 para

poder formar el valor del entero. Por tanto, antes de trabajar con archivos binarios es

necesario conocer cómo 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 # NÚMERO_ARCHIVO

Page 178: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

178 DE 204

Donde NOMBRE_ARCHIVO es una cadena que especifica el nombre del archivo que

se debe ser abierto en modo Binary.

El parámetro NÚMERO_ARCHIVO es un entero cuyo valor está comprendido entre 1

y 511. Este número 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 # NÚMERO_ARCHIVO, POSICIÓN, VARIABLE

Donde NÚMERO_ARCHIVO es el número bajo el cual se abrió el archivo. POSICIÓN

es el número 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 # NÚMERO_ARCHIVO, POSICIÓN, VARIABLE

Donde NÚMERO_ARCHIVO es el número bajo el cual se abrió el archivo. POSICIÓN

es el número de byte a partir del cual se han de leer los datos almacenados en VARIABLE.

Sentencia Seek

Permite situar la posición de lectura o de escritura en una posición determinada

dentro del archivo. Su sintaxis es:

Get # NÚMERO_ARCHIVO, POSICIÓN, VARIABLE

Donde POSICIÓN es el número de byte a partir del cual queremos leer o escribir

dentro del archivo.

Page 179: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

179 DE 204

Como ejemplo vamos a desarrollar una aplicación 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 botón de comando (CmdCifrar). Luego,

ingrese el siguiente código:

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 código la función Mid() obtiene el carácter “I” de la caja de texto, la función Asc()

obtiene su código ANSI, al que sumamos el valor de CLAVE, para después obtener el resto

de la división 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 función Chr() retorna el carácter

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

carácter al sumarle el valor de CLAVE sería el 75 (72 + 3), que es la “K”, y así

sucesivamente (ver la tabla de caracteres ANSI).

El descifrado sería el proceso inverso, para ello crear un nuevo formulario y ubicar un

botón de comando (CmdDescifrar), luego ingresar el código siguiente:

Const CLAVE As Integer = 3

Private Sub CmdDescifrar_Click()

Dim N1 As Integer, I As Integer

Page 180: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

180 DE 204

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

CAPÍTULO 8

GRÁFICOS

Un gráfico tiene por finalidad facilitar la legibilidad de la información que se presenta: “un

gráfico vale más que mil palabras”.

LOS COLORES

En Visual Basic se pueden manipular los colores mediante tres formas diferentes:

código hexadecimal, la función RGB() y la función QBColor().

Código Hexadecimal

Un código de color se compone de seis dígitos hexadecimales, cuyos valores van

desde &H000000& (cero) hasta &HFFFFFF& (16 777 215). De forma práctica podemos

guiarnos mediante:

&HAAVVRR&

Donde AA representa al color azul, VV al color verde y RR al color rojo. Todos los

demás colores se obtienen mezclando estos tres colores.

Como ejemplo considere los siguientes códigos de colores que se presentan a

continuación:

Page 181: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

181 DE 204

AZUL = &HFF0000&

VERDE = &H00FF00&

ROJO = &H0000FF&

NEGRO = &H000000&

La función RGB()

La función RGB() retorna un número 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 estándar y sus valores de nROJO, nVERDE y

nAZUL:

Color nROJO nVERDE nAZUL

Negro 0 0 0

Azul 0 0 255

Verde 0 255 0

Cián 0 255 255

Rojo 255 0 0

Magenta 255 0 255

Amarillo 255 255 0

Blanco 255 255 255

El ejemplo anterior (código hexadecimal) utilizando la función RGB() será similar a:

AZUL = RGB(0, 0, 255)

VERDE = RGB(0, 255, 0)

ROJO = RGB(255, 0, 0)

Page 182: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

182 DE 204

NEGRO = RGB(0, 0, 0)

La función QBColor()

La función QBColor() retorna un número de tipo entero largo (Long) que representa el

código de color RGB correspondiente al número 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:

Número Color Número Color

0 Negro 8 Gris

1 Azul 9 Azul claro

2 Verde 10 Verde claro

3 Cián 11 Cián claro

4 Rojo 12 Rojo claro

5 Magenta 13 Magenta claro

6 Amarillo 14 Amarillo claro

7 Blanco 15 Blanco brillante

El ejemplo inicial (código hexadecimal) utilizando la función QBColor() se soluciona

como se muestra a continuación:

AZUL = QBColor(1)

VERDE = QBColor(2)

ROJO = QBColor(4)

NEGRO = QBColor(0)

EL SISTEMA DE COORDENADAS

Todas las operaciones gráficas descritas en este capítulo utilizan el sistema de

coordenadas del área de dibujo (que puede ser la pantalla, un formulario, un cuadro de

imagen, o cualquier otro contenedor).

Page 183: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

183 DE 204

El sistema de coordenadas es una cuadrícula bidimensional que define ubicaciones

del área de dibujo. Las ubicaciones de esta cuadrícula se definen mediante las coordenadas

del área de dibujo:

( X ,Y )

Donde el valor de X es la ubicación del punto sobre el “eje X”, con la ubicación

predeterminada (cero) en el extremo izquierdo. El valor de Y es la ubicación del punto sobre

el eje Y , con la ubicación 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 métodos gráficos 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

Page 184: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

184 DE 204

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 centímetro).

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

Descripción

1 Twips

2 Puntos

3 Pixeles

4 Caracteres

5 Pulgadas

6 Milímetros

7 Centímetros

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

imagen:

Picture1.ScaleMode = 5

Page 185: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

185 DE 204

Crear una escala personalizada

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 numéricos 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 según el ancho y el

alto real del área de dibujo (si el objeto cambia de tamaño 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.

Page 186: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

186 DE 204

Una forma más eficiente de personalizar la escala de un sistema de coordenadas es

utilizando el método 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 sería 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.

MÉTODOS GRÁFICOS

Visual Basic proporciona varios métodos para la creación de gráficos. Los métodos

gráficos, resumidos en la tabla siguiente, son aplicables a los formularios y a los cuadros de

imagen.

Método Descripción

Cls Borra todos los gráficos y el resultado del método Print.

Pset Dibuja un punto individual.

Point Devuelve el color de un punto especificado.

Line Dibuja una línea, un rectángulo o un cuadro relleno.

Circle Dibuja una círculo, una elipse o un arco.

PaintPicture Dibuja gráficos en ubicaciones arbitrarias.

Print Imprime texto en formularios y cuadros de imagen.

Page 187: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

187 DE 204

Para que la mayoría de los métodos gráficos 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 método 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 aplicación que permita dibujar puntos en la

posición especificada mediante el ratón, con la posibilidad de poder seleccionar colores (tipo

“Paint”).

Para el desarrollo de la presente aplicación proceda a crear un nuevo proyecto y

agregar al formulario ( práctica 46) cuadros de imagen. Luego ingresar el código mostrado.

Page 188: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

188 DE 204

Objeto Nombre Descripción

Picture1 . . . Picture32 PicColor Opciones de color

Picture33 PicMuestra Color actual utilizado

Picture34 PicLienzo 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

tamaño del punto dibujado.

Para que el método Pset funcione correctamente la propiedad ScaleMode debe estar

establecida a pixeles.

Líneas, rectángulos y cuadros rellenos

Para dibujar líneas, rectángulos o cuadros rellenos utilice el método Line, cuya

sintaxis es:

Page 189: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

189 DE 204

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 línea o el rectángulo. X2, Y2 son valores de tipo Single que indican las coordenadas

del punto final para la línea o el rectángulo que se está dibujando. COLOR es un entero

largo (Long) que indica el color RGB especificado para dibujar la línea, si se omite se usará

el valor actual de la propiedad ForeColor de OBJETO. Los parámetros B y BF son

opcionales: B hace que se dibuje un rectángulo usando las coordenadas para especificar las

esquinas opuestas del mismo. BF especifica que el cuadro se rellena con el mismo color

especificado mediante el parámetro COLOR.

A manera de ejemplo vamos a mejorar nuestro sencillo “Editor gráfico”, de tal forma

que además de dibujar puntos permita también dibujar líneas cuando se mantenga pulsado

el botón izquierdo del ratón.

Para lograr nuestro cometido añadir el siguiente código a la aplicación 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

Page 190: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

190 DE 204

End Sub

Otro ejemplo (práctica 47) sencillo para ilustrar como se usa el método Line para

dibujar rectángulos y cuadros rellenos se presenta a continuación, consiste en dibujar una

bandera directamente sobre el formulario.

Para este ejemplo crear una nueva aplicación e ingresar el código 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

Círculos, elipses y arcos

Para dibujar círculos, elipses o arcos se utiliza el método 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 círculo, elipse o arco. RADIO es un valor de tipo Single que indica el radio del

círculo, elipse o arco. COLOR es un valor entero de tipo Long que indica el color RGB del

contorno del círculo, 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).

Page 191: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

191 DE 204

ASPECTO es un valor de tipo Single que indica la relación de aspecto del círculo, el valor

predeterminado es 1.0, lo que produce un círculo perfecto (no elíptico) en cualquier pantalla

(opcional).

A manera de ejemplo (práctica 48) vamos a mejor aún más nuestro “Editor gráfico” de

tal manera que se podrá dibujar puntos, líneas, rectángulos, círculos y elipses.

Para el desarrollo de la presente aplicación se debe añadir al ejemplo anterior 5

botones de comandos y formar una matriz de controles (CmdForma). Luego ingresar el

siguiente código:

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

Page 192: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

192 DE 204

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

Page 193: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

193 DE 204

End If

End Sub

CONTROLES GRÁFICOS

Visual Basic proporciona tres controles gráficos diseñados para crear efectos gráficos

en las aplicaciones:

Control Image (estudiado en el Capítulo 4)

Control Line

Control Shape

Control Line

Line es un control gráfico que se muestra como una línea horizontal, vertical o

diagonal.

El control Line tiene una funcionalidad limitada y está pensado para usos sencillos.

Para usos más avanzados debe usar el método Line.

Propiedad Descripción

BorderColor Devuelve o establece el color de la línea.

BorderStyle Devuelve o establece el estilo de la línea.

BorderWidth Devuelve o establece el ancho de la línea.

X1, Y1, X2, Y2 Devuelven o establecen las coordenadas del punto inicial

(X1, Y1) y del punto final (X2, Y2) de la línea.

Control Shape

Shape es un control gráfico que se muestra como un rectángulo, un cuadrado, una

elipse, un círculo, un rectángulo 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:

Page 194: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

194 DE 204

Forma Estilo Constante

Rectángulo 0 vbShapeRectangle

Cuadrado 1 vbShapeSquare

Elipse 2 vbShapeOval

Círculo 3 vbShapeCircle

Rectángulo redondeado 4 vbShapeRoundedRectangle

Cuadrado redondeado 5 vbShapeRoundedSquare

Las seis formas predefinidas que presenta el control Shape se muestran en el

siguiente formulario:

GRAFICACIÓN MATEMÁTICA

Como la mayor parte de las ecuaciones matemáticas expresa relaciones complicadas

en una, dos tres o más dimensiones, tratar de entenderlas sin gráficas es casi lo mismo que

tratar de caminar con los ojos vendados.

Funciones algebraicas.

Como ejemplo (práctica 49) de este tipo de gráficas vamos a dibujar una parábola,

cuya ecuación matemática (ecuación general de segundo grado) es de la forma:

2( )f x Ax Bx C

Page 195: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

195 DE 204

Para realizar la presente aplicación crear un nuevo proyecto y añadir al formulario un

cuadro de imagen (PicPlano), tres cuadros de texto (TxtA, TxtB, TxtC) y un botón de

comandos (CmdVisualizar). Los aspectos decorativos (etiquetas, marcos, etc.) quedan a

criterio del lector. Luego ingresar el siguiente código:

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)

Page 196: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

196 DE 204

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

Funciones trigonométricas

Graficar funciones trigonométricas (seno, coseno, tangente, cotangente, secante,

cosecante) no es nada complicado, sino analice el siguiente ejemplo.

Para realizar nuestra aplicación de ejemplo (práctica 50) crear un nuevo proyecto y

añadir 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 código

siguiente:

Private Sub CmdFuncion_Click(Index As Integer)

PicPlano.Cls

Dibuja (Index)

End Sub

Page 197: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

197 DE 204

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

Page 198: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

198 DE 204

Gráficas en coordenadas polares

Para el caso de las gráficas de ecuaciones polares tampoco es complicado, sólo 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 gráfica se tiene que el punto P tiene coordenadas rectangulares ( , )x y y

coordenadas polares ( , )r entonces se cumplen las siguientes relaciones de

transformación:

cosx r

seny r

De donde: 2 2 2 r x y ; tan yx

A continuación presentamos algunas ecuaciones polares características:

Nombre Ecuación

Circunferencia de radio n r n

Trébol de cuatro hojas 2 cos 2r Cardioide 1 cosr

Limazón 1 2 cosr

Page 199: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

199 DE 204

Lemniscata

2 cos 2r

Pétalo de rosa sen 4r

Espiral

2r

n

Espiral logarítmica nr e

Astroide

3 (cos 2 )r

Nefroide 3 cos 2 cos 6r

Concoide

1 1cos 2

r

Estrofoide

1 cos 2 tan 2

r

Para realizar una aplicación que permita dibujar (práctica 51) ecuaciones polares

crear un nuevo proyecto y añadir al formulario 1 cuadro de imagen (PicPlano), un cuadro de

lista (LstEcuacion) y un botón de comandos (CmdVisualizar). La apariencia de la interfaz

debe ser similar a la de la figura mostrada:

Luego proceda a ingresar el código que se presenta a continuación:

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)

Page 200: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

200 DE 204

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)

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)

Page 201: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

201 DE 204

Next

End Sub

Fractales

La matemática fractal es producto de la interacción de un matemático genial (Benoit

B. Mandelbrot) y la computadora.

El ahora ubicuo término fractal se debe al hecho de que la matemática fractal trabaja

con fracciones, las figuras generadas no tienen una relación de enteros entre sus

componentes, de modo que ninguna dimensión es producto de otra multiplicada por un

entero. Es decir, al dividir una dimensión entre otra nunca se obtiene un resultado exacto.

Los fractales generan figuras y estas figuras resultan tener una extraña 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 ecuación se resuelve

en el campo de los números 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 bahías y entrantes. La expresión

matemática del Conjunto de Mandelbrot es:

2

1 nnZ Z C

Donde C es un número complejo constante y Z es un número 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 posición arbitraria dentro del conjunto, digamos 1C i y para

arrancar las iteraciones podemos comenzar con 0 0Z , luego:

2

1 (0) (1 ) 1Z i i

22 (1 ) (1 ) 1 3Z i i i

23 (1 3 ) (1 ) 7 7Z i i i

Page 202: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

202 DE 204

Cuando se continúa desarrollando el Conjunto de Mandelbrot se obtiene una figura

similar a la mostrada:

Para el desarrollo de la presente aplicación crear (práctica 52) un nuevo proyecto y

añadir sobre el formulario un cuadro de imagen (PicPlano) y un botón de comandos

(CmdVisualizar), luego ingresar el código 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

Page 203: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

203 DE 204

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

Page 204: Apuntes de Sistemas de Informacion Con Poo

Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277

204 DE 204

Terminar = True

End If

Wend

If (Pasos < Limite) Then

PicPlano.PSet (I, J), QBColor(Pasos)

End If

Next

Next

End Sub

En este capítulo, debido a las limitaciones de espacio y materia, tan sólo se ofrece el

camino de acceso a unos pocos de los diversos temas que abarca el fascinante mundo de la

programación de gráficos por computadora.

Muchos de estos temas siguen siendo materia de investigación (como el caso de los

fractales), por lo que si Ud. desea profundizar en este laberinto de fascinación, no hay la

garantía de un retorno sano y salvo a nuestro universo mundano.