Post on 29-Jul-2015
Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277
1 DE 204
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.
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).
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.
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.
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
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
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.
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:
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
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.
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
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.
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.
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:
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.
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.
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
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
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
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.
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
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
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
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
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#
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
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
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
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:
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 ()
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?”)
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
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
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:
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.
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
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
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
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).
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)
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:
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.
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.
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)
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
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.
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
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.
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
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
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
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
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:
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
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
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.
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
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
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
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)
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.
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.
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
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
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
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
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
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()
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
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
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
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
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
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).
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
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
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
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,
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
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
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.
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
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.
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()
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
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
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.
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:
Elaborado por MTI.. Felipe Pérez Castañeda CBTIS # 277
90 DE 204
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.
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:
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.
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 = ""
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”.
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:
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
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.”)
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:
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 …………………..
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.
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)
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
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
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.
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
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.
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.
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
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
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
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:
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
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
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
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
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”.
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).
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”.
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.
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.
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.
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
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
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:
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:
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.
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.
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
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.
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.
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.
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()
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.
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.
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.
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
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:
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:
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()
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:
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.
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
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
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
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
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:
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.
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.
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)
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”
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
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:
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:
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
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
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.
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:
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:
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
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
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
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
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:
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
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)
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
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
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
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
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
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
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
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
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 = “”
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
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
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.
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
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:
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)
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).
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
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
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.
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.
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.
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:
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
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).
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
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
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:
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
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)
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
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
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
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)
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)
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
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
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
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.