Sei sulla pagina 1di 204

Computación para Ingeniería I y Laboratorio Cap.

1 – Conceptos de Programación

UNIVERSIDAD MAYOR DE SAN ANDRÉS

FACULTAD DE INGENIERIA

CARRERA DE INGENIERIA PETROLERA

COMPUTACION PARA INGENIERIA I Y LABORATORIO

GUIA Y MATERIAL DE ESTUDIO

Ing. Hermas Herrera Callejas

La Paz, Agosto de 2015

Ing. Hermas Herrera Callejas Página : 1 de 19


Computación para Ingeniería I y Laboratorio Cap. 1 – Conceptos de Programación

CAPITULO 1 CONCEPTOS DE PROGRAMACIÓN


1.1. Introducción
1.2. Aplicación o Sistema Informático
1.3. Ciclo de Vida de la Aplicación
1.3.1 Etapas del Desarrollo de Aplicaciones
1.3.2 Documentación de loa Programas
1.3.3 Etapas de la Implantación y Explotación
1.4 Estructura de un Programa
1.4.1 Entrada de Datos
1.4.2 Proceso
1.4.3 Salida de Resultados
1.5 Lenguajes de Programación
1.5.1 Clasificación de los Lenguajes de Programación
1.5.2 Lenguaje de Máquina
1.5.3 Lenguaje Ensamblador
1.5.4 Lenguajes de Alto Nivel
1.6 Representación de Datos: Codificación Alfanumérica
1.7 Técnicas de Programación
1.7.1 Programación Convencional
1.7.2 Programación Modular
1.7.3 Programación Estructurada
1.7.4 Estructuras de Control
1.8 Programación Orientada a Objetos
1.9 Algoritmos
1.9.1 Importancia
1.9.2 Características de los Algoritmos
1.10 Métodos de Representación de los Algoritmos
1.10.1 Lenguaje Natural
1.10.2 Pseudocódigo
1.10.3 Lenguajes de Programación
1.10.4 Diagramas de Flujo
1.10.4.1 Símbolos
1.10.4.2 Tipos
1.11 Ejercicios de Diagramas de Flujo
CAPÍTULO 2 CONCEPTOS DE ARCHIVOS Y BASES DE DATOS
2.1 Introducción
2.2 Archivos y Registros
2.2.1 Registro Lógico
2.2.2 Registro Físico o Bloque
2.3 Clasificación de los Archivos Según su Uso
2.3.1 Archivos Permanentes
2.3.1.1 Archivos de Constantes
2.3.1.2 Archivos Maestros
2.3.1.3 Archivos Históricos
2.3.2 Archivos de Movimientos
2.3.3 Archivos de Trabajo.
2.4 Organización de Archivos
2.4.1 Organización Secuencial
2.4.2 Organización Directa o Aleatoria
2.4.3 Organización Indexada
2.4.3.1 El Área Primaria
2.4.3.2 El Área de Índices
2.4.3.3 El Área de Excedentes
2.5 Métodos de Acceso
2.6 Bases de Datos
2.6.1 Modelos de Bases de Datos

Ing. Hermas Herrera Callejas Página : 2 de 19


Computación para Ingeniería I y Laboratorio Cap. 1 – Conceptos de Programación

2.6.1.1 Modelo Jerárquico


2.6.1.2 Modelo en Red
2.6.1.3 Modelo Relacional
2.6.2 Seguridad y Control de Datos
2.6.3 Seguridad Contra Fallos del Sistema o del Soporte
2.6.4 Seguridad Contra Usos Incorrectos o No Autorizados
CAPÍTULO 3 VISUAL BASIC – CONCEPTOS BÁSICOS
3.1 Definición de Visual Basic
3.2 Definición de Objeto
3.2.1 Propiedades
3.2.2 Métodos
3.2.3 Sucesos
3.3 Concepto de Proyecto
3.4 Terminología de Visual Basic
3.4.1 Controles
3.4.2 Formulario
3.4.3 Interfaz de Usuario
3.4.4 Módulo
3.4.5 Procedimientos Conducidos por Sucesos
3.4.6 Programación Controlada por Sucesos
3.4.7 Sentencia de Programa
3.4.8 Tiempo de Diseño
3.4.9 Tiempo de Ejecución
3.5 El Entorno de Programación de Visual Basic 6.0
3.5.1 La Barra de Menús
3.5.2 La Barra de Herramientas Estándar
3.5.3 El Cuadro de Herramientas
3.5.4 La Ventana de Propiedades
3.5.5 El Explorador de Proyectos
3.5.6 Ventana de Posición del Formulario
3.6 El Formulario
3.6.1 Propiedades
3.6.2 Sucesos
3.6.3 Métodos
3.7 Creación de una Aplicación
3.7.1 Diseño de la Interfaz de Usuario
3.7.2 Establecimiento de las Propiedades
3.7.3 Escritura del Código
3.8 Cómo Almacenar el Programa
3.9 Ejecución del Programa
3.10 Creación de un Archivo Ejecutable
CAPÍTULO 4 VISUAL BASIC - CONTROLES BASICOS
4.1 El Control Label
4.1.1 Propiedades
4.2 El Control TextBox
4.2.1 Propiedades
4.2.2 Sucesos
4.2.3 Métodos
4.3 El Control CommandButtom
4.3.1 Propiedades
4.4 El Control CheckBox
4.4.1 Propiedades
4.4.2 El Evento Clic
4.5 El Control OptionButtom
4.5.1 Propiedades
4.5.2 El Evento Clic

Ing. Hermas Herrera Callejas Página : 3 de 19


Computación para Ingeniería I y Laboratorio Cap. 1 – Conceptos de Programación

4.6 El Control Frame


4.6.1 Propiedades
4.6.2 Cómo Crear Grupos de Botones de Control
4.7 El Control ListBox
4.7.1 Propiedades
4.7.2 Métodos
4.7.3 Sucesos
4.8 El Control ComboBox
4.8.1 Propiedades
4.8.2 Sucesos
4.8.3 Métodos
4.9 El Control Timer
4.10 Los Controles HScrollBar y VscrollBar
4.10.1 Propiedades
4.10.2 Sucesos
4.11 Creación de Menús
4.11.1 Opciones del Editor de Menús
4.11.2 Orden de la Tabulación de Controles
4.11.3 Cambiar el Orden de Tabulación de Controles
4.11.4 Quitar un Control del Orden de Tabulación
4.11.5 Tecla de Acceso Rápido a un Control
CAPÍTULO 5 VISUAL BASIC - HERRAMIENTAS DE PROGRAMACIÓN
5.1 Variables y Constantes
5.1.1 Comentarios
5.1.2 Una Constante
5.1.3 Las Variables
5.2 Declaración de Variables
5.3 Tipos de Datos
5.3.1 Declaración Explícita
5.4 Ámbito de las Variables
5.4.1 Variables Locales
5.4.2 Variables Estáticas
5.4.3 Variables a Nivel del Formulario
5.4.4 Variables a Nivel del Módulo
5.4.5 Variables Públicas
5.4.6 Variables de Registros o Estructuras
5.5 Operadores
5.5.1 Los Operadores Aritméticos
5.5.2 Los Operadores Relacionales
5.5.3 El Operador &
5.5.4 Los Operadores Lógicos
5.6 Funciones Matemáticas
5.7 Funciones de Conversión de Cadena
5.8 Funciones para la Conversión de Datos
5.9 Funciones de Fecha y Hora
5.10 Estructuras de Control
5.10.1 Estructuras de Decisión
6.10.1.1 If...Then
6.10.1.2 If...Then...Else
6.10.1.3 Select Case
5.10.2 Estructuras de Bucle
6.10.2.1 Do...Loop
6.10.2.2 For...Next
6.10.2.3 For Each…Next
5.10.3 Estructuras de Control Anidadas
5.10.4 Salida de una Estructura de Control

Ing. Hermas Herrera Callejas Página : 4 de 19


Computación para Ingeniería I y Laboratorio Cap. 1 – Conceptos de Programación

5.11 Procedimientos y Funciones


5.11.1 Creación de un Procedimiento General
5.11.2 Edición de un Procedimiento
5.11.3 Procedimiento Function
6.11.3.1 Llamada a una Función
5.11.4 Procedimiento Sub
5.11.5 Argumentos por Referencia y por Valor
5.11.6 Funciones Recursivas
5.12 Arrays
5.12.1 Arrays Unidimensionales
5.12.2 Declaración de un Array
5.12.3 Arrays Bidimensionales
5.12.4 Arrays Dinámicos
5.12.5 Arrays de Controles

CAPÍTULO 6 VISUAL BASIC – USO DE ARCHIVOS Y BASES DE DATOS


6.1 Archivos de Datos
6.1.1 Archivos Secuenciales
6.1.1.1 Apertura de archivos secuenciales
6.1.1.2 Lectura de archivos de texto
6.1.1.3 Escritura de archivos de texto
6.1.1.4 Cierre de archivos secuenciales
6.1.2 Archivos Aleatorios
6.1.3 Creación de un Archivo Aleatorio
6.1.3.1 Definición del Registro
6.1.3.2 Apertura del Archivo
6.1.3.3 Escritura en un Archivo Aleatorio
6.1.3.4 Lectura de un Archivo Aleatorio
6.1.3.5 La Sentencia Seek
6.2 Creación de Módulos
6.3 El Control Data
6.3.1 Creación de un Editor de Datos
6.4 El Asistente para Formularios de Datos
CAPÍTULO 7 VISUAL BASIC - CONTROLES QUE MUESTRAN IMÁGENES Y GRAFICOS
7.1 El Control Image
7.1.1 Carga de una Imagen en el Control Image
7.1.2 Carga de una Imagen usando el Portapapeles
7.1.3 La propiedad Stretch
7.1.4 Carga de una Imagen en Tiempo de Ejecución
7.1.5 Creación de Botones de Orden Gráficos
7.2 El Control PictureBox
7.2.1 Propiedades
7.2.2 Sistema de Coordenadas
7.3 Los Métodos Gráficos
7.3.1 El Método Print
7.3.2 El Método Pset
7.3.3 El Método Line
7.3.4 El Método Circle
7.4 Los Controles Line y Shape

CAPÍTULO 8 VISUAL BASIC - CUADROS DE DIALOGO COMUNES


8.1 El Control CommonDialog
8.1.1 Colocar el Control CommonDialog en el Fotrmulario
8.2 Los Cuadros de Diálogo Abrir y Guardar
8.2.1 Propiedades
8.2.2 Indicadores

Ing. Hermas Herrera Callejas Página : 5 de 19


Computación para Ingeniería I y Laboratorio Cap. 1 – Conceptos de Programación

8.3 El Cuadro de Diálogo Fuente


8.3.1 Propiedades
8.3.2 Indicadores
8.4 El Cuadro de Diálogo Imprimir
8.4.1 Indicadores
8.5 El Cuadro de Diálogo Color
8.5.1 Indicadores
8.6 Creación de un Mini Editor
8.7 Creación de un Programa que Visualiza Imágenes

CAPÍTULO 9 VISUAL BASIC – EL CONTROL MS FLEXGRID


9.1 El Control MSFlexGrid
9.2 Propiedades
9.3 Sucesos
9.4 Introducir datos en una celda
9.4.1 Selección de celdas
9.4.2 Formato de celdas
9.5 Despliegue de Información en las Celdas
9.6 Edición de Datos en las Celdas

Ing. Hermas Herrera Callejas Página : 6 de 19


Computación para Ingeniería I y Laboratorio Cap. 1 – Conceptos de Programación

CAPITULO 1 - CONCEPTOS DE PROGRAMACION

1.1 INTRODUCCION .- Los problemas o tareas que se plantean diariamente,


por ejemplo en el ámbito de la empresa, ya sean de gestión, técnicos,
matemáticos, etc, pueden ser resueltos mediante el uso de la capacidad
intelectual y la habilidad manual de la persona. Diremos entonces que la tarea ha
sido realizada de forma manual (Figura 1.1).

Figura 1.1. Resolución manual de trabajos.

1.2 Aplicación o Sistema Informático .- La utilización de la computadora

para la realización automática de una tarea aporta grandes ventajas, como la

rapidez de ejecución y la fiabilidad de los resultados obtenidos Un buen número

de problemas conllevan complicados cálculos, así como el manejo de grandes

cantidades de datos. En el primer caso, el riesgo de equivocarse es grande y

en el segundo, el trabajo se convierte en pesado y rutinario. Mediante el uso de

la computadora se eliminan estos inconvenientes debido a las capacidades de

la máquina, basadas en las siguientes características:

• Rapidez.
• Precisión.
• Memoria.
No obstante, la computadora por sí sola no sabría resolver ni el más
sencillo problema que se nos pueda ocurrir. Es preciso, para que pueda hacerlo,
describirle con detalle y en su lenguaje todos los pasos que ha de llevar a cabo
para la resolución del problema. Una descripción de este tipo es lo que se llama
programa de computadora y su objetivo es dirigir el funcionamiento de la
máquina.

1.3 CICLO DE VIDA DE LA APLICACIÓN .- Desde el planteamiento de un


problema o tarea hasta que se tiene el correspondiente programa o aplicación

Ing. Hermas Herrera Callejas Página : 7 de 19


Computación para Ingeniería I y Laboratorio Cap. 1 – Conceptos de Programación

informática para su realización por medio de una computadora, instalado en la


misma y en funcionamiento mientras sea de utilidad, se siguen una serie de
etapas que en conjunto denominamos ciclo de vida del software. Cada una de
las etapas, que tiene un objetivo bien determinado, ha de llevarse a cabo cuando
se ha terminado completamente la anterior; es decir, se han de abordar de forma
estrictamente secuencial.
Las etapas de que consta el ciclo de vida del software pueden agruparse en
los siguientes bloques, según el esquema de la Figura 1.2.

1.3.1 Etapas del Desarrollo de Aplicaciones .- Es de destacar que en la


realización de estas etapas no todas necesitan el uso de la computadora. No
obstante, desde hace algún tiempo se utiliza ésta como apoyo mediante las
denominadas herramientas CASE (Computer Aided Software Engineering).

Etapa Resultado
Problema

Análisis
Especificaciones

Diseño Reportes
Formatos
Bases de datos
Presentación Programas
Diseño
Aprobación
D
Programación Algoritmo/Flujograma/Seudocódigo E
Codificación–Programa fuente, Prog estructurada S
Compilación – Programa Objeto A
(Errores: Sintaxis, Lógica) R
Enlace – Código ejecutable R
(Aplicación:Interactiva/por lotes/reportes/consultas) O
L
Pruebas L
Unitarias Errores:Ejecución,Especificación O
Funcionales
De conjunto
De esfuerzo
Evaluación

Aplicación aprobada
Documentación
Manual Sistema
Manual Usuario
Manual Operación

Ing. Hermas Herrera Callejas Página : 8 de 19


Computación para Ingeniería I y Laboratorio Cap. 1 – Conceptos de Programación

Manual Instalación
Capacitación
Usuarios EXPLOTACION
Técnicos
Explotación y
Mantenimiento
Figura 1.2. Ciclo de vida del software

Análisis. Consiste en el estudio detallado del problema con el fin de obtener una
serie de documentos (especificaciones) en los que quede totalmente definido el
proceso de la automatización. Consta principalmente de:
- Análisis previo.
- Análisis funcional.
- Análisis orgánico.
Diseño. Consiste en concebir de modo completo la aplicación en términos de
definir el contenido de los reportes, formatos de pantalla, bases de datos y de los
programas.
Programación. Consiste en la realización de una solución o algoritmo del
problema planteado. Esta solución se diseña utilizando una notación intermedia
(seudo-código) o mediante alguna de las notaciones gráficas como los
ordinogramas; sin tener en cuenta necesariamente el lenguaje de programación
que se vaya a utilizar en la siguiente etapa.
En esta etapa es donde tiene cabida fundamentalmente la actividad del
programador y la utilización de técnicas adecuadas de diseño como la
programación estructurada y el diseño modular.
Codificación. Escritura en un lenguaje de programación de alto nivel de los
algoritmos obtenidos en la etapa anterior.
Edición. En esta fase se transcribe el programa a la computadora, grabándose el
mismo en la memoria auxiliar por medio de un editor de programas o procesador
textos. A este programa almacenado en la computadora y escrito en lenguaje de
alto nivel se le denomina programa fuente.
Compilación. Consiste en obtener el programa objeto, codificado en lenguaje de
máquina a partir del programa fuente. Esta tarea se realiza de forma automática
mediante el compilador del lenguaje, el cual, además de efectuar la traducción,
incluye un análisis sintáctico del programa, detectando posibles errores en su
escritura y posibilitando corrección de los mismos.
Enlace (linkage). En esta fase se incluyen determinadas rutinas internas de la
librería dcl lenguaje que sean necesarias en el programa, y si la aplicación consta
de varios programas o módulos se enlazan todos ellos, obteniéndose lo que
denominamos programa ejecutable.
Prueba de ejecución. El programa ejecutable obtenido en la etapa anterior se
somete a un juego de datos de prueba capaz de detectar los posibles errores en
su funcionamiento.
Errores .- La presencia de errores, surgidos en alguna de las etapas antes
descritas, suele ser inevitable. Por ello, es muy importante saber detectarlos y
corregirlos para asegurar la calidad del producto final. Un programa en

Ing. Hermas Herrera Callejas Página : 9 de 19


Computación para Ingeniería I y Laboratorio Cap. 1 – Conceptos de Programación

explotación puede contener errores que no han sido detectados y que pueden dar
lugar a consecuencias imprevisibles.
En el momento en que se encuentra un error hay que proceder a estudiar
sus causas y regresar a la etapa correspondiente en que puede ser corregido.
Según la etapa en que se detectan, los errores se clasifican de la siguiente
manera:
• De compilación. También denominados errores sintácticos, son los más
fáciles de encontrar y corregir. Se producen por el incumplimiento de las reglas
sintácticas del lenguaje y son detectados por el programa compilador indicando el
lugar en que se encuentran y la clase de error.
• De ejecución. Se detectan durante la ejecución del programa por la parada
anormal del mismo, y suelen provenir de la realización de operaciones no
permitidas. Se producen o no dependiendo de los datos de entrada empleados;
por ello, para encontrarlos es necesaria la prueba del programa con un conjunto
de datos dc ensayo lo suficientemente amplio que abarque la mayoría de casos y
posibilidades de ejecución.
• De lógica. Se dice que un programa tiene un error de lógica si produce
resultados que no son correctos. Para detectarlos hay que realizar un número
suficiente dc ejecuciones con diferentes datos de prueba y comprobar los
resultados obtenidos.
• De especificación. Son los más difíciles de corregir, pues corresponden a
incorrecciones sobrevenidas en la etapa del análisis, por lo que hay que modificar
gran parte del trabajo realizado.

1.3.2 Documentación de tos programas .- Constituida por todos los


documentos que se elaboran en cada una de las etapas del análisis y diseño, es
muy importante para facilitar su mantenimiento y obtener un mayor rendimiento.
Denominamos documentación interna al contenido del propio programa
fuente. Debe incluir los comentarios explicativos suficientes que posibiliten su
comprensión y actualización. Asimismo, se debe utilizar un código
autodocumentado; es decir, debe ser escrito de una forma clara y legible.
La documentación externa la forman el resto de documentos que se
acompañan con el programa sin formar parte de él. Entre ellos deben figurar los
siguientes:
• Especificaciones del análisis.
• Descripción del diseño.
• Descripción de las versiones, sí las hubiere.
• Descripción de archivos y estructuras de datos.
• Descripción del programa principal y subprogramas.
• Manual de mantenimiento.
• Manual de explotación.

1.3.3. Etapas de la implantación y explotación .- Para la implantación y


explotación de programas se deben seguir los pasos que se describen a
continuación.
Explotación y mantenimiento. Una vez comprobada la corrección del programa
y realizada su instalación en el sistema informático, la aplicación queda a

Ing. Hermas Herrera Callejas Página : 10 de


19
Computación para Ingeniería I y Laboratorio Cap. 1 – Conceptos de Programación

disposición de los usuarios, que la utilizarán hasta tanto se decida abandonarla o


cambiarla por otra. Es lo que denominamos explotación de la aplicación.
Paralelamente al uso de la aplicación se realiza el mantenimiento de la
misma, consiste en su evaluación periódica por parte del personal informático, así
como la inclusión de las adaptaciones y modificaciones necesarias para
mantenerla actualizada.

1.4 ESTRUCTURA DE UN PROGRAMA .- En general, un programa consiste en


una secuencia de instrucciones que ha de procesar la computadora con el objetivo
de obtener unos resultados o datos de salida a partir de unos datos iniciales o
datos de entrada (Figura 1.3). Desde el punto de vista funcional, un programa se
estructura en tres pasos:

1.4.1 Entrada de datos. Está formada por todas las instrucciones que toman los
datos objeto del programa desde un dispositivo externo (unidad de entrada)
depositándolos en la memoria central de la computadora, incluyendo la depuración
o validación de los mismos.

1.4.2 Proceso. Conjunto de instrucciones que resuelven el problema a partir de


los datos que han sido introducidos, dejando los resultados en la memoria central.
El dispositivo físico encargado de llevar a cabo esta tarea es la unidad central de
proceso.

Figura 1.3. Proceso de elaboración.

1.4.3 Salida de resultados. La constituyen las instrucciones que hacen que los
datos resultantes del proceso sean proporcionados al exterior por medio de algún
dispositivo (unidad de salida).
Estos tres componentes de todo programa (Figura 1.4) no aparecen
separadamente, sino que lo normal es encontrar las instrucciones pertenecientes
a cada uno de los tres grupos mezcladas entre si, pues en multitud de ocasiones
es necesario realizar operaciones de entrada después de iniciada la fase de
proceso, y asimismo, se proporcionan algunos resultados antes de terminado el
mismo.
Datos Memoria central Resultados

Entrada Proceso Salida

Figura 1.4. Estructura funcional de un programa.

Ing. Hermas Herrera Callejas Página : 11 de


19
Computación para Ingeniería I y Laboratorio Cap. 1 – Conceptos de Programación

1.5 LENGUAJES DE PROGRAMACIÓN .- El desarrollo de las capacidades del


hardware ha experimentado un auge desmesurado en los últimos años, pero el
aprovechamiento de estas posibilidades no es óptimo si no se dispone del
software adecuado. Con este fin se han diseñado diversos lenguajes de pro-
gramación, unos de propósito general, es decir, para todo tipo de aplicaciones, y
otros de aplicación particular en alguno de los campos del ámbito informático.
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 está
definido por una gramática o conjunto de reglas que se aplican a un alfabeto
constituido por el conjunto de símbolos utilizados.

1.5.1 CLASIFICACION DE LOS LENGUAJES DE PROGRAMACIÓN .- Una


primera clasificación, atendiendo a su proximidad al lenguaje de la máquina o al
lenguaje de las personas (lenguaje natural), establece los tres siguientes grupos:
 Lenguaje de máquina (Lenguaje de bajo nivel).
 Lenguaje ensamblador (Lenguaje intermedio).
 Lenguaje de alto nivel (evolucionado).

1.5.2 Lenguaje de máquina .- El lenguaje de máquina es el único que entiende


directamente la computadora. Utiliza el alfabeto binario, que consta de los dos
únicos símbolos 0 y 1, denominados bits (abreviatura inglesa de dígitos binarios).
Fue el primer lenguaje utilizado en la programación de computadoras, pero dejó
de utilizarse por su dificultad y complicación, siendo sustituido por otros lenguajes
más fáciles de aprender y utilizar, que además reducen la posibilidad de cometer
errores.
EJEMPLO
Instrucciones en lenguaje de máquina y sus equivalentes en el sistema
hexadecimal.
0000 0001 1010 0001 01 Al
1000 1001 1001 1010 89 9A
0011 1010 1001 1100 3A 9C
0111 0100 0111 0000 74 70
1110 1001 0010 0000 E9 20

1.5.3 Lenguaje ensamblador .- El lenguaje ensamblador es el primer intento de


sustituir el lenguaje de máquina por otro más similar a los utilizados por las
personas. En este lenguaje, cada instrucción equivale a una instrucción en
lenguaje de máquina, utilizando para su escritura palabras nemotécnicas en lugar
de cadenas de bits.

EJEMPLO
Instrucciones en lenguaje ensamblador.
INICIO: ADD B, 1
MOV A, B
CMP A, E

Ing. Hermas Herrera Callejas Página : 12 de


19
Computación para Ingeniería I y Laboratorio Cap. 1 – Conceptos de Programación

JE FIN
JMP INICIO
FIN: END
Este lenguaje presenta la mayoría de los inconvenientes del lenguaje de
máquina:
Cada modelo de computadora tiene un lenguaje ensamblador propio
diferente del de los demás, por lo cual un programa sólo puede utilizarse en la
máquina para la que se programó.
El programador ha de conocer perfectamente el hardware del equipo, ya
que maneja directamente las posiciones de memoria, registros del procesador y
demás elementos físicos.
Todas las instrucciones son elementales, es decir, en el programa se deben
describir con el máximo detalle todas las operaciones que se han de efectuar en la
máquina para la realización de cualquier proceso.
Por otro lado, tanto el lenguaje de máquina como el ensamblador gozan de
la ventaja de mínima ocupación de memoria y mínimo tiempo de ejecución en
comparación con el resultado de la compilación del programa equivalente escrito
en otros lenguajes.

1.5.4 Lenguajes de alto nivel .- Los lenguajes de alto nivel, también


denominados lenguajes evolucionados, surgen con posterioridad a los anteriores
con los siguientes objetivos, entre otros:
1. Lograr independencia de la máquina, pudiendo utilizar un mismo programa en
diferentes equipos con la única condición de disponer de un programa traductor o
compilador, que es suministrado por el fabricante, para obtener el programa
ejecutable en lenguaje binario de la máquina que se trate. Además, no se
necesita conocer el hardware específico de dicha máquina.
2. Aproximarse al lenguaje natural para que el programa se pueda escribir y leer
de una forma más sencilla, eliminando muchas de las posibilidades de cometer
errores que se daban en el lenguaje de máquina, ya que se utilizan palabras (en
inglés) en lugar de cadenas de símbolos sin ningún significado aparente
3. Incluir rutinas de uso frecuente, como las de entrada/salida, funciones
matemáticas, manejo de tablas, etc., que figuran en una especie de librería del
lenguaje de manera que se puedan utilizar siempre que se quiera sin necesidad
de programarlas cada vez.
Se puede decir que el principal problema que presentan los lenguajes de
alto nivel es la gran cantidad de ellos que existen actualmente en uso, además de
las diferentes versiones o dialectos que se han desarrollado de algunos de ellos.

1.6 REPRESENTACION DE DATOS: CODIFICACIÓN ALFANUMERICA.- Los


datos e informaciones que se manejan internamente en un sistema informático se
pueden representar, según sus características, de las siguientes formas:
ASCII
ALFANUMÉRICAS EBCDIC
....
Representaciones
o códigos internos

Ing. Hermas Herrera Callejas Página : 13 de


19
Computación para Ingeniería I y Laboratorio Cap. 1 – Conceptos de Programación

Coma fija
NUMÉRICAS Coma flotante
....
Códigos alfanuméricos

Una computadora puede trabajar internamente con un conjunto de caracteres


que nos permitirán manejar datos, informaciones, instrucciones, órdenes de
control etc. Este conjunto de caracteres podemos subdividirlo en los siguientes
grupos:
 Caracteres alfabéticos.
 Letras mayúsculas. Son las letras de la A a la Z (sin la Ñ).
 Letras minúsculas. Son las letras de la a a la z (sin la ñ).
 Cifras decimales. Son los números 0, 1, 2, 3, 4, 5, 6, 7, 8 y 9.
 Caracteres especiales.
 Caracteres. Son el punto (.), la coma (,), el punto y coma (;), e1 asterisco
(*), etc.
 Órdenes de control. Son NUL, CR, ACK, etc.
En general, cada carácter se maneja internamente en una computadora por
medio de un conjunto de 8 bits mediante un sistema de codificación binario que
denominaremos código de caracteres. (9 bits si se incluye el bit de paridad)
Cada computadora tiene su código de caracteres definidos por el fabricante,
si bien la mayoría de ellos adaptan a sus equipos códigos estándar de los ya
establecidos. En estos códigos se representa cada carácter por medio de un byte
(8 bits), con lo cual todo tipo de informaciones pueden ser utilizadas internamente,
formando cadenas de bytes sucesivos que representarán cadenas de caracteres
para que la máquina las maneje e interprete. No todos los tipos de códigos utilizan
para la representación de caracteres los ocho bits de un byte.

Hoy día los códigos más utilizados son los de 8 bits, de los cuales los más
conocidos son el EBCDIC (Extended Binary Coded Decimal Interchange Code) y
el ASCII extendido. La Tabla 1.1 representa el código ASCII extendido a 8 bits y la
Tabla 1.2 representa el código EBCDIC.

Tabla 1.1 Código ASCII extendido


bits 7654
3210 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
0000 000 NUL 016 DLE 032 SP 048 0 064 @ 080 P 096 ` 112 p 128 Ç 144 É 160 á 176 _ 192 ü 208 ð 224 Ó 240
0001 001 SOH 017 DC1 033 ! 049 1 065 A 081 Q 097 a 113 q 129 ü 145 æ 161 í 177 _ 193 - 209 Ð 225 ß 241 ±
0010 002 STX 018 DC2 034 " 050 2 066 B 082 R 098 b 114 r 130 é 146 Æ 162 ó 178 _ 194 - 210 Ê 226 Ô 242 _
0011 003 ETX 019 DC3 035 # 051 3 067 C 083 S 099 c 115 s 131 â 147 ô 163 ú 179 ¦ 195 + 211 Ë 227 Ò 243 ¾
0100 004 EOT 020 DC4 036 $ 052 4 068 D 084 T 100 d 116 t 132 ä 148 ö 164 ñ 180 ¦ 196 - 212 È 228 õ 244 ¶
0101 005 ENQ 021 NAK 37% 053 5 069 E 085 U 101 e 117 u 133 à 149 ò 165 Ñ 181 Á 197 + 213 i 229 Õ 245 §
0110 006 ACK 022 SYN 038 & 054 6 070 F 086 V 102 f 118 v 134 å 150 û 166 ª 182 Â 198 ã 214 Í 230 µ 246 ÷
0111 007 BEL 023 ETB 039 '' 055 7 071 G 087 W 103 g 119 w 135 ç 151 ù 167 º 183 À 199 Ã 215 Î 231 þ 247 ¸
1000 008 BS 024 CAN 040 ( 056 8 072 H 088 X 104 h 120 x 136 ê 152 ÿ 168 ¿ 184 © 200 + 216 Ï 232 Þ 248 °
1001 009 HT 025 EM 041 ) 057 9 073 I 089 Y 105 i 121 y 137 ë 153 Ö 169 ® 185 ¦ 201 + 217 + 233 Ú 249 ¨

Ing. Hermas Herrera Callejas Página : 14 de


19
Computación para Ingeniería I y Laboratorio Cap. 1 – Conceptos de Programación

1010 010 LF 026 SUB 042 * 058 : 074 J 090 Z 106 j 122 z 138 è 154 Ü 170 ¬ 186 ¦ 202 - 218 + 234 Û 250 ·
1011 011 VT 027 ESC 043 + 059 ; 075 K 091 [ 107 k 123 { 139 ï 155 ø 171 ½ 187 + 203 - 219 _ 235 Ù 251 ¹
1100 012 FF 028 FS 044 , 060 < 076 L 092 \ 108 l 124 | 140 î 156 £ 172 ¼ 188 + 204 ¦ 220 _ 236 ý 252 ³
1101 013 CR 029 GS 045 - 061 = 077 M 093 ] 109 m 125 } 141 ì 157 Ø 173 ¡ 189 ¢ 205 - 221 ¦ 237 Ý 253 ²
1110 014 SO 030 RS 046 . 062 > 078 N 094 ^ 110 n 126 ~ 142 Ä 158 × 174 « 190 ¥ 206 + 222 Ì 238 ¯ 254 _
1111 015 SI 031 US 047 / 063 ? 079 O 095 _ 111 o 127Del 143 Å 159 ƒ 175 » 191 + 207 ¤ 223 _ 239 ´ 255

Tabla 1.2 Código EBCDIC


bits 7654
3210 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
0 1 2 3 4 5 6 7 8 9 A B C D E F
0000 0 NUL DLE DS SP & _ { } \ 0
0001 1 SOH DC1 SOS a j ~ A J 1
0010 2 STX DC2 FS SYN b k s B K S 2
0011 3 ETX DC3 c l t C L T 3
0100 4 PF RES BYP PN d m u D M U 4
0101 5 HT NL LF RS e n v E N V 5
0110 6 LC BS EOB UC f o w F O W 6
0111 7 DEL IL ESC EOT g p x G P X 7
1000 8 CAN h q y H Q Y 8
1001 9 RLF EM . \ i r z I R Z 9
1010 A SMM CC SM ¢ ! ' :
1011 B VT . $ , #
1100 C FF IFS DC4 < * % @
1101 D CR IGS ENQ NAK ( ) - '
1110 E SO IRS ACK + ; > =
1111 F SI IUS BEL SUB | ¬ ? "

Donde los significados de los caracteres de control son:


NUL Null DC3 Device Control 3.
SOH Start of Heading. RES Restore.
STX Ster of Text. NL New Line.
ETX End of Text BS Backspace.
PF Punch 0ff IL Idle.
HT Horizontal Tabulation. CAN Cancel
LC Lower Case. EM End of Medium.
DEL Delete. CC Cursor Control
RLF Reserve Line Feed. IFS Imterchange File Separator.
SMM Start of Manual Message. IGS Interchange Group Separator.
VT Vertical Tabulation. IRS Interchange Record Separator.
FF Form Feed. IUS Interchange Unit Separator.
CR Carriage Return. DS Digit Select.
SO Shift Out. SOS Start of Significance.
SI Shift in. FS Field Separator.
DLE Data Link Escape. BYP Bypass.
DC1 Device Control 1. LF Line Feed.
DC2 Device Control 2. EOB End of Block

Ing. Hermas Herrera Callejas Página : 15 de


19
Computación para Ingeniería I y Laboratorio Cap. 1 – Conceptos de Programación

ESC Escape.
SM Set Mode.
ENQ Enquiry.
ACK Acknowledge.
BEL Bell.
SYN Synchronous Idle.
PN Punch On.
RS Reader Stop.
UC Upper Case.
EOT End of Transmission
DC4 Device control 4.
NAK Negative Acknowledge.
SUB Substitute.
SP Space

Ing. Hermas Herrera Callejas Página : 16 de


19
1.7 Técnicas de programación

1.7.1 Programación convencional

Aquella que sigue el procedimiento normal de ejecución de los distintos


procesos dentro del programa, traducción del diagrama de flujo a programa fuente,
similar a un seudo código, con un principio y un final

1.7.2 Programación modular

La programación modular es un paradigma de programación que consiste


en dividir un programa en módulos ó subprogramas con el fin de hacerlo más
legible y manejable.
Se presenta históricamente como una evolución de la programación
estructurada para solucionar problemas de programación más grandes y
complejos de lo que ésta puede resolver.
Al aplicar la programación modular, un problema complejo debe ser dividido
en varios sub-problemas más simples, y estos a su vez en otros sub-problemas
más simples. Esto debe hacerse hasta obtener sub-problemas lo suficientemente
simples como para poder ser resueltos fácilmente con algún lenguaje de
programación. Ésta técnica se llama refinamiento sucesivo, divide y vencerás ó
análisis descendente (Top-Down).
Un módulo es cada una de las partes de un programa que resuelve uno de
los subproblemas en que se divide el problema complejo original. Cada uno de
estos módulos tiene una tarea bien definida y algunos necesitan de otros para
poder operar. En caso de que un módulo necesite de otro, puede comunicarse con
éste mediante una interfaz de comunicación que también debe estar bien definida.

1.7.3 Programación estructurada

La programación estructurada sigue tres reglas: la secuencia, la iteración y


la decisión. La primera de ellas indica que las instrucciones del código se leerán
de principio a fin; la segunda indica que, según cierta condición, un número de
instrucciones podrían repetirse un numero determinado de veces, y la tercera
indica que según unas ciertas condiciones se ejecutarán o no un conjunto de
instrucciones.
En el siguiente algoritmo para limpiar platos, separando los azules se
aprecian estas tres características. La indentación de las instrucciones indican
cuáles son englobadas y cuáles no por sus predecesoras. Entre los beneficios de
la programación estructurada se encuentran la facilidad de mantenimiento y la
legibilidad por parte de otros programadores

mientras haya platos


coger plato
mientras haya suciedad
echar jabon

Ing. Hermas Herrera Callejas Página : 2 de 19


pasar el estropajo por el plato
si plato es azul
ponerlo con los azules

En código no estructurado, quedaría como sigue:

1 coger plato
2 echar jabon
3 pasar el estropajo por el plato
4 si hay suciedad ir a la instrucción 2
5 si el plato no es azul ir a la instrucción 7
6 ponerlo con los azules
7 si hay más platos ir a la instrucción 1

1.7.4 Estructuras de control

Las estructuras de control pueden dividirse en dos grupos:


 De decisión
– If…Then…
– If…Then…Else…
– Select Case
 De bucle
– Do… Loop (While / Until)
– For…Next
– For each … Next
 Anidadas
 Salidas de estructuras (Exit)

1.8 Programación orientada a objetos.- Un estilo de programación en el que un


programa se contempla como un conjunto de objetos limitados que, a su vez, son
colecciones independientes de estructuras de datos y rutinas que interactúan con
otros objetos. Una clase define las estructuras de datos y rutinas de un objeto.
Un objeto es una instancia de una clase, que se puede usar como una variable en
un programa. En algunos lenguajes orientados a objetos, éste responde a
mensajes, que son el principal medio de comunicación. En otros lenguajes
orientados a objeto se conserva el mecanismo tradicional de llamadas a
procedimientos.

1.9 Algoritmos.- En matemáticas, ciencias de la computación, y disciplinas


relacionadas, un algoritmo (del matemático persa al-Jwarizmi) es una lista bien
definida, ordenada y finita de operaciones que permite resolver un problema.
En la vida cotidiana se emplean algoritmos en multitud de ocasiones para
resolver diversos problemas. Los instructivos (manuales de usuario), para usar un
aparato, las instrucciones que recibe un trabajador. También existen ejemplos de
índole matemático, como el algoritmo de la división para calcular el cociente de
dos números, el algoritmo de Euclides para calcular el máximo común divisor de

Ing. Hermas Herrera Callejas Página : 3 de 19


dos enteros positivos, o el método de Gauss para resolver un Sistema lineal de
ecuaciones.
En la actualidad, el término algoritmo se aplica a muchos de los métodos
de resolver problemas que empleen una secuencia mecánica de pasos, como en
el diseño de un programa de ordenador o computadora. Esta secuencia se
puede representar en la forma de un diagrama de flujo para que sea más fácil de
entender.
Al igual que los algoritmos usados en aritmética, los algoritmos para
ordenadores pueden ser desde muy sencillos hasta bastante complejos. En
todos los casos, sin embargo, la tarea que el algoritmo ha de realizar debe ser
definible. Esta definición puede incluir términos matemáticos o lógicos o una
compilación de datos o instrucciones escritas. En el lenguaje de la informática,
quiere decir que un algoritmo debe ser programable, incluso si al final se
comprueba que el problema no tiene solución.

1.9.1 Importancia.- La importancia de un algoritmo radica en mostrar la manera


de llevar a cabo procesos y resolver mecánicamente problemas matemáticos o de
otro tipo. Al igual que las funciones matemáticas, los algoritmos reciben una
entrada y la transforman en una salida, para que un algoritmo pueda ser
considerado como tal, debe ser una secuencia ordenada, finita y definida
(formalización de su comportamiento) de instrucciones. De este modo se puede
seguir y predecir el comportamiento del algoritmo para cualquier entrada posible.
El concepto de algoritmo, aunque similar y obviamente relacionado, no
debe confundirse con el concepto de programa. Mientras el primero es la
especificación de un conjunto de pasos (operaciones, instrucciones, órdenes,...)
orientados a la resolución de un problema (método), el segundo es ese conjunto
de operaciones especificadas en un determinado lenguaje de programación y para
un computador concreto, susceptible de ser ejecutado (o compilado o
interpretado). Un algoritmo, estrictamente hablando, no puede ejecutarse hasta
que se implementa, ya sea en un lenguaje de programación, en un circuito
eléctrico, en un aparato mecánico, usando papel y lápiz, o en algún otro modelo
de computación.

1.9.2 Características de los algoritmos.- Se han definido cinco propiedades,


que son ampliamente aceptadas como requisitos para un algoritmo:

Carácter finito. "Un algoritmo siempre debe terminar después de un número finito
de pasos".

Precisión. "Cada paso de un algoritmo debe estar precisamente definido; las


operaciones a llevar a cabo deben ser especificadas de manera rigurosa y no
ambigua para cada caso".

Entrada. "Un algoritmo tiene cero o más entradas: cantidades que le son dadas
antes de que el algoritmo comience, o dinámicamente mientras el algoritmo corre.
Estas entradas son tomadas de conjuntos específicos de objetos".

Ing. Hermas Herrera Callejas Página : 4 de 19


Salida. "Un algoritmo tiene una o más salidas: cantidades que tienen una relación
específica con las entradas".

Eficacia. "También se espera que un algoritmo sea eficaz, en el sentido de que


todas las operaciones a realizar en un algoritmo deben ser suficientemente
básicas como para que en principio puedan ser hechas de manera exacta y en un
tiempo finito por un hombre usando lápiz y papel".

A partir del carácter finito y de la salida se deduce que ante una misma
situación inicial (o valores de entrada) un algoritmo debe proporcionar siempre el
mismo resultado (o salida), con excepción de los algoritmos probabilistas.

1.10 Métodos de representación de los algoritmos.- Los algoritmos pueden


ser expresados de muchas maneras:
 Lenguaje natural
 Pseudocódigo
 Lenguajes de programación
 Diagramas de flujo

1.10.1 Lenguaje Natural.- Las descripciones en lenguaje natural explican el


método de solución del problema, tienden a ser ambiguas y extensas. El usar
pseudocódigo y diagramas de flujo evita muchas ambigüedades del lenguaje
natural. Dichas expresiones son formas más estructuradas para representar
algoritmos.

1.10.2 Pseudocódigo.- Término genérico para nombrar las instrucciones del


programa, utilizadas en dos sentidos generales derivados del diagrama de flujo.
Pseudocódigo es la descripción de un algoritmo que asemeja a un lenguaje de
programación pero con algunas convenciones del lenguaje natural. Tiene varias
ventajas con respecto a los diagramas de flujo, entre las que se destaca el poco
espacio que se requiere para representar instrucciones complejas. El
pseudocódigo no está regido por ningún estándar. Pseudo viene de falso y por
ende es un código que, aunque es entendible, no se aplica al proceso que debe
realizar la maquina.

1.10.3 Lenguajes de Programación.- Descritos ya anteriormente con


mayor detalle

1.10.4 Diagramas de flujo.- Los diagramas de flujo son descripciones


gráficas de algoritmos; usan símbolos conectados con flechas para indicar la
secuencia de instrucciones y están regidos por normas ISO.
Los diagramas de flujo son usados para representar algoritmos pequeños,
ya que abarcan mucho espacio y su construcción es laboriosa. Por su facilidad de
lectura son usados como introducción a los algoritmos, descripción de un lenguaje
y descripción de procesos a personas ajenas a la computación.

Ing. Hermas Herrera Callejas Página : 5 de 19


Diagrama secuencial empleado en muchos campos para mostrar los
procedimientos detallados que se deben seguir al realizar una tarea, como un
proceso de fabricación. También se utilizan en la resolución de problemas, como
por ejemplo en algoritmos. Los diagramas de flujo se usan normalmente para
seguir la secuencia lógica de las acciones en el diseño de programas de
computadoras.

1.10.4.1 Símbolos

Inicio / Fin

Entrada / Salida

Proceso

Decisión

Proceso iterativo

Proceso predefinido

Conector dentro de página

Conector fuera de página

Dirección de flujo

1.10.4.2 Tipos.- Muchos algoritmos son ideados para implementarse en un


programa. Sin embargo, los algoritmos pueden ser implementados en otros
medios, como una red neuronal, un circuito eléctrico o un aparato mecánico.
Algunos algoritmos inclusive se diseñan especialmente para implementarse
usando lápiz y papel. El algoritmo de multiplicación tradicional, muchas formas de
resolver la raíz cuadrada son sólo algunos ejemplos.
Hay también Diagramas de flujo de Sistemas donde se utilizan otros
símbolos adicionales a los mostrados o inclusive con otro significado

Ing. Hermas Herrera Callejas Página : 6 de 19


1.11 EJERCICIOS DE DIAGRAMAS DE FLUJO.- Realizar los diagramas de
flujo para resolver los siguientes problemas
1.- Convertir metros a Dm, Hm y Km (Dato: metros)
2.- Hallar el área y perímetro de un rectángulo (Datos: base, altura)
3.- Sumar los números enteros, los cuadrados y los cubos de 1 a N (Dato: N)
4.- Decidir según moneda. Si al lanzar cae cara ir al cine, caso contrario estudiar
5.- Encontrar el MAYOR de 3 números diferentes (Datos: A, B, C)
6.- Encontrar el MAYOR y el MENOR de 3 números diferentes (Datos: A, B, C)
7.- Hay 3 barras de diferente longitud. Comprobar si forman un triángulo. (Si la
suma de todo par de lados es mayor que el tercero, forman triángulo, caso
contrario no)
8.- Se deben digitar R, G, o B (Rojo, Verde o Azul). Imprimir color Rojo, Verde o
Azul según las letras introducidas especificadas anteriormente)
100
9.- Evaluar la función: Y  , donde x es la abscisa e Y es la ordenada. (Si
9  3X
X = 3 no se puede dividir
10.- El cuadrado de un número entero N es la suma de los N primeros números
N
impares (Dato N, N 2  (2i  1)
i 1
11.- Calcular el factorial de un número N introducido
12.- Calcular el salario e imprimir la boleta de pago de los empleados (Datos:
Nombre, horas trabajadas, salario por hora, fin de archivo)
Pago regular hasta 40 Hs semanales
Sobretiempo: 50% más que el salario normal
Imprimir: Nombre, Hs trabajadas, salario/hora, salario normal, sobretiempo
y pago total
13.- Imprimir el reporte de ventas (Vendedor, Nro de Orden, valor de la venta,
Totales por vendedor, Total compañía) leyendo la información de un archivo
N

X i
14.- Se ingresarán N valores para X. Calcular el valor promedio X  i 1

N
1 2 3
x x x xn
15.- La función e se puede calcular con la fórmula e  1  
x x
  ....
1! 2! 3! n!
Llamemos NUM = Numerador, DEN = Denominador, TER = término = N/D.
Detener el proceso cuando el término TER sea menor o igual a 0.00005
16.- Cargar un vector de N elementos con valores introducidos al azar, luego
buscar el valor mayor y su ubicación e imprimir la información encontrada
17.- Construir la matriz identidad de N x N
18.- Se dispone de 9 bolas de billar, todas iguales menos una que tiene peso
diferente. En 3 pesadas debemos determinar cual es la diferente además
de saber si es más pesada o más liviana que las demás
19.- Dado un número, determinar si el mismo es par o impar
20.- Dado un número, determinar si el mismo es primo o no es primo
21.- Hallar la suma de los N primeros números pares

Ing. Hermas Herrera Callejas Página : 7 de 19


22.- Se debe introducir la temperatura ya sea en oC o oF. Convertir los valores a
oF o oC según corresponda. (Ver cómo identificar el valor introducido)
23.- Ordenar M números introducidos al azar, en forma ascendente. Podemos
usar el método de comparaciones sucesivas con el primer número.

Ing. Hermas Herrera Callejas Página : 8 de 19


INICIO

Leer M

I=0

I=I+1

Leer N(I)

No
I=
M? Si
I=M

I=I-1

J=0

J=J+1

SiAUX=N(J)
N(J)>N(J+ No N(J)=N(J+1)
1) N(J+1)=AUX
Si
No J=I
?
Si
No
I=
1 Si

I=0

I=I+1

Escribir N(I)

No
I=
M? Si

Fin

24.- Generar los N primeros números primos

Ing. Hermas Herrera Callejas Página : 9 de 19


Inicio

Def P(I), I, N, K, J, DIVE

A
Fin Si Fin B
?
No
A No Ejecutar DIVE>2 Si
? ?
Si No
Leer N K=K+1
A P(K) = J

N>0 ? No N debe ser > No


K=N J=J+1
0
Si ?
Si
J = 1, K=0 C
I = 1,
C
N
DIVE = 0
Imprimir
I = 1, J P(I)

I
J Mod I = 0 ? No
Si A
DIVE = DIVE + 1

25.- Invertir los dígitos de un número N entero, positivo de dos cifras o más

Ing. Hermas Herrera Callejas Página : 10 de


19
Inicio

Def A, N, N1, DIG

A
Fin Si Fin
?
No
A No Invertir ?

Si
Leer N

N>11 No N debe ser > A


? 11
Si
A = N, N1 = 0

No Desplegar A
A>0 N1
?
Si
DIG = A Mod 10
N1 = N1*10 + DIG
A = A \ 10

Ing. Hermas Herrera Callejas Página : 11 de


19
26.- Construir una matriz de N x N con N impar y mayor a 2. Calcular las sumas
de los vectores centrales (vertical y horizontal) además de la suma total de
los vectores centrales (horizontal y vertical)

Inicio

Def A(I, J), N, I, J, C, S, K, H, V

A
Fin Si Fin
? No

A Ejecutar
No ?
Si
Leer N A

N>2 y N Mod 2= No N debe ser impar y >


1? 2
Si
H = 0, V = 0, S = 0
B
I = 1, N
I = 1, N

J = 1, N
H = H + A(I, K)
V = V + A(K, I)
Leer C
I
A(I, J) = C

S = H + V – A(K, K)
J

I Imprimir H, V,
S
S = 0, K = N \ 2 + 1
A

Ing. Hermas Herrera Callejas Página : 12 de


19
CAPITULO 2 – CPNCEPTOS DE ARCHIVOS Y BASES DE DATOS

2.1. Introducción.- El almacenamiento y manejo de grandes cantidades de


datos se hace necesario en cualquier empresa para el logro de sus objetivos. Por
ejemplo, se necesitan los datos de los empleados, de clientes, de proveedores, de
los productos almacenados, etc.
Normalmente, la gestión de estos datos se ha venido realizando de forma
manual. Se organizaban en forma de fichas, informes o expedientes,
colocándolos en carpetas y almacenando éstas en un archivador (Figura 2.1). Por
ejemplo, se tiene un archivo de clientes en el que cada ficha contiene todos los
datos correspondientes a un cliente. Cuando se necesita consultar o modificar los
datos de clientes concretos será preciso realizar toda la operación manualmente.

Figura 2.1. Archivo manual.

La utilización de las computadoras en la administración de las empresas ha


supuesto una revolución respecto al almacenamiento y gestión de sus datos,
dando lugar al uso de los denominados archivos informáticos y bases de datos.
Para el almacenamiento de los datos se utilizan soportes informáticos
principalmente de tipo magnético y óptico (discos, cintas, etc.), y para el
tratamiento de los datos grabados en ellos se utilizan las computadoras (Figura
2.2).

Figura 2.2. Soportes para el almacenamiento de datos.

Las ventajas obtenidas se derivan de las características de los soportes y de


las computadoras:
- Gran capacidad de almacenamiento en un reducido espacio.
- Rapidez en el proceso de los datos.

Ing. Hermas Herrera Callejas Página : 13 de


19
- Precisión de los resultados obtenidos del proceso.
Los archivos antes citados se denominan archivos de datos, pero hemos de
tener en cuenta que existen otros tipos de archivos, ya que cualquier información
permanente que se almacena en una computadora de cualquier forma, se
considera igualmente un archivo. Por ejemplo, un archivo fuente contendrá un
programa fuente (programa escrito en un lenguaje de programación de alto nivel),
un archivo objeto contiene un programa ya compilado, un archivo gráfico, un
dibujo, etc.
En el presente capítulo nos dedicaremos al estudio de los archivos de datos o
conjuntos de informaciones en memoria secundaria relativas a un mismo tema.
También estudiaremos las bases de datos como generalización de la estructura de
archivo.
2.2 Archivos y registros.- Un Archivo o Fichero es una estructura de datos
que reside en memoria secundaria, consistente en un conjunto de informaciones
estructuradas en unidades de acceso denominadas registros, todos del mismo tipo
y en número indeterminado.

2.2.1 Un registro lógico.- O simplemente registro es cada uno de los


componentes del archivo, conteniendo el conjunto de informaciones que se
acceden y se tratan de manera unitaria. Está constituido por uno o más elementos
denominados campos, que pueden ser de diferentes tipos y que a su vez pueden
estar compuestos por subcampos.
Un registro puede tener un campo clave, cuyo valor sirve para identificar de
forma única el registro y por tanto, dicho valor no puede aparecer repetido en otro
registro diferente.
Puede suceder que un archivo no tenga campo clave en sus registros, o por
el contrario, que tenga varios, denominándose clave primaria a la principal y a las
demás secundarias.
Si un archivo contiene información de un conjunto de individuos u objetos,
sus registros contienen información de cada uno de ellos y los campos los
diferentes datos que componen.
Por ejemplo, en el archivo de personal de una empresa, cada registro
contiene información de un empleado, los campos contienen su número de CI,
nombre, dirección, fecha de ingreso, etc. La calle en que vive será un sub-campo
y el campo clave puede ser el número de CI (Tabla 2.1).
NÚMERO DE CI 2198365
NOMBRE LUIS ORTIZ RUBIO
DIRECCIÓN PS. OLMOS # 16
LOCALIDAD LA PAZ
DEPARTAMENTO PRODUCCION
CATEGORIA LABORAL TÉCNICO AUXILIAR
FECHA DE INGRESO 15/09/1988
Tabla 2.1. Registro personal.

2.2.2 Un registro físico.- O bloque corresponde a la cantidad de información que


se transfiere físicamente en cada operación de acceso (lectura o escritura) del

Ing. Hermas Herrera Callejas Página : 14 de


19
medio magnético
Se debe aclarar los conceptos
de registro lógico y registro físico, diferenciándose en que el tamaño y formato del
registro lógico los define el programador, mientras que el tamaño del registro físico
viene dado por las características físicas de la computadora utilizada.
En general, un bloque tendrá
capacidad para contener uno o más registros lógicos, pero también puede ocurrir
que un registro lógico ocupe más de un bloque (Figura 2.3).
En el primer caso se habla de
registros bloqueados, denominándose factor de bloque al número de registros
lógicos que contiene cada registro físico, y se denominan registros expandidos a
aquellos que ocupan más de un bloque.
La lectura de un archivo con
registros bloqueados transfiere a memoria varios registros a la vez, pero para leer
un registro expandido será necesario realizar más de un acceso.
Bloque (Factor de bloqueo = 3)
Registro 1 Registro 2 Registro 3

campo 1 campo 2 campo 3 subcampo1 subcampo 2

campo 3
Figura 2.3. Esquema lógico de un archivo.
2.3 Clasificación de los Archivos Según su Uso.- Los archivos se clasifican
según la utilización que se hace de ellos en tres grupos:

2.3.1 Archivos Permanentes.- Contienen información que varia poco a lo largo


del tiempo. Pueden ser de. tres clases:
2.3.1.1 Archivos de Constantes.- Su información permanece prácticamente
inamovible, utilizándose principalmente como archivos de consulta. Un archivo de
este tipo puede ser el de la red del metro de una ciudad, que contiene la
descripción, características, número de estaciones, número de trenes, etc., de
cada línea.
2.3.1.2 Archivos Maestros.- También denominados Archivos de Situación,
contienen la información que refleja el estado o situación de una empresa, entidad
o algún aspecto de ella en un determinado momento. Estos archivos se actualizan
periódicamente para adaptarlos a cada nueva situación. Un ejemplo es el archivo
de personal con contrato temporal en una empresa, o también el archivo de
existencias en almacén.
2.3.1.3 Archivos Históricos.- Se obtienen de los anteriores cuando se dejan
fuera de uso para futuros estudios estadísticos o consultas. Será un archivo
histórico el que contiene la información de libros adquiridos por una biblioteca en
la década de los ochenta.

2.3.2 Archivos de Movimientos.- En ellos se almacena la información que se

Ing. Hermas Herrera Callejas Página : 15 de


19
utilizará para actualizar los archivos maestros. Sus registros, denominados
movimientos o transacciones, son de tres clases: altas, bajas y modificaciones.
Una vez realizado el proceso de actualización de un archivo
maestro por medio de un archivo de movimientos, éste pierde su validez y
podemos deshacernos de él.
Un archivo de este tipo para actualizar el antes mencionado
de personal contratado, es el que refleja las nuevas contrataciones, finalizaciones
de contratos y modificaciones de los mismos producidas en la empresa durante el
mes actual.

2.3.3 Archivos de Trabajo.- Tienen una vida limitada, normalmente igual a la


duración de la ejecución de un programa y se utilizan como auxiliares de los
anteriores (se llaman también archivos de maniobra).
Por ejemplo, si se desea una lista alfabética de los nombres del personal
contratado, se hará por medio de un archivo de trabajo en el que se almacene
esta información a partir del archivo de personal. Este archivo desaparecerá una
vez se tenga la lista impresa.

2.4 Organización de Archivos.- Al diseñar un archivo, dependiendo del uso


que se va a hacer del mismo y del soporte utilizado, se pueden elegir diferentes
maneras de organizar sus registros, siendo las principales organizaciones las
siguientes:

- Secuencial
- Directa o aleatoria
- Indexada
- Archivos de texto
- Archivos binarios

2.4.1. Organización Secuencial.- Es aquélla en la cual los registros ocupan


posiciones consecutivas de almacenamiento, y solo se puede acceder a ellos de
uno en uno a partir del primero (Figura 2.4).
En un archivo secuencial no se pueden hacer operaciones de escritura
cuando se está leyendo, ni operaciones de lectura cuando se está escribiendo.
Por otro lado, para actualizados es preciso crear nuevos archivos donde se
copien registros que vayan a permanecer, modificados o no, junto con los nuevos.

Acceso secuencial

Registro 1 Registro 2 Registro 3 Registro 4 Registro 5

Figura 2.4. Esquema lógico de un archivo secuencial.

2.4.2 Organización Directa o Aleatoria.- En un archivo con esta organización,


también denominada relativa las informaciones se colocan y se acceden

Ing. Hermas Herrera Callejas Página : 16 de


19
aleatoriamente mediante su posición, es decir, indicando el lugar relativo que
ocupan dentro del conjunto de posiciones posibles.
En esta organización se pueden leer y escribir registros, en cualquier orden y
en cualquier lugar.
Presenta el inconveniente de que es tarea del programador establecer la
relación entre la posición que ocupa un registro y su contenido, además puede
desaprovecharse parte del espacio destinado al archivo, ya que pueden quedar
huecos libres entre unos registros y otros.
Su principal ventaja es la rapidez de acceso a un registro cualquiera, ya que
para ello no es preciso pasar por los anteriores (Figura 2.5).
Acceso directo

Registro 2 Registro 3 Registro 1 Registro 4 Registro 8 Registr

Posiciones 01 02 03 04 05 06 07

Figura 2.5. Esquema lógico de un archivo directo.

2.4.3 Organización Secuencial Indexada.- Un archivo con esta organización


consta de tres áreas:

 Área de índices
 Área de datos o primaria
 Área de excedentes (Overflow)

2.4.3.1 El área de datos o primaria.- Contiene los registros de datos,


clasificados en orden ascendente por su campo de clave.

2.4.3.2 El área de índices.- Es un archivo secuencial creado por el sistema, en


el que cada registro establece una división (segmento) en el área de datos o
primaria, y contiene la dirección de comienzo del segmento y la clave más alta del
mismo. De esta manera, el sistema accede de forma directa a un segmento del
área primaria a partir del área de índices, de forma similar a la búsqueda de un
capitulo de un libro a partir de su índice.

2.4.3.3 El área de excedentes.- Es un espacio reservado para añadir nuevos


registros que no pueden ser colocados en el área primaria cuando se produce una
actualización del archivo (Figura 2.6).

Área de índices 01 AC 04 FA 07 GK

Área de datos AA -- AB -- AC -- BC -- CH -- FA -- GF -- GJ -
GK -
01 02 03 04 05 06 07 08

Área excedentes FM -- AN -- BM -- GA

Ing. Hermas Herrera Callejas Página : 17 de


19
Figura 2.6. Esquema lógico de un archivo secuencial indexado.

Esta organización presenta la ventaja de un rápido acceso por medio de la


clave del registro, y además el sistema se encarga de relacionar la posición de
cada registro con su contenido por medio del área dé índices. También es trabajo
del sistema, la gestión de las áreas de índices y de excedentes.
Los inconvenientes que presenta son la necesidad de espacio adicional
para el área de índices y el desaprovechamiento de espacio que resulta de quedar
huecos intermedios libres después de sucesivas actualizaciones.

2.5 Métodos de Acceso.- Se denomina método de acceso a la forma en que el


dispositivo que maneja el soporte de información que contiene un archivo se
posiciona en un determinado lugar del mismo para realizar una operación de
lectura o escritura de un registro.
El modo de acceso lo decide el programador de la aplicación en función del
soporte utilizado y del tipo de organización del archivo.
Hay 2 métodos básicos: secuencial y directo.
El acceso secuencial a un registro supone acceder inicialmente al primer
registro del archivo y después, consecutivamente, a todos los sucesivos hasta
llegar al registro deseado. Este modo de acceso se puede utilizar con cualquier
soporte y organización.
El acceso directo solamente se puede realizar en los denominados soportes
direccionables, como los discos magnéticos, y consiste en el posicionamiento
sobre cualquier registro sin necesidad de haber accedido antes a los anteriores.
En los archivos de organización directa, este acceso se consigue
proporcionando al dispositivo la posición del registro que se desea acceder. En
ocasiones es conveniente programar una función de aleatorización o hashing, la
cual permita calcular la posición de cualquier registro a partir del valor de su clave.
En los archivos indexados, el acceso directo lo realiza de forma automática
el sistema a partir del valor del campo clave; para ello utiliza, como se ha descrito
en el apartado anterior, un conjunto auxiliar de índices que relacionan las claves
con las posicione de los registros.

2.6 Bases de Datos.- La gestión de archivos se ha demostrado insuficiente para


cubrir las necesidades de almacenamiento y proceso de datos en la actualidad.
Los sistemas de información de las empresas son cada vez más grandes y
complejos, y su gestión mediante el uso de archivos presenta algunos
inconvenientes, como el hecho de que los datos estén repartidos por distintos
departamentos de la empresa, lo que supone tener que desplazarse o solicitarlos
cada vez que se necesitan en un lugar diferente de donde se generan.
Además pueden estar repetidos varias veces, con el inconveniente de que su
actualización dará lugar a inconsistencias si no se realiza simultáneamente en
todos los lugares en que se ubican.
Las aplicaciones que se creen deberán tener en cuenta las distintas
estructuraciones de los datos, y los cambios que se realicen tanto en hardware
como en software presentarán numerosas complicaciones.

Ing. Hermas Herrera Callejas Página : 18 de


19
Otro problema derivado de la dispersión de los datos radica en la dificultad
para establecer sistemas de control y seguridad en los mismos.
Los sistemas de bases de datos pretenden dar solución a los problemas
expuestos mediante la integración de los archivos de datos, de su estructura y de
la aplicación que los maneja.
Podemos definir una base de datos como un conjunto integrado de datos
interrelacionados, junto con una serie de aplicaciones para su manejo, accesibles
simultáneamente por diferentes usuarios y programas.
Sus principales características son:
 Control centralizado de los datos.
 Integridad de los datos.
 Minimización de las redundancias.
 Independencia de los datos y las aplicaciones.
 Acceso concurrente a los datos.
 Costo mínimo de almacenamiento y mantenimiento.
 Versatilidad para la representación de relaciones.
 Establecimiento de medidas de seguridad.
 Facilidad para el cambio (hardware y software).

2.6.1 Modelos de Bases de Datos.- El modelo de base de datos hace referencia


a la estructura que se utiliza para expresar las relaciones existentes entre las
diferentes unidades de datos que la constituyen. De entre las varias posibilidades
útiles para ello, son tres los modelos que se han afianzado y están actualmente en
uso:
1. Modelo jerárquico.
2. Modelo en red.
3. Modelo relacional.

2.6.1.1 Modelo Jerárquico.- Utiliza la estructura de árbol para establecer


relaciones del tipo 1 : n (uno a muchos). Una base de datos de este tipo consistirá
en uno o varios árboles que expresarán las distintas agrupaciones entre los datos.
Cada árbol tiene un nodo distinguido denominado raíz y, a partir de él, se
establecen relaciones de sucesión, denominándose nodos hijos a los
descendientes de otro. Mientras que un nodo padre sólo puede tener una
ocurrencia, los nodos hijos pueden tener varias (Figura 2.7).

Empleado

Estudios Experiencia Familia Logros

Figura 2.7. Modelo Jerárquico.

Ing. Hermas Herrera Callejas Página : 19 de


19
2.6.1.2 Modelo de Red.- Utiliza la estructura de red o grafo, que permite definir
entre todos los nodos relaciones n : n (muchos a muchos). Mediante el
establecimiento de apuntadores entre nodos se puede relacionar cualquier unidad
de datos con cualquiera de las otras (Figura 2.8).

Estudios Experiencia

Empleado

Logros Familia

Figura 2.8. Modelo de Red.

2.6.1.3 Modelo Relacional.- Se basa en el Álgebra Relacional. Las relaciones


entre las unidades de datos o entidades se expresan mediante tablas de dos
dimensiones. Una base de datos de este tipo estará formada por varias de estas
tablas en las que una fila (tupla) contiene una ocurrencia de valores
interrelacionados y una columna contiene los diferentes valores posibles de cada
entidad (Tabla 2.2).

AUTOCAR CONDUCTOR
CIUDAD
PASAJERO
AGENCIA
105 JULIÁN PÉREZ LA PAZ ELÍAS PEINADO
TOURISA
105 JULIÁN PÉREZ COCHABAMBA ANA MARTORELL
PRISA
105 PEDRO ROSALES SANTA CRUZ MARTA SÁNCHEZ
TOURISA
107 JULIÁN PÉREZ SUCRE JULIO CARRANZA
TOURIZA

Tabla 2.2. Modelo relacional

2.6.2 Seguridad y Control de Datos.- La información almacenada en un archivo


o base de datos puede llegar a tener una gran importancia y su pérdida o
destrucción podría suponer un desastre para sus propietarios.
Por ello, será preciso establecer determinadas medidas de seguridad y
control que minimicen o anulen ese riesgo.
Asimismo, habrá que determinar otras protecciones que
garanticen la privacidad y confidencialidad de los datos, con el fin de que éstos no

Ing. Hermas Herrera Callejas Página : 20 de


19
puedan ser utilizados para otros propósitos diferentes de los usos correctos para
los que se crearon.
Distinguiremos dos aspectos diferentes con respecto a la protección que se
puede establecer sobre los datos:
1. Seguridad contra fallos del sistema o del soporte. Integridad
2. Seguridad contra usos incorrectos o no autorizados. Confidencialidad

2.6.3 Seguridad Contra Fallos del Sistema o del Soporte.- Es preciso proteger
no sólo los datos, sino también las operaciones de actualización que se realizan
con ellos, de tal manera que si en un momento dado se produce una caída del
sistema o la rotura del soporte, se pueda recuperar la información según estaba
antes del fallo.

Para ello se emplean las siguientes técnicas:


 Realización de copias de seguridad (back-up) periódicamente, por ejemplo,
una vez por semana, guardando estas copias en un lugar seguro hasta que
dejen de tener validez al realizar nuevas copias.
 Registro de operaciones que se realicen con los datos, recopilando estos
registros periódicamente, por ejemplo, una vez por día.
 Establecimiento de procedimientos de recuperación capaces de reconstruir la
información en su estado anterior a producirse el fallo, por medio de la copia
de seguridad y de los registros de operaciones.
 RAID = Redundant Array of Inexpensive Disk.- La información de archivos o
bases de datos creados en un volumen es distribuida de modo automático en
áreas especiales de los demás volúmenes para su recuperación automática
en caso de daño del volumen físico

De esta forma, cuando se produzca un fallo o avería, una vez


subsanada y realizado el procedimiento de recuperación, se tendrá la información
según estaba cuando se efectuó el último registro de operaciones y sólo será
preciso repetir las operaciones que se hicieron sobre el archivo o base de datos
desde ese momento hasta el fallo.

2.6.4 Seguridad Contra Usos Incorrectos o no Autorizados.- Una de las


principales características de los archivos y de las bases de datos es la posibilidad
de acceso a sus datos por parte de diferentes programas y usuarios. Esta
característica implica la posibilidad de que los datos puedan ser dañados por error
o que puedan ser utilizados ilegítimamente por usuarios no autorizados. Para
evitarlo, habrá que establecer medidas de seguridad al efecto.
Físicamente el acceso a un archivo se protege por medio de etiquetas, cuyas
claves están controladas por el sistema operativo. En algunos casos se puede
aumentar aún más esta protección por medio del criptografiado de los datos
almacenados, consistente en el encubrimiento de la información por algún método
de cifrado. (Sin embargo hay posibilidad de violar esa seguridad mediante
pinchazos a las vías de transmisión mediante sneefers)
La protección queda establecida mediante diferentes niveles de acceso a los

Ing. Hermas Herrera Callejas Página : 21 de


19
archivos relativos a las operaciones permitidas o prohibidas: lectura, escritura y
borrado de registros.
A cada usuario se le asigna un nivel de acceso, que es aceptado por el
sistema operativo tras el reconocimiento de su clave de usuario (password) y que
le restringe el acceso a determinados archivos y a determinadas operaciones
sobre ellos. Es conveniente que la clave de usuario se cambie con frecuencia
para reforzar la seguridad.
Es imposible lograr seguridad en un 100 %, sin embargo toda medida de
seguridad implantada disminuye el riesgo contra uso no autorizado o destrucción.
Habrá que buscar un sano equilibrio entre el costo de implantar medidas de
seguridad y el nivel de seguridad alcanzado de modo que corresponda a las
políticas de cada institución.

Ing. Hermas Herrera Callejas Página : 22 de


19
CAPITULO 3 – VISUAL BASIC – CONCEPTOS BASICOS

3.1 Definición de Visual Basic.- Microsoft Visual Basic es actualmente el


lenguaje de programación más popular del mundo diseñado especialmente para
crear aplicaciones gráficas de manera fácil y eficiente. Con Microsoft Visual Basic
no es necesario escribir numerosas líneas de código para diseñar la interfaz
gráfica de usuario, sólo es necesario “dibujar” ciertos objetos prefabricados
llamados controles (etiquetas, cuadros de texto, botones de comando, listas
desplegables, etc.) en un formulario dentro de la pantalla. A continuación se
escribe el código fuente asociado con cada objeto. Esto es, cada objeto queda
ligado a un bloque de código que se ejecuta cuando se produce el suceso que lo
activa (por ejemplo, un clic del mouse).

3.2 Definición de Objeto.- Los elementos básicos (formularios y controles) de


construcción de una aplicación con Visual Basic son los objetos. Cada objeto
tiene un conjunto de características y un comportamiento definido (propiedades,
métodos y sucesos) que lo diferencian de otros objetos y hacen que cumpla con
una función determinada en una aplicación. Los objetos pueden moverse, variar
de tamaño y personalizarse mediante la asignación de propiedades en tiempo de
diseño o en tiempo de ejecución.

3.2.1 Propiedades .- Al conjunto de datos que describen las características de


un objeto se le conoce como sus propiedades. Estas propiedades pueden
establecerse en tiempo de diseño, utilizando la ventana Propiedades o durante la
ejecución del programa, mediante el uso de sentencias en el código. La sintaxis
para asignar valor a una propiedad es:

Objeto.Propiedad = Valor
donde Objeto es el nombre del objeto cuya propiedad se desea establecer,
Propiedad es la característica que deseamos modificar y Valor es el nuevo valor
asignado a dicha propiedad. Por ejemplo:
Label1.Caption = ”Ingrese código de acceso”
podría utilizarse en el código de programa para asignar a la propiedad Caption del
objeto Label1 el valor “Ingrese código de acceso”.
3.2.2 Métodos .- Un método es una sentencia especial que realiza una acción o
un servicio para un objeto en concreto dentro del programa. La sintaxis para
utilizar un método es:
Objeto.Método = Valor
donde Objeto es el nombre del objeto que deseamos modificar, Método es la
orden que queremos utilizar para modificar el objeto y Valor es un argumento
opcional que utilizará el método. Por ejemplo, la sentencia
List1.Addltem = “Petrolera”
Utiliza el método Addltem para colocar la palabra ‘Petrolera’ en el cuadro de lista
List1.

Ing. Hermas Herrera Callejas Página : 23 de


19
3.2.3 Sucesos.- Hechos que son desencadenados en los formularios y controles
por la acción del usuario. A cada suceso se puede asociar un procedimiento que
responda adecuadamente a la acción desencadenada. Los sucesos son los
mensajes o solicitudes que se envían a los objetos de Visual Basic.

3.3 Concepto de proyecto.- Un proyecto es una serie de archivos (módulos,


formularios, etc) que integran en su conjunto una aplicación completa. Un
proyecto consta de los siguientes archivos:
Archivo Extensión
* Un archivo de proyecto que realiza el seguimiento de todos los .vbp
componentes de la aplicación.
* Un archivo para cada formulario. .frm
* Un archivo de datos binario para cada formulario que contenga datos .frx
sobre propiedades de controles del formulario. Estos archivos no se
pueden modificar y los genera automáticamente cualquier archivo .frm
que tenga propiedades en formato binario, como Picture o Icon.
* Un archivo para cada módulo de clase. (opcional) .cls
* Un archivo para cada módulo estándar. (opcional) .bas
* Uno o más archivos con controles ActiveX .ocx
* Un único archivo de recursos. .res

3.4 Terminología de Visual Basic.- Conforme se desarrollen aplicaciones con


Visual Basic se necesitará estar familiarizado con los siguientes términos:

3.4.1 Controles.- Los controles son objetos que se “dibujan” sobre un formulario,
tales como etiquetas, cuadros de texto, botones de comando, marcos, listas,
temporizadores, etc.

3.4.2 Formulario.- Un formulario es una ventana en la que se “dibujan” los


controles y que permite a los usuarios llevar a cabo las funciones asociadas a la
aplicación.

3.4.3 Interfaz de usuario.- Medio de comunicación entre la aplicación y el


usuario

3.4.4 Módulo.- Un conjunto de declaraciones y procedimientos.

3.4.5 Procedimientos conducidos por sucesos.- Un procedimiento conducido


por sucesos es el código que es invocado cuando un objeto reconoce que ha
ocurrido un determinado suceso dentro de un programa. Por ejemplo cuando se
hace clic en el primer botón de comando de un programa, se ejecuta el
procedimiento de suceso Command1.Click. Los procedimientos conducidos por
sucesos suelen evaluar y establecer propiedades y utilizar otras sentencias de
programa para realizar el trabajo del programa.

Ing. Hermas Herrera Callejas Página : 24 de


19
3.4.6 Programación controlada por sucesos.- Cuando un programa es
controlado por sucesos, se escribe el código que se ejecuta en respuesta a
sucesos invocados por el usuario. Difiere de la programación procedural, en la
cual el programa comienza en la primera línea de código y sigue un flujo definido
llamado procedimiento. La programación controlada por sucesos es la esencia de
las interfaces gráficas de usuario; el usuario acciona y el código responde.

3.4.7 Sentencia de programa.- Una sentencia de programa es una o más


palabras reservadas de código que realizan el trabajo del programa. Las
sentencias de programa de Visual Basic crean espacios de almacenamiento para
datos, abren archivos, realizan cálculos y muchas otras tareas importantes.

3.4.8 Tiempo de diseño.- Es el momento en el que se construye la aplicación

3.4.9 Tiempo de ejecución.- Es el momento en el cual el usuario ejecuta e


interactúa con la aplicación.

3.5 El entorno de programación de Visual Basic 6.0.- El entorno de


programación de Visual Basic contiene todas las herramientas necesarias para
desarrollar programas para Windows, de una manera fácil y sencilla. Para iniciar
Visual Basic, siga los pasos que se indican en la siguiente ilustración:

1.- Situar el puntero del mouse sobre el botón Inicio y hacer clic
2.- Situar el puntero del mouse sobre la opción programas
3.- Situar el puntero del mouse en el grupo de programas Visual Studio 6.0

Ing. Hermas Herrera Callejas Página : 25 de


19
4.- Finalmente hacer clic en el icono de Visual Basic 6.0

Al hacer clic en el icono de Visual Basic 6.0, aparece el cuadro de diálogo Nuevo
proyecto. Este cuadro de diálogo solicita seleccionar el tipo de proyecto de
programación que se desea crear. Hacer clic en el botón Abrir para aceptar el
nuevo proyecto propuesto por defecto, una aplicación estándar de 32 bits para
Visual Basic. En el entorno de programación de visual Basic se abrirá un proyecto
nuevo, junto con algunas de las ventanas y herramientas que se muestran en la
siguiente ilustración:

Barra de menú Barra de herramientas Estándar Explorador de proyectos

Cuadro de herramientas Formulario Ventana de posición del formulario

Ventana de Propiedades

3.5.1 La barra de menús.- Muestra una lista con todos los menús (Archivo,
Edición, Ver, Proyecto, Formato, Depuración, Ejecutar, Consulta, Diagrama,
Herramientas, Complementos, Ventana y Ayuda) que permitirán acceder a la
mayoría de los comandos que controlan el entorno de programación. Los menús y
los comandos funcionan según una serie de reglas estándar utilizadas en todos
los programas basados en Windows y se podrá acceder a ellos utilizando el

Ing. Hermas Herrera Callejas Página : 26 de


19
teclado o el mouse.

3.5.2 La Barra de Herramientas Estándar.- Esta barra contiene una serie de


botones que permitirán un acceso rápido a los comandos de menú usados
frecuentemente. Si se hace clic en uno de los botones de la barra de
herramientas, se ejecutará la acción representada por ese botón.

Agregar proyecto de EXE estándar Visual Component Manager


Agregar Formulario Ventana de la vista datos
Editor de menús Cuadro de herramientas
Abrir proyecto Examinador de objetos
Guardar proyecto Ventana Posición del formulario

Ventana de Propiedades
Cortar Explorador de proyectos
Copiar Terminar
Pegar Interrumpir
Buscar Iniciar
Deshacer Rehacer

3.5.2.1 Agregar proyecto.- Muestra un submenú que enumera los tipos de


proyectos que se pueden agregar al grupo de proyectos abierto actualmente.
3.5.2.2 Agregar <elemento>.- Muestra un submenú que enumera todos los
elementos que se pueden agregar al proyecto activo. El icono cambiará al último
objeto agregado. El valor predeterminado es el Formulario.
3.5.2.3 Editor de menús.- Muestra el cuadro de diálogo Editor de menus.
3.5.2.4 Abrir proyecto.- Cierra el proyecto y el grupo de proyectos, si hay uno
cargado, y muestra los proyectos existentes y los proyectos asociados.
3.5.2.5 Guardar proyecto.- Guarda el proyecto actual y todos sus componentes
(formularios y módulos).
3.5.2.6 Pegar.- Inserta el contenido del Portapapeles en la ubicación actual.
3.5.2.7 Cortar.- Quita el control o texto seleccionado y lo coloca en el
Portapapeles.
3.5.2.8 Copiar.- Copia el texto o control seleccionado al Portapapeles.
3.5.2.9 Deshacer.- Deshace la última acción de edición, como la escritura de
texto en la ventana Código o la eliminación de controles.
3.5.2.10 Rehacer.- Restituye la última operación de edición de texto u objeto si no
efectuó ninguna acción desde el último comando Deshacer.
3.5.2.11 Iniciar.- Ejecuta la aplicación que comienza con el Objeto inicial
identificado en la ficha General del cuadro Propiedades del proyecto.
3.5.2.12 Interrumpir.- Detiene la ejecución de un programa y cambia al modo de
interrupción.
3.5.2.13 Terminar.- Detiene la ejecución del programa y vuelve a tiempo de

Ing. Hermas Herrera Callejas Página : 27 de


19
diseño.
3.5.2.14 Explorador de proyectos.- Muestra el Explorador de proyectos, que
presenta una lista jerarquizada de los proyectos abiertos actualmente y de sus
contenidos.
3.5.2.15 Buscar.- Busca un texto especificado en el cuadro de diálogo Buscar.
3.5.2.16 Ventana Posición del formulario.- Muestra la ventana Posición del
formulario, para obtener una vista previa de la ubicación del formulario dentro de la
ventana.
3.5.2.17 Ventana Propiedades.- Muestra la ventana Propiedades para ver o
modificar las propiedades del control seleccionado.
3.5.2.18 Examinador de objetos.- Muestra el Examinador de objetos, que
presenta una lista con las bibliotecas de objetos, la biblioteca de tipos, las clases,
los métodos, las propiedades, los eventos y las constantes que puede utilizar en el
código, además de los módulos y los procedimientos definidos para el proyecto.
3.5.2.19 Cuadro de herramientas.- Muestra el Cuadro de herramientas, que
contiene los controles y los objetos insertables disponibles actualmente para
agregar a la aplicación.

3.5.3 El cuadro de herramientas.- Proporciona una serie de iconos, cada uno


de los cuales representan un determinado control que se puede colocar en un
formulario. Si no está visible, hacer clic en el botón Cuadro de herramientas de la
Barra de herramientas

Puntero PictureBox

Label
TextBox
Frame CommandButton

CheckBox OptioButton

ComboBox ListBox

HScrollBar VScrollBar

Timer DriveListBox

DirListBox FileListBox

Shape Line

Image Data

ActiveX

3.5.3.1 El puntero.- Este elemento no se utiliza para dibujar controles. Se utiliza


para seleccionar, mover y ajustar el tamaño de los controles existentes sobre el
formulario.

Ing. Hermas Herrera Callejas Página : 28 de


19
3.5.3.2 PictureBox (Cuadro de dibujo).- Se utiliza para visualizar imágenes
gráficas (‘icons’, ‘bitmaps’ y ‘metafiles’).
3.5.3.3 Label (Etiqueta).- Se utiliza para mostrar texto. Puede ser transparente,
de forma que el texto parece que forma parte del formulario. El texto de este
control se define en la propiedad Caption.
3.5.3.4 TextBox (Cuadro de texto).- Este control es un pequeño editor de texto
y su propiedad principal es Text, con la que se puede poner un texto fijo en el
control o leer el texto que introduzca el usuario.
3.5.3.5 Frame (Marco).- Se utiliza para agrupar objetos relacionados entre si.
Para agrupar controles, se dibuja primero el marco y después se dibujan los
controles dentro del marco.
3.5.3.6 CommandButton (Botón de comando).- Crea un botón en el que el
usuario puede hacer clic para ejecutar un comando.
3.5.3.7 CheckBox (Casilla de verificación).- Este control presenta múltiples
opciones de las que el usuario puede elegir más de una. Las selecciones
efectuadas se activan o desactivan de modo alternante
3.5.3.8 OptionButton (Botón de opción).- Este control muestra múltiples
opciones de las que el usuario sólo puede elegir una. Al activar una opción,
automáticamente se desactivan las demás.
3.5.3.9 ComboBox (Cuadro combinado).- Este control es una combinación de
un cuadro de texto y un cuadro de lista. El usuario puede seleccionar un elemento
de la lista o escribir un valor en el cuadro de texto.
3.5.3.10 Timer (Reloj).- Permite activar procesos a intervalos regulares de
tiempo.
3.5.3.11 ListBox (Cuadro de lista).- Se utiliza para mostrar una lista de
elementos de los que el usuario puede seleccionar uno. A diferencia de un grupo
de casillas de activación o botones de opción, el control ListBox puede contener
varias líneas, y el usuario puede desplazarse por la lista para localizar una entrada
determinada.
3.5.3.12 HScrollBar (Barra de desplazamiento horizontal).- Se utiliza para
desplazar la información de una caja hacia la izquierda o hacia la derecha.
3.5.3.13 VScrollBar (Barra de desplazamiento vertical).- Se utiliza para
desplazar la información de una caja hacia arriba o hacia abajo.
3.5.3.14 DriveListBox (Cuadro de lista de unidades).- Se utiliza para visualizar
una lista de las unidades de disco disponibles para que el usuario pueda
seleccionar una.
3.5.3.15 DirListBox (Cuadro de lista de directorios).- Se utiliza para visualizar
una lista de carpetas de un dispositivo seleccionado en los que el usuario puede
moverse.
3.5.3.16 FileListBox (Cuadro de lista de archivos).- Se utiliza para visualizar
una lista de archivos contenidos en la carpeta seleccionada a los que el usuario
puede acceder.
3.5.3.17 Shape (Formas).- Permite dibujar rectángulos, cuadrados, elipses o
círculos en el formulario, además de elegir diversas formas de relleno en el área
encerrada por las figuras

Ing. Hermas Herrera Callejas Página : 29 de


19
3.5.3.18 Line (Línea).- Se utiliza para dibujar rectas o una gran variedad de
estilos de líneas en el formulario, o en algunos de los controles que permitan esta
modalidad de manipulación
3.5.3.19 Image (Imagen).- Se utiliza para mostrar en el formulario una imagen
gráfica tipo mapa de bits, icono o meta-archivo y la posibilidad de utilizarlo como
una tecla de comando
3.5.3.20 Data (Datos).- Este control proporciona acceso a una base de datos
existente y permite visualizar su información en el formulario además de poderse
manipular dicha información dentro del programa
3.5.3.21 OLE.- Este control permite incrustar datos, imágenes o elementos
provenientes de otra aplicación.

3.5.4 La Ventana Propiedades.- Permite visualizar y modificar las propiedades


de los elementos dentro de un formulario. Una propiedad es una característica de
un objeto o control, como su tamaño, título, color, etc. Una lista diferente aparece
en la ventana Propiedades cada vez que se selecciona un control en el formulario
(o se selecciona el formulario mismo)
Cuadro de lista de Controles

Lista de propiedades

La ventana Propiedades contiene un cuadro de lista desplegable en el que


aparecen todos los controles del formulario; también lista todas las propiedades
del control seleccionado en el formulario.

3.5.5 El Explorador de proyectos.- Esta ventana despliega en forma de árbol


los formularios y módulos (archivos que contienen código) de la aplicación,
facilitando la tarea de pasar de unos archivos a otros durante la creación de un
proyecto. Cualquier cambio realizado en un proyecto se refleja de manera
automática en el Explorador de proyectos.
Ver código
Ver objeto

Ing. Hermas Herrera Callejas Página : 30 de


19
Los botones Ver objeto y Ver código proporcionan acceso a todos los archivos
utilizados en el proceso de programación.

3.5.6 Ventana de Posición del Formulario.- La ventana Posición del formulario


muestra la ubicación y tamaño relativo del formulario utilizando una pequeña
representación gráfica de la pantalla. Si desea que el formulario aparezca en una
posición distinta de la actual, puede moverlo en la ventana de Posición del
formulario. Para ello, sitúe el puntero del mouse sobre el ícono que representa al
formulario y, seguidamente, arrástrelo donde usted quiera que aparezca cuando el
usuario ejecute la aplicación.

3.6 El Formulario.- Es el área de trabajo principal, es el punto desde el cual se


puede desarrollar cualquier aplicación Visual Basic. Básicamente, un formulario
funciona como un plano de fondo en el cual dibujaremos los controles necesarios
para solicitar, presentar datos o definir ciertos procesos.
Control de menú del sistema Maximizar
Barra de título Minimizar Cerrar

Para cambiar el tamaño del formulario, sitúe el puntero del mouse sobre uno de
los cuadraditos que aparecen en medio de los lados o en una de las esquinas del
formulario, y cuando el puntero cambie a una flecha doble, arrastre en el sentido
adecuado hasta que el formulario adquiera el tamaño deseado.

Ing. Hermas Herrera Callejas Página : 31 de


19
3.6.1 Propiedades de un formulario.- Un formulario tiene propiedades que
afectan su apariencia y comportamiento y responde a ciertos eventos durante la
ejecución del programa. La mayor parte de las propiedades son modificables
durante el diseño de la aplicación y algunas sólo son modificables en el código del
programa, por tanto, durante la ejecución de éste. Veamos algunas propiedades
de los formularios:
3.6.1.1 (Nombre).- Por defecto el nombre del formulario es Form1 y puede ser
usado en el código para identificar al formulario. Puede establecer un nuevo
nombre durante el diseño de la aplicación.
3.6.1.2 Appearance.- Permite establecer el estilo del formulario. Al seleccionar
la opción Flat el formulario queda sin efectos visuales; en cambio, si
seleccionamos la opción 3D el formulario adopta la apariencia de tres
dimensiones.

3.6.1.3 AutoRedraw.- Esta propiedad permite establecer si el contenido del


formulario vuelve a re-dibujarse cuando haya sido ocultado por otro objeto. La
opción True vuelve a re-dibujar el contenido del formulario cuando éste haya sido
ocultado; False no vuelve a re-dibujar los gráficos o texto.
3.6.1.4 BackColor.- Permite establecer el color de fondo del formulario.

Seleccione un color de fondo para el formulario

Ing. Hermas Herrera Callejas Página : 32 de


19
3.6.1.5 BorderStyle.- Permite modificar el tipo de borde del formulario.

0- None.- Permite definir una formulario sin borde.

1- Fixed Single.- Permite definir una formulario con borde simple no


redimensionable.

2- Sizable.- Es la opción por defecto. Permite definir un formulario con borde


grueso redimensionable.

3- Fixed Dialog.- Permite definir una formulario con borde grueso no


redimensionable.
4- Fixed ToolWindow.- Permite definir un formulario de borde no
redimensionable con área de titulo reducida.
5- Sizable ToolWindow.- Permite definir un formulario de borde redimensionable
con área de titulo reducida
3.6.1.6 Control Box.- Seleccionar esta propiedad y hacer clic en True para incluir
un menú de sistema en la barra de título del formulario. Si se elige False, el menú
de control y los botones Maximizar, Minimizar y Cerrar desaparecen del formulario.

Ing. Hermas Herrera Callejas Página : 33 de


19
3.6.1.7 Caption.- Seleccione esta propiedad para introducir el texto que
aparecerá en la barra de título del formulario.

3.6.1.8 ForeColor.- Permite establecer el color de primer plano del formulario.


3.6.1.9 Height.- Devuelve o permite establecer la altura del formulario.
3.6.1.10 Left.- Devuelve o permite establecer la distancia entre el borde izquierdo
interno del formulario y el borde izquierdo de su contenedor.
3.6.1.11 MousePointer.- Devuelve o permite establecer el tipo de ícono para el
puntero del mouse cuando éste se desplace sobre el formulario.

3.6.1.12 Pícture.- Permite seleccionar un gráfico como fondo del formulario. El


gráfico puede ser de tipo BMP, WMF,JPG o GIF.

Hacer clic en este botón y en el cuadro de diálogo que aparece, seleccionar una imagen
3.6.1.13 ShowlnTaskBar.- Permite determinar si en la barra de tarea de

Ing. Hermas Herrera Callejas Página : 34 de


19
windows debe aparecer o no un icono que represente al formulario cuando el
programa se ejecute.
3.6.1.14 Top.- Permite establecer la posición vertical del formulario. Junto con
Left determina la coordenada de la esquina superior izquierda del formulario.
3.6.1.15 Visible.- Por defecto toma el valor Trae, lo que indica que la ventana
estará visible cuando se ejecute la aplicación. Si asignamos el valor False
haremos que el formulario no sea visible.
3.6.1.16 Width.- Permite establecer el ancho del formulario. Junto con Height fija
las dimensiones del formulario.
3.6.1.17 WindowState.- Devuelve o establece, en tiempo de ejecución, el estado
visual de una ventana de formulario.

0- Normal.- Representa el estado normal de la ventana con las dimensiones que se


establecieron durante el diseño.
1- Minimized.- Si se asigna el valor 1 la ventana aparecerá minimizada, como un icono.
2- Maximized.- Si se asigna el valor 2 la ventana ocupará toda la pantalla.

3.6.2 Sucesos en un formulario

Suceso Comentario
Activate Este suceso ocurre cuando el formulario se convierte en la ventana activa.

Procedimiento llamado Form_Activate.

Click Este suceso ocurre cuando el usuario hace clic sobre el formulario.

Procedimiento llamado Form_Click.

Deactivate Este suceso ocurre cuando el formulario deja de ser la ventana activa.

Procedimiento llamado Form_Deactivate.

DblClick Este suceso ocurre cuando el usuario hace doble clic sobre el formulario.

Procedimiento llamado Form_DblCIick.

Load Este suceso ocurre cuando se carga un formulario.

Ing. Hermas Herrera Callejas Página : 35 de


19
Procedimiento llamado Form_Load.

MouseDown Este suceso ocurre cuando el usuario presiona un botón del mouse

con el

puntero dentro del formulario. Procedimiento llamado Form_MouseDown.

MouseMove Este suceso ocurre cuando el usuario desplaza el puntero del

mouse sobre el formulario. Procedimiento llamado Form_MouseMove.

MouseUp Este suceso ocurre cuando el usuario suelta el botón del mouse sobre el

formulario. Procedimiento llamado Form_MouseUp.

Unload Este suceso ocurre cuando un formulario está a punto de descargarse.

Procedimiento llamado Form_Unload.

3.6.3 Métodos del formulario

Método Comentario
Hide Oculta el formulario
Refresh Actualiza el contenido del formulario.
SetFocus Le entrega el enfoque al formulario.
Show Hace visible el formulario.

3.7 Creación de una aplicación.- En general, para construir una aplicación con
Visual Basic, se siguen estos tres pasos fundamentales:
1. Diseñar la interfaz de usuario (medio de comunicación entre el usuario y la
aplicación) utilizando los controles del cuadro de herramientas.
2. Establecer las propiedades de los elementos (formularios y controles) de la
interfaz de usuario.
3. Escribir el código de programa para cada uno de los elementos de la interfaz
de usuario.
Desarrollar la primera aplicación. Esta tendrá un formulario, un cuadro de
texto y dos botones de comando. En esta aplicación, cuando el usuario haga clic
en el botón ‘Saludo’, en el cuadro de texto debe aparecer el mensaje “Estoy
aprendiendo Visual Basic” y cuando haga clic en el botón ‘Salir’, la aplicación debe
finalizar. Seguir estos pasos:
Abrir el menú Archivo y... ...hacer clic en el comando Nuevo proyecto

Ing. Hermas Herrera Callejas Página : 36 de


19
Visual Basic visualiza el cuadro de diálogo Nuevo proyecto:
Hacer clic en Aceptar y Visual Basic mostrará un nuevo formulario. Observar que
el formulario está lleno de puntos. Estos puntos forman una cuadrícula que
ayudará a alinear los controles que se dibujen en el formulario. Para hacer que la
cuadrícula desaparezca, hacer clic en el comando Opciones... del menú
Herramientas. Luego, hacer clic en la ficha General del cuadro de diálogo
Opciones e inhabilitar la opción Mostrar cuadrícula.

3.7.1 Diseño de la interfaz de usuario.- El diseño de la interfaz de usuario de


una aplicación consiste en “dibujar” los controles sobre el formulario. Para ello,
debe utilizar el Cuadro de herramientas:

1. En el cuadro de herramientas, situar el puntero del mouse sobre el control


TextBox y hacer clic para seleccionarlo. A continuación, situar el puntero del
mouse cerca a la esquina superior izquierda del formulario, pulsar y mantener
pulsado el botón izquierdo del mouse mientras se arrastra el puntero hacia abajo y
hacia la derecha. Soltar el botón del mouse cuando en el formulario se muestre
una etiqueta similar al contenido en la siguiente ilustración:

Observar que alrededor del control aparecen ocho cuadraditos. Estos cuadraditos
se llaman puntos de control y permiten modificar el tamaño del objeto con sólo
arrastrarlos en la dirección adecuada.

2. Modificar el tamaño del objeto. Para ello, situar el puntero del mouse sobre uno

Ing. Hermas Herrera Callejas Página : 37 de


19
de los puntos de control y arrastrar en la dirección adecuada hasta que el objeto
adopte el tamaño deseado.

El tamaño de un objeto también se puede modificar ingresando nuevos valores en


las propiedades Height (alto) y With (ancho), en la ventana Propiedades. Los
valores de alto y ancho están dados en twips. Un twips equivale a 1/1440
pulgadas.

Hacer clic sobre la propiedad Height, introducir un nuevo valor para establecer la altura del objeto y
presionar Enter. Lo mismo se puede hacer con la propiedad Width
Se puede cambiar la posición de un objeto si éste tiene una posición inadecuada.
Para ello, situar el puntero del mouse sobre el objeto y arrastrar el objeto hacia
una nueva posición. También se puede cambiar la posición de un objeto
ingresando nuevos valores en las propiedades Left (izquierda) y Top (superior), en
la ventana Propiedades. Left permite establecer la distancia entre el borde
izquierdeo interno del formulario y el objeto seleccionado. Top permite establecer
la distancia entre el borde superior interno del formulario y el objeto seleccionado.

3. En el cuadro de herramientas, situar el puntero del mouse sobre el control


CommandButton y hacer doble clic. El control aparece en el centro del formulario.

Ing. Hermas Herrera Callejas Página : 38 de


19
Modificar su tamaño y posición.

4. Volver a hacer doble clic sobre el control CommandButton. En el formulario,


modificar el tamaño y posición de este control.
Finalmente, la interfaz de usuario debe tener un aspecto similar a la siguiente
ilustración:

3.7.2 Establecimiento de las propiedades.- Luego de diseñar la interfaz de


usuario, el siguiente paso consiste en establecer las propiedades de los elementos
incluidos en el formulario. Para ello, es necesario utilizar la ventana Propiedades.
Si esta ventana no está visible, hacer clic en el botón Ventana Propiedades o
presionar la tecla F4.
Por defecto, Visual Basic asigna un nombre a cada uno de los controles
dibujados en el formulario y al formulario mismo (Textl, Commandl, Command2 y
Form1). El nombre de un control permite asociarlo con un procedimiento y
referirse a él dentro del código del programa para modificar algunas propiedades.
Modificar el nombre del control TextBox:
1. En el formulario, situar el puntero del mouse sobre el cuadro de texto y hacer
clic (observar que ahora la ventana Propiedades lista todas las propiedades de
este control).
2. En la ventana Propiedades, en la propiedad (Nombre), borrar el nombre que
por defecto tiene este control y escribir “Mensaje”.

Asignar un nuevo nombre al control TextBox.


Si la propiedad que se busca no está a la vista, desplazar la barra de desplazamiento vertical hasta
visualizar la propiedad.
Cuando se ejecute el programa, el cuadro de texto Mensaje no debe
mostrar texto alguno por lo que es necesario modificar la propiedad Text de este

Ing. Hermas Herrera Callejas Página : 39 de


19
control. Para ello, en la ventana Propiedades, arrastrar la barra de desplazamiento
hacia abajo hasta visualizar la propiedad Text y borrar el texto (Textl) que por
defecto tiene esta propiedad.
Asignar una fuente, estilo y tamaño al mensaje que aparecerá en el cuadro
de texto Mensaje. Para lograr esto, arrastrar la barra de desplazamiento hasta
visualizar la propiedad Font del cuadro de texto Mensaje. Hacer clic en la
propiedad Font (Observar que aparece un pequeño botón con puntos
suspensivos... Hacer clic en este botón y Visual Basic visualizará el cuadro de
diálogo Fuente. En este cuadro seleccionar una fuente, estilo de fuente y tamaño
para el texto que aparecerá en el control TextBox.

Utilizar este cuadro de diálogo para modificar algunas propiedades del texto
que aparecerá en el control Mensaje. Por ejemplo, seleccionar la fuente Arial de
tipo Normal y tamaño 12. Finalmente, hacer clic en Aceptar.
Modificar las propiedades del botón de comando Command1:
1. En el formulario, seleccionar el botón Command1.
2. En la ventana Propiedades, ingresar el texto ‘Saludo’ en la propiedad (Nombre).
3. En la propiedad Caption, ingresar el título “Saludo”.
Modificar las propiedades del botón de comando Command2:
1. En el formulario, seleccionar el botón Command2.
2. En la ventana Propiedades, ingresar el texto ‘Salir’ en la propiedad (Nombre).
3. En la propiedad Caption, ingresar el título “Salir”.
Luego de haber establecido las propiedades de los elementos del formulario,
éste tendrá un aspecto similar a la siguiente ilustración:

Texto Mensaje Comando Saludo Comando Salir


El siguiente cuadro presenta un resumen de las propiedades asignadas a los
controles:
Control Propiedad Valor
Forml Name Forml

Ing. Hermas Herrera Callejas Página : 40 de


19
TextBox Name Mensaje
Text “”
Font Arial, Normal, tamaño 12
Commandl Name Saludo
Caption Saludo
Command2 Name Salir
Caption Salir

3.7.3 Escritura del código.- Diseñada la interfaz de usuario y establecidas las


propiedades de los elementos de la interfaz, el siguiente paso consiste en unir
código a cada uno de los controles de la aplicación. En cualquier aplicación que se
cree con Visual Basic, los controles incluidos en el formulario (incluso el formulario
mismo) pueden responder a sucesos como, por ejemplo, un clic del mouse. Pero,
para que un control o un formulario responda a un suceso es necesario que éstos
estén unidos a un código. El código unido a un objeto se denomina procedimiento
conducido por un suceso o simplemente procedimiento.
Veamos los pasos que se deben seguir para unir código de un procedimiento
al botón de comando “Saludo” accionado por el suceso click. Cuando el usuario
haga clic en este botón, en el cuadro de texto Mensaje debe aparecer el mensaje
de saludo “Hola. Estoy aprendiendo Visual Basic”. Para lograr esto, proceder con
los siguientes pasos

1. En el formulario, situar el puntero del mouse sobre el botón de comando


“Saludo” y hacer doble clic. Visual Basic muestra la ventana de código en la cual
se introducirá y editará sentencias de programa de Visual Basic.

La ventana de código muestra las sentencias de programa que marcan el


inicio y el final de un procedimiento en Visual Basic:
Private Sub Saludo_Click()

EndSub
El cuerpo principal de un procedimiento siempre debe encontrarse situado
entre estas dos sentencias. El nombre del procedimiento, Saludo_Click indica que
el procedimiento está conectado con el botón de comando Saludo y que será
ejecutado cuando se produzca el suceso Click.

2. Escribir la siguiente línea de programa entre las sentencias Private Sub


Saludo_Clic() y End Sub.

Ing. Hermas Herrera Callejas Página : 41 de


19
Mensaje.Text = “Hola. Estoy aprendiendo Visual Basic”
Cuando se ha terminado, la ventana de código presentará un aspecto similar
a la siguiente ilustración:

Ahora, asociar un procedimiento al botón de comando “Salir” accionado por el


suceso Click. Cuando el usuario haga clic en este botón, la ejecución del
programa debe finalizar.
1. En el formulario, hacer doble clic en el botón de comando “Salir”. Visual Basic
muestra la ventana de código.
2. Escribir la sentencia End entre las sentencias Private Sub Salir_Clic() y End
Sub. La ventana de código debe tener el siguiente aspecto:

End es la sentencia de programa que se utiliza para detener ejecución de un


programa y retirarlo de la pantalla.

3.8 Cómo almacenar el programa.- Ahora que ya se ha terminado el programa,


guardar el formulario con el nombre Saludo.frm y el proyecto con el nombre
Saludo.vbp. Para ello, hacer clic en el comando Guardar proyecto del menú
Archivo. Visual Basic muestra el cuadro de diálogo Guardar archivo como:
En el cuadro de texto Nombre de archivo, escribir Saludo y hacer clic en
Guardar. Visual Basic guardará el formulario con el nombre Saludo.frm. A
continuación, aparecerá el cuadro de diálogo Guardar proyecto como. En el
cuadro de texto Nombre de archivo, escribir Saludo y hacer clic en Guardar. El
proyecto Saludo se guardará con el nombre Saludo.vbp.

Ing. Hermas Herrera Callejas Página : 42 de


19
Si posteriormente se desea trabajar con este programa, se deberá
seleccionar el comando Abrir proyecto del menú Archivo y en el cuadro de diálogo
Abrir proyecto, hacer doble clic sobre el nombre Saludo del proyecto.

3.9 Ejecución del programa.- Para ejecutar el programa hacer clic en el botón
Iniciar de la barra de herramientas estándar. El programa se ejecutará y aparecerá
la interfaz de usuario tal y como fue diseñada.
Hacer clic en el botón Saludo y en el cuadro de texto aparecerá el mensaje
“Hola. Estoy aprendiendo Visual Basic”.

Para ejecutar una aplicación también se puede hacer clic en la opción Iniciar
del menú Ejecutar o presionar la tecla F5.
Para finalizar la ejecución del programa, hacer clic en el botón “Salir”.

Ing. Hermas Herrera Callejas Página : 43 de


19
3.10 Creación de un archivo ejecutable.- Una vez que la aplicación tiene el
aspecto deseado y que su ejecución se realiza correctamente, se puede crear un
archivo ejecutable que permita que dicha aplicación se ejecute fuera del entorno
de Visual Basic. Para ello, en el menú Archivo, hacer clic en la opción Generar
Saludo.exe (Visual Basic añade automáticamente el nombre del programa al
nombre del comando). Visual Basic muestra el cuadro diálogo Generar proyecto:

Luego de seleccionar una carpeta y de introducir un nombre, hacer clic en el


botón Aceptar. Visual Basic creará un programa ejecutable y lo almacenará en la
carpeta especificada.
Para ejecutar este archivo desde Windows, se lo debe localizar en el
Explorador de Windows y hacer doble clic sobre él. También se puede crear un
acceso directo para este archivo en la ventana del escritorio. Para ello, en el
Explorador de Windows, situar el puntero del mouse sobre el archivo ejecutable,
presionar el botón derecho del mouse y mantenerlo así mientras se arrastra hacia
el escritorio de Windows. Soltar el botón del mouse y Windows mostrará un menú
contextual. En este menú se debe seleccionar el comando Crear íconos de
acceso directo aquí. Windows introducirá un icono en el escritorio sobre el que
se podrá hacer doble clic para ejecutar el archivo ejecutable.

Ing. Hermas Herrera Callejas Página : 44 de


19
CAPITULO 4 – VISUAL BASIC – CONTROLES BÁSICOS

4.1 El control Label (Etiqueta).- Este control se utiliza para colocar títulos en el
formulario y mensajes junto a los cuadros de texto para que los usuarios sepan
qué introducir en ellos.

Las etiquetas se utilizan para mostrar mensajes que indican a los usuarios qué es lo que deben
hacer.

4.1.1 Propiedades del control Label


Propiedad Valor por defecto Descripción
Alignment 0-Left Justify Determina si el mensaje aparece alineado a la
izquierda, a la derecha o al centro de la etiqueta.
Autosize False Determina si la etiqueta cambia de tamaño de manera
automática para mostrar todo el mensaje
Backcolor White Devuelve o establece el color de fondo.
BackStyle 1-Opaque Determina si el color de fondo es transparente u opaco.
Si se elige 0-Transparent se vera lo que está detrás de
la etiqueta.
BorderStyle 0-None Devuelve/establece el estilo de borde. Elegir 1-
FixedSingle y una línea bordeara la etiqueta
Caption Label1 Contiene el mensaje que aparece en la etiqueta.
Enabled True Determina si la etiqueta estará activa. Cambiar esta
propiedad en tiempo de ejecución para que la etiqueta
no responda a eventos generados por el usuario.
Font Ms Sans Serif Muestra el cuadro de diálogo Fuente en el que se
establece el nombre, estilo y tamaño de la fuente
usada en el mensaje.
Forecolor Black Devuelve o establece el color del mensaje.
Height 375 Devuelve o establece la altura de la etiqueta.
Left 1560 Establece la distancia entre el borde izquierdo de la
etiqueta y el borde izquierdo del formulario.
MousePointer 0-Default Determina la forma del puntero del mouse al pasar
este sobre la etiqueta.
Name Label1 Nombre usado en el código para identificar a la
etiqueta.
TabIndex Devuelve o establece el orden de tabulación del objeto.
Top 1200 Devuelve o establece la distancia entre el borde
superior de la etiqueta y el borde superior del
contenedor.
Visible True Determina si la etiqueta estará visible u oculta
Width 1125 Devuelve o establece el ancho de la etiqueta.
WordWrap False Determina si la etiqueta se expande para ajustarse al
texto.

Ing. Hermas Herrera Callejas Página : 45 de


19
4.2 El control TextBox (Cuadro de Texto).- Este control es un pequeño editor
de texto, se utiliza para mostrar texto que puede editarse. Su propiedad principal
es Text, con la que se puede poner un texto fijo en el control o leer el texto que se
introduzca.

El control TextBox también se utiliza para introducir datos que serán procesados por un
procedimiento asociado a este u otro control.

4.2.1 Propiedades del control TextBox


Propiedad Valor por defecto Descripción
Alignment 0-Left Justify Determina si el texto aparece alineado a la izquierda, a
la derecha o al centro del cuadro de texto.
Backcolor White Devuelve o establece el color de fondo.
BorderStyle 0-None Devuelve o establece el estilo de borde. Elegir 1-Fixed
Single y una línea bordeará al cuadro de texto.
Enabled True Determina si un cuadro de texto está activo.
Font Ms Sans Serif Muestra el cuadro de diálogo Fuente en el que se
establece el nombre, el estilo y tamaño de la fuente
usada en la propiedad Text.
ForeColor Black Devuelve o establece el color del texto.
Height 375 Devuelve o establece la altura del Control
Locked False Determina si el usuario puede editar el texto.
MaxLength 0 Específica el número máximo de caracteres que se
puede escribir en un cuadro de texto.
MousePointer 0-Default Determina la forma del puntero del mouse al pasar el
puntero sobre el cuadro de texto
MultiLine False Permite que el cuadro de texto acepte múltiples líneas.
Name Text1 Nombre usado en el código para identificar al cuadro
de texto.
PasswordChar “ ” Determina el carácter que aparece cuando el usuario
introduce una contraseña.
ScrollBars 0-None Define si la caja de texto tendrá barra de
desplazamiento vertical, horizontal o ambas.
TabIndex 1 Especifica el orden de enfoque dado al cuadro de
texto.
TabStop True Determina si el cuadro de texto puede recibir el
enfoque.
Visible True Determina si el cuadro de texto estará visible u oculto.
Width 1125 Devuelve o establece el ancho del cuadro de texto.
Text Text1 Contiene el texto del cuadro.
ToolTipText ““ Devuelve o establece el texto mostrado cuando el
puntero del mouse se sitúa sobre el control.

4.2.2 Sucesos del control TextBox

Ing. Hermas Herrera Callejas Página : 46 de


19
Suceso Descripción
Change Ocurre cuando cambia el texto que contiene el control.
GotFocus Ocurre cuando el control recibe el enfoque.
KeyDown Ocurre cuando el usuario presiona una tecla mientras el control tiene el
enfoque.
KeyPress Ocurre cuando el usuario presiona y suelta una tecla.
Keyup Ocurre cuando el usuario suelta una tecla mientras el control tiene el
enfoque.
LostFocus Ocurre cuando el control pierde el enfoque.

4.2.3 Métodos del control TextBox


Método Descripción
Refresh Actualiza el texto del control TextBox.
SetFocus Mueve el enfoque al control TextBox.

4.3 El control CommandButton (Botón de Comando).- Este control permite


“dibujar” un botón de comando que, cuando se hace clic sobre él, ejecuta un
bloque de código o procedimiento ligado al mismo y accionado por el suceso Click.

Asociar un procedimiento a un botón de comando y hacer clic para ejecutar el procedimiento.

4.3.1 Propiedades del control CommandButton


Propiedad Valor par defecto Descnpcion
Cancel False Establece si el botón de comando se comportará como
el botón Cancelar en el formulario.
Caption Command1 Establece el texto que mostrará el botón de comando.
Default False Establece si el botón será activado con la tecla Enter.
Enabled True Devuelve o establece un valor que determina si el
objeto puede responder a sucesos realizados por el
usuario.
Height 495 Devuelve o establece la altura del objeto.
Left 3120 Devuelve a establece la distancia entre el borde
izquierdo del objeto y el borde izquierdo de su
contenedor.
Name Commandl Permite establecer el nombre que se utilizará en el
código.
Top 1615 Devuelve o establece la distancia entre el borde
superior del objeto y el borde superior de su
contenedor.
Visible True Determina si el botón de comando estará visible u
oculto.

Ing. Hermas Herrera Callejas Página : 47 de


19
Width 615 Devuelve o establece el ancho del botón de comando.

4.4 El control CheckBox (Casilla de verificación).- Este control permite


presentar varias opciones de las que el usuario puede elegir una o más de una.

Cuando el usuario seleccione una opción, aparecerá un check dentro de la casilla y la propiedad
Value adoptará el valor 1.

4.4.1 Propiedades del control CheckBox


Propiedad Valor por defecto Comentario
Caption Check1 Descripción que acompaña al control CheckBox.
Enabled True Devuelve o establece un valor que determina si el
objeto puede responder a eventos realizados por el
usuario.
Name Check1 Devuelve o establece el nombre del objeto usado en el
código.
Value 0-Unchecked Indica si la casilla de verificación está activada,
desactivada o no disponible (atenuada). Cuando está
activada, Value se establece a 1;cuando no esta
activa, Value se establece a 0
0-Unchecked (Desactivada)
1- Checked (Activada)
2-Grayed (Atenuada)
Visible True Devuelve o asigna un valor que determina si el objeto
está visible u oculto.

4.4.2 El evento Clic.- Cuando el usuario hace click en el control CheckBox se


desencadena el evento Click. En el procedimiento de este evento se puede
realizar alguna acción según el estado de la casilla de verificación.
La siguiente aplicación permite aplicar el atributo de negrita, cursiva,
mayúsculas y color rojo a una cadena de caracteres.

Ing. Hermas Herrera Callejas Página : 48 de


19
En la interfaz del usuario se incluye una caja de texto, cuatro casillas de verificación, una etiqueta y
Un botón de comando.
La siguiente tabla muestra las propiedades de los controles incluidos en el
formulario:
Control Propiedad Valor
TextBox Name nnTextoPrueba
Text ““
CheckBox Name nnNegrita
Caption &Negrita
CheckBox Name nnCursiva
Caption &Cursiva
CheckBox Name nnMayúsculas
Caption &Mayúsculas
CheckBox Name nnColorRojo
Caption Color &Rojo
Label Name Label1
Caption Introduzca un texto de prueba en la caja de texto y
seleccione una o más casillas de verificación para ver
su efecto en el texto
CommandButtom Name nnSalir
Caption Salir
En el formulario, hacer doble clic en la casilla de verificación Negrita. La
ventana de código abre el procedimiento Negrita_Click. Digitar el siguiente código
entre las sentencias Private Sub nnNegrita_Click y End Sub:
If nnNegrita.Value = 1 Then
nnTextoPrueba.Font.Bold = True
Else
nnTextoPrueba.Font.Bold = False
End If
Cuando se ejecute el programa y se active la casilla de verificación Negrita,
la propiedad Value de este control adoptará el valor 1. La estructura de control
If...Then permite ejecutar una acción dada cierta condición. En este caso, si la
propiedad Value es igual a 1, entonces el texto introducido en el cuadro de texto
nnTextoPrueba quedará convertido a negrita; en caso contrario, es decir, si la
casilla de verificación es desactivada, el texto introducido adoptará su aspecto
anterior.
En el formulario, hacer doble clic en la casilla de verificación Cursiva y en la
ventana de código digitar el procedimiento nnCursiva_Click:

Ing. Hermas Herrera Callejas Página : 49 de


19
Private Sub nnCursiva_Click()
If nnCursiva.Value = 1 Then
nnTextoPrueba.Font.Italic = True
Else
nnTextoPrueba.Font.Italic = False
End If
End Sub
El procedimiento nnCursiva_Click es similar al procedimiento anterior con la
diferencia de que el texto introducido en el cuadro quedara convertido a cursiva.
Hacer doble clic en la casilla de verificación Mayúsculas y digitar el
siguiente procedimiento en la ventana de código:
Private Sub nnMayúsculas_Click()
If nnMayúsculas.Value = 1 Then
nnTextoPrueba = UCase(nnTextoPrueba)
Else
nnTextoPrueba = LCase(nnTextoPrueba)
End If
End Sub
La función UCase() convierte una cadena de caracteres a mayúsculas.
La función LCase() convierte una cadena de caracteres a minúsculas.
Hacer doble clic en la casilla de verificación Color Rojo y digitar este
procedimiento:
Private Sub nnColorRojo_Click()
If nnColorRojo.Value = 1 Then
‘Aplica el color rojo a la cadena de caracteres del cuadro de texto nnTextoPrueba.
nnTextoPrueba.ForeColor = RGB(255, 0, 0) ‘Color rojo
Else
‘Aplica el color negro a la cadena de caracteres del cuadro de texto
nnTextoPrueba.
nnTextoPrueba.ForeColor = RGB(0, 0, 0) ‘Color negro
End If
End Sub
La función RGB permite especificar un color cualquiera. Su sintaxis es:
RGB(rojo%, verde%, azul%)
Los tres parámetros son enteros en el rango de 0 a 255 que especifican un
nivel de color rojo, verde y azul respectivamente.
Hacer doble clic en el botón de comando Salir y en el procedimiento
nnSalir_Click digitar el comando End. Cuando se haga clic en el botón Salir
finalizará la ejecución del programa.
Private Sub nnSalir_Click()
End
End Sub
Guardar el formulario con el nombre Casillas_de_verificación.frm y la
aplicación con el nombre Casillas_de_verificación.vbp.
Presionar la tecla F5 para ejecutar el programa. Introducir una frase en el
cuadro de texto y activar la casilla de verificación Color Rojo. Observar que ahora

Ing. Hermas Herrera Callejas Página : 50 de


19
el texto es de color rojo. Si se vuelve a hacer clic en la casilla, el texto adoptará su
color anterior.

4.5 El control OptionButton (Botón de opción).- Este control permite mostrar


múltiples opciones de las que el usuario solo puede elegir una. A diferencia de las
casillas de verificación, los botones de opción deben funcionar siempre como parte
de un grupo; al activar un botón de opción se desactivan de inmediato todos los
demás botones del grupo.

Utilizar el control OptionButton cuando se quiera presentar varias opciones de las cuales el usuario
solo puede elegir una.

4.5.1 Propiedades del control OptionButton


Propiedad Val p/defecto Comentario
Caption Optionl Descripción que acompaña al control OptionButton.
Enabled True Devuelve o establece un valor que determina si el control
esta habilitado para responder a eventos realizados por el
usuario.
Name Option1 Devuelve o establece el nombre del control usado en el
código.
Value False Indica si el botón de opción está activado o desactivado.
Cuando está activado, Value se establece a True; si no lo
está, Value se establece a False.
Visible True Devuelve o establece un valor que determina si el botón de
opción está visible u oculto.

4.5.2 El evento Clic.- Cuando el usuario hace clic en un botón de opción se


produce el evento Click. En el procedimiento de este evento verificar el valor de la
propiedad Value de este control y realizar una acción. Value adopta el valor True
(Verdadero) si el control está activado, y False (Falso) si está desactivado.
Por ejemplo diseñar una interfaz como la de la figura anterior, de tal forma
que cuando se seleccione uno de los botones de opción “8”, “10” o “12”, el texto
introducido en la caja de texto aparezca en el tamaño indicado.
La siguiente tabla muestra las propiedades de los controles en el formulario:
Control Propiedad Valor
TextBox Name nnTextoPrueba
Text ““
OptionButton Name nnTamaño8
Caption 8

Ing. Hermas Herrera Callejas Página : 51 de


19
OptionButton Name nnTamañol0
Caption 10
OptionButton Name nnTamaño12
Caption 12
Label Name Labell
Caption Introduzca un texto de prueba en la caja de texto y
seleccione un tamaño de fuente.
CommButton Name nnSalir
Caption Salir
Guardar el formulario con el nombre Opciones.frm y la aplicación con el
nombre Opciones.vbp.
Cuando el usuario seleccione una de las opciones “8”, “10” o “12”, se
producirá el evento Click asociado con ese control que hará que el texto
introducido en el cuadro de texto nnTextoPrueba se visualice con el tamaño 8,10 o
12 puntos, respectivamente.
En el formulario, hacer doble clic en el botón de opción “8”. En la ventana
de código, digitar el siguiente código:
Private Sub nnTamaño8_Click()
If nnTamaño8.Value = True Then nnTextoPrueba.Font.Size = 8
End Sub
Cuando el usuario ejecute el programa y active el botón de opción “8”, la
propiedad Value de este control adoptará el valor True (Verdadero) y se
desencadena el evento Click de este control. En el procedimiento, si la propiedad
Value del control es True, el tamaño del texto introducido en el cuadro
nnTextoPrueba se establece a 8.
En el formulario, hacer doble clic en el botón de opción “10”. En la ventana
de código, digitar el siguiente código:
Private Sub nnTamañol0_Click()
If nnTamañol0.Value = True Then nnTextoPrueba.Font.Size = 10
End Sub
En el formulario, hacer doble clic en el botón de opción “12”. En la ventana
de código, digitar el siguiente código:
Private Sub nnTamaño12_Click()
If nnTamaño12.Value = True Then nnTextoPrueba.Font.Size = 12
End Sub
En el formulario, hacer doble clic en el botón de comando Salir. Digitar la
instrucción End en el procedimiento que muestra la ventana de código:
Private Sub nnSalir_Click()
End
End Sub

4.6 El control Frame (Marco).- Este control permite agrupar e identificar


fácilmente un grupo de controles.

Ing. Hermas Herrera Callejas Página : 52 de


19
Para crear diferentes grupos de botones de opción, encerrar cada grupo en un marco.
4.6.1 Propiedades del control Frame
Propiedad Valor p/defecto Comentario
Caption Frame1 Descripción que acompaña al control Frame.
Name Frame1 Nombre del control usado en el código.
Visible True Devuelve o establece un valor que determina si el botón de
opción está visible u oculto.

4.6.2 Cómo crear grupos de botones de opción.- Para crear un grupo de


botones de opción, primero dibujar el marco y después dibujar dentro los botones
de opción.
1. En el cuadro de herramientas, hacer doble clic en el control Frame.
2. En el formulario, ajustar el tamaño y posición del marco.
3. En el cuadro de herramientas, hacer clic en el control OptionButton.
4. En el formulario, situar el puntero en el interior del marco y con el botón
izquierdo del mouse pulsado arrastrar hasta dibujar el control OptionButton.
Repetir los pasos 3 y 4 para añadir un nuevo control al marco.
No se debe dibujar un control fuera del marco y después arrastrarlo dentro
de él. Si se hace esto, el control estaría encima del marco y no dentro de él.

4.7 El control ListBox (Cuadro de lista).- Este control pone a disposición del
usuario un conjunto de elementos, de los cuales puede elegir uno. Si el número de
elementos supera el número de los que pueden ser visualizados simultáneamente
en la lista, aparecerá automáticamente una barra de desplazamiento vertical para
que el usuario pueda desplazar los elementos de la lista hacia arriba o hacia
abajo. Generalmente, una lista es apropiada cuando se quiere limitar la entrada
de una serie de elementos determinados.
Por defecto los elementos de la lista se visualizan en una sola columna,
aunque es posible establecer múltiples columnas. Si el ancho total de las
columnas supera el ancho de la lista, aparecerá automáticamente una barra de
desplazamiento horizontal para que el usuario pueda desplazar las columnas
hacia la izquierda o hacia la derecha.

Ing. Hermas Herrera Callejas Página : 53 de


19
Utilizar el control ListBox para visualizar un conjunto de elementos de los
cuales el usuario puede elegir uno.

4.7.1 Propiedades del control ListBox

Propiedad Descripción
Enabled True/False. Devuelve o establece un valor que determina si el control está
habilitado para responder a eventos realizados por el usuario.
Columns Devuelve o establece un valor que determina si un control ListBox se
desplaza verticalmente en una única columna (valor 0) u horizontalmente
en columnas periódicas (valores mayores que 0).
List Un arreglo que contiene los elementos de la lista, comienza con índice 0.
ListCount Número total de elementos de la lista.
Listlndex Contiene el índice del elemento seleccionado, que es un número entre 0

(primer elemento) y el número total de elementos en la lista -1 (ListCount - 1). El valor

de Listlndex será –1 si no se selecciona ningún elemento.

MultiSelect Determina cómo puede seleccionar el usuario los elementos de la

lista. Valores de la propiedad MultiSelect:

0 No se permiten selecciones múltiples (defecto).

1 Selección múltiple sencilla. Se selecciona o se desactiva una entrada

mediante un clic del mouse (o pulsando la tecla de espaciado). Para

mover el enfoque a otro elemento se usan las teclas del cursor.

2 Selección múltiple extendida. Para expandir la selección se utiliza la

tecla Shift mientras se hace clic con el mouse. De esta forma se

resaltan los elementos que hay entre el primero seleccionado y el

Ing. Hermas Herrera Callejas Página : 54 de


19
actual. Si se pulsa la tecla Ctrl y se hace clic, se selecciona o se

desactiva una entrada en la lista.

Name Devuelve o establece el nombre del control usado en el código.


NewIndex Contiene el índice del último elemento añadido a la lista. Es útil si se desea
hacer algo con el elemento añadido, por ejemplo, que sea el elemento
actualmente seleccionado.
Selected Arreglo de valores lógicos paralelo y del mismo tamaño al arreglo List,

indica qué elementos se han seleccionados (True) de la lista. Se utiliza en lugar de

ListIndex cuando se establece la propiedad Multiselect en 1 o 2.

Sorted True/False. Establece si los elementos se ordenan alfabéticamente.

Style Apariencia del control. Puede tener valores 0 (Estándar) o 1 (CheckBox).

4.7.2 Métodos

Método Descripción
AddItem Permite añadir nuevos elementos a la lista. La sintaxis de este
método es:
Listl.AddItem elemento (, índice)
elemento es una cadena que se va añadir a la lista, y el índice es su
orden. El argumento índice es opcional; si se omite, la cadena se
añade al final de la lista. Si está puesta como True la propiedad
Sorted del control, la entrada se inserta en el lugar adecuado de la lista,
sin tener en cuenta el valor del argumento indice
RemoveItem Permite eliminar elementos de una lista. Para borrar un elemento de una
lista, primero debemos averiguar su posición (índice) dentro de la lista, y
pasársela al método RemoveItem. La sintaxis de este método es:
Listl.RemoveItem índice
El parámetro índice es el lugar que ocupa la entrada que se quiere borrar y
esta vez no es opcional.
Clear Borra todos los elementos de la lista. Su sintaxis es: List1.Clear

4.7.3 Sucesos
Suceso Descripción
Click Ocurre cuando el usuario hace clic sobre el control.
La siguiente aplicación permite añadir, eliminar y seleccionar elementos en
una lista. La interfaz debe ser similar a la siguiente ilustración:

Ing. Hermas Herrera Callejas Página : 55 de


19
La siguiente tabla muestra las propiedades de los controles incluidos en la interfaz:
Control Propiedad Valor
ListBox Name nnPaises
Columns 0
Sorted True
Label Name nnLabel1
Caption Pais seleccionado
TextBox Name nnPaisSelec
Text ““
CommandButtom Name nnAñadirElemento
Caption Añadir nuevo elemento
CommandButtom Name nnEliminarElemento
Caption Eliminar elemento
CommandButtom Name nnSalir
Caption Salir
Guardar el formulario con el nombre ListadePaises.frm y la aplicación con el
nombre ListadePaises.vbp.
En el formulario, hacer doble clic en el cuadro de lista nnPaíses. En la
ventana de código, digitar el siguiente código:
Private Sub nnPaises_Click()
‘Muestra en el cuadro de texto nnPaisSelec el elemento seleccionado del cuadro
de lista nnPaises
If nnPaises.ListIndex <> -1 Then
nnPaisSelec.Text = nnPaises.List(nnPaises.ListIndex)
End If
End Sub
Hacer doble clic en el botón de comando “Añadir nuevo elemento” y digitar
el siguiente código en la ventana de código:
Private Sub nnAñadirNuevoElemento_Click()
‘Añade un nuevo elemento al cuadro de lista nnPaises
Dim nnElementoNuevo As String
nnElementoNuevo = InputBox("Ingrese un nuevo País:", "Nuevo País")
If Len(Trim(nnElementoNuevo)) > 0 Then
nnPaises.AddItem nnElementoNuevo
End If
End Sub
Hacer doble clic en el botón de comando ‘Eliminar elemento’ y en la
ventana de código digitar:
Private Sub nnEliminarElemento_Clic()
‘Elimina un elemento del cuadro de lista nnPaises
If nnPaises.ListIndex <> -1 Then

Ing. Hermas Herrera Callejas Página : 56 de


19
nnPaises.RemoveItem nnPaises.ListIndex
nnPaisSelec.Text = “ “
End If
End Sub
Hacer doble clic en el botón de comando Salir y en la ventana de código,
entre las sentencias Private Sub nnSalir_Clic() y End Sub, digitar el comando End.
Presionar la tecla F5 para ejecutar el programa. Hacer clic en el botón
“Añadir nuevo elemento” y en el cuadro de mensaje que aparece ingresar el
nombre de un país.

En el cuadro de lista, hacer clic en el nombre del país que desea eliminar y
seguidamente, hacer clic en el botón ‘Eliminar elemento’.

4.8 El control ComboBox (Cuadro Combinado).- El control ComboBox es una


combinación del control TextBox (cuadro de texto) y un control ListBox (cuadro de
lista). Este control permite que el usuario seleccione un elemento; para ello,
escribir el texto en el cuadro de texto o seleccionar un elemento en la lista.
Hay tres estilos de cuadros combinados: Cuadro combinado desplegable
(Style=0-Dropdown Combo), cuadro combinado simple (Style=1-Simple Combo) y
el cuadro de lista desplegable (Style=2-Dropdown List).
Cuadro combinado desplegable. Cuadro combinado simple. Cuadro combinado de lista
desplegable.

4.8.1 Propiedades del control ComboBox


Propiedad Descripción
Enabled True/False. Devuelve o establece un valor que determina si el control está
habilitado para responder a eventos realizados por el usuario.
List Es un arreglo que contiene los elementos de la lista, comienza con índice
0.
ListCount Número total de elementos de la lista.

Ing. Hermas Herrera Callejas Página : 57 de


19
ListIndex Contiene el índice del elemento seleccionado, el cual es un número entre 0
(primer elemento) y el número total de elementos en la lista -1 (ListCount-
1). El valor de ListIndex será-1 si no se selecciona ningún elemento.
Name Devuelve o establece el nombre del control usado en el código.
NewIndex Contiene el índice del último elemento añadido a la lista.
Sorted True/False. Ordena alfabéticamente los elementos de la lista.
Style Establece el comportamiento del control ComboBox. Puede tomar los
siguientes valores:
0-Dropdown Combo.- Cuadro combinado desplegable. Incluye una lista
desplegable y un cuadro de texto. El usuario puede escribir texto
directamente en el cuadro de texto o hacer clic en la flecha de la parte
derecha del cuadro combinado para abrir una lista de opciones.
1-Simple Combo.- Cuadro combinado simple. Incluye un cuadro de texto
y una lista que se presenta siempre. El usuario puede seleccionar datos en
la lista o escribir en el cuadro de texto. Al igual que el cuadro combinado
desplegable, este tipo de cuadro permite que los usuarios escriban
opciones que no figuran en la lista. Para presentar todos los elementos de
la lista, ajuste el tamaño del cuadro de lista de forma que se visualicen
todas.
2-Dropdown List.- Lista desplegable. Es similar al cuadro combinado
desplegable con la diferencia de que el usuario no puede escribir en el
cuadro, solo puede seleccionar un elemento de la lista.
Text Devuelve o establece el texto contenido en el control.

4.8.2 Sucesos
Suceso Descripción
Click Con cualquiera de las listas, ocurre cuando el usuario selecciona un ítem

de la lista para indicar sus preferencias.

Change Ocurre cuando el valor de la propiedad Text es modificado.

6.8.3 Métodos
Método Descripción
AddItem Permite añadir nuevos elementos a la lista.
RemoveItem Permite eliminar elementos de una lista.
Clear Borra todos los elementos de la lista.
La siguiente aplicación es similar a la aplicación anterior pero esta vez se
utiliza el control ComboBox. La interfaz debe tener el siguiente aspecto:

Ing. Hermas Herrera Callejas Página : 58 de


19
La siguiente tabla muestra las propiedades de los controles incluidos en esta
interfaz:
Control Propiedad Valor
ComboBox Name nnFrutas
List Chirimoya
Ciruela
Fresa
Lucuma
Manzana
Melocotón
Naranja
Sorted True
Style 1-Simple Combo
Text ““
Label Name Label1
Caption Fruta seleccionada
TextBox Name nnFrutaSelec
Text ““
CommandButton Name nnAñadirElemento
Caption Añadir nuevo elemento
CommandButton Name nnEliminarElemento
Caption Eliminar elemento
CommandButton Name nnSalir
Caption Salir
Asociar un procedimiento al botón nnAñadirElemento accionado por el
suceso Click. Cuando el usuario haga clic en este botón, el programa debe
solicitar el ingreso de un nuevo elemento y adicionarlo al control nnFrutas.
1. En el formulario, hacer doble clic en el botón de comando nnAñadirElemento.
La ventana de código abre el procedimiento nnAñadirElemento_Click.
2. Digitar el siguiente código:
Private Sub nnAñadirElemento_Click()
Dim NuevoElemento As String
NuevoElemento = InputBox(”Ingrese una nueva fruta”, “Nueva Fruta”)
If Len(Trim(NuevoElemento)) > 0 Then nnFrutas.AddItem NuevoElemento
End If
End Sub
Asociar un procedimiento al botón nnEliminarElemento accionado por el
suceso Click. Cuando el usuario haga clic en este botón, el programa debe
eliminar el elemento seleccionado en el cuadro combinado nnFrutas.
1. Hacer doble clic en el botón de comando nnEliminarElemento.
2. En la ventana de código, digitar el siguiente código:
Private Sub nnEliminarElemento_Click()
If nnFrutas.ListIndex <> -1 Then
nnFrutas.RemoveItem nnFrutas.ListIndex
nnFrutas.Text = “ “
nnFrutaSelec.Text = “ “
End If

Ing. Hermas Herrera Callejas Página : 59 de


19
End Sub
Asociar un procedimiento al cuadro combinado nnFrutas accionado por el
suceso Change. Cuando el usuario realice cualquier cambio en el control
nnFrutas, el cuadro de texto nnFrutaSelec debe reflejar los cambios realizados.
1. Hacer doble clic en el control nnFrutas. La ventana de código abre el
procedimiento nnFrutas_Change.
2. Digitar el siguiente código:
Private Sub nnFrutas_Change()
nnFrutaSelec.Text = nnFrutas.Text
End Sub
Asociar un procedimiento al cuadro combinado nnFrutas accionado por el
suceso Click. En la ventana de código, desplegar el cuadro de lista
Procedimientos y en la lista de sucesos que puede reconocer el control
ComboBox, seleccionar el suceso Click, tal como lo muestra la siguiente
ilustración:
Cuadro de lista Procedimientos

Observar que ahora la ventana de código muestra el procedimiento


nnFrutas_Click. Es en este procedimiento que se escribe el código que mostrará
en el cuadro de texto nnFrutaSelec el elemento seleccionado en el cuadro
combinado nnFrutas
Private Sub Frutas_Click()
‘Muestra en el cuadro de texto el elemento seleccionado del cuadro combinado
nnFrutas
If nnFrutas.Listlndex <> -1 Then
If nnFrutas.Text <> “ ” Then
nnFrutaSelec.Text = nnFrutas.List(nnFrutas.ListIndex)
Else
nnFrutaSelec.Text = “ “
End If
End If
End Sub
Hacer doble clic en el botón de comando Salir y digitar el comando End
para finalizar la ejecución del programa:
Private Sub nnSalir_Click()
‘Finaliza la ejecución del programa.
End
End Sub

Ing. Hermas Herrera Callejas Página : 60 de


19
4.9 El control Timer (Reloj).- Este control genera sucesos Timer a intervalos
regulares de tiempo. Es ideal para crear relojes digitales, cronómetros, alarmas o
simplemente para ejecutar un procedimiento a determinado intervalo de tiempo.
Para fijar el intervalo del control Timer se utiliza la propiedad Interval, a la cual
se le asigna un valor numérico que indica una medida en milisegundos (1/1000
segundos). Para que este control se active, la propiedad Enable debe
establecerse a True. Una vez activado, éste permanecerá en marcha de forma
constante (generando sucesos Timer en el intervalo fijado) hasta que el usuario
detenga el programa o el control sea desactivado. Por ejemplo, si se asigna a la
propiedad Interval el valor de 4000 se generarán sucesos Timer cada 4000
milisegundos, es decir, cada 4 segundos. Este control no es visible en tiempo de
ejecución.
Desarrollar un reloj digital intermitente que muestre la hora segundo a
segundo:
1. Abrir el menú Archivo y hacer clic en el comando Nuevo proyecto.
2. En el formulario, añadir un control Timer y un control Label como lo muestra la
siguiente ilustración:

Asignar las siguientes propiedades a cada uno de los controles:


Control Propiedad Valor
Form Caption Reloj Digital Intermitente
Label Name nnHora
Alignment 2-Center
Caption ““
Font Arial, Negrita, 18 puntos
Tag Mostrar Hora
Timer Name nnTimer1
Interval 500
Enabled True

Asociar un procedimiento al control Timer.


1. En el formulario, hacer doble clic en el control Timer. La ventana de código
abre el procedimiento Timer1_Timer.
Timer1_Timer indica que el procedimiento está conectado con el control
Timer1 y que será ejecutado cuando se produzca el suceso Timer en cada
inlervalo de tiempo.
2. Entre Private Sub Timer1_Timer y End Sub escribir las siguientes sentencias:
If nnHora.Tag = "Mostrar Hora" Then
nnHora.Caption = Time$
nnHora.Tag = ""

Ing. Hermas Herrera Callejas Página : 61 de


19
Else
nnHora.Caption = ""
nnHora.Tag = "Mostrar Hora"
End If
Dado que en la propiedad Interval del control Timer introducimos el valor 500,
el procedimiento Timen1_Timer se ejecutará cada medio segundo. La propiedad
Tag del control nnHora se inicializó a “Mostrar Hora” de manera que cuando se
ejecute el procedimiento la expresión nnHora.Tag = “Mostrar Hora” será verdadera
y se ejecutarán las siguientes líneas:
nnHora.Caption = Time$
nnHora.Tag = “ “
En la primera línea, la función Time obtiene la hora del reloj del sistema y
ésta es asignada a la propiedad Caption del control nnHora, mostrándonos la
hora. En la segunda línea, el valor de la propiedad Tag es cambiado por el valor “ “
de manera que, cuando el procedimiento Timer1 _Timer se vuelva a ejecutar, la
expresión “nnHora.Tag = “Mostrar Hora”” será falsa por lo que se ejecutarán las
siguientes líneas:
nnHora.Caption = “ “
nnHora.Tag = “Mostrar Hora”
En la primera línea, se borra el texto de la propiedad Caption del control
nnHora; en la segunda línea, el valor inicial de la propiedad Tag es restablecido.
Presionar la tecla F5 para ejecutar el programa. El efecto resultante es que el
programa nos mostrará la hora segundo a segundo.

4.10 Los controles HScrollBar y VScrollBar (Barras de Desplazamiento


Horizontal y Vertical).- Se utilizan con frecuencia para seleccionar un valor entre
los dos extremos del control.
Cuadro de desplazamiento

SmallChange SmallChange

LargeChange LargeChange
Min Value Max

4.10.1 Propiedades
Propiedad Val p/defecto Descripción
LargeChange 1(1-32655) Cuando el usuario haga clic en el área que hay entre el
cuadro de desplazamiento y las flechas, éste se
desplazará hacia la derecha o hacia la izquierda y la
propiedad Value se incrementará o decrementará una

Ing. Hermas Herrera Callejas Página : 62 de


19
cantidad que está fijada por la propiedad LargeChange
Max 32655 Devuelve o establece el valor máximo de la propiedad
Value
Min 0 Devuelve o establece el valor mínimo de la propiedad
Value
Name Hscroll1 o Vscroll1 Nombre usado en el código
SmallChange 1(1-32655) Cuando el usuario haga clic en las dos flechas que hay en
los extremos de la barra de desplazamiento, el valor de la
propiedad Value cambiará una cantidad especificada en la
propiedad SmallChange
Value 0 Valor actual del control especificado por la posición del
cuadro de desplazamiento.

4.10.2 Sucesos
Suceso Comentario
Change Este suceso ocurre cada vez que el usuario cambia la posición del cuadro
de desplazamiento ya sea haciendo clic en SmallChange o LargeChange o
bien desplazando con el mouse el cuadro de desplazamiento, en este
último caso el suceso Change se activa solo cuando se suelta el botón del
mouse.
Scroll Ocurre continuamente mientras el cuadro de desplazamiento es arrastrado
de una posición a otra con el mouse.
Desarrollar una aplicación que muestre el manejo del control HScrollBar. El
programa debe combinar los tres colores básicos: rojo, verde y azul.
La interfaz debe ser similar a la siguiente ilustración:

La siguiente tabla muestra las propiedades de los controles incluidos en el


formulario:
Control Propiedad Valor
PictureBox Name nnColores
Label Caption Rojo
Label Caption Verde
Label Caption Azul
HscrollBar Name nnRojo

Ing. Hermas Herrera Callejas Página : 63 de


19
LargeChange 20
Max 255
Min 0
SmallChange 2
Value 0
HscrollBar Name nnVerde
LargeChange 20
Max 255
Min 0
SmallChange 2
Value 0
HscrollBar Name nnAzul
LargeChange 20
Max 255
Min 0
SmallChange 2
Value 0
Guardar el formulario con el nombre CombinaciónColores.frm y la
aplicación con el nombre CombinaciónColores.vbp.
Diseñada la interfaz de usuario, unir código a los controles del formulario.
Asociar un procedimiento a la barra de desplazamiento nnRojo accionado por el
suceso Scroll. Cuando el usuario arrastre el cuadro de desplazamiento del control
nnRojo, el color rojo que muestra el control PictuneBox debe aumentar o disminuir
de nivel.
1. En el formulario, hacer doble clic sobre el control nnRojo. En la ventana de
código, desplegar el cuadro de lista procedimientos y seleccionar el suceso
Scroll. La ventana de código abre el procedimiento nnRojo_Scroll.
2. Digitar el siguiente código:
Private Sub nnRojo_Scroll()
rojo = nnRojo.Value
verde = nnVerde.Value
azul = nnAzul.Value
nnColores.BackColor = RGB(rojo, verde, azul)
End Sub
Hacer doble clic en el control nnVerde. En la ventana de código, desplegar
el cuadro de lista procedimientos y seleccionar el suceso Scroll. La ventana de
código abre el procedimiento nnVerde_Scroll. Digitar el siguiente código:
Private Sub nnVerde_Scroll()
verde = nnVerde.Value
azul = nnAzul.Value
rojo = nnRojo.Value
nnColores.BackColor = RGB(rojo, verde, azul)
End Sub
Hacer doble clic en el control nnAzul. En la ventana de código, desplegar el
cuadro de lista procedimientos y seleccionar el suceso Scroll. La ventana de
código abre el procedimiento nnAzul_Scroll. Digitar el siguiente código:
Private Sub nnAzul_Scroll()
azul = nnAzul.Value

Ing. Hermas Herrera Callejas Página : 64 de


19
rojo = nnRojo.Value
verde = nnVerde.Value
nnColores.BackColor = RGB(rojo, verde, azul)
End Sub
Asociar un procedimiento a la barra de desplazamiento nnRojo accionado
por el suceso Change. Cuando el usuario haga clic en el área que hay entre el
cuadro de desplazamiento y las flechas o en las flechas mismas, el color rojo que
muestra el control PictureBox debe aumentar o disminuir de nivel.
1. En el formulario, hacer doble clic sobre el control nnRojo. En la ventana de
código, desplegar el cuadro de lista Procedimientos y seleccionar el suceso
Change. La ventana de código abre el procedimiento nnRojo_Change
2. Digitar el siguiente código:
Private Sub nnRojo_Change()
rojo = nnRojo.Value
verde = nnVerde.Value
azul = nnAzul.Value
nnColores.BackColor = RGB(rojo, verde, azul)
End Sub
Hacer doble clic en el control nnVerde. En la ventana de código desplegar
el cuadro de lista Procedimientos y seleccionar el suceso Change. Digitar el
siguiente código:
Private Sub nnVerde_Change()
verde = nnVerde.Value
azul = nnAzul.Value
rojo = nnRojo.Value
nnColores.BackColor = RGB(rojo, verde, azul)
End Sub
Hacer doble clic en el control nnAzul. En la ventana de código, desplegar el
cuadro de lista Procedimientos y seleccionar el suceso Change. Digitar el
siguiente código:
Private Sub nnAzul_Change()
azul = nnAzul.Value
rojo = nnRojo.Value
verde = nnVerde.Value
nnColores.BackColor = RGB(rojo, verde, azul)
End Sub
Ejecutar el programa y desplazar el cuadro de desplazamiento de cada una
de las barras.

4.11 Creación de menús.- La mayoría de las aplicaciones para Windows se


caracterizan por tener una barra de menús, desde la cual el usuario puede
ejecutar de manera fácil un comando. Cuando se pulsa sobre el nombre de un
menú se despliega un cuadro de lista en el que aparecen una serie de opciones.
La mayoría de las opciones se ejecutan inmediatamente después de ser pulsadas
(por ejemplo cuando el usuario selecciona la opción Copiar del menú Edición, la
información seleccionada es copiada inmediatamente en el portapapeles de
Windows); otras, cuyos nombres aparecen seguidos de puntos suspensivos,

Ing. Hermas Herrera Callejas Página : 65 de


19
muestran un cuadro de dialogo solicitando más información al usuario antes de
que la opción se ejecute, también hay opciones que tienen una flecha y al apuntar
la misma se despliega una nueva lista que constituye un submenú de nivel inferior.
En este capitulo se verá cómo crear y diseñar menús personalizados para la
aplicación y definir sus propiedades de manera fácil y sencilla utilizando el Editor
de menús, una herramienta de fácil manejo.
Para visualizar el Editor de menús hacer clic en el comando Editor de
menús del menú Herramientas. Visual Basic muestra el Editor de menús:

4.11.1 Opciones del Editor de menús


Opción Descripción
Caption En este recuadro se escribe el nombre del comando o del menú que
desea que aparezca en la barra de menús o en un submenú. Para dar
al usuario acceso a través del teclado a un elemento de menú, escribir
el signo & delante de una letra. En tiempo de ejecución, esta letra
aparecerá subrayada (el signo & no será visible) y el usuario tendrá
acceso al menú o al comando si presiona la tecla Alt y la
correspondiente a la letra subrayada.
Name En este recuadro se escribe un nombre de control para el elemento del
menú. El nombre de control es un identificador que sólo se utiliza para
tener acceso al elemento del menú en el código, no aparece en ningún
menú.
Index Permite asignar un valor numérico que determina la posición del control
en una matriz de controles. Esta posición no tiene ninguna relación con
la ubicación del control en la pantalla.
Shortcut Permite seleccionar una tecla de método abreviado para cada
comando.
HelpContexID Permite asignar un valor numérico único para el Id. de contexto. Este
valor se utiliza para encontrar el tema de Ayuda apropiado en el archivo
de Ayuda identificado mediante la propiedad HelpFile.
NegotiatePosition Permite seleccionar la propiedad NegotiatePosition del menú. Esta
propiedad determina si el menú aparece o no en un formulario
contenedor y como aparece.

Ing. Hermas Herrera Callejas Página : 66 de


19
Checked Permite hacer que aparezca inicialmente una marca de verificación a la
izquierda de un elemento del menú. Se utiliza normalmente para
indicar si una opción de alternar está activada o no.
Enabled Permite seleccionar si el elemento del menú debe responder a eventos.
Desactivar esta opción si se desea que el elemento del menú no esté
disponible y aparezca atenuado.
Visible Permite hacer que un elemento aparezca en el menú.
WindowList Determina si el control del menú contiene una lista de formularios
secundarios MDI abiertos en una aplicación MDI.
Pasa el menú seleccionado a un nivel inferior cada vez que se hace clic
en el botón. Se puede crear hasta cuatro niveles de submenús.
Pasa el menú seleccionado a un nivel superior cada vez que se hace
clic en el botón. Se puede crear hasta cuatro niveles de submenús.
Cada vez que se hace clic en este botón, el elemento seleccionado del
menú se mueve hacia arriba una posición dentro del mismo nivel de
menú.
Cada vez que se hace clic en este botón, el elemento seleccionado del
menú se mueve hacia abajo una posición dentro del mismo nivel de
menú.
Lista Menús Es un cuadro de lista que muestra en orden jerárquico todos los
elementos del menú. Los elementos de los submenús aparecen
indentados para indicar su ubicación o su nivel en la jerarquía.
Selecciona la línea siguiente.
Inserta una línea en el cuadro de lista, inmediatamente encima de la
línea actualmente seleccionada.
Elimina la línea actualmente seleccionada.
Cierra el Editor de menús y aplica todos los cambios efectuados en el
Ultimo formulario seleccionado.
Cierra el Editor de menús y cancela todos los cambios.
Desarrollar un programa con una interfaz que permita seleccionar
comandos utilizando una barra de menús. La interfaz debe tener el siguiente
aspecto:

Ing. Hermas Herrera Callejas Página : 67 de


19
El menú Formato debe mostrar las opciones Fuente, Tamaño y Salir. A la
vez, el submenú Fuente debe mostrar las opciones Arial, Comic Sans MS y
Courier; y el submenú Tamaño, las opciones 10, 12 y 14. El menú Varios debe
mostrar las opciones Reloj, Calculadora y Naipes.
Seguir estos pasos:
1. Hacer clic en la opción Nuevo proyecto del menú Archivo para crear una nueva
aplicación.
2. Hacer clic en el formulario.
3. Hacer clic en el comando Editor de menús del menú Herramientas para visualizar el
cuadro de diálogo Editor de menús.
4. Ingresar los datos en el Editor de menús:
En el cuadro de texto Caption escribir el nombre del menú que desea crear.
En este caso, escribir &Formato. El signo Ampersand (&) indica que la siguiente
letra aparecerá subrayada (Formato) con la finalidad de acceder a esta opción
mediante la combinación de las teclas Alt+F. En el cuadro de texto Name escribir
nnFormato para hacer referencia al menú en el código del programa. A
continuación, hacer clic en el botón Siguiente para crear el menú especificado.
La siguiente tabla muestra los elementos ingresados en el formulario y en el
editor de menús:
Control Propiedad Valor
TextBox Name nnTexto1
Text “ “
Caption Name Shortcut
&Formato nnFormato
&Fuente nnFuente
&Arial nnFuenteArial Ctrl + A
&Comic Sans MS nnFuenteComicSans Ctrl + C
C&ourier nnFuenteCourier Ctrl + O
&Tamaño nnTamaño
10 nnTamaño10
12 nnTamaño12
14 nnTamaño14
- LineaSeparadora
&Salir nnSalir Ctrl + S
&Varios nnVarios
&Reloj nnReloj Ctrl + R
&Calculadora nnCalculadora Ctrl + C
&Naipes nnNaipes Ctrl + N
El Editor de menús debe tener el siguiente aspecto:

Ing. Hermas Herrera Callejas Página : 68 de


19
5. Dado que Fuente es un submenú del menú Formato, es necesario
diferenciarlos. Para ello, hay que sangrar o indentar el submenú. Para sangrar el
submenú Fuente, desplazar el puntero del mouse sobre el submenú y hacer clic
para seleccionarlo (el submenú queda resaltado sobre un fondo azul). A
continuación, hacer clic en el botón flecha hacia la derecha .
A la vez, Arial, Comic Sans MS y Courier son opciones del submenú
Fuente. De manera que debemos diferenciar estos elementos del submenú
Fuente. Para ello, seleccionar la opción Arial y hacer clic dos veces en el botón
flecha a la derecha. Lo mismo hacer con las opciones Comic Sans MS y Courier.
El sangrado de todos los elementos ingresados en el Editor de menú debe
sen el siguiente:
&Formato
...&Fuente
...... &Arial Ctrl+A
...... &Comic Sans MS Ctrl+C
...... C&ourier Ctrl+O
... &Tamaño
...... 10
...... 12
...... 14
... - Línea de separación
... &Salir Ctrl + S
&Varios
... &Reloj Ctrl + R
... Calc&uladora Ctrl + U
... &Naipes Ctrl + N
Una línea de separación permite agrupar órdenes en función de su
actividad. Para crear una línea de separación escribir un guión (-) en el cuadro de
texto Caption y en el cuadro de texto Name introducir un nombre.
El editor de menús debe tener el siguiente aspecto:

Ing. Hermas Herrera Callejas Página : 69 de


19
4. Finalmente hacer clic en el botón Aceptar.
Luego de haber terminado con el diseño de la barra de menús, el siguiente
paso consiste en asociar un procedimiento a cada una de las opciones.
Hacer clic sobre el menú Formato, situar el puntero del mouse en el
submenú Fuente y hacer clic en la opción Arial; la ventana de código se abre
mostrando el procedimiento nnFuenteArial_Click. Digitar el siguiente código:
Private Sub nnFuenteAniaLClick()
'Convierte a Arial el texto contenido en el control TextBox
nnTexto1.Font.Name = "Arial"
End Sub
Hacer clic sobre el menú Formato, situar el puntero del mouse en el
submenú Fuente y hacer clic en la opción Comic Sans MS; la ventana de código
se abre mostrando el procedimiento nnFuenteComicSans_Click. Digitar el
siguiente código:
Private Sub nnFuenteComicSans_Ciick()
'Convierte a Comic Sans MS el texto contenido en TextBox
nnTexto1.Font.Name = "Comic Sans MS"
End Sub
Hacer clic sobre el menú Formato, situar el puntero del mouse en el
submenú Fuente y hacer clic en la opción Courier; la ventana de código muestra el
procedimiento nnFuenteCounier_Click. Digitar el siguiente código:
Private Sub nnFuenteCounier_Click()
'Convierte a Courier el texto contenido en el control TextBox
nnTexto1.Font.Name = "Courier"
End Sub
Hacer clic sobre el menú Formato, situar el puntero del mouse en el
submenú Tamaño y hacer clic en la opción 10; la ventana de código muestra el
procedimiento nnTamañol0. Digitar el siguiente código:
Private Sub nnTamañol0_Clic()
'Modifica a 10 puntos el tamaño del texto del control TextBox.
nnTexto1.Font.Size = 10
End Sub

Ing. Hermas Herrera Callejas Página : 70 de


19
Hacer clic sobre el menú Formato, situar el puntero del mouse en el
submenú Tamaño y hacer clic en la opción 12; la ventana de código muestra el
procedimiento nnTamañol2. Digitar el siguiente código:
Private Sub nnTamañol2_Clic()
'Modifica a 12 puntos el tamaño del texto del control TextBox.
nnTexto1.Font.Size = 12
End Sub
Hacer clic sobre el menú Formato, situar el puntero del mouse en el
submenú Tamaño y hacer clic en la opción 14; la ventana de código muestra el
procedimiento nnTamañol4. Digitar el siguiente código:
Private Sub nnTamañol4_Click()
'Modifica a 14 puntos el tamaño del texto del control TextBox.
nnTexto1.Font.Size = 14
End Sub
La aplicación termina al elegir la opción Salir
Private Sub nnSalir_Click()
'Termina la aplicación.
End
End Sub
Seleccionar el menú Varios y hacer clic en la opción Reloj, la ventana de
código se abre mostrando el procedimiento nnReloj_Click. Digitar el siguiente
código:
Private Sub nnReloj_Click()
'Ejecuta la aplicación Reloj.exe de Microsoft Windows.
id = Shell("C:\Caepeta1\...Carpetan\Reloj.exe", 1)
End Sub
La función Shell permite ejecutar una orden del sistema operativo u otro
programa. Tiene esta sintaxis:
Shell(orden$[,n])
El argumento orden$ está formado por la ruta y el nombre de la orden o del
programa que se desea ejecutar y n es un valor entero (1,2,3,4,7) que hace que el
proceso ejecutado se presente en una ventana normal, minimizada o maximizada,
enfocada o sin enfocar. La función retorna un valor id que identifica el programa
arrancado e indica si se ejecutó satisfactoriamente. Este valor normalmente no es
utilizado
En el menú Varios, hacer clic en la opción Calculadora. La ventana de
código se abre mostrando el procedimiento nnCalculadora_Click. Digitar el
siguiente código:
Private Sub nnCalculadora_Click()
Ejecuta la aplicación Calc.exe de MS Windows
id = Shell("C:\Windows\Calc.exe", 1)
End Sub
Hacer clic en la opción Naipes del menú Varios. La ventana de código
muestra el procedimiento naipes_Click. Digitar el siguiente código:
Private Sub nnNaipes_Click()
'Ejecuta la aplicación Sol.exe de MS Windows
id = Shell("C:\Windows\Sol.exe", 1)

Ing. Hermas Herrera Callejas Página : 71 de


19
End Sub
Asociar un procedimiento al control TextBox accionado por el suceso
MouseUp. Cuando el usuario pulse el botón derecho del mouse sobre el control
TextBox, un menú contextual debe aparecer sobre el control mostrando todas las
opciones del menú Formato. Un menú contextual se caracteriza porque no está
fijo en un lugar del formulario, puede aparecer en cualquier lugar. En las
aplicaciones Windows estos menús se visualizan cuando se pulsa con el botón
derecho del mouse sobre un formulario o control. Para invocar a un menú
contextual se utiliza la función PopupMenu
1. Hacer doble clic en el control TextBox. En la ventana de código, desplegar el
cuadro de lista Procedimientos y seleccionar el suceso MouseUp. La ventana de
código abre el procedimiento nnTexto_MouseUp.
2. Digitar el siguiente código:
Private Sub nnTexto_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As
Single)
‘Cuando en el cuadro de texto se presione el boton 2
If Button = 2 Then PopupMenu nnFormato
End Sub
Presionar la tecla F5 para ejecutar el programa. En el cuadro de texto
digitar cualquier texto. Luego, hacer clic con el botón derecho del mouse para
visualizar el menú contextual con las opciones del menú Formato. Seleccionar
una opción del menú contextual.

4.11.2 Orden de la tabulación de los controles.- El orden de tabulación es el


orden en que el usuario se desplaza de un control a otro pulsando la tecla Tab en
tiempo de ejecución. Por omisión, el orden de tabulación es igual al orden en que
los controles han sido colocados en el formulario.

4.11.3 Cambiar el orden de tabulación de los controles.- Para cambiar el


orden de tabulación de los controles, utilizar la propiedad TabIndex de cada
control. El valor de esta propiedad va desde 0 hasta n-1, siendo n el número de
controles que tiene el formulario.
Los controles que no pueden obtener el enfoque, al igual que los controles
desactivados o invisibles, no tienen la propiedad TabIndex y no están incluidos en
el orden de tabulación. Cuando el usuario presione la tecla Tab, estos controles
serán ignorados.

Ing. Hermas Herrera Callejas Página : 72 de


19
4.11.4 Quitar un control del orden de tabulación.- Podemos quitar un control
del orden de tabulación si establecemos su propiedad TabStop a False. Un
control cuya propiedad TabStop se ha establecido en False sigue manteniendo su
posición en el orden de tabulación actual, aunque el control es saltado al ir de un
control a otro con la tecla Tab.

4.11.5 Tecla de acceso rápido a un control.- Si el control tiene la propiedad


Caption, se le puede asignar una tecla de acceso rápido para seleccionar el
control. Para especificar la tecla de acceso rápido se debe resaltar un carácter de
la cadena en la propiedad Caption. Por ejemplo, si el valor de la propiedad Caption
es la cadena Usuario, y si se desea definir la tecla S como la de acceso rápido, se
deberá establecer la propiedad Caption asi: U&suario. El texto en el control se
vera así: Usuario.
Para acceder al control usando la tecla de acceso rápido se deberá pulsar
la combinación Alt + tecla de acceso. Para nuestro ejemplo será: Alt+S. Algunos
controles, tales como el control TextBox, no tienen la propiedad Caption. Para
crear una tecla de acceso para esos controles:
1. Colocar un control Label cerca al otro control.
2. Establecer la propiedad Caption del control Label para contener la tecla de
acceso apropiada.
3. Establecer, para el control Label, un valor de orden de tabulación menor en una
unidad que el del otro control.
Cuando se pulse Alt + tecla de acceso del control Label, el enfoque se
moverá hacia el otro control debido a que el control Label no puede recibir el
enfoque.

Ing. Hermas Herrera Callejas Página : 73 de


19
CAPITULO 5 – VISUAL BASIC – HERRAMIENTAS DE
PROGRAMACION
5.1 Comentarios, Variables y Constantes

5.1.1 Comentarios.- Son todo lo que está a la derecha del carácter (‘) en una
línea cualquiera de programa y no ejecuta acción alguna. Por ejemplo:
‘Suma de los números pares
SumaPares = 0 ‘Se inicializa la variable SumaPares al valor 0
Los comentarios son de mucha utilidad para poder entender el código del
programa utilizado. En programas con pocas líneas de código puede no parecer
importante, pero cuando se trata de proyectos realmente complejos, o
desarrollados por varios programadores su importancia se hace evidente. En el
caso de que el código no esté comentado, el trabajo de actualización y revisión
puede ser una tarea difícil.

5.1.2 Una Constante.- Es un valor que no cambia durante la ejecución del


programa. El tratamiento y tipo de datos es igual al de las variables. Para
declarar una constante se utiliza la palabra Const en la declaración. Si durante la
ejecución se intenta cambiar su valor se producirá un error. Ejemplos:
‘Las constantes son privadas por defecto.
Const Incremento = 2.5
‘Declaración de una constante pública.
Public Const Saludo = ”Bien Venido”
‘Declaración de un entero constante.
Private Const Altura As Integer = 15
‘Múltiples constantes en una línea.
Const Año = ”1999”, Radio As Double = 4.45

5.1.3 Las Variables.- Utilizadas para almacenar valores durante la ejecución del
programa. Por ejemplo,
Ventas = 5500
Asigna el valor 5500 a la variable Ventas. Observar que el signo igual del ejemplo
es un operador de asignación, no es un operador de igualdad; el valor 5500 se
asigna a la variable Ventas. El valor de una variable puede modificarse a lo largo
de la ejecución del programa.
Las variables tienen nombre, tipo de dato y un ámbito. El nombre se utiliza
para identificar a la variable en el programa, debe ser corto y fácil de recordar. El
nombre de una variable debe comenzar con una letra, no puede incluir un punto,
no debe exceder de los 255 caracteres de longitud y debe ser único en el mismo
alcance, que es el intervalo desde el que se puede hacer referencia a la variable:
un procedimiento, formulario, etc. Los caracteres de una variable pueden ser
letras, dígitos, el carácter de subrayado (_) y los caracteres de declaración del tipo
de la variable (%, &, ¡, #, @, y $). El nombre de una variable no puede ser una
palabra reservada del lenguaje (For, If, Loop, Next, Val, Hide, Caption,...).

Ing. Hermas Herrera Callejas Página : 74 de


19
5.2 Declaración de Variables.- Antes de utilizar una variable, hay que declarar
su tipo. Para ello se utiliza la sentencia Dim. Esta sentencia reserva espacio de
memoria para la variable y permite a Visual Basic saber qué tipos de datos deberá
guardar en dicha variable. Por ejemplo, la siguiente sentencia crea espacio para
una variable llamada Longitud:
Dim Longitud As Integer
Después del nombre de la variable especificar el tipo de la misma. Por
ejemplo, la variable Longitud ha sido declarada de tipo Integer (entero). Esto
permitirá a Visual Basic ahorrar espacio en la memoria si la variable Longitud va a
albergar números sin cifras decimales. Luego de que la variable ha sido declarada
se podrá asignar información a la misma desde el código del programa. Por
ejemplo, la siguiente instrucción asigna el número 740 a la variable Longitud.
Longitud = 740
Después de la asignación, la variable Longitud podrá utilizarse en lugar del
número 740 en el código del programa.

5.3 Tipos de Datos.- Visual Basic dispone de varios tipos de datos, aplicables
tanto para constantes como para variables. La siguiente tabla muestra los tipos de
datos disponibles en Visual Basic.
Carácter de declaración
Tipo Descripción del tipo Rango
Boolean Binario True o False
Byte Entero corto 0 a 255
Integer Entero (2 bytes) % -32768 a 32767
Long Entero largo (4 bytes) & -2.147.483.648 a 2.147.483.647
Single Real simple precisión (4 bytes) ¡ -3.40E+38 a 3.40E+38
Double Real doble precisión (8 bytes) # -1 .79D+308 a 1.79D+308
Currency Número con punto decimal fijo @ -9.22E+14 a 9.22E+14
(8 bytes)
String Cadena de caracteres (4 bytes $ 0 a 65500 caracteres
+ 1 byte/car. hasta 64k)
Date Fecha 1 de enero del 100 a 31 de dic
de
9999. Indica también la hora,
desde 00:00:00 a 23:59:59.
Variant Fecha/ hora; números (ninguno) F/h: como Date: números:
mismo
enteros, reales, o caracteres rango del tipo de valor
almacenado
(16 bytes + 1 byte/car, en cadena
de caracteres.)
Otra forma de declarar una variable es utilizando los caracteres de
declaración de tipo. Por ejemplo:
Edad% Variable de tipo Integer.
Longitud# Variable de tipo real de precisión doble
Dirección$ Variable de tipo carácter.
TipoInterés@ Variable fraccionaria
Si una variable no es declarada, se asume que es de tipo Variant. Por

Ing. Hermas Herrera Callejas Página : 75 de


19
ejemplo, las sentencias
Dim N As Integer
Ventas = “Ventas 1999:” ‘Variable de tipo String
Ventas = 4573.2548 ‘Variable de tipo doble
Declaran a N como una variable entera y a Ventas como una variable de
tipo Variant que se comporta como una variable de tipo String para contener una
cadena de caracteres, y a continuación cambia su tipo para comportarse como
una variable real de doble precisión.

5.3.1 Declaración Explícita.- En Visual Basic no es necesario declarar una


variable antes de utilizarla. Sin embargo, puede ocurrir que durante la
programación se escriba mal el nombre de una variable y ello genere un error.
Para evitar este tipo de errores, se utiliza la sentencia Option Explicit en la sección
de declaraciones del formulario y del módulo. Option Explicit genera un mensaje
de error si encuentra una variable no declarada explícitamente.
Option Explicit opera sólo en el formulario o en el módulo donde se haya
puesto. Para tener esta opción activa para todo el código de una aplicación, haga
clic en el comando Opciones del menú Herramientas. En el cuadro de diálogo
Opciones, habilite la casilla Requerir declaración de variables.

5.4 Ambito de las Variables.- Se entiende par ámbito de una variable al espacio
de la aplicación donde la variable es reconocida y por lo tanto se puede utilizar.

5.4.1 Variables Locales.- Una variable local es reconocida solamente en el


procedimiento en el que ha sido declarada. Fuera de ese procedimiento, la
variable no es conocida. Utilice la sentencia Dim o Static para declarar una
variable local a un procedimiento.
En el procedimiento Calcular_Clic() las variables A, B, Suma y Resta son
locales.
Private Sub Calcular_Click()
Dim A, B, Suma, Resta As Long
A = Val(Numl .Text)
B = Val(Num2.Text)
Suma = A + B
Resta = A - B
Suma.Text = Suma
Resta.Text = Resta
End Sub

5.4.2 Variables Estáticas.- Una variable local se re-inicializa cada vez que se
entra en el procedimiento o función en el que se crea y al terminar se destruye.
En otras palabras, una variable local no conserva su valor entre una llamada al
procedimiento y la siguiente. Para hacer que una variable conserve su valor entre
una llamada a otra, hay que declararla estática utilizando la palabra reservada
Static. Visual Basic re-inicializa una variable estática solamente la primera vez que
se llama al procedimiento. Por ejemplo, en el código
Static Edad As Integer

Ing. Hermas Herrera Callejas Página : 76 de


19
Se declara la variable Edad de tipo entero. Esta variable conservará su
valor entre llamadas en el procedimiento y se destruirá sólo cuando el programa
termine.

5.4.3 Variables a Nivel del Formulario.- Una variable declarada a nivel del
formulario puede ser compartida por todos los procedimientos de ese formulario.
Para declarar una variable a nivel del formulario, hacer doble clic sobre uno de los
objetos contenidos en el formulario y en la ventana de código, seleccionar
(General) del cuadro de lista Nombres y seleccionar (Declaraciones) del cuadro de
lista de sucesos.
El punto de inserción aparece en la sección de declaraciones del formulario.
Es en esta sección donde la variable debe ser declarada como se puede apreciar
en las gráficas siguientes:.

1. Desplegar el cuadro de lista nombres y seleccionar (General)

2. Desplegar el cuadro de lista de sucesos y seleccionar (Declaraciones) Se abre la sección de


declaraciones

5.4.4 Variables a Nivel del Módulo.- Para compartir una variable entre todos los
formularios y procedimientos contenidos en un proyecto, se necesita declararla en
un módulo de dicho proyecto. Para crear un nuevo módulo, hacer clic en el
comando Agregar módulo del menú Proyecto. Seleccionar el botón Abrir y Visual
Basic añadirá un nuevo módulo estándar denominado Module 1 en el proyecto:
Los cuadros de lista Nombre y Suceso indican que se encuentra abierta la
sección de declaraciones generales del módulo estándar. Las variables que se

Ing. Hermas Herrera Callejas Página : 77 de


19
declaren aquí estarán disponibles para todo el programa. Una variable a nivel de
módulo es por defecto estática.
El nombre Module1 que aparece entre paréntesis es el nombre de archivo
que se asigna por defecto a este módulo. Para modificar este nombre, en el menú
Archivo seleccionar la opción Guardar Módule1 como. En el cuadro de diálogo
Guardar archivo como, introducir un nombre para el módulo. Finalmente, pulsar el
botón Guardar. De esta manera, el módulo queda almacenado en un archivo con
la extensión .bas. De igual modo, el nombre del archivo que contiene el módulo
queda modificado.
Para modificar el nombre de objeto del módulo, desplazar el puntero del
mouse sobre el nombre y hacer clic con el botón derecho del mouse. En el menú
contextual que aparece seleccionar la opción Propiedades y la ventana
Propiedades aparecerá en la pantalla.
Por defecto, una variable a nivel de módulo está disponible para todos los
procedimientos del módulo; pero no para el código de otros módulos. Para
declarar variables a nivel de módulo utilizar la palabra clave Private. A nivel de
módulo no hay diferencia entre Private y Dim.
La ventana de proyecto lista en una nueva carpeta el nuevo módulo
añadido al programa

Nombre de objeto del módulo (nombre que tendrá el módulo en el programa). Nombre de archivo del
módulo.
Como los módulos no incluyen otros objetos, su única propiedad es Name.
En ésta digitar el nuevo nombre de objeto para el módulo. De esta manera, se
podrá distinguir un módulo de otros si se decide utilizar más de uno en los
programas.

Ing. Hermas Herrera Callejas Página : 78 de


19
5.4.5 Variables Públicas.- Para que una variable esté disponible más allá del
ámbito de un procedimiento, e incluso del de un formulario o módulo, hay que
declararla en un módulo de la aplicación, en la sección de declaraciones
generales, utilizando la palabra clave Public. Por ejemplo, en esta declaración de
variables:
Public Totales As Double, Gastos As String
Las variables Totales y Gastos tienen un ámbito global. Estas variables pueden
ser utilizadas desde cualquier parte de la aplicación, sin importar el módulo en el
que esté el procedimiento que accede a ellas. No se pueden declarar variables
Public en un procedimiento.

5.4.6 Variables de Registros o Estructuras.- Una estructura o registro es un


tipo de dato definido por el usuario. Es básicamente una colección de datos de
diferentes tipos, relacionados entre si y bajo una denominación común. Para crear
una estructura se debe utilizar las palabras reservadas Type... End Type en la
sección de declaraciones de un módulo.
Type NombredelNuevoTipo
NombredelElemento1 As TipodeDato
NombredelElemento2 As TipodeDato
NombredelElemento3 As TipodeDato
...
End Type
En el siguiente ejemplo se declara un tipo de dato denominado Registro que
consta de cuatro miembros o campos, denominados RazónSocial, Dirección,
Teléfono y RUC.

Type Registro
RazónSocial As String*50
Direccion As String*40
Teléfono As String*10
RUC As Long
End Type
Luego de definir el nuevo tipo de dato, podemos declarar variables globales, a
nivel del módulo. Por ejemplo
Global Clientes As Registro
Declara a la variable Clientes de tipo Registro. Para referirse a un determinado

Ing. Hermas Herrera Callejas Página : 79 de


19
miembro de una estructura se utiliza la notación variable.miembro. Por ejemplo,
en la línea que sigue
Clientes.Teléfono = “8597986” ‘se asigna el valor 8597986 al campo Teléfono
de la estructura Clientes.

5.5 Operadores.- Un operador es un símbolo o palabra que ejecuta una


operación matemática o maneja la información. La siguiente tabla muestra el
conjunto de operadores que soporta Visual Basic.
Tipo Operación Operador
Aritmético Exponenciación ^
Cambio de signo -
Multiplicación y división *, /
División entera \
Resto de una división entera Mod
Suma y resta +, -
Concatenación Concatenar o enlazar &
Relacional Igual, distinto, menor, mayor,.. =, <>, <, >, <=, >=
Lógico Negación Not
Conjunción And
Disyunción (Or inclusive) Or
Disyunción (Or exclusiva) Xor
Equivalencia (opuesto a Xor) Eqv
Implicación Imp

5.5.1 Los Operadores Aritméticos.- Permiten realizar operaciones matemáticas


y asignar los resultados a las variables. En las siguientes líneas
PI = 3.1416 ‘El valor 3.1416 se asigna a la variable PI
Radio = 15 ‘El valor 15 se asigna a la variable Radio
Area = PI*Radio^2 ‘El producto de PI por Radio al cuadrada se asigna a la variable
Area.

5.5.2 Los Operadores Relacionales.- También conocidos como operadores de


comparación, al comparar un dato con otro devuelven un resultado True si es
verdadero y False si es falso. En el siguiente ejemplo:
Edad > 19
El operador mayor (>) devuelve True (Verdadero) si el valor contenido en la
variable Edad es mayor que 19; en caso contrario, devuelve False (Falso). En la
siguiente comparación:
Edad < 45
El operador menor (<) devuelve True si el valor contenido en la variable Edad es
menor que 45; en caso contrario, devuelve False. Otro ejemplo:
Código = CódVend
El aperador igual (=) devuelve True si los valores que están a ambos lados de él
son iguales; en caso contrario, devuelve False. En la siguiente comparación:
Código <> CódVend
El operador distinto (<>) devuelve True si los valares que están a ambos lados de
él son diferentes; en caso contrario, devuelve False.

Ing. Hermas Herrera Callejas Página : 80 de


19
5.5.3 El Operador &.- Une (concatena) una cadena de caracteres al final de otra.
También se puede utilizar el operador +. No obstante para evitar ambigüedades se
utiliza &.
5.5.4 Los Operadores Lógicos.- También conocidos como nexos lógicos
permiten combinar dos a más comparaciones en una sola comparación
compuesta. Por ejemplo, la comparación compuesta:
(Edad > 18) And (Edad < 45)
Devuelve True si ambos lados de And son True. De otro modo, la expresión
devuelve False.
En la comparación compuesta:
(Edad < 18) Or (Edad > 45)
El operador Or devuelve True si alguno de los lados de Or es True. Si
ambos lados de Or son False, la expresión devuelve False.
Not es una negación, devuelve lo contrario a un resultado de verdad. Así,
en la expresión
Not(Edad = 15)
Si Edad vale 15, Not transformará el resultado de True a False.

5.6 Funciones Matemáticas.- Visual Basic incluye varias de estas funciones que
nos permiten realizar operaciones matemáticas complejas. La siguiente tabla
muestra cada una de estas funciones junto con una breve descripción de su
contenido.
Función Descripción
Abs() Devuelve el valor absoluto de un número.
Sintaxis:
Abs(número)
Donde, el argumento número puede ser cualquier expresión numérica válida. El
valor absoluto de un número es su magnitud sin signo. Por ejemplo:
ABS(-5) y ABS(5) devuelven 5.
Cos() Devuelve el coseno de un ángulo en radianes.
Sintaxis:
Cos(número)
Donde el argumento número es un número tipo Double o cualquier expresión
numérica válida que expresa un ángulo en radianes. La función Cos toma el
ángulo y devuelve la razón de dos lados de un triangulo rectángulo. La razón es
la longitud del lado adyacente al ángulo dividido por la longitud de la hipotenusa.
Para convertir grados en radianes, se multiplica los grados por PI/180. Para
convertir radianes en grados, se multiplica los radianes por 180/PI.
Exp() Devuelve e (la base de los logaritmos naturales) elevado a una potencia.
Sintaxis:
Exp(número)
Donde, el argumento número es un número tipo Double o cualquier expresión
numérica válida. El valor de la constante e es 2.718282 aproximadamente.
Int, Fix Devuelve un valor del mismo tipo que el que se paso como parámetro y que
contiene la parte entera de un número.
Sintaxis:
Int(número)
Fix(número)
Donde número puede ser cualquier expresión numérica válida. Las funciones Int
y Fix eliminan la fracción de un número y devuelven el valor entero resultante.
La diferencia entre Int y Fix es que si el número es negativo, Int devuelve el
primer entero negativo menor o igual a número, mientras que Fix devuelve el
primer ente negativo mayor o igual a número. Por ejemplo, Int convierte -8.4 en -

Ing. Hermas Herrera Callejas Página : 81 de


19
9 y Fix convierte -8.4 a -8. La función Fix(número) es equivalente a:
Sgn(número)* Int(Abs(número))
Log() Devuelve el logaritmo natural (base e) de un número.
Sintaxis:
Log(número)
Donde, número es cualquier expresión numérica válida mayor que cero. Se
Puede calcular logaritmos en base-n para cualquier número x dividiendo el
logaritmo natural de x por el logaritmo natural de n de la siguiente manera:
Log(x) = Log(x) / Log(n)
Sin() Devuelve el seno de un ángulo en radianes.
Sintaxis:
Sin(número)
Donde el argumento número es un número tipo Double o cualquier expresión
numérica válida que expresa un ángulo en radianes. La función Sin toma un
ángulo y devuelve la razón de dos lados de un triángulo rectángulo. La razón es
la longitud de lado opuesto al ángulo dividido por la longitud de la hipotenusa.
Sgn() Devuelve el signo de un número.
Sintaxis:
Sgn(número)
Donde número puede ser cualquier expresión numérica válida.
Si número es Sgn devuelve
Mayor que cero 1
Igual a cero 0
Menor que cero -1
Sqr() Devuelve la raíz cuadrada de un número
Sintaxis:
Sqr(número)
Donde número es un número tipo Double o cualquier expresión numérica válida
mayor o igual a cero.
Tan() Devuelve la tangente de un ángulo en radianes.
Sintaxis:
Tan(número)
Donde el argumento número es un número tipo Double o cualquier expresión
numérica válida que expresa un ángulo en radianes. La función Tan toma un
ángulo y devuelve la razón de dos lados de un triángulo rectángulo. La razón es
la longitud del lado opuesto al ángulo dividida por la longitud del lado adyacente
al ángulo.

5.7 Funciones de Conversión de Cadena.- Las funciones de cadena permiten


cambiar la apariencia y el tratamiento de las expresiones de cadena (String).
Función Descripción
Asc() Esta función devuelve el código de carácter correspondiente a la primera letra de
una cadena.
Sintaxis:
Asc(cadena)
Donde cadena es una expresión de cadena válida. Si cadena no contiene
caracteres, se produce un error en tiempo de ejecución. Ejemplos:
Código_Car = Asc(“C”) ‘Devuelve 67
Código_Car = Asc(“c”) ‘Devuelve 99
Chr() Esta función devuelve un tipo String que contiene el carácter asociado con el
código de carácter especificado.
Sintaxis:
Chr(códigocar)
Donde códigocar es un número tipo Long que identifica a un carácter.
Los números del 0 al 31 son los mismos que los códigos ASCII estándar no
imprimibles. Por ejemplo, Chr(10) devuelve un carácter de avance de línea. El
intervalo normal de códigocar es 0 - 255.
Ejemplo:
Caracter.Text = Chr(70) ‘Devuelve F
InStr() Esta función busca una cadena dentro de otra cadena y devuelve un número

Ing. Hermas Herrera Callejas Página : 82 de


19
indicando la posición en la que encuentra la cadena buscada; en caso de no
encontrarse devuelve 0.
Sintaxis:
lnStr([Start,]string1,string2[,compare])
Donde:
start Expresión numérica que establece la posición inicial para la búsqueda.
Si se omite, la búsqueda empieza en la posición del primer carácter. El
argumento start se requiere si se especifica compare.
String1 Expresión de cadena en la que se busca.
String2 Expresión de cadena buscada.
Compare Especifica el tipo de comparación de cadena. El argumento compare
se puede omitir, o puede ser 0 o 1 o 2. Se especifica 0 para realizar una
comparación binaria. Se especifica 1 para realizar una comparación de
texto sin distinguir entre mayúsculas y minúsculas. Se especifica 2 con
distinción de mayúsculas y minúsculas. Si se omite compare, el valor
Option Compare determina el tipo de comparación.
LCase() Convierte una cadena a minúsculas.
Sintaxis:
LCase(cadena)
El argumento cadena es cualquier expresión de cadena válida. Sólo se
convierten a minúsculas las letras mayúsculas. Las letras minúsculas o los
caracteres que no son letras no sufren cambios.
Left() Devuelve un número especificado de caracteres del lado izquierdo de una
cadena.
Sintaxis:
Left(string, length)
Donde:
String Expresión de cadena de la cual se devuelven los caracteres que están
más a la izquierda.
Length Expresión numérica que indica cuántos caracteres se van a devolver. Si
es 0, devuelve una cadena de longitud cero (“ “). Si es mayor o igual al
número de caracteres en string, se devuelve la cadena entera.
Len() Devuelve el número de caracteres en una cadena o el número de bytes
necesarios para almacenar una variable.
Sintaxis:
Len(cadena| nombrevar)
Donde:
cadena Cualquier expresión de cadena válida.
nombrevar Cualquier nombre de variable válido. Si nombrevar es un tipo Variant,
Len actúa igual que con un tipo String y siempre devuelve el número de
caracteres que contiene. Se deben especificar uno (y sólo uno) de los
dos argumentos posibles.
Mid() Devuelve un número especificado de caracteres de una cadena.
Sintaxis:
Mid(string, start[, length])
Donde:
String Expresión de cadena de la cual se devuelven los caracteres.
start Posición de carácter en string en la cual comienza la parte que se quiere
tomar. Si start es mayor que el numero de caracteres en string, Mid
devuelve una cadena de longitud cero (“”)
length Es opcional. Es el número de caracteres que se van a devolver. Si se
omite o en el texto hay menos de length caracteres (incluyendo el
carácter de start), se devuelven todos los caracteres desde la posición de
start hasta el final de la cadena.
LTrim, RTrim y Trim Devuelve una copia de una cadena determinada sin espacios a la
izquierda (LTrim), sin espacios a la derecha (RTrim) o sin espacios ni a la
derecha ni a la izquierda (Trim).
Sintaxis:
LTrim(cadena)
RTrim(cadena)
Trim(cadena)
Right() Devuelve un número especificado de caracteres del lado derecho de una
cadena.
Sintaxis:

Ing. Hermas Herrera Callejas Página : 83 de


19
Right(string, lenght)
Donde:
string Expresión de cadena desde la cual se devuelven los caracteres que
están más a la derecha.
Ienght Expresión numérica que indica cuantos caracteres se van a devolver. Si
es 0, se devuelve una cadena de longitud cero (“”). Si es mayor o igual al
número de caracteres en string, se devuelve la cadena completa.
Str() Esta función convierte un número a cadena.
Sintaxis:
Str(número)
Donde número es un número tipo Long o contiene una expresión numérica
válida. Al convertir un número a cadena, siempre se reserva un espacio a la
izquierda para el signo del número. Si número es positivo, la cadena devuelta
contiene un espacio a la izquierda y el signo más se da por supuesto. La función
Str sólo reconoce el punto (.) como separador decimal válido.
UCase() Convierte una cadena de caracteres a mayúsculas.
Sintaxis:
UCase(cadena)
Sólo se convierten a mayúsculas las letras minúsculas. Las letras mayúsculas o
los caracteres que no son letras no sufren cambios.
Space() Genera una cadena de espacios.
Sintaxis:
Space(número)
Donde número es el número de espacios que se desea incluir en la cadena. La
función Space es útil para dar formato a la salida y para borrar datos en cadenas
de longitud fija.
String() Devuelve un (String) tipo Variant que contiene una cadena de caracteres que se
repite en la longitud especificada.
Sintaxis:
String(número, carácter)
Donde:
número Longitud de la cadena devuelta.
Carácter Código de carácter que especifica el carácter o la expresión de
cadena cuyo primer carácter se utiliza para construir la cadena devuelta.
Val() Esta función devuelve los números contenidos en una cadena como un valor
numérico del tipo adecuado.
Sintaxis:
Val(cadena)
Donde cadena es cualquier expresión de cadena válida. La función Val deja de
leer la cadena en el primer carácter que no puede reconocer como parte de un
número. Los símbolos y caracteres que se consideran a menudo parte de
valores numéricos, como signos de moneda y comas, no se reconocen. Los
espacios en blanco, los tabuladores y los avances de línea se eliminan del
argumento. Lo siguiente:
Val(” 1415 178 Av. Los Ruibares”) ‘Val sólo reconoce el punto (.) como separador decimal
válido.
Devuelve el valor 1415178:

5.8 Funciones para la Conversión de Datos.- Visual Basic proporciona varias


funciones de conversión con los que se puede convertir valores a tipos de datos
específicos. Por ejemplo, para convertir un valor a tipo Integer se utiliza la función
CInt.

Ing. Hermas Herrera Callejas Página : 84 de


19
Función Descripción
CCur() Convierte a un valor de tipo Currency.
CDbl() Convierte a un valor de tipo Double.
CInt() Convierte a un valor de tipo Integer.
CLng() Convierte a un valor de tipo Long.
CSng() Convierte a un valor de tipo Single.
CStr() Convierte a un valor de tipo String.
CVar() Convierte a un valor de tipo Variant.
Hex() Convierte a un valor hexadecimal (base 16).
Oct() Convierte a un valor octal (base 8).
Si intenta pasar valores no válidos a una función de conversión para el tipo
de datos de destino se producirá un error. Por ejemplo, si se intenta convertir un
tipo Long en un Integer, el tipo Long debe estar en el intervalo válido del tipo de
dato Integer.

5.9 Funciones de Fecha y Hora.- Las aplicaciones actuales necesitan manejar


valores de fecha y hora. Muchas aplicaciones se escriben para los negocios y con
propósitos científicos, donde el almacenamiento de fechas y horas es vital para el
éxito del proyecto. La siguiente tabla muestra tales funciones:
Función Descripción
Date Devuelve la fecha actual del sistema.
Sintaxis:
Date
Se use también la función Date para establecer la fecha del sistema.
DateAdd() La función DateAdd devuelve un valor de tipo Variant con una fecha a la que
se le ha agregado un intervalo de tiempo especificado.
Sintaxis:
DateAdd(intervalo, número, fecha)
Donde:
intervalo Expresión de cadena que contiene el intervalo de tiempo que se
desea agregar.
Número Expresión numérica con el número de intervalos que se desea
agregar. Puede ser positiva (para obtener fechas futuras) o negativa
(para fechas pasadas).
fecha Fecha a la que se agrega el valor anterior o el nombre de una
variable Variant con una fecha válida.
El argumento intervalo tiene los siguientes valores:
yyyy Año
q Trimestre
m Mes
y Día del año
d Día
w Día de la semana
ww Semana
h Hora
m Minuto
s Segundo
Se puede utilizar la función DateAdd para agregar o restar un intervalo de
tiempo especificado de una fecha. Por ejemplo, con DateAdd podría calcular
una fecha 30 días posterior al día de hoy o una hora a 45 minutos de la actual.
Si se desea agregar días a fech, se puede utilizar Día del año (“y”), Día (“d”) o
Día de la semana (“w”).
La función DateAdd nunca devuelve una fecha no válida. En el ejemplo
siguiente se agrega un mes al 31 de enero:

Ing. Hermas Herrera Callejas Página : 85 de


19
DateAdd(“m”, 1, “31-Ene-95”)
En este caso, DateAdd devuelve 28-Feb-95 y no 31 -Feb-95. Si fecha es 31-
Jan-96, devolverá 29-Feb-96, ya que 1996 es un año bisiesto. Si la fecha
calculada va a resultar inferior al año 100, se produce un error. Si número no
es un valor de tipo Long, se redondeará al número entero más cercano antes
de ser utilizado.
DateDiff() Esta función devuelve el número de intervalos de tiempo entre dos fechas
especificadas.
Sintaxis:
DateDiff(intervalo, fecha1, fecha2[, 1erdiasemana[, 1rasemanaaño]])
Donde:
Intervalo Expresión de cadena, como se describe en la tabla valores, con el
intervalo de tiempo usado para calcular la diferencia entre fecha1
y fecha2.
Fecha1, fecha2 Las dos fechas a utilizar en el cálculo.
1erdiasemana Una constante, como se describe en valores, que especifica
el primer día de la semana. Si no se especifica, se asume
que es el domingo.
1rasemanaaño Una constante, como se describe en la tabla Valores, que
especifica la primera semana del año. Si no se especifica, se
asume que es aquella en la que se encuentre el 1 de enero.
El argumento intervalo toma los valores siguientes:
intervalo intervalo de tiempo
yyyy. Año
q Trimestre
m Mes
y Día del año
d Día
w Día de la semana
ww Semana
h Hora
m Minuto
s Segundo
El argumento 1erdiasemana se describe en la siguiente tabla Valores:
Constante Valor Descripción
UseSystem 0 Utiliza el valor de la aplicación si hay, caso contrario el
APINLS.
Sunday 1 Domingo (predeterminado)
Monday 2 Lunes
Tuesday 3 Martes
Wednesday 4 Miércoles
Thursday 5 Jueves
Friday 6 Viernes
Saturday 7 Sábado
Se puede utilizar la función DateDiff para determinar el número de intervalos
especificados que existen entre dos fechas.
Por ejemplo, con DataDiff se podría calcular el número de días entre dos
fechas o el número de semanas entre hoy y el final del año. Si se desea saber
el número de días entre fecha1 y fecha2, se puede utilizar Día del año (“y” o
Día (“d”).
Cuando intervalo es Día de la semana (“w”, DateDiff devuelve el número de

Ing. Hermas Herrera Callejas Página : 86 de


19
semanas entre las dos fechas. Si fecha1 es un lunes, DateDiff contará el
número de lunes hasta fecha2. En la cuenta incluirá fecha2, pero no fecha1.
Sin embargo, si intervalo es semana (“ww”, la función DateDiff devolverá el
número de semanas del calendario entre las dos fechas, en este caso contará
el número de domingos entre fecha 1 y fecha2. DateDiff contará fecha2 si cae
domingo, pero no fecha1, aunque caiga en domingo. Si fecha1 se refiere a un
momento posterior en el tiempo a fecha2, la función DateDiff devolverá un
numero negativo. El argumento 1erdiasemana afecta a los cálculos que
utilizan “w” y “ww” como símbolos de intervalo.
Si fecha es un literal de fecha (una fecha entre signos de número (#)), el año,
si se específica, pasará a ser una parte permanente de la fecha. Sin embargo,
si fecha se inicia entre comillas dobles (“”) y se omite el año, se insertará el año
en curso en el código cada vez que se evalúe la expresión fecha. Así es
posible escribir código que pueda usarse en años distintos.
Day() La función Day devuelve un número entero entre 1 y 31, inclusive, que
representa el día del mes.
Sintaxis:
Day(fecha)
El argumento con nombre fecha se limita a una fecha o números y cadenas,
(en cualquier combinación), que pueda representar una fecha. Si fecha
contiene datos no válidos, se devuelve Null.
Month() La función Month devuelve un número entero entre 1 y 12, inclusive, que
representa el mes del año.
Sintaxis:
Month(fecha)
El argumento con nombre fecha se limita a una fecha o números y cadenas (en
cualquier combinación), que puedan representar una fecha, si fecha contiene
datos no válidos, se devuelve Null.
Now La función Now devuelve la fecha y la hora actuales de acuerdo a la
configuración de la fecha y la hora del sistema de la PC en uso.
Sintaxis:
Now
WeekDay() La función WeekDay devuelve un número entero que representa el día de la
semana.
Sintaxis:
WeekDay(fecha, [díasemana])
Donde:
fecha Numérico o expresión de cadena, en cualquier combinación, que
puede representar una fecha. Si fecha contiene Null, se devuelve
Null.
díasemana Una constante que especifica el primer día de la semana, tal y
como se describe en la configuración. Si se omite, se supone el
valor vbSunday.
Year() Esta función devuelve un número entero que representa el año.
Sintaxis:
Year(fecha)
El argumento fecha es cualquier expresión numérica o expresión de cadena
(en cualquier combinación) que pueda representar una fecha. Si fecha
contiene datos no válidos, se devuelve Null.

5.10 Estructuras de Control.- Las estructuras de control permiten tomar

Ing. Hermas Herrera Callejas Página : 87 de


19
decisiones y realizar un proceso repetidas veces. Visual Basic proporciona dos
tipos de estructuras de control que permiten controlar el flujo de ejecución del
programa:
 Estructuras de decisión
 Estructuras de bucle

5.10.1 Estructuras de Decisión.- Una aplicación debe ser capaz de comprobar


condiciones y, dependiendo de los resultados, realizar diferentes acciones. Entre
las estructuras de decisión que proporciona Visual Basic se incluyen las
siguientes:
 lf...Then
 lf...Then...Else
 Select Case

5.10.1.1 If...Then.- La estructura If...Then comprueba una condición específica y,


si es verdadera, ejecuta una o más sentencias. Puede utilizar la sintaxis de una
línea o de varias líneas:
• If condición Then Sentencias
• If condición Then
Sentencias
End If
La condición generalmente es una expresión booleana, pero puede ser
cualquier expresión que dé como resultado un valor numérico. Visual Basic
interpreta un valor numérico cero como False y cualquier valor numérico distinto
de cero como True. Si la condición es True (verdadera), se ejecutarán todas las
sentencias que siguen a la palabra clave Then y si la condición es False (falsa), se
ejecutarán las sentencias que están a continuación de la estructura. Véase los
siguientes ejemplos:
If Horas > 24 Then Horas = Horas - 24
Observar que la sintaxis de una línea no utiliza la sentencia End lf. Si se
desea ejecutar más de una sentencia utilizar la sintaxis de varias líneas
If...Then...End If:
If KeyAscii = 13 Then
GradosFahr = Val(Grados_C.Text)*9/5 + 32
Grados_F.Text = Format$(GradosFahr)
End If

5.10.1.2 If...Then…Else.- Esta estructura evalúa la condición y si es True


(verdadera), ejecuta el primer bloque de sentencias y luego salta a las sentencias
que hay después de End If. Si la condición es False (falsa), ejecuta el segundo
bloque de sentencias, es decir, las que hay a continuación de la palabra clave
Else.
If Condición Then
[Bloque de sentencias 1]
Else
[Bloque de sentencias 2]
End If
Veamos un ejemplo:
Function Factorial (N As Integer) As Long

Ing. Hermas Herrera Callejas Página : 88 de


19
If N = 0 Then
Factorial = 1
Else
Factorial = N*Factorial(N - 1)
End If
End Function
Otra variación de la estructura If...Then...Else usa varias condiciones con la
palabra clave Elseif:
If Condición1 Then
[Bloque de sentencias 1]
[ElseIf Condición2 Then]
[Bloque de sentencias2]]...
[Else]
[Bloque de sentencias n]
End If
Se puede colocar cualquier número de cláusulas ElseIf. Las condiciones se
evalúan desde arriba. Si la primera condición es False, Visual Basic procede a
evaluar la segunda condición y así sucesivamente, hasta encontrar una condición
True. Cuando encuentra una condición True, Visual Basic ejecuta el bloque de
sentencias correspondiente y después pasa a ejecutar las sentencias que siguen a
End lf.
Opcionalmente, puede incluir un bloque de sentencias Else, que Visual Basic
ejecutará si ninguna de las condiciones es True.
Veamos un ejemplo:
Sub Base_Click (Index As lnteger)
If Index = 0 Then
txtBase.Text = Format$(NúmeroActual)
ElseIf Index = 1 Then
txtBase.Text = Oct$(NúmeroActual)
EIse
txtBase.Text = Hex$(NúmeroActual)
End If
End Sub

5.10.1.3 Select Case.- Select Case ofrece posibilidades similares a la estructura


If...Then...Else, pero hace que el código sea más legible cuando hay varias
opciones. La estructura Select Case comprueba una única expresión, que se
evalúa una sola vez al principio de la estructura. El resultado de esta
comprobación se compara con los valores de cada case y si coincide con uno de
ellos, se ejecuta el bloque de sentencias asociado a ese Case.
Select Case expresión_prueba
[Case lista_expresiones1
[bloque de sentencias 1]]
[Case Iista_expresiones 2
[bloque de sentencias 2]

[Case Else
[bloque de sentencias n]]
End Select

Ing. Hermas Herrera Callejas Página : 89 de


19
Cada lista_expresiones es una lista de uno o más valores. Si hay más de un
valor en una lista, se separan los valores con comas. Si más de un Case coincide
con la expresión de prueba, sólo se ejecutará el bloque de sentencias asociado
con la primera coincidencia. Visual Basic ejecutará las sentencias de la cláusula
opcional Case Else si ningún valor de la lista de expresiones coincide con la
expresión de prueba.
Veamos un ejemplo:
Select Case Index
Case 0
Botón(0).Visible = True
Case 1
Botón(1).Visible = True
Case 2
Botón(2).Visible = True
Case 3
Botón(3).Visible = True
Case 4
Botón(4).Visible = True
Case 5
Botón(5).Visible = True
Case Else
Exit Sub
End Select

5.10.2 Estructuras de Bucle.- Las estructuras de bucle permiten repetir la


ejecución de una o más líneas de código mientras una condición sea verdadera o
hasta que una condición sea verdadera. Visual Basic dispone de las siguientes
estructuras de bucle:
 Do...Loop
 For...Next
 For Each...Next

5.10.2.1 Do...Loop.- Se utiliza el bucle Do...Loop para ejecutar un bloque de


código un número indefinido de veces. Hay algunas variantes en la sentencia
Do...Loop pero cada uno evalúa una condición para determinar si continúa la
ejecución de un bloque de sentencias.

a) Do while...Loop.- Se utiliza el bucle Do While…Loop para repetir la ejecución


de un bloque de sentencias mientras una condición sea True (verdadera) o dicho
de otra forma hasta que la condición sea False (falsa).
Sintaxis:
Do While condición
sentencias
Loop
Cuando Visual Basic ejecuta este bucle Do, primero evalúa la condición. Si
condición es False, se salta todas las sentencias; si es True, ejecuta las
sentencias hasta la sentencia Loop, vuelve a Do While y evalúa la condición otra
vez. Por tanto, el bucle se puede ejecutar cualquier número de veces, siempre y
cuando la condición sea verdadera. Nunca se ejecutarán las sentencias si la
condición es False inicialmente.

Ing. Hermas Herrera Callejas Página : 90 de


19
El siguiente procedimiento mostrará el cuadrado de los números enteros
menores o iguales que 10 cuando el usuario haga clic sobre el formulario:
Private Sub Form_Click()
Dim I, Cuadrado As Integer
I=1
Do While I<= 10
Cuadrado = I*I
I=I+1
Print Cuadrado
Loop
End Sub

b) Do...Loop while.- La variante Do...Loop While ejecuta las sentencias primero y


prueba la condición después de cada ejecución. Esta variante garantiza al menos
una ejecución de las sentencias.
Sintaxis:
Do
Sentencias
Loop While condición
Hay dos variantes análogas a las dos anteriores, excepto en que repiten el
bucle siempre y cuando la condición sea False en vez de True.
c) Ejecuta el bucle cero o más veces
Do Until condición
sentencias
Loop

d) Ejecuta el bucle al menos una vez


Do
sentencias
Loop Until condición
Este siguiente procedimiento muestra el mismo resultado que el anterior:
Private Sub Form_Click()
Dim I, Cuadrado As Integer
I=1
Do Until 1 > 10
Cuadrado = I*I
I=I+1
Print Cuadrado
Loop
End Sub

5.10.2.2 For...Next.- Los bucles Do se utilizan cuando no se sabe cuántas veces


se necesitará ejecutar las sentencias del bucle. Sin embargo, cuando se sabe
cuántas veces se van a ejecutar las sentencias, es mejor utilizar el bucle
For...Next. Sintaxis:
For contador = inicio to fin [Step incremento]
sentencias
Next [contador]
Los argumentos contador, inicio, fin e incremento son todos numéricos.
La variable contador incrementa o reduce su valor en cada repetición del

Ing. Hermas Herrera Callejas Página : 91 de


19
bucle. El argumento incremento puede ser positivo o negativo. Si incremento es
positivo inicio debe ser menor o igual que fin o no se ejecutarán las sentencias del
bucle. Si incremento es negativo, inicio debe ser mayor o igual que fin para que se
ejecute el cuerpo del bucle. Si no se establece Step, el valor predeterminado de
incremento es 1.
Al ejecutar el bucle For...Next, Visual Basic:
1. Asigna el valor de inicio a contador.
2. Si incremento es positivo, comprueba si contador es mayor que fin. Si lo es,
Visual Basic salta el cuerpo del bucle y continúa en la línea que sigue a Next. En
caso contrario, se ejecutan las sentencias que siguen a For hasta la sentencia
Next.
3. Incrementa contador en 1 si no se ha especificado incremento; si se especificó
incremento, contador se incrementa con el valor de incremento.
4. Repite los pasos 2 y 3.
El procedimiento siguiente mostrará la suma de los números 1 a 100 cuando
se haga clic sobre el formulario:
Private Sub Form_Click()
Dim I, Suma As lnteger
For I = 1 To 100
Suma = Suma + 1
Next I
Print Suma
End Sub
El procedimiento que sigue mostrará la suma de los números pares
contenidos entre 2 y 100, incluidos ambos cuando se haga clic en el formulario:
Private Sub Form_Click()
Dim I, Suma As Integer
For I = 2 To 100 Step 2
Suma = Suma + I
Next I
Print Suma
End Sub
Si el valor incremento es negativo, inicio debe ser mayor o igual que fin para
que se ejecute el cuerpo del bucle. El siguiente procedimiento muestra el mismo
resultado que el anterior:
Private Sub Form_Click()
Dim I, Suma As lnteger
For I = 100 To 2 Step -2
Suma = Suma + I
Next I
Print Suma
End Sub

5.10.2.3 For Each...Next.- El bucle For Each…Next repite un bloque de


sentencias por cada elemento de una colección de objetos o de una matriz. Es
especialmente útil cuando no se sabe cuántos elementos hay en una colección.
Sintaxis:
For Each elemento In grupo
sentencias
Next elemento
El siguiente procedimiento limpia todos los cuadros de texto del formulario:
Sub LimpiarCuadrosdeTexto()

Ing. Hermas Herrera Callejas Página : 92 de


19
Dim control
For Each control In Forml.Controls
If Type of control is TextBox Then
control.Text = “ ”
End If
Next control
End Sub
Se debe considerar las restricciones siguientes cuando se utiliza For
Each...Next:
 Para las colecciones, elemento sólo puede ser una variable Variant, una
variable Object genérica o un objeto mostrado en el Examinador de objetos.
 Para las matrices, elemento sólo puede ser una variable Variant.
 No se puede utilizar For Each...Next con una matriz de tipos definidos por el
usuario porque un Variant no puede contener un tipo definido por el usuario.

5.10.3 Estructuras de Control Anidadas.- Si una estructura de control está


dentro de otra estructura de control (como un bloque If...Then dentro de un bucle
For...Next), entonces se dice que dicha estructura de control está anidada. Se
pueden anidar los controles en Visual Basic en tantos niveles como se desee. Es
una práctica común crear estructuras de decisión anidadas y estructuras de bucle
más legibles sangrando el cuerpo de la estructura de decisión o de bucle.

5.10.4 Salida de una Estructura de Control.- Para salir directamente de un


bucle sin realizar más iteraciones se utiliza la sentencia Exit. Si se desea salir de
un bucle For se utiliza la sentencia Exit For; en cambio, si se desea salir de un
bucle Do se utiliza la sentencia Exit Do.
For contador = inicio To fin [Step incremento]
[bloque de sentencias]
[Exit For]
[bloque de sentencias]
Next [contador]
Do [{While/Until} condición]
[bloque de sentencias]
[Exit Do]
[bloque de sentencias]
Loop
Do
[bloque de sentencias]
[Exit Do]
[bloque de sentencias]
Loop [{While/Untíl} condición]
Cuando se utiliza la instrucción Exit para salir de un bucle, el valor de la
variable contador difiere, dependiendo de cómo haya salido del bucle.
 Cuando termina un bucle, la variable contador contiene el valor del límite
superior más el incremento.
 Cuando sale de un bucle prematuramente, la variable contador conserva su
valor según las reglas usuales del alcance.
 Cuando sale antes del final de una colección, la variable contador contiene
Nothing si se trata de un tipo de dato Object y Empty si es un tipo de dato
Variant.

Ing. Hermas Herrera Callejas Página : 93 de


19
5.11 Procedimientos y Funciones.- La base de una aplicación en Visual Basic
la forman sus procedimientos conducidos por sucesos. Un procedimiento
conducido por un suceso es el código que es invocado cuando un objeto reconoce
que ha ocurrido un determinado suceso. Por ejemplo, cuando se hace clic en el
primer botón de comando de un programa se ejecuta el procedimiento de suceso
Commandl _Click asociado a este botón.
Cuando varios procedimientos conducidos por sucesos necesitan ejecutar
una misma rutina, la mejor forma de proceder es colocar el código de esta rutina
en un procedimiento general que será invocado desde cada uno de estos
procedimientos conducidos por sucesos. De esta manera se evita duplicar código.
Un procedimiento general debe ser conciso y debe ejecutar una tarea única. De
esta manera, el código del programa será estructurado y fácil de mantener. Un
procedimiento general puede escribirse como procedimiento Sub o como
procedimiento Function.

5.11.1 Creación de un Procedimiento General.- Para crear un procedimiento


general, primero se abre la ventana de código correspondiente al formulario
o al módulo donde se quiere definir el procedimiento y a continuación se
ejecuta el comando Agregar procedimiento del menú Herramientas. Visual
Basic muestra el cuadro de diálogo Agregar procedimiento:
En este cuadro de diálogo se debe ingresar un nombre y definir el tipo y
alcance que tendrá el nuevo procedimiento. Finalmente, hacer clic en Aceptar.
La ventana de código debe tener un aspecto similar al
siguiente:

Entre Public Sub y End Sub se digita el cuerpo del


procedimiento.

Ing. Hermas Herrera Callejas Página : 94 de


19
5.11.2 Edición de un Procedimiento.- Para editar un procedimiento general
existente, en la ventana de código, se debe seleccionar (general) en el
cuadro de lista objetos y a continuación, seleccionar el procedimiento del
cuadro de lista Procedimientos.

5.11.3 Procedimientos Function.- Un procedimiento Function es un grupo de


sentencias localizadas entre las sentencias Function y End Function. Este tipo de
procedimiento devuelve un valor y el procedimiento que le llama deberá hacer algo
con ese valor, como asignarlo a una variable o control. Sintaxis:
[Static][Private]Function nombre ([Argumentos])[As tipo]
[sentencias]
[nombre = expresión]
[Exit Function]
[sentencias]
[nombre = expresión]
End Function
Donde:
Nombre: Es el nombre de la función
Argumentos Lista de variables utilizadas por la función.
As tipo En esta cláusula se especifica el tipo de valor que devuelve la función
(lnteger, Long, Single, Double, Currency, String o Variant).
Expresión Define el valor devuelto por la función. Este valor es almacenado
en el propio nombre de la función, que actúa como variable dentro
del cuerpo de la misma.
Sentencias Bloque de instrucciones que especifican la tarea que debe llevar a
cabo la función.
Exit Function Permite salir de una función antes de que ésta finalice. Al salir de la
función, la ejecución del programa retorna a la sentencia
inmediatamente a continuación de la que efectuó la llamada.
3.11.3.1 Llamada a una Función.- Para llamar a una función desde un
procedimiento de suceso utilice esta sintaxis:
variable = nombre([argumentos])
argumentos.- Lista de variables separadas por comas. El número de variables
debe ser igual al número argumentos de la función. Los tipos de las
variables deben coincidir con los tipos de la función.
En cada llamada a una función hay que escribir los paréntesis, aunque ésta
no tenga argumentos.
El siguiente procedimiento llama a la función Factorial que devuelve, como
resultado, el factorial de un número ingresado en un cuadro de texto.
Private Sub cmdCalcular_Click()
Número = Val(txtN.Text)
txtFactorial.Text = Factorial(Número) ‘Llama a la función Factorial y el valor devuelto es
asignado a la propiedad Text del cuadro de texto
txtFactorial.
End Sub
Private Function Factorial(N) As Long
Factorial = 1
Do While N > 0

Ing. Hermas Herrera Callejas Página : 95 de


19
Factorial = Factorial * N
N=N-1
Loop
End Function

5.11.4 Procedimientos Sub.- A diferencia de un procedimiento Function, los


procedimientos Sub no devuelven un valor. La sintaxis que define un
procedimiento Sub es la siguiente:
[Static][Private] Sub nombre([argumentos])
[sentencias]
[Exit Sub]
[sentencias1]
End Sub
La explicación es análoga a la dada para los procedimientos Function.
Un procedimiento Sub puede ser llamado de alguna de las dos formas
siguientes:
Call nombre [{argumentos}] ó
nombre [argumentos]
A diferencia de una función, un procedimiento no se puede utilizar en una
expresión.
El siguiente procedimiento Sub limpia todos los cuadros de texto de un
formulario.
Sub LimpiarCuadrosdeTexto()
Dim control
For Each control In Form1.Controls
If Type of control is TextBox Then
control.Text = “ “
End If
Next control
End Sub
La llamada a este procedimiento puede ser de cualquiera de las dos formas
siguientes:
LimpiarCuadrosdeTexto o
Call LimpiarCuadrosdeTexto
5.11.5 Argumentos por Referencia y por Valor.- Visual Basic permite pasar los
argumentos de dos formas: por referencia y por valor. Cuando un argumento se
pasa por referencia, cualquier cambio de valor que sufra el argumento en el
cuerpo de la función o del procedimiento Sub también se produce en el argumento
correspondiente de la llamada a la función o al procedimiento Sub. Para que el
valor de un argumento no sea cambiado por la función o por el procedimiento Sub
es necesario pasarlo por valor. Para ello, se coloca el argumento entre paréntesis
en la llamada. Por ejemplo:
Convertir(Cent), Fahr
Llama al procedimiento Convertir; el argumento Cent es pasado por valor. Si
el procedimiento cambia ese valor, el cambio afecta sólo a una copia de Cent y no
a la propia variable Cent.

Ing. Hermas Herrera Callejas Página : 96 de


19
Otro modo de especificar que un argumento es pasado por valor es
anteponiendo la palabra ByVaI a la declaración del argumento en la cabecera del
procedimiento (Sub o Function).
Sub Convertir (ByVal Cent As lnteger, Fahr As Long)

5.11.6 Funciones Recursivas.- Se dice que una función es recursiva si se llama


a sí misma, desde el interior del código que la compone. La recursividad es una
alternativa a la repetición o iteración en situaciones en las que la recursividad es
una solución simple y natural a un problema que en caso contrario sería difícil de
resolver. La recursividad es una herramienta potente y útil en la resolución de
problemas que tengan naturaleza recursiva y por ende, en la programación.
La siguiente función calcula el máximo común divisor de dos números
enteros de manera iterativa.
Public Function MCD(A, B) As Long
Dim Temporal As Long
Do While A Mod B <> 0
Temporal = A
A=B
B = Temporal Mod B
Loop
MCD = B
End Function
Una solución alternativa es una función recursiva, que se llame tantas veces
como sea necesario, pasándose en cada llamada los valores de A y B. Cuando el
último resto es cero (A Mod B = 0), el máximo común divisor es el último divisor
(en ese caso, B).
Function MCD(A, B) As Long
If A Mod B = 0 Then
MCD = B
Else
MCD = MCD(B, A Mod B)
End If
End Function

5.12 Arrays.- Un array es una estructura de datos en la que se almacena una


serie de elementos del mismo tipo (por ejemplo, los salarios de los empleados de
una empresa). Dicho de otro modo, un array es una lista con un número finito de
n elementos del mismo tipo que se caracteriza porque almacena los elementos del
array en posiciones de memoria continua y tiene un único nombre de variable (por
ejemplo Salarios) que representa a todos los elementos y éstos a su vez se
diferencian por un índice o subíndice.
Visual Basic permite definir arrays de variables de una o más dimensiones y
de cualquier tipo de datos (tipos fundamentales y tipos definidos por el usuario) e
introduce una nueva clase de arrays, arrays de controles, necesarios para escribir
menús, para crear nuevos controles en tiempo de ejecución o para hacer que una
serie de controles tengan asociado un mismo procedimiento para cada tipo de
suceso.

Ing. Hermas Herrera Callejas Página : 97 de


19
.
5.12.1 Arrays unidimensionales.- Un array de una dimensión (unidimensional)
es un tipo de datos estructurado compuesto de un número fijo de elementos. Los
elementos del array se almacenan en posiciones contiguas de memoria, a cada
una de las cuales se puede acceder directamente. Supongamos que se desea
almacenar las edades de 40 personas. Para almacenar estas edades se necesita
reservar 40 posiciones en memoria, dar un nombre al array y a cada una de las 40
personas asignarles su edad correspondiente, es decir, dar el índice o subíndice
del array.
Edad[0] 24
Edad[1] 34
Edad[2] 28
... ...
Edad[39] 34
Nombre del array: Edad
Subíndice [1], [2]...
Contenido Edad[1] = 34

5.12.2 Declaración de un Array.- Un array debe declararse con la sentencia


Dim seguida por el nombre del array y, entre paréntesis, el valor máximo del índice
que emplearemos para acceder a cada elemento.
Veamos algunos ejemplos:
Dim Nombres(24) As String
El ejemplo anterior declara un array de una dimensión, Nombres, con
veinticinco elementos, Nombres(0), Nombres(1),...,Nombres(24), cada uno de los
cuales permite almacenar una cadena de caracteres.
Global Edades(1 to 50) As Integer
El ejemplo anterior declara un array unidimensional, Edades, con cincuenta
elementos, Edades(1),..., Edades(50), cada uno de los cuales permite almacenar
un número entero.

5.12.3 Arrays Bidimensionales.- Un array bidimensional es un array con dos


índices. Para localizar o almacenar un valor en el array se deben especificar dos
posiciones (dos subíndices), uno para la fila y otro para la columna.
0 1 2 3 4 5
0 A[0, 0] A[0, 1] A[0, 2] A[0, 5]
1 A[1, 0]
2 A[2, 3]
3 A[3, 3]
4 A[4, 0] A[5, 5]
Array de dos dimensiones A con 5 filas y 6 columnas.
Ejemplos:
Dim Alumnos(3, 1 To 6) As Integer
El ejemplo anterior declara un array de dos dimensiones, Alumnos, con 4x6
elementos, Alumnos(0,1),...Alumnos(3,6), de tipo entero.
Static Sueldos(1 lo 5, 1 lo 5) As double
Este ejemplo declara un array de dos dimensiones, Sueldos, con 5x5

Ing. Hermas Herrera Callejas Página : 98 de


19
elementos: Sueldos(1,1)... Sueldos(5,5).
Cuando se declara una array, se debe tener en cuenta las siguientes
consideraciones:
 Para declarar un array global, se lo debe hacer en la sección de declaraciones
de un módulo utilizando la sentencia Global.
 Para declarar un array a nivel de módulo o de formulario, se lo debe hacer en
la sección de declaraciones del módulo o del formulario utilizando la sentencia
Dim.
 Para declarar un array local a un procedimiento, utilizar la sentencia Static
dentro del propio procedimiento (también se puede utilizar la sentencia Dim si
se declara el procedimiento Static).

5.12.4 Arrays Dinámicos.- Los array declarados anteriormente son arrays


estáticos (con un número fijo de elementos). Cuando no se sabe el número
de elementos que tendrá un array se puede utilizar un array dinámico. Para
especificar que un array va a ser dinámico se deja la lista de dimensiones
vacía. En el programa, se asigna el número de elementos del array con la
sentencia ReDim. Por ejemplo, si se declara el array Notas,
Dim Notas() As Integer
Más adelante, un procedimiento puede asignar espacio para el array, como se
indica a continuación:
Sub Promedio()
...
ReDim Notas(F,C)
...
EnSub
Cada vez que la sentencia ReDim es ejecutada, todos los valores
almacenados en el array se pierden. Para que los valores del array se conserven,
se debe utilizar la palabra reservada Preserve. Por ejemplo, la sentencia
ReDim Preserve A(UBound(A) + 10)
Incrementa el tamaño del array A en diez elementos más y los valores quedan
intactos. La función UBound permite obtener el índice superior del array. Esta
función toma como parámetro el nombre de la matriz.
Para aumentar o disminuir el tamaño actual de un array multidimensional sólo
se puede cambiar el límite superior de la última dimensión. Cualquier otro intento
produce un error. Si redimensionamos un array a una dimensión inferior a la
actual, los valores cuyos índices han quedado fuera de la nueva definición se
pierden sin remisión.

5.12.5 Arrays de Controles.- Un array de controles es un conjunto de controles


del mismo tipo y con el mismo nombre. La utilidad de un array de controles se
hace evidente cuando queremos manipular las propiedades de un conjunto de
controles. Por ejemplo, en lugar de utilizar ocho cuadros de texto de diferentes
nombres, puede crear un array de ocho cuadros de texto en el formulario,
distinguir cada elemento mediante un subíndice y modificar una de sus
propiedades.

Ing. Hermas Herrera Callejas Página : 99 de


19
Para crear un array de controles es suficiente asignar el mismo nombre a dos
o más controles (propiedad Name) durante el diseño de una aplicación. Tan pronto
como se asigna a un control un nombre ya asignado a otro control del mismo tipo,
Visual Basic envía el siguiente mensaje preguntando si se desea crear un array de
controles:

Hacer clic en Si y Visual Basic creará un array de controles, asignando por


defecto los índices 0,1,... a cada uno de los elementos del array. Esta operación
sólo puede realizarse durante el diseño.
Los elementos de un array de controles comparten los mismos
procedimientos conducidos por sucesos. El siguiente procedimiento inhabilita los
cuadros de texto de un formulario:
Sub InhabilitarCuadrosdeTexto()
For I = 0 to 7
txtCampo(i).Enabled = False
Next I
EndSub
Cualquier control del array reconoce un suceso Visual Basic pasa el índice
como argumento extra. Este argumento siempre va antes de cualquier otro
argumento. Por ejemplo,
Private Sub Textl _KeyPress(Index As Integer, keyAscii As Integer)
End Sub
El valor de Index puede utilizarse dentro del procedimiento para determinar
qué control ha recibido el suceso. Un elemento del array de controles puede
referenciarse escribiendo NombreArray(Index), nomenclatura que puede utilizarse
en cualquier lugar donde pueda especificarse el nombre del control.

Ing. Hermas Herrera Callejas Página : 100 de


19
CAPITULO 6 – VISUAL BASIC – USO DE ARCHIVOS Y BASES DE
DATOS
6.1 Archivos de Datos.- Visual Basic permite manejar tres tipos de archivos:
secuenciales, aleatorios y binarios. Los secuenciales son archivos ASCII (texto)
que almacenan registros de cualquier longitud. Los registros se almacenan como
simples líneas de texto terminadas por una secuencia retorno de carro-avance de
línea CR-LF. Los registros se organizan uno tras otro, de tal forma que en un
archivo secuencial se lee el primer registro y se continúa con el siguiente hasta
llegar al final. Se puede utilizar cualquier procesador de texto para visualizar o
modificar un archivo secuencial.
Los archivos aleatorios están conformados por un conjunto de registros de
la misma longitud, los cuales pueden procesarse en cualquier orden. Cada registro
está conformado por un único número identificador y puede ser leído, escrito o
actualizado.
Los archivos binarios ofrecen la posibilidad de tratar cualquier archivo como
una secuencia numerada de caracteres.

6.1.1 Archivos Secuenciales.- Para trabajar con archivos secuenciales porimero


debemos abrir el archivo, luego procesar el mismo y alconcluir el proceso,
debemos cerrar el archivo.

Apertura de archivos secuenciales.- La orden Open abre un archivo secuencial


para lectura o escritura. Abrir un archivo significa declarar un archivo como tal y
reservar un canal de comunicación entre el usuario y la computadora.
Sintaxis:
Open nombrearchivo For Modo As [#]numarch
Donde:
nombrearchivo Indica la ruta y el nombre del archivo.
Modo Input, Output, Append.
Input abre un archivo para lectura; si el archivo no existe en el disco
duro, la operación Input produce un error en tiempo de
ejecución. La siguiente orden abre el archivo Data.dat que se
encuentra en la unidad C, carpeta Agenda: Open
“C:\Agenda\Data.dat” For Input As #1
Output abre un archivo nuevo para escritura, esta operación crea el
archivo en el disco duro; si en el disco duro ya existe un archivo
con el nombre del archivo nuevo, se pierde el contenido del
antiguo.
Append abre un archivo existente y permite escribir datos adicionales al
final del archivo; si el archivo no existe, Append lo crea. La
siguiente orden abre el archivo Proveedores.dat y permite
agregar registros al final del mismo: Open C:\Proveedores.dat”
For Append As #1
numarch Es un número de 1 a 511 que identifica al archivo cuando se vaya a
acceder, escribir y cerrar.
La apertura de un archivo en la forma descrita anteriormente es bastante
restrictiva puesto que no le permitiría al usuario seleccionar el disco, la carpeta ni

Ing. Hermas Herrera Callejas Página : 101 de


19
el nombre del archivo que desea abrir.
La manera más conveniente es utilizar el cuadro de diálogo común para abrir y
cerrar archivos. Supongamos que hemos incorporado el cuadro de diálogo común
en el formulario y que lo hemos denominado “Abrir”. Para indicar que se va a leer
un archivo seleccionado por el usuario mediante el cuadro de diálogo Abrir, la
codificación se modifica ligeramente. Cuando el usuario selecciona un archivo y
cierra el cuadro de diálogo, se utiliza la propiedad FileName para obtener la ruta y
el nombre del archivo seleccionado.
Open Abrir.FileName For lnput As #1

Lectura de archivos de texto.- Se puede utilizar la función INPUT para leer


caracteres de un archivo secuencial. En la siguiente orden se utiliza la función
Input para leer una determinada cantidad de bytes del archivo #1 y el contenido lo
mueve a la propiedad Text del cuadro Texto
Texto.Téxt = Input$(LOF(1), #1)
El primer parámetro de la función Input (bytes de lectura) se cubre con la
función LOF(1) que devuelve el tamaño del archivo abierto en bytes. LOF(Long Of
File, longitud de archivo).

Escritura de archivos de texto.- La orden Print se utiliza para escribir datos en


un archivo sin colocar delimitadores entre los elementos. Su sintaxis es:
Print #númarch, Expresión
Donde:
númanch es el número utilizado en la sentencia Open el cual identifica el archivo en el
que se escribirá.
Expresión es una cadena numérica o de caracteres que se va escribir en el archivo.
También podemos utilizar la orden Write para escribir los datos en el
archivo. Write inserta comas entre los elementos a medida que se escriben en el
archivo. Su sintaxis es:
Write #numarch, lista de expresiones
Donde:
Lista de expresiones son las expresiones que se desean almacenar separadas por
comas. Por ejemplo: Write #1, Textl.Text, Text2.Text escribe
el contenido de los cuadros de texto Text1, Text2 en el archivo.

Cierre de archivos secuenciales.- La orden Close se utiliza para cerrar un


archivo. Su sintaxis es:
Close #númarch
Donde, númarch es el número asignado en Open para identificar el archivo.
Close #1 cierra un archivo. Para cerrar más de un archivo se utiliza la orden Close,
solamente.

A continuación se desarrollará un programa que mostrará los pasos para crear,


guardar y abrir archivos secuenciales. Se creará un editor de texto que nos
permitirá realizar estas tres operaciones con un archivo de texto.
1. Hacer clic en el comando Nuevo proyecto del menú Archivo.
2. Guardar la aplicación con el nombre EditorTexto.vbp y el formulario con el

Ing. Hermas Herrera Callejas Página : 102 de


19
nombre EditorTexto.frm.
3. Seleccionar el comando Editor de menús del menú Herramientas.
4. Añadir las siguientes propiedades en el Editor de menús:
Caption Name Shortcut
&Archivo MenuArchivo
...&Nuevo OpciónNuevo Ctrl+N
...&Abrir... OpciónAbrir Ctrl+A
...&Guardar como... OpciónGuardarComo Ctrl+G
...&Salir OpciónSalir Ctrl+S
5. Hacer clic en el botón Aceptar del Editor de menús.
6. Seleccionar el comando Componentes del menú Proyecto. Visual Basic muestra
el cuadro de diálogo Componentes.
7. Habilitar la casilla Microsoft Common Dialog Control 6.0 y hacer clic en Aceptar.
8. En el cuadro de herramientas, hacer doble clic en el control CommonDialog.
9. En el cuadro de herramientas hacer doble clic en el control TextBox. En el
formulario redimensionar el tamaño de este control. El formulario debe tener el
siguiente aspecto:

Asociar un procedimiento al formulario y a cada una de las opciones del


menú Archivo.
Hacer doble clic sobre el formulario. En la ventana de código, digitar el
siguiente código:
Private Sub Form_Load()
‘Centra el formulario en la pantalla
Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
Texto.Font.Name = “Arial” ‘Fuente por defecto, Arial
Texto.Font.Size = 10 ‘Tamaño por defecto,10
End Sub
En el formulario, hacer clic en el menú Archivo, seleccionar la opción Nuevo
y agregar el siguiente código al suceso Click asociado a esta opción:
Public Sub OpciónNuevo_Click()
‘Título por defecto
Forml.Caption = “(Sin título)”
‘Borra el contenido del cuadro de texto
Texto.Text = “ “
End Sub

Ing. Hermas Herrera Callejas Página : 103 de


19
En el menú Archivo, hacer clic en la opción Abrir y agregar el siguiente
código al evento Click asociado a esta opción:
Private Sub OpciónAbrir_Click()
‘Abre el cuadro de diálogo Abrir
Abrir.ShowOpen
‘Muestra la ruta y el nombre del archivo en la barra de título del formulario
Forml.Caption = Abrir.FileName.
‘Borra el texto actual del control Texto
Texto.Text = “ “
Open Abrir.FileName For Input As #1
Texto.Text = Input$(LOF(1), #1)
Close #1
End Sub
En el menú Archivo del formulario, hacer clic en la opción Guardar como...y
agregar el siguiente código al suceso Click asociado a esta opción:
Private Sub OpciónGuardarComo_Click()
‘Muestra el cuadro de diálogo Guardar como
Abrir.ShowSave
Open Abrir.FileName For Output As #1
Print #1, Texto.Text
Close #1
End Sub
En el formulario, hacer clic en la opción Salir del menú Archivo y agregar el
siguiente código:
Pnivate Sub ArchivoSalir_Click()
End
End Sub
Ejecutar el programa y en el cuadro de texto digitar cualquier texto. Para
guardar permanentemente el texto digitado, seleccionar la opción Guardar
como...del menú Archivo. En el cuadro de diálogo Guardar como..., seleccionar
una carpeta y digitar un nombre para el archivo. Finalmente, hacer clic en
Guardar. Si posteriormente se desea recuperar la información que contiene el
texto, hacer clic en el comando Abrir del menú Archivo. En el cuadro de diálogo
Abrir, localizar y seleccionar el archivo. Por último hacer clic en Abrir.

6.1.2 Archivos Aleatorios.- Un archivo aleatorio conocido también como archivo

Ing. Hermas Herrera Callejas Página : 104 de


19
de acceso directo consiste en un conjunto de registros de la misma longitud, cada
uno de ellos identificado por un único número lo que permite un acceso directo al
registro.
Los pasos a seguir en la manipulación de archivos aleatorios son:
1. Definición del registro.
2. Apertura del archivo.
3. Proceso de los datos.
4. Cierre del archivo.

6.1.3 Creación de un Archivo Aleatorio.- Para crear un archivo aleatorio se


sigue estos pasos:
1. Crear un módulo y en ese módulo definir los campos del registro, indicando el
tipo de dato y longitud.
2. Declarar las variables tipo registro.
3. Abrir el archivo en modo de acceso aleatorio y especificar la longitud del
registro. (Sentencia Open)
4. Leer los datos del registro y grabar el contenido en el archivo (Sentencia Put).
5. Cerrar el archivo (Sentencia Close).

6.1.3.1 Definición del Registro.- Para definir un registro con la siguiente


estructura:
Campos Tipo Longitud
Apellidos String 50
Nombres String 50
Dirección String 50
Teléfono String 7
Edad Integer
Se utiliza el siguiente código:
Type Registro
Apellidos As String* 50
Nombres As String*50
Dirección As String*50
Teléfono As String*7
Edad As lnteger
End Type
Luego se declara la variable con la que se va a trabajar como de tipo
Registro. Por ejemplo:
Global Clientes As Registro
Declara la variable Clientes de tipo Registro.

6.1.3.2 Apertura del Archivo.- Para abrir un archivo aleatorio se utiliza la


sentencia Open. La sintaxis de la sentencia Open es la siguiente:
Open nombre-arch For Random As #n-archivo Len = longitud reg
Donde:
nombre-arch es la ruta y el nombre del archivo.
n-archivo es un número entre 1 - 255 para referenciar al archivo.

Ing. Hermas Herrera Callejas Página : 105 de


19
longitud reg es una expresión entera que indica la longitud de cada uno de los
registros.
Ejemplo:
Open “C:\Clientes.dat” For Random As #1 Len = Len(Amigos)
Si se abre un archivo aleatorio no existente, Open lo crea y si existe
simplemente lo abre.

6.1.3.3 Escritura en un Archivo Aleatorio.- Para escribir o grabar datos en un


archivo aleatorio se utiliza la sentencia Put. Tiene esta sintaxis:
Put [#]n-archivo, [n-registro], variable
Donde
n-archivo es el número con el que se abrió el archivo.
n-registro es el número del registro. Si se omite se toma el número siguiente al
utilizado en la última sentencia Put
variable contiene la información a escribir en el archivo.
Ejemplo: Put #1, I, Clientes

6.1.3.4 Lectura de un Archivo Aleatorio.- Para la lectura de un archivo aleatorio


se utiliza la sentencia Get. Tiene esta sintaxis:
Get [#]n-archivo, [n-registro], variable
Donde
n-archivo es el número con el que se abrió el archivo.
n-registro es el número de registro. Si se omite, se toma el número siguiente al
utilizado en la última sentencia Get.
variable Esta variable almacena los datos del registro leído del archivo.
Ejemplo:
Get #1, I, Clientes

6.1.3.5 La Sentencia Seek.- Esta sentencia establece la posición de la próxima


operación de lectura o escritura en un archivo abierto con Open. Tiene esta
sintaxis:
Seek [#]n-archivo, posición
Donde
n-archivo es el número con el que se abrió el archivo.
posición un número en el intervalo de 1 a 2.147.483.647 inclusive, que indica la
posición en la que se debe ejecutar la próxima operación de lectura o
escritura.
Por ejemplo, la sentencia
Get #1, i, Clientes
Es equivalente a las sentencias
Seek #1, i
Get #1, , Clientes

6.2 Creación de Módulos.- Para declarar la estructura de los registros que


tendrá el archivo a crearse es necesario crear un nuevo módulo. Para ello,
seleccionar el comando Agregar módulo del menú Proyecto. Visual Basic

Ing. Hermas Herrera Callejas Página : 106 de


19
muestra el cuadro de diálogo Agregar módulo:

Hacer clic en Abrir y un nuevo módulo se abrirá en su pantalla. En este


módulo digitar la estructura del archivo. Como ejemplo se muestra la estructura del
archivo ObrasLit.dat

Se desarrollará una aplicación que permita el mantenimiento de un archivo


aleatorio. El nombre del archivo será ObrasLit.dat y tendrá la siguiente estructura:
Campos Tipo Longitud
Código String 5
Título String 50
Autor String 50
Editorial String 50
Año_Publ lnteger
Stock_Actual lnteger
Stock_Mínimo lnteger
Precio Double
Sw String 1
Hacer clic en el comando Nuevo proyecto del menú Archivo. Añadir un
control ListBox, nueve controles Label, ocho controles TextBox (elementos de un
array de controles) y cinco controles CommandButton en el formulario. Asignar las
siguientes propiedades a cada uno de los controles:
Control Propiedad Valor
ListBox Name Código

Ing. Hermas Herrera Callejas Página : 107 de


19
Label Caption Seleccione código
Label Caption Código
Label Caption Título
Label Caption Autor
Label Caption Editorial
Label Caption Año Publicación.
Label Caption Stock Actual.
Label Caption Stock Mínimo.
Label Caption Precio
Array de controles Name Campo
TextBox Text ““
índex 0, 1, 2…7
CommandButton Name Guardar
Caption Guardar
Enabled False
CommandButton Name Modificar
Caption Modificar
Enabled False
CommandButton Name Eliminar
Caption Eliminar
Enabled False
CommandButton Name Ingresar
Caption Ingresar
CommandButton Name Salir
Caption Salir
La interfaz de usuario debe tener el siguiente aspecto:

Asociar un procedimiento a cada uno de los controles del formulario. Hacer


doble clic en el formulario (la ventana de código abre el procedimiento Form_Load)
y digitar el siguiente procedimiento:
Private Sub Form_Load()
‘Sitúa el formulario en el centro de la pantalla
Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
‘Abre el archivo ObrasLit.dat del disco C
Open “C:\ObrasLit.dat” For Random As #1 Len = Len(ObrasLit)
‘Llama al procedimiento LLenarLista
LLenarLista
End Sub
El procedimiento LLenarLista debe llenar el control ListBox con los códigos
de los registros. Para agregar el procedimiento LLenarLista al programa,
seleccionar el comando Agregar procedimiento del menú Herramientas. Visual
Basic muestra el cuadro de diálogo Agregar procedimiento:

Ing. Hermas Herrera Callejas Página : 108 de


19
Ingresar el nombre del procedimiento.

Seleccionar el tipo.
Definir el alcance del procedimiento.
Hacer clic en Aceptar y Visual Basic abrirá el procedimiento LlenarLista:
Public Sub LlenarLista()
End Sub
Entre Public Sub LLenarLista y End Sub digitar el siguiente código:
Dim numreg, i As Integer
numreg = LOF(1) \ Len(ObrasLit)
‘Las siguientes instrucciones llenan la lista con los códigos de los registros
If numreg <> 0 Then
Codigo.Clear
For i = 1 To LOF(1) \ Len(ObrasLit)
Get #1, i, ObrasLit
If ObrasLit.Sw = "1" Then Codigo.AddItem ObrasLit.Codigo
Next i
Else
Exit Sub
End If
Cuando se ejecute el programa, el control ListBox mostrará los códigos de
los registros:
Asociar un procedimiento al control ListBox accionado por el suceso Click.
Cada vez que el usuario haga clic sobre uno de los códigos que muestra este
control, los datos relacionados con el código deben aparecer en los cuadros de
texto

1. Hacer doble clic en el control ListBox. La ventana de código muestra el

Ing. Hermas Herrera Callejas Página : 109 de


19
procedimiento Código_Click.
2. Digitar el siguiente código:
Private Sub Codigo_Click()
Dim i As Integer
For i = 1 To LOF(1) \ Len(ObrasLit)
Get #1, i, ObrasLit
If ObrasLit.Codigo = Codigo.Text Then
Campos(0).Text = ObrasLit.Codigo
Campos(1).Text = ObrasLit.Titulo
Campos(2).Text = ObrasLit.Autor
Campos(3).Text = ObrasLit.Editorial
Campos(4).Text = ObrasLit.Año_Publ
Campos(5).Text = ObrasLit.Stock_Actual
Campos(6).Text = ObrasLit.Stock_Minimo
Campos(7).Text = ObrasLit.Precio
End If
Next i
Guardar.Enabled = False
Modificar.Enabled = False
Eliminar.Enabled = True
End Sub
Asociar un procedimiento al botón de comando Ingresar accionado por el
suceso Click. El procedimiento debe habilitar el botón guardar e inhabilitar los
botones Modificar y Eliminar; además, debe llamar al procedimiento
LimpiarCuadrosdeTexto.
1. Hacer doble clic en el botón de comando Ingresar. La ventana de código abre
el procedimiento Ingresar_Ctick.
2. Digitar el siguiente código:
Private Sub Ingresar_Click()
LimpiarCuadrosdeTexto
Guardar.Enabled = True
Modificar.Enabled = False
Eliminar.Enabled = False
End Sub
Asociar un procedimiento al botón de comando Guardar, accionado por el
suceso Click. El procedimiento debe transferir la información de los cuadros de
texto a los campos del archivo, guardar los nuevos datos en el archivo
ObrasLit.dat, volver a llenar la lista, llamar al procedimiento
LimpiarCuadrosdeTexto e inhabilitar el botón de comando Guardar
1. Hacer doble clic en el botón de comando Guardar. La ventana de código
muestra el procedimiento Guardar_Click.
2. Digitar el siguiente código:
Private Sub Guardar_Click()
'Ingresa los nuevos datos en el archivo ObrasLit.dat
ObrasLit.Codigo = Campos(0).Text
ObrasLit.Titulo = Campos(1).Text
ObrasLit.Autor = Campos(2).Text
ObrasLit.Editorial = Campos(3).Text
ObrasLit.Año_Publ = Campos(4).Text

Ing. Hermas Herrera Callejas Página : 110 de


19
ObrasLit.Stock_Actual = Campos(5).Text
ObrasLit.Stock_Minimo = Campos(6).Text
ObrasLit.Precio = Campos(7).Text
ObrasLit.Sw = 1
TotalRegistros = LOF(1) \ Len(ObrasLit)
Put #1, TotalRegistros + 1, ObrasLit
LLenarLista
LimpiarCuadrosdeTexto
Guardar.Enabled = False
End Sub
Asociar un procedimiento al botón de comando Modificar accionado por el
suceso Click. El procedimiento debe buscar el registro en disco, guardar los
cambios realizados en los campos de un registro e inhabilitar el botón de comando
Modificar.
1. Hacer doble clic en el botón de comando Modificar. La ventana de código
muestra el procedimiento Modificar_Click.
2. Digitar el siguiente código:
Private Sub Modificar_Click()
Dim i, posición As Integer
Dim encontrado As Boolean
For i = 1 To LOF(1) \ Len(ObrasLit)
Get #1, i, ObrasLit
If ObrasLit.Codigo = Codigo.Text Then
encontrado = True
posición = i
Exit For
End If
Next i
If encontrado Then
ObrasLit.Codigo = Campos(0).Text
ObrasLit.Titulo = Campos(1).Text
ObrasLit.Autor = Campos(2).Text
ObrasLit.Editorial = Campos(3).Text
ObrasLit.Año_Publ = Campos(4).Text
ObrasLit.Stock_Actual = Campos(5).Text
ObrasLit.Stock_Minimo = Campos(6).Text
ObrasLit.Precio = Campos(7).Text
Put #1, posición, ObrasLit
End If
Modificar.Enabled = False
End Sub
Asociar un procedimiento al botón de comando Eliminar accionado por el
suceso Click. Cuando el usuario seleccione un código en el control ListBox y haga
clic en el botón Eliminar, los datos relacionados con el código deben quedar
eliminados del archivo ObrasLit.dat, llamar a los procedimientos LLenarLista y
LimpiarCuadrosdeTexto e inhabilitar los botones de comando eliminar y modificar.
1. Hacer doble clic en el botón de comando Eliminar. La ventana de código
muestra el procedimiento Eliminar_Click.
2. Digitar el siguiente código:
Private Sub Eliminar_Click()

Ing. Hermas Herrera Callejas Página : 111 de


19
Dim i, posición As Integer
Dim encontrado As Boolean
encontrado = False
For i = 1 To LOF(1) \ Len(ObrasLit)
Get #1, i, ObrasLit
If ObrasLit.Codigo = Codigo.Text Then
encontrado = True
posición = i
Exit For
End If
Next i
If encontrado Then
Get #1, posición, ObrasLit
ObrasLit.Sw = 0
Put #1, posición, ObrasLit
End If
LLenarLista
LimpiarCuadrosdeTexto
Eliminar.Enabled = False
Modificar.Enabled = False
End Sub
Asociar un procedimiento al array de controles TextBox accionado por el
suceso Change. Cuando el usuario realice cualquier cambio en uno de los
controles que forman parte del array, este procedimiento se ejecutará y habilitará
el botón Modificar e inhabilitará los botones de comando Guardar y Eliminar.
1. Hacer doble clic en uno de los controles TextBox (array de controles). La
ventana de código abre el procedimiento Campos_Change.
2. Digitar el siguiente código:
Private Sub Campos_Change(Index As Integer)
Modificar.Enabled = Not Guardar.Enabled
Eliminar.Enabled = False
End Sub
Asociar otro procedimiento al array de controles TextBox accionado por el
suceso KeyPress. Cuando el usuario introduzca datos en uno de estos controles y
presione la tecla Enter, el enfoque debe pasar al siguiente control TextBox.
1. Hacer doble clic en uno de los controles TextBox. En la ventana de código,
desplegar el cuadro de lista Procedimientos y seleccionar el suceso KeyPress.
La ventana de código abre el procedimiento Campos_KeyPress.
2. Digitar el siguiente código:
Private Sub Campos_KeyPress(Index As Integer, KeyAscii As Integer)
If KeyAscii = 13 And Index < 7 Then Campos(Index + 1).SetFocus
End Sub
Agregar el procedimiento LimpiarCuadrosdeTexto al programa. El
procedimiento debe limpiar todos los cuadros de texto.
1. Hacer clic en el comando Agregar procedimiento del menú Herramientas.
2. En el cuadro de diálogo Agregar procedimiento, ingresar el nombre del
procedimiento (LimpiarCuadrosdeTexto), el tipo de procedimiento
(Procedimiento) y el alcance (Público).
3. Hacer clic en Aceptar. Visual Basic abre el procedimiento

Ing. Hermas Herrera Callejas Página : 112 de


19
LimpiarCuadrosdeTexto.
4. Digitar el siguiente código:
Public Sub LimpiarCuadrosDeTexto()
Dim i As Integer
'Limpia los cuadros de texto del formulario
For i = 0 To 7
Campos(i).Text = ""
Next i
Campos(0).SetFocus
End Sub
Asociar un procedimiento al botón de comando Salir accionado por el suceso
Click.
1. Hacer doble clic en el botón de comando Salir.
2. Digitar el siguiente código:
Private Sub Salir_Click()
'Cierra el archivo ObrasLit.dat
Close
'Finaliza la ejecución del programa
End
End Sub
Presionar la tecla F5 para ejecutar el programa. Hacer clic en uno de los
códigos que muestra el control ListBox y los cuadros de texto mostrarán los datos
relacionados con el código. Si se hace clic en el botón Eliminar, los datos serán
eliminados del archivo ObrasLit.dat. Realizar algunos cambios en los datos
mostrados y el botón Modificar se activará de manera automática. Hacer clic en el
botón Modificar para confirmar los cambios realizados. Para ingresar nuevos
datos, hacer clic en el botón Ingresar (observar que el botón Guardar ahora está
habilitado). Ingrese los nuevos datos y haga clic en el botón Guardar para
confirmar el ingreso de los nuevos datos.

6.3 El Control Data.- Este control facilita la obtención y despliegue de la


información contenida en bases de datos creadas con las aplicaciones Microsoft
Access, dBase, Excel, FoxPro, Lotus, Paradox y archivos de datos basados en
texto.
Una base de datos está constituida por una o más tablas. Una tabla es un
objeto que almacena los datos en registros (filas) y campos (columnas). Una tabla
es un conjunto de registros que contienen un tipo determinado de información. Por

Ing. Hermas Herrera Callejas Página : 113 de


19
ejemplo, una tabla podría contener los datos de nuestros clientes o pacientes, un
inventario de las piezas de almacén, los datos de pedidos, etc.

6.3.1 Creación de un Editor de Datos.- Se desarrollará una aplicación que


permita editar los datos de la tabla Clientes contenida en la base de datos NWIND.

Seguir estos pasos:


1. Hacer clic en el comando Nuevo proyecto del menú Archivo para crear una
nueva aplicación.
2. En el cuadro de herramientas, hacer doble clic en el control Data. El control
aparece en el centro del formulario. Redimensionar el tamaño de este control
tal como se observa en la siguiente ilustración. Observar que el control Data
contiene flechas con las cuales se podrá desplazar por los registro de la base
de datos. También contiene un rótulo (Data1) que se podrá utilizar para
describir la base de datos a la que se accederá utilizando este objeto.

Primer registro de la base de datos Ultimo registro de la base de


datos
Registro anterior Siguiente registro
3. Colocar diez controles Label y nueve controles TextBox en el formulario.
Asígneles las siguientes propiedades:

Ing. Hermas Herrera Callejas Página : 114 de


19
Control Propiedad Valor

Label Caption Clientes


Font Arial, Negrita, 14

Label Caption Id Cliente

Label Caption Nombre Compañía

Label Caption Nombre Contacto

Label Caption Dirección

Label Caption Ciudad

Label Caption Región

Label Caption País

Label Caption Teléfono

Label Caption Fax

TextBox Nombre IdCliente

TextBox Nombre NombreCompañia

TextBox Nombre NombreContacto

TextBox Nombre Dirección

TextBox Nombre Ciudad

TextBox Nombre Región

TextBox Nombre País

TextBox Nombre Teléfono

TextBox Nombre Fax


La interfaz debe tener el siguiente aspecto:

Ing. Hermas Herrera Callejas Página : 115 de


19
4. En el formulario, hacer clic en el control Data.
5. En la ventana Propiedades verificar que la propiedad Connect esté definida
como Access (valor por defecto).
6. En la ventana Propiedades, definir la propiedad DatabaseName como
C:\Archivos de programa\Microsoft Visual Studio\VB98\Nwind. Para ello, hacer
clic en el botón que aparece a la derecha de la propiedad DatabaseName.
Visual Basic nuestra el cuadro de diálogo DatabaseName. Seleccionar la base
de datos Nwind.
7. En la propiedad RecordSource, desplegar el cuadro de lista y de las tablas
contenidas en la base de datos, seleccionar la tabla Clientes.
8. En la propiedad Caption digitar “Haga clic para controlar el despliegue”.
9. En el formulario, hacer clic en el control IdCliente.
10. En la ventana Propiedades, seleccionar la propiedad DataSource, pulsar el
botón del cuadro de lista desplegable y seleccionar Data1.

Ing. Hermas Herrera Callejas Página : 116 de


19
11. En la propiedad DataField, pulsar el botón del cuadro de lista desplegable y
seleccionar IdCliente (el campo que desea mostrar de la lista).

La siguiente tabla muestra las propiedades asignadas a cada uno de los


controles TextBox:
Control Propiedad Valor
TextBox Nombre IdCliente
DataSource Datal
DataField IdCliente
TextBox Nombre NombreCompañia
DataSource Datal
DataField NombreCompañia
TextBox Nombre NombreContacto
DataSource Datal
DataField NombreContacto
TextBox Nombre Dirección
DataSource Datal
DataField Dirección
TextBox Nombre Ciudad
DataSource Data1
DataField Ciudad

Ing. Hermas Herrera Callejas Página : 117 de


19
TextBox Nombre Región
DataSource Datal
DataField Región
TextBox Nombre País
DataSource Datal
DataField País
TextBox Nombre Teléfono
DataSource Data1
DataField Teléfono
TextBox Nombre Fax
DataSource Data1
DataField Fax
12. Guardar la aplicación con el nombre EditarBasedeDatos.vbp y el formulario
con el nombre EditarBasedeDatos.frm.
Presionar la tecla F5 para ejecutar el programa.

Hacer clic en las flechitas que muestra el control Data para moverse entre los registros de la
tabla.

6.4 Asistente para Formularios de Datos.- Visual Basic incluye un


complemento llamado Asistente para formulario de datos (Data Form Wizard) que
se puede utilizar para generar un formulario de acuerdo con una base de datos.
Este asistente analiza la base de datos, localiza los campos y crea un formulario
automáticamente con un título adecuado, nombres de campos, cuadros de texto
para los campos y un control Data para moverse entre los registros.

Para generar un formulario que muestre los datos de la tabla Clientes


contenida en la base de datos NWIND, seguir estos pasos:

Ing. Hermas Herrera Callejas Página : 118 de


19
1. Seleccionar el comando Administrador de complementos del menú
Complementos. Visual Basic muestra el cuadro de diálogo: Administrador de
complementos:
2. En el cuadro de diálogo Administrador de complementos, seleccionar VB 6
Data Form Wizard y hacer clic en la casilla de verificación
Cargado/Descargado.
3. Hacer clic en el botón Aceptar.
4. Hacer clic en el comando Asistente para formularios de datos en el menú
Complementos. Visual Basic muestra el asistente para formularios de datos.
5. Seguir las indicaciones del Asistente. Por ejemplo, seleccionar de la lista el
formato de base de datos que se leerá. Luego, el siguiente paso es seleccionar
la base de datos. Para ello, hacer clic en el botón Examinar. En el cuadro de
diálogo Bases de datos de Access seleccionar la base de datos NWIND.

6. El siguiente paso consiste en seleccionar el tipo de formulario deseado y un


tipo de enlace de datos para tener acceso a los datos.
7. El siguiente paso consiste en seleccionar el origen de los registros y los
campos que aparecerán en el formulario.

Hacer clic aquí para seleccionar todos los campos de la tabla.


8. Luego, seleccionar las opciones que desee.
9. Finalmente, hacer clic en el botón Finalizar para generar el formulario.

Ing. Hermas Herrera Callejas Página : 119 de


19
Ing. Hermas Herrera Callejas Página : 120 de
19
CAPITULO 7 – VISUAL BASIC – CONTROLES QUE MUESTRAN IMÁGENES Y
GRAFICOS

Como Windows es una interfaz gráfica de usuario, es importante tener una


forma de presentar imágenes gráficas en la interfaz de una aplicación. Visual
Basic incluye tres controles que facilitan el trabajo con gráficos:
 Form (Formulario)
 PictureBox (Cuadro de dibujo)
 Image (Imagen)

7.1 El Control Image (Imagen).- Este control se utiliza para presentar imágenes
gráficas (mapa de bits, ícono, metarchivo, metarchivo mejorado o archivos JPEG o
GIF) en una aplicación. El control Image responde al evento Clic lo que permite
usarlo como un sustituto de los botones de comando, como elementos de una
barra de herramientas o para crear animaciones sencillas.

7.1.1 Carga de una Imagen en el Control Image.- Se puede cargar una imagen
gráfica en este control de dos maneras: durante el diseño de la aplicación o
durante la ejecución. Para cargar una imagen en tiempo de diseño, seguir estos
pasos:
1. En el formulario, hacer clic sobre el control Image con el botón derecho del
mouse y en el menú contextual que aparece, seleccionar Propiedades.
2. En la ventana Propiedades, hacer clic en el botón...de la propiedad Picture.
Visual Basic visualiza el cuadro de diálogo Cargar imagen.

3. En la ventana Cargar imagen, elegir una imagen y hacer clic en Abrir. El control
Image ahora muestra la imagen seleccionada:
Cuando se carga una imagen en un control Image, el control cambia su
tamaño automáticamente para ajustarse al de la imagen, independientemente del
tamaño del control dentro del formulario.

Ing. Hermas Herrera Callejas Página : 121 de


19
7.1.2 Carga de una Imagen Usando el Portapapeles.- También se puede
cargar una imagen a un control Image en tiempo de diseño si se lo pega desde
otra aplicación. Por ejemplo, para cargar una imagen retocada en PhotoShop,
sencillamente copiar la imagen al Portapapeles, seleccionar el control Image y
seleccionar el comando Pegar del menú Edición

7.1.3 La Propiedad Stretch.- Si la propiedad Stretch está como True, la imagen


ajustará su tamaño al cambiar el tamaño del control Image en tiempo de diseño.
Es posible que la imagen (especialmente los mapas de bits) se distorsione si el
tamaño de ésta es reajustada.

Stretch=False Stretch=True
Para eliminar una imagen, poner de nuevo la propiedad Picture a valor “”
(Ninguno). Para ello, hacer clic en el control Image, elegir la propiedad Picture en
la ventana Propiedades, hacer doble clic en la palabra visualizada en la caja de
valores y pulsar la tecla Delete (Supr).

7.1.4 Carga de una Imagen en Tiempo de Ejecución.- Para cargar un gráfico en


el control Image en tiempo de ejecución utilizar la propiedad Picture y la función
LoadPicture.
Set Image1.Picture = LoadPicture (“C:\Imágenes\Gatito.bmp”)
Para borrar el gráfico de este control, utilizar la función LoadPicture sin
especificar un nombre de archivo. El siguiente ejemplo borrará el control Image
incluso si se cargó una imagen con la propiedad Picture en tiempo de diseño:
Set Imagel.Picture = LoadPicture()
La siguiente aplicación, muestra la imagen Gatito.bmp si el usuario hace clic
sobre el control Image; un doble clic sobre el control Image, borra la imagen.
Private Sub Form_Load()
‘Sitúa el control Imagel en esquina superior izquierda del formulario.
Imagel.Move 0,0
‘Ajusta el tamaño del formulario al del control Image.
Form1.Height = Image1.Height
Form1.Width = Image1.Width
End Sub
Private Sub Image1_Click()
‘Muestra la imagen Gatito.bmp en el control Image
Set Image1.Picture = LoadPicture(“C:\Gráficos\Gatito.bmp”)
End Sub
Private Sub Image1_DblClick()
‘Borra la imagen Gatito.bmp del control Image

Ing. Hermas Herrera Callejas Página : 122 de


19
Set Image1.Picture = LoadPicture()
End Sub
Presionar la tecla F5 para ejecutar el programa y hacer clic sobre el control
image....

para visualizar la imagen Gatito.bmp


Se desarrolla ahora un programa que abre imágenes que se encuentran
almacenadas en distintos archivos de disco, con nombres que terminan en
números: Imagen1, Imagen2, Imagen3 e Imagen4.
Seguir estos pasos:
1. Seleccionar el comando Nuevo proyecto del menú Archivo, para crear una
nueva aplicación.
2. En el cuadro de herramientas, hacer doble clic sobre el control Image.
3. En el formulario, arrastrar el control Image hasta situarlo en la esquina superior
izquierda del formulario.
4. Hacer clic en el comando Copiar del menú Edición. Una copia del control
Image se guarda en el Portapapeles.
5. Hacer clic en el comando Pegar del menú Edición. Visual Basic muestra un
mensaje preguntando si se desea crear una matriz de controles. Una matriz de
controles es un grupo de objetos idénticos que se mostrarán en la interfaz del
programa. Cada uno de los objetos del grupo comparte el mismo nombre de
objeto, de forma que se puede seleccionar y definir simultáneamente el grupo
entero de objetos.
6. Hacer clic en Sí para crear una matriz de controles. Visual Basic crea una
matriz de controles Image y pega el segundo control Image en la esquina
superior izquierda del formulario.
7. Arrastrar el segundo control Image hasta situarlo a la derecha del primero.
8. Volver a hacer clic en el comando Pegar del menú Edición y después arrastrar
el tercer control Image a la parte inferior del primero.
9. Volver a hacer clic en el comando Pegar del menú Edición y después arrastrar
el cuarto control Image a la parte inferior del segundo.
10. En el cuadro de herramientas, hacer doble clic sobre el control
CommandButton y en el formulario, arrastrar hasta situarlo en la parte inferior
del formulario.
Establecer ahora, las propiedades de los controles contenidos en el
formulario. Para establecer las propiedades de los controles Image en grupo,
situar el puntero del mouse en la parte superior izquierda del formulario y arrastrar
el puntero en diagonal hacia abajo, hasta enmarcar los cuatro controles Image
como se observa en la siguiente ilustración:

Ing. Hermas Herrera Callejas Página : 123 de


19
Al soltar el botón del mouse, los cuatro controles Image aparecerán
seleccionados. Presionar la tecla F4 y establecer las siguientes propiedades:
Matriz de control Image BorderStyle 1- Fixed Single
Stretch True
Luego de establecer las propiedades de los controles Image, asignar las
siguientes propiedades al botón de comando Command1:
CommandButton Name Mostrar
Caption Mostrar imágenes
En el formulario, hacer doble clic sobre el botón de comando Mostrar
imágenes y en la ventana de código digitar el siguiente procedimiento:
Private Sub Mostrar_Click()
‘Este procedimiento carga 4 archivos de imagen que están almacenados en la carpeta
C:\Gráficos.
Dim I As Byte
For I = 1 To 4
Image1(I - 1).Picture = LoadPicture(”C:\Gráficos\Imagen”& I &“.bmp”)
Next I
End Sub
Guardar el formulario con el nombre Imágenes.frm y la aplicación con el
nombre Imágenes.vbp.
Presionar la tecla F5 para ejecutar el programa y hacer clic en el botón
Mostrar imágenes. En el formulario aparecerán las imágenes cargadas:
Las imágenes cargadas durante el diseño son guardadas y cargadas con la
aplicación. Lo que significa que cuando se crea un archivo .EXE de la aplicación,
no se necesitará acompañarlo de los archivos de imágenes utilizados. En cambio,
cuando las imágenes se cargan en tiempo de ejecución, utilizando la función
LoadPicture y se crea un archivo EXE, se debe acompañar éste con los archivos
de imágenes utilizados.

Ing. Hermas Herrera Callejas Página : 124 de


19
7.1.5 Creación de Botones de Orden Gráficos.- Hasta ahora, en las
aplicaciones desarrolladas, se ha empleado el control CommandButton como un
medio para crear botones de orden. Visual Basic proporciona el control Image
como otra alternativa para crear botones de orden basados en gráficos. Este
control responde a los eventos Click, DblClick, MouseDown, MouseMove y
MouseUp lo que permite usarlo como un sustituto del control CommandButton.

Botones de orden basados en gráficos Botón de orden basado


en texto
Desarrollar una aplicación en la que se ejecutarán órdenes utilizando botones
de orden basados en gráficos. Estos botones se hundirán o emergerán cuando se
los pulse, como sucede con los botones que se pueden ver en otras aplicaciones
desarrolladas para Windows. Seguir estos pasos:
1. Seleccionar el comando Nuevo proyecto del menú Archivo, para crear una
nueva aplicación.
2. Agregar tres controles Image en el formulario. Ordenarlos tal como se observa
en la ilustración próxima:

3. Guardar el formulario y la aplicación con nombres SensibilidadCursor.frm y


SensibilidadCursor.vbp
4. Hacer clic en el control Image situado en el lado izquierdo del formulario.
5. En la ventana Propiedades, en la propiedad (Nombre) digitar el nombre Botón
para el control Image.
6. Hacer clic en el segundo control Image y en la ventana Propiedades digitar el
mismo nombre asignado al control Image seleccionado anteriormente. Visual
Basic mostrará un mensaje preguntando si se desea crear una matriz de
controles:

Ing. Hermas Herrera Callejas Página : 125 de


19
7. Hacer clic en Sí para crear una matriz de controles Image.
8. Hacer clic en el tercer control Image y asignarle el mismo nombre asignado a
los dos controles anteriores.
9. Agregar un control Label al formulario y modificar las propiedades Caption
(Texto de prueba) y Font (Arial, tamaño 18) de este control.

10. Agregar nueve controles Image al formulario. La interfaz debe ser similar a la
ilustración proxima:

N K S NS KS SS NB KB SB
11. Asignar los nombres que muestra la ilustración a cada uno de los nueve
controles Image.
12. Establecer a False la propiedad Visible de cada uno de los 9 controles Image
recientemente nombrados.
13. Proceder a insertar los siguientes íconos en cada uno de los controles Image.
Negrita Cursiva Subrayado NegritaSob CursivaSob SubrayadoSob NegritaBaj CursivaBaj
SubrayadoBaj

N K S NS KS SS NB KB
SB
En el formulario, seleccionar el control N y en la ventana Propiedades hacer
clic en el botón ... de la propiedad Picture. En el cuadro de diálogo Cargar imagen,
hacer doble clic en el archivo de imagen Negrita. Esto hará que el icono Negrita
quede insertado en el control N.
Proceder de manera similar con los controles Image restantes:
Al control K insertar el icono Cursiva.
Al control S insertar el icono Subrayado.
Al control NS insertar el icono NegritaSob.

Ing. Hermas Herrera Callejas Página : 126 de


19
Al control KS insertar el icono CursivaSob.
Al control SS insertar el icono SubrayadoSob.
Al control NB insertar el icono NegritaBaj.
Al control KB insertar el icono CursivaBaj.
Al control SB insertar el icono SubrayadoBaj.
14. Agregar cuatro controles Image al formulario. Modificar el tamaño de estos
controles y ubicarlos en la parte inferior del formulario; además, nombrarlos tal
como muestra la siguiente ilustración:

Botón F FS FB
Observar que el nombre Botón del control Image situado en la parte inferior
izquierda del formulario es igual a los nombres de los controles Image situados en
la parte superior izquierda del formulario. Estos cuatro controles forman una matriz
de controles y la propiedad index de cada uno de estos controles son 0, 1, 2 y 3
respectivamente.
15. Establecer la propiedad Visible de los controles F, FS y FB a False
16. Insertar en los controles F, FS y FB las imágenes de salir mostradas a
continuación:
Salir SalirSob SalirBaj

F FS FB
En el formulario, seleccionar el control F y en la ventana Propiedades hacer
clic en el botón ... de la propiedad Picture. En el cuadro de diálogo Cargar imagen
hacer doble clic en el archivo de imagen Salir. Esto hará que la imagen Salir
quede insertada en el control F. Proceder de manera similar con los dos controles
Image restantes.
Finalmente la interfaz de usuario debe tener el siguiente aspecto:

Ing. Hermas Herrera Callejas Página : 127 de


19
Asociar un procedimiento al formulario. Cuando el usuario inicie el programa,
este procedimiento se activará, centrará el formulario en la pantalla y asignará a la
propiedad Picture de los controles Botón(0), Botón(1), Botón(2) y Botón(3) las
imágenes insertadas en los controles N, K, S y F.
Private Sub Form_Load()
‘Sitúa el formulario en el centro de la pantalla
Move (Screen.Width - Wídth) \ 2, (Screen.Height - Height) \ 2
Botón(0).Picture = N.Picture
Botón(1).Picture = K.Picture
Botón(2).Picture = S.Picture
Botón(3).Picture = F.Picture
End Sub
Asociar un procedimiento al formulario accionado por el suceso MouseMove.
Cuando el usuario desplace el puntero del mouse sobre el formulario, los controles
Botón(0), Botón(1), Botón(2), Botón(3) deben mostrar las imágenes que contienen
los controles N, K, S y F, respectivamente.
Private Sub Form_MouseMove(Button As lnteger, Shift As lnteger, X As Single, Y As
Single)
If Botón(0).Picture = NS.Picture Then Botón(0).Picture = N.Picture
If Botón(1).Picture = KS.Picture Then Botón(1).Picture = K.Picture
If Botón(2).Picture = SS.Picture Then Botón(2).Picture = S.Picture
If Botón(3).Picture = FS.Picture Then Botón(3).picture = F.Picture
End Sub
Asociar un procedimiento a la matriz de controles Botón accionado por el
suceso MouseMove. Hacer doble clic sobre uno de estos controles y en la ventana
de código desplegar la lista Procedimientos. Seleccionar el suceso MouseMove y
la ventana de código mostrará el procedimiento Botón_MouseMove. Digitar el
siguiente código:
Private Sub Botón_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single,
Y As Single)
Select Case Index
Case 0
If Botón(0).Picture = N.Picture Then Botón(0).Picture = NS.Picture
If Botón(1).Picture = KS.Picture Then Botón(1).Picture = K.Picture
If Botón(2).Picture = SS.Picture Then Botón(2).Picture = S.Picture
Case 1
If Botón(0).Picture = NS.Picture Then Botón(0).Picture = N.Picture
If Botón(1).Picture = K.Picture Then Botón(1).Picture = KS.Picture
If Botón(2).Picture = SS.Picture Then Botón(2).Picture = S.Picture
Case 2
If Botón(0).Picture = NS.Picture Then Botón(0).Picture = N.Picture
If Botón(1).Picture = KS.Picture Then Botón(1).Picture = K.Picture
If Botón(2).Picture = S.Picture Then Botón(2).Picture = SS.Picture
Case 3
Botón(3).Picture = FS.Picture
End Select
End Sub
Asociar un procedimiento a la matriz de controles Botón accionado por el
suceso MouseDown. Cuando el usuario pulse sobre uno de estos controles, la
imagen del control debe quedar en NB, KB, SB o FB y la propiedad Caption del

Ing. Hermas Herrera Callejas Página : 128 de


19
control Label (Texto de prueba) debe ponerse en Negrita, Cursiva o Subrayado,
respectivamente. Si el usuario vuelve a hacer clic sobre uno de estos controles, la
imagen del control debe quedar en N, K o S y Texto de prueba debe retornar a sus
propiedades normales.
Private Sub Botón_MouseDown(Index As Integer, Button As Integer, Shift As lnteger, X As Single,
Y As Single)
Select Case Index
Case 0
If Botón(0).Picture = NS.Picture Then
Botón(0).Picture = NB.Picture
Label1.FontBold = True
ElseIf Botón(0).Picture = NB.Picture Then
Botón(0).Picture = N.Picture
Label1.FontBold = False
End If
Case 1
If Botón(1).Picture = KS.Picture Then
Botón(1).Picture = KB.Picture
Label1.FontItalic = True
ElseIf Botón(1).Picture = KB.Picture Then
Botón(1).Picture = K.Picture
Label1.FontItalic = False
End If
Case 2
If Botón(2).Picture = SS.Picture Then
Botón(2).Picture = SB.Picture
Label1.FontUnderline = True
Else If Botón(2).Picture = SB.Picture Then
Botón(2).Picture = S.Picture
Label1.FontUnderline = False
End If
Case 3
Botón(3).Picture = FB.Picture
End Select
End Sub
Asociar un procedimiento a la matriz de controles Botón accionado por el
suceso MouseUp. Cuando el usuario sitúe el puntero, presione y suelte el botón
izquierdo del mouse sobre el control Botón(3) (propiedad Index = 3) la ejecución
del programa debe finalizar.
Private Sub Botón_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y
As Single)
‘Finaliza la ejecución del programa
If Index = 3 Then End
End Sub
Hacer clic en el comando Iniciar del menú Ejecutar para ejecutar el
programa. Desplazar el puntero del mouse sobre uno de los botones y éste
emergerá tal como lo muestra la siguiente ilustración para S:

Ing. Hermas Herrera Callejas Página : 129 de


19
Pulsar sobre el botón y este se hundirá al igual que sucede con los botones
de otras aplicaciones desarrolladas para Windows.

7.2 El Control PictureBox (Cuadro de Dibujo).- El control PictureBox es similar


al control Image en que los dos se pueden usar para presentar imágenes gráficas
en una aplicación. Sin embargo, el control PictureBox se utiliza también para
actuar como contenedor de otros controles y dispone de propiedades y métodos
mediante los cuales es posible dibujar puntos, líneas, rectángulos, círculos,
establecer rellenos, tipos de línea, etc.

7.2.1 Propiedades del Control PictureBox


Propiedad Comentario
(Nombre) Nombre del control usado en el código.
Align Permite que el control PictureBox se sitúe automáticamente en la parte
superior, inferior, izquierda o derecha del formulario.
Valor Descripción
0-None El control aparecerá donde se lo coloque
1-Align Top El control aparecerá en la parte superior del formulario.
2-Align Bottom El control aparecerá en la parte inferior del formulario.
3-Align Left El control aparecerá en la parte izquierda del
formulario.
4-Align Right El control aparecerá en la parte derecha del formulario.
AutoRedraw Establecer esta propiedad a True para que el resultado de los métodos
gráficos como Circle, Line y Point que se dibuja en el control, se vuelva a
dibujar automáticamente cuando el control PictureBox cambie de tamaño
o se vuelva a presentar después de estar oculto detrás de algún otro
objeto.
AutoSize Establecer esta propiedad a True para hacer que el control se ajuste al
tamaño de la imagen.
DrawStyle Determina el estilo de la línea para el resultado de métodos gráficos.
Presenta las siguientes opciones:
Valor Descripción
0-Solid Sólido.
1-Dash De rayas.
2-Dot De puntos.
3-Dash-Dot Raya-punto
4-Dash-Dot-Dot Raya-punto-punto.
5-Transparent Transparente.
6-Inside Solid Sólido interno.
DrawWidth Devuelve o establece el ancho de la línea para el resultado de métodos
gráficos.

Ing. Hermas Herrera Callejas Página : 130 de


19
FillColor Devuelve o establece el color usado para rellenar figuras, círculos y
cuadros.
FillStyle Devuelve o establece el estilo de relleno de una figura. Presenta las
siguientes opciones:
Valor Descripción
0-Solid Sólido.
1-Transparent Transparente.
2-Horizontal Line Línea horizontal
3-Vertical Line Línea vertical
4-Upward Diagonal Diagonal hacia arriba.
5-Downward Diagonal Diagonal hacia abajo.
6-Cross Cruz.
Font Facilita la manipulación de los atributos de texto.
ForeColor Devuelve o establece el color de primer plano utilizado para mostrar
textos y gráficos en un objeto.
Height Devuelve o establece el alto del control.
Picture Devuelve o establece el gráfico que se mostrará en el control.
ScaleHeight Devuelve o establece el número de unidades verticales del interior de un
objeto.
ScaleLeft Devuelve o establece la coordenada horizontal para el borde izquierdo de
un objeto.
ScaleMode Devuelve o establece un valor que indica las unidades de medida de las
coordenadas de un objeto al usar métodos gráficos o colocar controles.
ScaleTop Devuelve o establece la coordenada vertical del borde superior de un
objeto.
ScaleWidth Devuelve o establece el número de unidades horizontales de medida del
interior de un objeto.
Width Devuelve o establece el ancho del control.

7.2.2 Sistema de Coordenadas.- El origen de coordenadas para un formulario o


un cuadro de dibujo es la esquina superior izquierda de los mismos, la coordenada
X aumenta hacia la derecha, y la coordenada Y aumenta hacia abajo. Cualquier
punto del formulario se puede identificar por medio de sus coordenadas X y Y. Un
sistema de coordenadas se puede ajustar a la escala que se desee.
La siguiente tabla muestra el sistema de coordenadas de Visual Basic:
Escala Descripción
0 Sistema de coordenadas definido por el usuario.
1 Twips (escala por defecto). 1,440 twips por pulgada.
2 Puntos. 72 puntos por pulgada
3 Píxeles. Un píxel es la unidad más pequeña de resolución de un monitor.
4 Caracteres. Un carácter es un área de 120 Twips de ancho y 240 twips de
alto.
5 Pulgadas. 1 pulgada es igual a 25,4 milímetros.
6 Milímetros
7 Centímetros. 567 twips por centímetro.
Para ajustar el sistema de coordenadas a una de estas escalas, se utiliza la
propiedad ScaleMode.

7.3 Los Métodos Gráficos.- Visual Basic tiene los siguientes métodos gráficos:

Ing. Hermas Herrera Callejas Página : 131 de


19
Print, PSet, Line y Circle. Estos métodos permiten mostrar texto y dibujar líneas,
círculos y puntos en un formulario o en un control PictureBox.

7.3.1 El Método Print.- Permite mostrar texto. Por ejemplo, la siguiente


instrucción mostrará la cadena de caracteres ‘Texto de prueba’ en la parte
superior izquierda de un control PictureBox:
Picture1.Print “Texto de prueba”
Visual Basic proporciona los métodos TextWidth (Ancho de texto) y
TextHeight (Alto de texto) que permiten alinear una cadena de caracteres en un
formulario o en un control PictureBox. Por ejemplo, las siguientes líneas colocarán
el texto ‘Texto de prueba’ en el centro del control PictureBox.
Private Sub Picture1 _Click()
Picture1.CurrentX = (Picture1.ScaleWidth - TextWidth(“Texto de prueba”))/2
Picture1.CurrentY = (Picture1.ScaleHeight – TextHeight(”Texto de prueba”))/2
Picture1.Print “Texto de prueba”
End Sub
Para presentar una cadena de caracteres en un determinado punto de la
pantalla, asignar a las propiedades CurrentX y CurrentY el valor en coordenadas
de dicho punto y después emplear el método Print para presentar la cadena de
caracteres.

7.3.2 El Método Pset.- Permite dibujar un punto en el control PictureBox y se


utiliza para dibujar curvas que hay que trazar punto a punto. Tiene la siguiente
sintaxis:
[objeto.]PSet(X,Y)[,color]
Donde X e Y son las coordenadas del punto. El argumento color es opcional
y si no se especifica se supone el color del primer plano (ForeColor). Las
propiedades CurrentX y CurrentY son puestas, respectivamente, a los valores X e
Y.
Desarrollar un programa que dibuje en un control PictureBox la curva
correspondiente a la función SIN(X).
1 Seleccionar el comando Nuevo proyecto del menú Archivo para crear una
nueva aplicación.
2 En el formulario, colocar dos controles Label, dos controles TextBox, dos
controles UpDown, dos controles CommandButton y un control PictureBox.
Para usar controles UpDown se debe habilitar el componente “Microsoft
Common Controls-2.5.0(SP2)” o bien el “Microsoft Common Controls-2.6.0”.
Asignar las siguientes propiedades:
Control Propiedad Valor
Label Caption Valor más bajo
Label Caption Valor más alto
TextBox Nombre Min

Ing. Hermas Herrera Callejas Página : 132 de


19
Text ““
TextBox Nombre Max
Text ““
UpDown Name UpDown1
BuddyControl Min
BuddyProperty Text
Increment 1
Max 10
Min 0
SyncBuddy True
UpDown Name UpDown2
BuddyControl Max
BuddyProperty Text
Increment 1
Max 160
Min 0
SyncBuddy True
PictureBox Nombre Gráfico
BackColor &H80000009&
CommandButton Nombre Dibujar
Caption Dibujar
CommandButton Nombre Salir
Caption Salir
Asociar un procedimiento al cuadro de texto Min accionado por el suceso
KeyPress. Este procedimiento sólo debe permitir el ingreso de los dígitos 0, 1,
2,...,9 y de los caracteres ”-“ y “.” en el cuadro de texto Min.
1 Hacer doble clic en el cuadro de texto Min. La ventana de código abre el
procedimiento Min_Change.
2 Desplegar el cuadro de lista Procedimientos de la ventana de código y en la
lista de sucesos que puede reconocer el control TextBox, seleccionar el suceso
KeyPress.
3 Digitar el siguiente procedimiento:
Private Sub Min_KeyPress(KeyAscii As Integer)
If Not ((Chr(KeyAscii) >= “0” And Chr(KeyAscii) <= “9”) Or (Chr(KeyAscii) = “-“ Or Chr(KeyAscii) =
“.”)) Then
Beep
KeyAscii = 0
End lf
End Sub
Asociar un procedimiento al cuadro de texto Max accionado por el suceso
KeyPress. Este procedimiento sólo debe permitir el ingreso de los dígitos 0, 1, 2,
..., 9 y de los caracteres “-” y “.” en el cuadro de texto Max
1 Hacer doble clic en el cuadro de texto Max. La ventana de código abre el
procedimiento Max_Change
2 Desplegar el cuadro de Lista Procedimientos de la ventana de código y en la
lista de sucesos que puede reconocer el control TextBox, seleccionar el suceso
KeyPress.
3 Digitar el siguiente procedimiento:
Private Sub Max_KeyPress(KeyAscii As Integer)
If Not ((Chr(KeyAscii) >= “0” And Chr(KeyAscii) <= “9”) Or (Chr(KeyAscii) = “-“ Or Chr(KeyAscii) =

Ing. Hermas Herrera Callejas Página : 133 de


19
“.”)) Then
Beep
KeyAscii = 0
End If
End Sub
Asociar un procedimiento al botón de comando Dibujar accionado por el
suceso Click. Cuando el usuario haga clic en el botón comando Dibujar, este
procedimiento debe dibujar el gráfico de la función Sin(X) en el control PictureBox.
1 Hacer doble clic en el botón de comando Dibujar. La ventana de código abre el
procedimiento Dibujar_Click.
2 Digitar el siguiente procedimiento:
Private Sub Dibujar_Click()
Dim VarX, FunY, XMin, XMax, YMin, YMax As Double
‘El método Cls borra el gráfico pintado en el control.
Gráfico.Cls
‘Cambia temporalmente la propiedad ScaleMode a 3 (pixeles)
Gráfico.ScaleMode = 3
XPíxeles = Gráfico.ScaleWidth
XMin = Val(Min)
XMax = Val(Max)
‘Calcula los valores mínimo y máximo de la función.
For I = 1 to XPíxeles
VarX = XMin + (Xmax - XMin) * I / XPíxeles
FunY = Sin(VarX)
If FunY > YMax Then YMax = FunY
If FunY < YMin Then YMin = FunY
Next I
‘Prepara el sistema de coordenadas definido por el usuario
Gráfico.Scale (XMin, YMin) - (XMax, Ymax)
‘Traza el gráfico de la función
For I = 1 To XPíxeles
VarX = XMin + (XMax - XMin) * I / XPíxeles
Gráfico.PSet (VarX, Sin(VarX)), RGB(0, 0, 255)
Next I
End Sub
Se analiza el procedimiento anterior. La siguiente línea
Gráfico.ScaleMode = 3
Cambia temporalmente la propiedad ScaleMode a 3 con la finalidad de
utilizar la propiedad ScaleWidth del control PictureBox. Luego se asigna a la
variable XPíxeles la resolución horizontal del control PictureBox con el fin de
preparar un sistema de coordenadas definido por el usuario.
XPíxeles = Gráfico.ScaleWidth
Las siguientes instrucciones
For I = 1 To XPíxeles
VarX = XMin + (XMax - XMin) * I / XPíxeles
FunY = FunciónY(VarX)
If FunY > YMax Then YMax = FunY
If FunY < YMin Then YMin = FunY
Next I
Sirven para averiguar las dimensiones del sistema de coordenadas. Después

Ing. Hermas Herrera Callejas Página : 134 de


19
de finalizar el bucle For...Next, las variables YMax e YMin contienen los valores
máximo y mínimo de la función para el rango XMax y XMin.
La siguiente línea, prepara el sistema de coordenadas definido por el usuario
utilizando el método Scale:
Gráfico.Scale (XMin, YMin) - (XMax, YMax)
Para trazar el gráfico de la función punto por punto utilizamos el método
PSet.
For I = 1 To Xpíxeles
VarX = XMin + (XMax - XMin) * I / Xpíxeles
Gráfico.PSet (VarX, Sin(VarX)), RGB(0, 0, 255)
Next I
Observar que el método PSet llama a la función Sin(VarX) que calcula el
valor de la variable dependiente para cada valor de la variable VarX.
La siguiente ilustración muestra el gráfico de la función Y = Sin(X).

7.3.3 El Método Line.- Permite dibujar una línea entre dos puntos. La sintaxis de
este método es:
[objeto.]Line[(X1, Y1)] - (X2, Y2)[, color]
Si al método Line se le añade la opción B, las coordenadas (Xl ,Y1) y (X2,Y2)
harán referencia a la esquina superior izquierda o inferior derecha de un
rectángulo.
[objeto.]Line(X1, Y1) - (X2, Y2)[, [color], B[F]]
Si se especifica la opción BF, se obtiene una rectángulo coloreado. Si objeto
no se especifica, la figura se dibuja sobre el formulario actual.
Desarrollar una aplicación que muestre líneas verticales, horizontales y
diagonales en un control PintureBox. Seguir estos pasos:
1 Hacer clic en el comando Nuevo proyecto del menú Archivo para crear una
nueva aplicación.
2 Colocar tres controles Label, dos controles TextBox, dos controles UpDown,
cinco controles CommandButton y un control PictureBox en el formulario.
Asignar las siguientes propiedades a los controles:
Control Propiedad Valor
Form Caption Trazado de Líneas
Label Caption Introduzca los datos requeridos
Label Caption Horizontales
Label Caption Verticales
TextBox Name Horiz
MaxLength 4
Text ““

Ing. Hermas Herrera Callejas Página : 135 de


19
TextBox Name Vert.
MaxLength 4
Text ““
UpDown BuddyControl Horiz
BuddyProperty Text
Increment 1
Max 1600
Min 1
SyncBuddy True
UpDown BuddyControl Vert
BuddyProperty Text
Increment 1
Max 1600
Min 1
SyncBuddy True
PictureBox Name Gráfico
Backcolor Blanco
CommandButton Name TrazarHorizontales
Caption Trazar Horizontales
CommandButton Name TrazarVerticales
Caption Trazar Verticales
CommandButton Name TrazarDiagonales
Caption Trazar Diagonales
CommandButon name LimpiarCuadro
Caption Limpiar Cuadro
CommandButon Name Salir
Caption Salir
Diseñada la interfaz de usuario, asociar un procedimiento al cuadro de texto
Horiz accionado por el suceso KeyPress. Este procedimiento sólo debe permitir el
ingreso de dígitos en el cuadro de texto Horiz.
1. En el formulario, hacer doble clic sobre el cuadro de texto Horiz.
2. En la ventana de código, desplegar el cuadro de lista Procedimientos y
seleccionar el suceso KeyPress. La ventana de código abre el procedimiento
Horiz_KeyPress.
3. Digitar el siguiente código:
Private Sub Horiz_keyPress(KeyAscii As Integer)
If Chr(KeyAscii) < “0” Or Chr(KeyAscii) > “9” Then
Beep
KeyAscii = 0
End If
End Sub
Asociar un procedimiento al cuadro de texto Vert accionado por el suceso
KeyPress. Este procedimiento sólo debe permitir el ingreso de dígitos en el cuadro
de texto Vert.
1. En el formulario, hacer doble clic sobre el cuadro de texto Vert.
2. En la ventana de código, desplegar el cuadro de lista Procedimientos y
seleccionar el suceso KeyPress. La ventana de código abre el procedimiento
Vert_KeyPress.
3. Digitar el siguiente código:

Ing. Hermas Herrera Callejas Página : 136 de


19
Private Sub Vert_KeyPress(KeyAscii As Integer)
If Chr(KeyAscii) < “0” Or Chr(KeyAscii) > “9” Then
Beep
KeyAscii = 0
End If
End Sub
Asociar un procedimiento al botón de comando Horizontales accionado por el
suceso Click. Cuando el usuario haga clic en este botón, el control PictureBox
debe mostrar el número de líneas horizontales que indica el cuadro de texto Horiz.
1. En el formulario, hacer doble clic en el botón de comando Trazar Horizontales.
La ventana de código abre el procedimiento TrazarHorizontales_Clíck.
2. Digitar el siguiente código:
Private Sub TrazarHorizontales_Click()
Dim lineas As Integer
lineas = Val(Horiz)
X1 = 0
‘Se calcula el espacio que debe haber entre línea y línea
NY1 = Grafico.Height / (lineas + 1)
Y1 = NY1
For i = 1 To lineas
Grafico.Line (X1, Y1)-(Grafico.Width, Y1)
Y1 = Y1 + NY1
Next i
End Sub
Asociar un procedimiento al botón de comando Trazar Verticales accionado
por el suceso Click. Cuando el usuario haga clic en este botón, el control
PictureBox debe mostrar el número de líneas verticales que indica el cuadro de
texto Vert.
1. En el formulario, hacer doble clic en el botón de comando Trazar Verticales. La
ventana de código abre el procedimiento TrazarVerticales_Clíck.
2. Digitar el siguiente código:
Private Sub TrazarVerticales_Click()
Dim lineas As Integer
lineas = Val(Vert)
Y1 = 0
‘Se calcula el espacio que debe haber entre línea y lúnea
NX1 = Grafico.Width / (lineas + 1)
X1 = NX1
For i = 1 To lineas
Grafico.Line (X1, Y1)-(X1, Grafico.Height)
X1 = X1 + NX1
Next i
End Sub
Hacer doble clic en el botón de comando Trazar Diagonales y escriba el
siguiente código en el procedimiento que muestra la ventana de código.
Private Sub TrazarDiagonales_Click()
‘Traza las dos diagonals principales en el control PictureBox
Grafico.Line (0, 0)-(Grafico.Width, Grafico.Height)
Grafico.Line (0, Grafico.Height)-(Grafico.Width, 0)
End Sub

Ing. Hermas Herrera Callejas Página : 137 de


19
Hacer doble clic en el botón de comando Limpiar Cuadro y escriba la
sentencia Grafico.Cls en el procedimiento que muestra la ventana de código.
Private Sub LimpiarCuadro_Click()
Grafico.Cls
End Sub
Hacer doble clic en el botón de comando Salir y escribir la sentencia End en
el procedimiento que muestra la ventana de código.
Private Sub Salir_Click()
End
End Sub
Presionar la tecla F5 para ejecutar el programa.

7.3.4 El Método Circle.- Permite dibujar un círculo, una elipse o parte de estas
figuras con centro (X, Y). La sintaxis de este método es:
[objeto.]Circle(X, Y), radio, [color], [principio], [fin], [aspecto]
X e Y son las coordenadas del centro del círculo y el argumento radio es el
radio del círculo. Los argumentos principio y fin son ángulos, en radianes, de
valores comprendidos en el rango –2*PI a 2*PI, que especifican los ángulos de
principio y fin para el trazado del arco. Si se omiten, se traza una curva completa.
El argumento aspecto es la proporción entre el radio vertical y horizontal de la
elipse. Si aspecto < 1, la elipse se extiende horizontalmente y se comprime en
dirección vertical.
Desarrollar una aplicación que dibuje un número de circunferencias requerido
con centro en el centro del PictureBox. Es fácil hacerlo utilizando el método Circle.
Seguir estos pasos:
1. Hacer clic en el comando Nuevo proyecto del menú Archivo para crear una
nueva aplicación.
2. Colocar dos controles Label, dos controles TextBox, un control UpDown, tres
controles CommandButton y un control PictureBox en el formulario.
3. Asignar las siguientes propiedades a los controles:
Control Propiedad Valor
Form Caption Circunferencias
Label Caption Circulos
Label Caption Aspecto
TextBox Name Círculos

Ing. Hermas Herrera Callejas Página : 138 de


19
Text ““
TextBox Name Aspecto
Text ““
UpDown BuddyControl Circulos
BuddyProperty Text
Increment 1
Max 230
Mim 1
SyncBuddy True
PictureBox Name Gráfico
Backcolor Blanco
CommandButton Name Trazar
Caption Trazar
CommandButton Name Limpiar
Caption Limpiar
CommandButton Name Salir
Caption Salir
Al cargar el formulario, este debe quedar centrado en la pantalla. Para ello
debemos introducir el siguiente código:
Private Sub Form_Load()
Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
End Sub
Cuando se introduzcan valores en los cuadros de texto Círculos y Aspecto, el
programa debe permitir solo el ingreso de números. Para ello se debe introducir el
siguiente código bajo el suceso KeyPress de cada cuadro de texto:
Private Sub Circulos_KeyPress(KeyAscii As Integer)
If Chr(KeyAscii) < "0" Or Chr(KeyAscii) > "9" Then
Beep
KeyAscii = 0
End If
End Sub
Private Sub Aspecto_KeyPress(KeyAscii As Integer)
If Not ((Chr(KeyAscii) >= "0" And Chr(KeyAscii) <= "9") Or (Chr(KeyAscii) = ".")) Then
Beep
KeyAscii = 0
End If
End Sub
Asociar un procedimiento al botón de comando Trazar accionado por el
suceso Click. Cuando el usuario haga clic en este botón, el control PictureBox
debe mostrar el número de circunferencias indicado en el TextBox Circulos.
1. En el formulario, hacer doble clic en el botón de comando Trazar. La ventana
de código abre el procedimiento Trazar_Click.
2. Digitar el siguiente código:
Private Sub Trazar_Click()
aspec = Val(Aspecto)
If aspec = 0 Then aspec = 1
x = Grafico.Width / 2
y = Grafico.Height / 2
Ncirc = Val(Circulos)
radio = y

Ing. Hermas Herrera Callejas Página : 139 de


19
NC = y / Ncirc
For i = 1 To Ncirc
Grafico.Circle (x, y), radio, , , , aspec
radio = radio - NC
Next i
End Sub
Asociar un procedimiento al botón de comando Limpiar accionado por el
suceso Click. Cuando el usuario haga clic en este botón, se debe limpiar el
PictureBox.
1. Hacer doble clic en el botón de comando Limpiar. La ventana de código abre el
procedimiento Limpiar_Click.
2. Digitar las siguientes sentencias.
Private Sub Limpiar_Click()
Grafico.Cls
End Sub
Asociar un procedimiento al botón de comando Salir accionado por el suceso
Click. Cuando el usuario haga clic en este botón, la ejecución del programa debe
finalizar.
1. Hacer doble clic en el botón de comando Salir. La ventana de código abre el
procedimiento Salir_Click.
2. Entre las instrucciones Salir_Click y End Sub digitar la sentencia End.
Private Sub Salir_Click()
End
End Sub
Las siguientes ilustraciones muestran ejemplos de los resultados de la
aplicación.

7.4 Los Controles Line y Shape.- Estos controles permiten crear figuras
geométricas de diferentes formas, tamaños y colores en un formulario o en un
marco.
Utilizar el control Line para dibujar líneas rectas. La siguiente tabla muestra
algunas propiedades de este control:
Propiedad Descripción
BorderStyle Permite establecer el estilo del borde. Presenta las siguientes
opciones:
Valor Descripción
0-Transparent Transparente.
1-Solid Sólido.
2-Dash De rayas.

Ing. Hermas Herrera Callejas Página : 140 de


19
3-Dot De puntos.
4-Dash-Dot Raya-punto.
5-Dash-Dot-Dot Raya-punto-punto.
6-Inside Solid Sólido interno.
BorderWidth Permite establecer el ancho del borde.
BorderColor Permite colorear la línea con cualquiera de los colores estándar de
Visual Basic.
Visible Permite mostrar u ocultar la línea.
El control Shape permite dibujar rectángulos, cuadrados, elipses y
circunferencias. Algunas propiedades de este control son:
Propiedad Descripción
BorderColor Permite especificar un color para el borde de la figura.
FillColor Permite especificar el color de relleno de la figura.
FillStyle Permite establecer un patrón para el color de relleno. Presenta las
siguientes opciones:
Valor Descripción
0-Solid Sólido.
1-Transparent Transparente.
2-Horizontal Line Línea horizontal.
3-Vertical Line Línea vertical.
4-Upward Diagonal Diagonal hacia arriba.
5-Downward Diagonal Diagonal hacia abajo.
6-Cross Cruz.
7-Diagonal Cross Diagonal cruzado.
Shape Permite controlar la forma de la figura. Presenta las siguientes
opciones:
Valor Descripción
0-Rectangle Rectángulo.
1-Square Cuadrado.
2-Oval Elipse
3-Circle Círculo.
4-Rounded Rectangle Rectángulo redondeado.
5-Rounded Square Cuadrado redondeado.
Visible Permite mostrar u ocultar la figura.
Desarrollar una aplicación que permita modificar las propiedades del control
Shape. Abrir un nuevo proyecto y en el formulario, colocar dos controles Label,
dos controles ComboBox, dos controles CommandButton, un control Frame, un
control Shape, un control CheckBox y un control CommonDialog.
Control Propiedad Valor
Form Caption Figuras geométricas
Label Caption Figura
Label Caption Estilo relleno
ComboBox Name Figura
Style 2-Dropdown List
List Rectángulo
Cuadrado
Ovalo
Círculo
Rectángulo redondeado

Ing. Hermas Herrera Callejas Página : 141 de


19
Cuadrado redondeado
ComboBox Name EstiloRelleno
Style 2-Dropdown List
List Sólido
Transparente
Líneas horizontales
Líneas verticales
Diagonales ascendentes
Diagonales descendentes
Cruces
Cruces diagonales
Frame Caption Muestra
Shape Nombre Forma
CheckBox Nombre CasillaOcultar
CommonDialog Nombre DiálogoColor
CommandButton Nombre BotónColor
Caption Color de relleno
CommandButton Nombre Salir
Caption Salir
La interfaz de usuario debe ser similar a la siguiente ilustración:

Asociar un procedimiento al control Figura accionado por el suceso Click.


Cuando el usuario despliegue este cuadro de lista y seleccione una opción, la
figura que aparece en el control Shape debe cambiar de forma.
Private Sub Figura_Clíck()
Select Case Figura.Text
Case “Rectángulo”
‘Cambia la forma a un rectángulo
Forma.Shape = 0
Case “Cuadrado”
‘Cambia la forma a un cuadrado
Forma.Shape = 1
Case “Ovalo”
‘Cambia la forma a un óvalo
Forma.Shape = 2
Case “Círculo”
‘Cambia la forma a un círculo
Forma.Shape = 3
Case “Rectángulo redondeado”
‘Cambia la forma a un rectángulo redondeado
Forma.Shape = 4
Case “Cuadrado redondeado”
‘Cambia la forma a un cuadrado redondeado

Ing. Hermas Herrera Callejas Página : 142 de


19
Forma.Shape = 5
End Select
End Sub
Asociar un procedimiento al control EstiloRelleno accionado por el suceso
Click. Cuando el usuario despliegue este cuadro de lista y seleccione una opción,
el estilo de relleno de la figura que muestra el control debe cambiar de aspecto.
Private Sub EstiloRelleno_Click()
Select Case EstiloRelleno.Text
Case “Sólido”
Forma.FillStyle = 0
Case “Transparente”
Forma.FillStyle = 1
Case “Líneas horizontales”
Forma.FillStyle = 2
Case “Líneas verticales”
Forma.FillStyle = 3
Case “Diagonales ascendentes”
Forma.FillStyle = 4
Case “Diagonales descendentes”
Forma.FillStyle = 5
Case “Cruces”
Forma.FillStyle = 6
Case “Cruces diagonales”
Forma.FillStyle = 7
End Select
EndSub
Asociar un procedimiento al control CasillaOcultar accionado por el suceso
Click. Cuando el usuario haga clic en este control, la figura que aparece en la
muestra debe aparecer o desaparecer.
Private Sub CasillaOcultar_Clic()
‘Muestra u oculta la figura
If CasillaOcultar.Value = 1 Then
Forma.Visible = False
Else
Forma.Visible = True
End If
End Sub
Asociar un procedimiento al botón de comando BotónColor accionado por el
suceso Click. Cuando el usuario haga clic en este botón, debe aparecer el cuadro
de diálogo Color en el que el usuario podrá seleccionar un color para el relleno de
la figura.
Private Sub BotónColor_Click()
DiálogoColor.Action = 3
Forma.FillColor = DiálogoColor.Color
End Sub
Hacer doble clic en el botón de comando Salir y en la ventana de código,
escribir el comando End.
Private Sub Salir_Click()
‘Finaliza la ejecución del programa
End

Ing. Hermas Herrera Callejas Página : 143 de


19
End Sub
Presionar la tecla F5 para ejecutar el programa. Desplegar el cuadro de lista
‘Figura’ y seleccionar la opción Elipse. Desplegar el cuadro de lista ‘Estilo relleno’
y seleccionar la opción ‘Cruces diagonales’. Hacer clic en el botón ‘Color de
relleno’ y aparecerá el cuadro de diálogo Color. Seleccionar un color y hacer clic
en Aceptar. Observar que el color de relleno de la figura adquiere el color elegido.

Ing. Hermas Herrera Callejas Página : 144 de


19
CAPITULO 8 – VISUAL BASIC – CUADROS DE DIALOGO
COMUNES

Todas las aplicaciones Windows utilizan cuadros de diálogo estándar que


permiten realizar operaciones comunes como abrir y guardar archivos, establecer
opciones de impresión y seleccionar colores y fuentes. Estos cuadros de diálogo
han sido diseñados dentro del sistema operativo y están disponibles para ser
utilizados en el diseño de cualquier aplicación mediante el uso del control
CommonDialog.

8.1 El Control CommonDialog.- Para utilizar estos cuadros de diálogo, todo lo


que se debe hacer es colocar un control CommonDialog en el formulario y llamar
al método apropiado. En tiempo de ejecución, cuando se invoca a un método, se
presenta un cuadro de diálogo, en tiempo de diseño, el control CommonDialog se
presenta como un icono en el formulario.
El control CommonDialog utiliza los siguientes métodos para visualizar
cuadros de diálogo:
Método Acción
ShowOpen Muestra el cuadro de diálogo Abrir
ShowSave Muestra el cuadro de diálogo Guardar como
ShowColor Muestra el cuadro de diálogo Color
ShowFont Muestra el cuadro de diálogo Fuente
ShowPrinter Muestra el cuadro de diálogo Imprimir
ShowHelp Muestra el cuadro de diálogo Ayuda

8.1.1 Colocar el Control CommonDialog en el Formulario.- Si el control


CommonDialog no aparece en el cuadro de herramientas, seguir estos pasos para
agregarlo:
1. Hacer clic en la opción Componentes del menú Proyecto. Visual Basic muestra
el cuadro de diálogo Componentes:
2. Desplazarse hasta la opción Microsoft Common Dialog Control 6.0 y hacer clic
para seleccionarlo.
3. Hacer clic en Aceptar y el control CommonDialog aparecerá al final del cuadro
de herramientas.
4. En el cuadro de herramientas, hacer doble clic sobre el control CommonDialog
para colocarlo en el formulario.
Al colocar el control CommonDialog en el formulario, podrá fijar su posición
pero no podrá modificar su tamaño, ya que se trata de un control que sólo es
visible durante el diseño pero no durante la ejecución.

Ing. Hermas Herrera Callejas Página : 145 de


19
8.2 Los Cuadros de Diálogo Abrir y Guardar.- Los cuadros de diálogo Abrir y
Guardar permiten manipular archivos de datos. Por medio de ellos se puede salvar
los datos, así como recuperarlos. La figura siguiente muestra el cuadro de diálogo
Abrir, por medio del cual, el usuario puede especificar una unidad, un directorio y
un nombre de archivo. En la parte inferior dispone de una lista de tipos de
archivos.

Usar el cuadro de diálogo Abrir para desplazarse a cualquier otro directorio


mediante la lista desplegable. Buscar y solicitar la ruta y un archivo.
En tiempo de ejecución, cuando el usuario selecciona un archivo y cierra el
cuadro de diálogo, se utiliza la propiedad .FileName para obtener la ruta y el
nombre del archivo seleccionado.
El control CommonDialog crea el mismo cuadro de diálogo Abrir que se utiliza
en otras aplicaciones. Por ejemplo, hacer clic con el botón derecho del mouse en
cualquier archivo que aparece en la lista de este cuadro y aparecerá un menú
contextual con el que podrá cambiar el nombre del archivo, copiarlo, cortarlo,
eliminarlo, etc
. El cuadro de diálogo Guardar como es idéntico al cuadro de diálogo Abrir,
pero difiere en los títulos de los botones que hay en la parte inferior derecha.

8.2.1 Propiedades
Propiedad Descripción
CancelError Asignar el valor True a esta propiedad y cuando el usuario haga clic en el
botón ‘cancelar’ del cuadro de diálogo, se generará un error que indica a
la aplicación que se quiere detener la operación actual. Todos los
cuadros de diálogo comunes generan el mismo error, el 32755 (la
constante Cancel). Proporcionar un gestor de errores que examine el

Ing. Hermas Herrera Callejas Página : 146 de


19
número del error y si es 32755, detenga la operación.
DefaultExt Esta propiedad se usa para especificar la extensión por defecto de los
archivos, como Txt o Doc, de manera que cuando el usuario abra o
guarde un archivo sin extensión, la especificada en esta propiedad se
añada al nombre del archivo.
Filter Esta propiedad se utiliza para especificar el tipo o tipos de archivos que
se mostrarán en la lista de archivos del cuadro de diálogo. Por ejemplo,
para mostrar sólo archivos de texto, debemos especificar:
Diálogo.Filter = “Archivos Txt|*.txt”
Observar que la barra vertical “|” separa la descripción (Archivos Txt) de la
extensión real (*.txt). En caso de que se quiera especificar más de un
filtro, cada uno de ellos debe estar separado del siguiente por la barra
vertical. Por ejemplo, para que la lista muestre archivos con las
extensiones Txt y Doc deberá espedficar:
Diálogo.Filter = “Archivos Txt|*.txt|Archivos Doc|*.Doc”
FilterIndex Cuando se especifica más de un filtro, el primero que aparece en la
propiedad Fiiter, pasa a ser el filtro por defecto. Filterlndex permite
especificar un filtro distinto del primero. Utilizando el ejemplo anterior, si a
Filterlndex le asignamos el valor 2, el cuadro de diálogo Abrir mostrará
archivos con extensión Doc por defecto.
FileName Luego de seleccionar o escribir un nombre de archivo y hacer clic en el
botón Aceptar del cuadro de diálogo, la ruta y el nombre de este archivo
quedan almacenados en la propiedad FileName. Posteriormente, esta
propiedad se puede utilizar para abrir el archivo y leer o escribir en él.
FileTitle Esta propiedad devuelve sólo el nombre del archivo que se va a abrir o
guardar, sin incluir la ruta de acceso.
MaxFileSize Por defecto, la máxima longitud que puede tener un nombre de archivo
incluida la ruta de acceso es de 256 bytes. En caso de que se necesite
una longitud mayor, especificar la nueva longitud en la propiedad
MaxFileSize.
InitDir Esta propiedad permite establecer un directorio de inicio desde el cual se
obtendrán los archivos cada vez que se activen los cuadros de diálogo
Abrir o Guardar. Si no se establece un directorio inicial, el directorio por
defecto será aquel donde se abrió o guardó el último archivo. Por
ejemplo, para que el directorio inicial sea “C:\Mis documentos\” se deberá
especificar:
Diálogo.InitDir = C:\Mis documentos\”
La siguiente sentencia establece como directorio inicial, la ruta de acceso
de la aplicación.
Diálogo.InitDir = App.Path
DialogTitle Esta propiedad permite especificar un título que se muestra en la barra
de titulo del cuadro de diálogo. Si no se especifica un titulo se utilizará el
titulo por defecto.

8.2.2 Indicadores.- Abierto el cuadro de diálogo, éste actuará de una u otra forma
dependiendo de una serie de indicadores, que el programador facilitará utilizando
la propiedad Flags. Para activar varios indicadores en la propiedad Flags, se debe
combinar sus valores mediante el operador lógico Or.
Constante Descripción
cdIOFNReadOnly Activa la opción “Abrir como sólo lectura” ubicada en la parte

Ing. Hermas Herrera Callejas Página : 147 de


19
inferior del cuadro de diálogo.
cdIOFNHideReadOnly Oculta la opción “Abrir como sólo lectura”.
cdIOFNFileMustExit Muestra un mensaje de advertencia si el usuario introduce un
nombre de archivo inexistente.
cdIOFNPathMustExit Muestra un mensaje de advertencia si el usuario introduce una
ruta de acceso inexistente.
cdIOFNNochangeDir Impide que el usuario cambie el directorio actual. Usar este
indicador para forzar al usuario a guardar los archivos en una
determinada carpeta.
cdIOFNCreatePrompt Muestra un mensaje al usuario preguntando si desea crear un
archivo que no existe.
cdIOFNAllowMultiselect Permite la selección de varios archivos en el cuadro de
diálogo Abrir. El usuario puede seleccionar más de un archivo
manteniendo presionada la tecla Shift y usando las teclas del
cursor. Al hacer clic en Aceptar, la propiedad FileName
contendrá una cadena con los nombres de los archivos
seleccionados, separados por espacios.
cdIOFNExtensionDiferent Indica que el usuario utilizó una extensión diferente a la
extensión especificada en la propiedad DefaultExt.
cdIOFNExplorer Muestra una ventana similar al del Explorador.
cdIOFNOverwritePrompt Muestra un mensaje preguntando al usuario si desea
sobrescribir en caso que el archivo seleccionado en el diálogo
‘Guardar como’ exista.
cdIOFNLongNames Permite utilizar nombres de archivo largos.
cdIOFNNoValidate Normalmente el cuadro de diálogo Abrir valida los nombres de
los archivos. Este indicador se activa para saltar este paso de
validación.
cdIOFNNoLongNames No permite utilizar nombres de archivos largos.
cdIOFNHelpButton Muestra el botón Ayuda en el cuadro de diálogo.
cdIOFNNoDeferenceLinks No quita la referencia de vínculos. Por defecto, elegir un
vínculo hace que se quite la referencia.
cdIOFNNoReadOnlyReturn Inhabilita la selección de archivos con el atributo de Sólo
lectura y que no están en una carpeta protegida contra
escritura.
8.3 El Cuadro de Diálogo Fuente.- Este cuadro de diálogo será de mucha
utilidad si la aplicación que se está diseñando trabaja con texto. Permite al usuario
seleccionar una fuente, tamaño o estilo de fuente y algunos efectos especiales
como color, subrayado o tachado.
El cuadro de diálogo Fuente proporciona al usuario las fuentes que hay en la
computadora.

Ing. Hermas Herrera Callejas Página : 148 de


19
Una vez cerrado el cuadro de diálogo, el control CommonDialog devuelve los
atributos de la fuente seleccionada por medio de las siguientes propiedades:
Propiedad Descripción

FontName Devuelve el nombre de la fuente seleccionada.


FontBold Será True si tiene puesto el atributo “Negrita”.
FontItalic Será True si tiene puesto el atributo “Cursiva”.
FontStrikethru Tendrá el valor True si se seleccionó el efecto “Tachado”.
Asignar la constante CFEffects a la propiedad Flags para
usar este efecto.
FontUnderline Tendrá el valor True si se seleccionó el efecto “Subrayado”.
Asignar la constante CFEffects a la propiedad Flags para
usar este efecto.
FontSize Devuelve el tamaño de la fuente seleccionada.
Color Devuelve el color seleccionado. Asignar la constante
CFEffects a la propiedad Flags para usar este efecto.
Las propiedades anteriores servirán para conocer la selección que ha
efectuado el usuario. También se puede dar un valor inicial antes de llamar al
cuadro de diálogo Fuente, de tal forma que aparezcan seleccionadas por defecto
las características que se indiquen.

8.3.2 Indicadores.- Por medio de la propiedad Flags se puede utilizar uno o


varios indicadores, mediante los cuales el cuadro de diálogo sabrá qué tipos de
letra puede seleccionar el usuario y qué acciones adicionales deberá llevar a cabo.
La siguiente tabla muestra estos indicadores:
Constante Descripción
cdICFTTOnIy Hace que el cuadro de diálogo muestre sólo fuentes True Type.
cdICFScreenFonts Hace que el cuadro de diálogo muestre sólo las fuentes disponibles
para la pantalla.

Ing. Hermas Herrera Callejas Página : 149 de


19
cdICFPrinterFonts Hace que el cuadro de diálogo muestre sólo fuentes disponibles
para impresora.
cdICFBoth Hace que el cuadro de diálogo muestre fuentes de pantalla y de
impresora.
cdICFScalableOnly Hace que en el cuadro de diálogo sólo aparezcan fuentes
escalables.
cdICFFixedPitchOnly Hace que el cuadro de diálogo muestre sólo fuentes de espaciado
fijo.
cdICFEEffects Permite usar las opciones de color, tachado y subrayado.
cdICFNoFaceSel No seleccionar los nombres de fuentes.
cdICFNoSizeSel No seleccionar el tamaño de fuentes.
cdICFNoStyleSel No seleccionar ningún estilo.
cdICFHelpButton Muestra el botón Ayuda en el cuadro de diálogo.

8.4 El cuadro de diálogo Imprimir.- Este cuadro de diálogo permite al usuario


elegir la impresora, el tamaño del papel, el número de copias que se desea
imprimir y qué páginas se van a imprimir.

Luego de que el usuario haya elegido la impresora y haya hecho clic sobre el
botón Aceptar, el control CommonDialog devuelve al programa el nombre de la
impresora y los atributos de impresión a través de las siguientes propiedades:
Propiedad Descripción
Copies (Copias) Especifica el número de copias que se van a imprimir.
FromPage (Desde la página) Especifica la página en la que comenzará la impresión
ToPage (Hasta la página) Especifica la página en la que se detendrá la impresión
HDC Específica el contexto del dispositivo de la impresora
seleccionada
PrinterDefault Asignar el valor True a esta propiedad y la nueva
impresora seleccionada por el usuario pasará a ser la
impresora por defecto
Dependiendo de los indicadores que se activen en la propiedad Flags, el
cuadro de diálogo Print actuará de una forma u otra.

8.4.1 Indicadores
Constante Descripción
cdIPDAIIPages Devuelve o establece el estado de la opción Todo.
cdIPDPageNums Devuelve o establece el estado de la opción Páginas.

Ing. Hermas Herrera Callejas Página : 150 de


19
cdIPDNoPageNums Desactiva el botón de opción Páginas.
cdIPDSelection Devuelve o establece el estado de la opción Selección.
cdIPDNoSelection Desactiva el botón de opción Selección.
cdIPDDisablePrintToFile
Desactiva la casilla de activación Imprimir en un archivo.
cdIPDHldePrintToFile Oculta la Casilla de activación Imprimir en un archivo.
cdIPDPrintToFile Devuelve o establece el estado de la casilla de activación
Imprimir en un archivo.
cdIPDCollate Devuelve o establece el estado de la casilla de activación
Intercalar copias.
cdIPDPrintSetup El sistema presenta directamente el cuadro de diálogo
Configurar impresora.
cdIPDUseDevModeCopies Desactiva Número de copias si la impresora no soporta la
impresión de múltiples copias.

8.5 El Cuadro de Diálogo Color.- Este cuadro de diálogo permite que el usuario
seleccione un color de una paleta o definir un color personalizado a partir de los
componentes rojo, verde y azul.
El cuadro de diálogo Color sólo tiene una propiedad: Color. Mediante esta
propiedad se podrá obtener el color seleccionado en tiempo de ejecución. Asignar
un color a la propiedad Color y asignar la constante CCRGBInit en la propiedad
Flags para que cuando se abra el cuadro de diálogo, aparezca seleccionado un
color inicial.
El cuadro de diálogo Color muestra sólo algunos colores, pero el usuario
puede definir un nuevo color haciendo clic en el botón Definir colores
personalizados.

8.5.1 Indicadores
Constante Descripción

cdCCFullOpen Muestra todo el cuadro de diálogo, incluyendo la


sección “Definir colores personalizados” que aparece
en la parte derecha del cuadro.
cdCCPreventFullOpen Impide que el usuario acceda a la sección “Definir
colores personalizados”.
cdCCRGBInit Establece el valor inicial del color, cuando se abre el
cuadro de diálogo.

Ing. Hermas Herrera Callejas Página : 151 de


19
8.6 Creación de un Mini Editor.- Se creará un mini editor. Al ejecutar esta
aplicación, la interfaz de usuario deberá presentar una barra de menús con las
opciones Archivo, Edición y Formato; una barra de herramientas con botones de
acceso directo y una barra de estado. El menú Archivo deberá contener comandos
que permitan crear, abrir, guardar e imprimir archivos. El menú Edición, comandos
que permitan copiar, cortar y pegar texto. El menú Formato, un comando que
permita aplicar estilos de fuente al texto seleccionado. Una barra de herramientas,
como se sabe, presenta un conjunto de botones que permiten ejecutar los
comandos más comúnmente utilizados; de manera que, la barra de herramientas
de nuestro mini editor presentará botones que permitirán crear, abrir, guardar e
imprimir archivos, así como también, copiar, cortar y pegar texto. La barra de
estado presentará tres paneles: el primer panel mostrará un mensaje relacionado
con la acción que estemos realizando; el segundo mostrará el texto MAYUS en
negrita si la tecla Caps Lock está activa y atenuada si no lo está; el tercer panel
mostrará la hora. Aspecto de la interfaz de usuario al ejecutar el programa
MiniEditor.

Seguir estos pasos:


1. Hacer clic en la opción Nuevo proyecto del menú Archivo para crear un nuevo
proyecto.
2. Hacer clic sobre el formulario para seleccionarlo.
3. Hacer clic sobre el botón Editor de menús para visualizar el cuadro de diálogo
Editor de menús. Crear la barra de menús según el siguiente detalle:
Caption Name Shortcut
&Archivo Archivo
....&Nuevo ArchivoNuevo Ctrl+N
....&Abrir ArchivoAbrir Ctrl+A
....- LíneaSeparadoral
....&Guardar ArchivoGuardar Ctrl+G
....- LíneaSeparadora2
....&Imprimir ArchivoImprimir Ctrl+I
....- LíneaSeparadora3
....&Salir ArchivoSalir Ctrl+S
&Edición Edición
....&Copiar EdiciónCopiar Ctrl+C
....C&ortar EdiciónCortar Ctrl+O

Ing. Hermas Herrera Callejas Página : 152 de


19
....&Pegar EdiciónPegar Ctrl+P
&Formato Formato
....&Fuente FormatoFuente Ctrl+F
4 Si el cuadro de herramientas no está activo, hacer clic en el botón Cuadro de
herramientas
5 Poner sobre el formulario una caja de texto. Para ello, hacer doble clic sobre el
control TextBox en el cuadro de herramientas.
Guardar el proyecto con el nombre MiniEditor.Vbp y el formulario con el
nombre MiniEditor.Frm. Cambiar las propiedades de los controles Form y TextBox
como sigue:
Control Propiedad Valor
Form Name Forml
Caption Mi Editor
Icon C:\Gráficos\Note14.icon
TextBox Name Text1
Multiline True
ScrollBars 3-Both
Text (Texto)
Crear la barra de herramientas. Para ello, colocar un control ImageList en el
formulario. Si el ícono del control ImageList no aparece en el cuadro de
herramientas, hacer clic en la opción Componentes del menú Proyecto. En el
cuadro de diálogo Componentes, habilitar la opción Microsoft Windows Common
Controls 6.0 y hacer clic en Aceptar.
1 En el cuadro de herramientas, hacer doble clic en el ícono del control
ImageList. Este aparece en el centro del formulario.
2 En el formulario, situar el puntero del mouse sobre el control ImageList y hacer
clic con el botón derecho del mouse.
3 En el menú emergente que aparece, seleccionar la opción Propiedades. Visual
Basic muestra el cuadro de diálogo Páginas de propiedades.
4 Este cuadro presenta tres pestañas: General, Imágenes y Color. En la pestaña
General indique la altura y ancho de los iconos que se incluirán en la barra de
herramientas. Esta propiedad es de sólo lectura si la barra de herramientas
contiene imágenes
5 Seleccionar la pestaña Imágenes para elegir las imágenes que se insertarán
en la barra de herramientas.
6 Hacer dic en el botón Insertar Imagen y Visual Basic visualizará el cuadro de
diálogo Seleccionar imagen, desde el cual se podrá seleccionar la imagen que
se incluirá en la barra de herramientas.

Ing. Hermas Herrera Callejas Página : 153 de


19
7 Continuar haciendo clic en este botón hasta completar las imágenes restantes,
finalmente hacer clic en el botón Aceptar.
8 En el cuadro de herramientas, hacer doble clic en el ícono del control ToolBar
para incluir una barra de herramientas en el formulario.
9 Hacer clic con el botón derecho del mouse sobre la barra de herramientas y en
el menú emergente que aparece, seleccionar la opción Propiedades.

Al hacer clic en la opción Propiedades, Visual Basic muestra el cuadro de


diálogo Páginas de propiedades.

Ing. Hermas Herrera Callejas Página : 154 de


19
Establecer las siguientes propiedades:
Propiedad Valor
ImageList ImageList1
Appearance 1-cc3D
Style 1-tbrFlat
Seleccionar la pestaña Botones y hacer clic en el botón Insertar botón. En
Key, ingresar un nombre que después se utilizará en el programa. En ToolTipText,
ingresar un texto descriptivo que servirá de ayuda al situar el puntero sobre el
botón, en la barra de herramientas; en Image ingresar un número que corresponda
al orden o número de la imagen a mostrar.
Nombre Index Key ToolTipText Image Enables
Imagenl 1 BotónNuevo Nuevo 1
Imagen2 2 BotónAbrir Abrir 2
Imagen3 3 BotónGuardar Guardar 3
Imagen4 4 BotónImprimir Imprimir 4
Imagen5 5 BotónCopiar Copiar 5 Deshabilitado
Imagen6 6 BotónCortar Cortar 6 Deshabilitado
Imagen7 7 BotónPegar Pegar 7
Dado que la barra de herramientas tendrá siete botones, hacer clic en el
botón Insertar botón siete veces y establecer las propiedades mostradas en el
cuadro anterior.

Ing. Hermas Herrera Callejas Página : 155 de


19
Luego de ingresar todas las propiedades para cada uno de los botones que
aparecerán en la barra de herramientas, hacer clic en Aceptar. La interfaz de
usuario tendrá aspecto de la figura mostrada:

Ahora, proceder a insertar un control StatusBar en el formulario.


1. En el cuadro de herramientas, hacer doble clic en el ícono del control
StatusBar. Una barra de estado aparece en la parte inferior del formulario.

2. En el formulario, desplazar el puntero del mouse sobre la barra de estado y


hacer clic con el botón derecho del mouse. En el menú emergente que
aparece, seleccionar la opción Propiedades. Visual Basic visualiza el cuadro de
diálogo Páginas de propiedades:

Ing. Hermas Herrera Callejas Página : 156 de


19
Seleccionar la pestaña Paneles y hacer clic en el botón Insertar panel. En
Minimun Width ingresar el ancho del panel. Hacer clic en el botón Examinar y
Visual Basic visualizará el cuadro de diálogo ‘Seleccionar imagen’ desde el cual
podrá seleccionar una imagen para el panel.
Ingresar los siguientes valores para cada uno de los paneles:
Panel Index MinimumWidth Picture
Panel 1 1 1800 C:\Graficos\Nota.bmp
Panel 2 2 1440 C:\Graficos\Mano_tecla.bmp
Panel 3 3 144000 C:\Graficos\Relojl .bmp
3. Finalmente, hacer clic en el botón Aceptar.
Para finalizar el diseño de la interfaz, insertar un control CommonDialog en el
formulario. Para ello, hacer doble clic sobre el ícono del Control CommonDialog en
el cuadro de herramientas. Si este control no aparece en el cuadro de
herramientas, seleccionar la opción Componentes del menú Proyecto. En el
cuadro de diálogo Componentes, habilitar la opción Microsoft Common Dialog
Control 6.0 y hacer clic en Aceptar.
Luego de diseñar la interfaz de usuario, asociar un procedimiento al
formulario. Cuando el usuario inicie el programa, este procedimiento se ejecutará
de manera automática.
1. Hacer doble clic en el formulario para visualizar la ventana de código.
2. Digitar el siguiente código:
Option Explicit
'La variable Modificado permitirá saber si hubo alguna modificación en el archivo
Public Modificado, rpta As Boolean
'La variable Canal servirá para obtener un número de canal libre
Public Canal As Integer
Private Sub Form_Load()
Dim i As Integer
'Centra el formulario en la pantalla
Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
'Establece el título de la ventana
Caption = "Mi Editor"
'Establece que el texto que se escriba sea de tipo arial
Text1.FontName = "Arial"
'Establece que por defecto 10 sea el tamaño del texto
Text1.FontSize = 10
'Desactiva la opción Copiar del menú Edición
EdiciónCopiar.Enabled = False
'Desactiva la opción Cortar del menú Edición
EdiciónCortar.Enabled = False
'Activa/desactiva la opción Pegar del menú Edición según el portapapeles si contiene o no
texto
EdiciónPegar.Enabled = (Len(Clipboard.GetText()) > 0)
'Desactiva la opción Fuente del menú Formato
FormatoFuente.Enabled = False
'Habilita/deshabilita botón pegar de barra herramientas según el portapapeles si contiene
o no texto
Toolbar1.Buttons(7).Enabled = (Len(Clipboard.GetText()) > 0)
'Asigna el estado de la tecla Caps Lock (Bloqueo Mayús) al panel 2 de la barra de estado

Ing. Hermas Herrera Callejas Página : 157 de


19
StatusBar1.Panels(2).Style = sbrCaps
‘Asigna la hora del sistema al panel 3 de la barra de estado
StatusBar1.Panels(3).Style = sbrTime
End Sub
Asociar un procedimiento al formulario accionado por el suceso Resize.
Cuando el usuario redimensione el formulario, el procedimiento redimensionará el
control Text1
1. Hacer doble clic en el formulario para visualizar la ventana de código.
2. Desplegar el cuadro de lista procedimientos y seleccionar el suceso Resize. La
ventana de código abre el procedimiento Form_Resize.
3. Digitar el siguiente código:
Private Sub Form_Resize()
Text1.Top = 440
Text1.Left = 0
Text1.Width = ScaleWidth
Text1.Height = ScaleHeight - 740
End Sub
Digitar un procedimiento para cada una de las opciones de los menús
Archivo, Edición y Formato. En el formulario, abrir el menú Archivo y hacer clic en
la opción Nuevo. En la ventana de código aparece el procedimiento
ArchivoNuevo_Click. En este procedimiento escribir el comando Call Nuevo:
Private Sub ArchivoNuevo_Click()
Call Nuevo ‘ Llama al procedimiento Nuevo
End Sub
Proceder de modo similar para las opciones Abrir, Guardar, Imprimir, Salir,
Copiar, Cortar, Pegar y Fuente.
Private Sub ArchivoAbrir_Click()
Call Abrir ‘Llama al procedimiento Abrir.
End Sub
Private Sub ArchivoGuardar_Click()
Call Guardar ‘Llama al procedimiento Guardar.
End Sub
Private Sub ArchivoImprimir_Click()
Call Imprimir ‘Llama al procedimiento Imprimir.
End Sub
Private Sub ArchivoSalir_Click()
End ‘Termina la ejecución del programa.
End Sub
Private Sub EdiciónCopiar_Click()
Call Copiar ‘Llama al procedimiento Copiar
End Sub
Private Sub EdiciónCortar_Click()
Call Cortar ‘Llama al procedimiento Cortar
End Sub
Private Sub EdiciónPegar_Click()
Call Pegar ‘Llama al procedimiento Pegar
End Sub
Private Sub FormatoFuente_Click()
Call Fuente ‘Llama al procedimiento Fuente

Ing. Hermas Herrera Callejas Página : 158 de


19
End Sub
Nota: Call transfiere el control a un procedimiento Sub o a un procedimiento
Function.
Asociar un procedimiento a la barra de herramientas. En el formulario, hacer
doble clic sobre la barra de herramientas. La ventana de código abre el
procedimiento Toolbar1_ButtonClick. Digitar el siguiente código:
Private Sub Toolbar1_ButtonClick(ByVal Button As MSConnect1Lib.Button)
Select Case Button.Key
Case "BotónNuevo"
Call Nuevo
Case "BotónAbrir"
Call Abrir
Case "BotónGuardar"
Call Guardar
Case "BotónImprimir"
Call Imprimir
Case "BotónCopiar"
Call Copiar
Case "BotónCortar"
Call Cortar
Case "BotónPegar"
Call Pegar
End Select
End Sub
Digitar el código de los procedimientos Nuevo, Abrir, Guardar, Imprimir,
Copiar, Cortar y Pegar.
Public Sub Nuevo()
'Procedimiento para editar un nuevo archivo y guardar las modificaciones realizadas en el
mismo
If Modificado Then
rpta = MsgBox("Desea guardar los cambios realizados en el documento?", vbYesNo,
"Mi Editor")
If rpta = vbNo Then
Exit Sub
Else
Call Guardar
End If
End If
Form1.Caption = "(Sin título)"
Text1.Text = " " 'Borra el contenido actual del cuadro de texto Text1
Text1.FontName = "Arial" 'Establece la fuente de tipo arial
Text1.FontSize = 10 'Establece el tamaño de la fuente
Text1.FontBold = False 'Desactiva la propiedad FontBold (Negrita)
Text1.FontItalic = False 'Desactiva la propiedad FontItalic (Cursiva)
Text1.FontUnderline = False 'Desactiva la propiedad FontUnderline(Subrayado)
Text1.FontStrikethru = False 'Desactiva la propiedad FontStrikethru(Tachado)
Text1.ForeColor = RGB(0, 0, 0) 'Establece un color (negro) para el texto
Modificado = False 'Desactiva el indicador de Modificado
End Sub
Public Sub Abrir()

Ing. Hermas Herrera Callejas Página : 159 de


19
'Procedimiento para abrir un archivo de texto
Dim Cadena1, Cadena2 As String
Dim Número1, Número2 As Long
Dim Estado1, Estado2, Estado3, Estado4 As Boolean
'Guarda las modificaciones realizadas en el archivo
If Modificado Then
rpta = MsgBox("Desea guardar los cambios realizados en el documento?", vbYesNo,
"Mi Editor")
If rpta = vbNo Then
Exit Sub
Else
Call Guardar
End If
End If
On Error GoTo ManipularErrorAbrir 'Si ocurre un error, ejecutar
ManipularErrorAbrir
'Muestra un mensaje en el primer panel de la barra de estado
StatusBar1.Panels(1).Text = "Abriendo archivo"
'Fijar las propiedades necesarias
With CuadroDeDiálogo
.CancelError = Trae 'Generará un error cuando pulse cancelar en diálogo abrir
.Filter = "Archivo de texto|*.txt|Todos los archivos|*.*" 'Filtros
.FilterIndex = 2 'Filtro por defecto
.DefaultExt = "Txt" 'Extensión por defecto que se añadirá al nombre del archivo
.Flags = cdlOFNFileMustExist 'El usuario solo podrá introducir nombres de archivos
existentes
.ShowOpen 'Visualiza el cuadro de diálogo Abrir
Canal = FreeFile 'Obtiene un número de canal libre
Open .FileName For Input As Canal
Form1.Caption = .FileName 'Muestra el nombre del archivo en la barra de título
del formulario
End With
Text1.Text = " " 'Borra el texto actual del control Te xt1
Input #Canal, Cadena1, Cadena2, Número1, Estado1, Estado2, Estado3, Estado4,
Número2
With Text1
.Text = Cadena1
.FontName = Cadena2
.FontSize = Número1
.FontBold = Estado1
.FontItalic = Estado2
.FontUnderline = Estado3
.FontStrikethru = Estado4
.ForeColor = Número2
End With
Close #Canal 'Cierra el archivo
StatusBar1.Panels(1).Text = " " 'Borra el mensaje del primer panel de la barra de
estado
Modificado = False 'Desactiva el indicador de modificado
Exit Sub
ManipularErrorAbrir:

Ing. Hermas Herrera Callejas Página : 160 de


19
If Err.Number = 32755 Then
StatusBar1.Panels(1).Text = " "
Exit Sub
Else
MsgBox "Error desconocido al abrir el archivo"
End If
End Sub
Public Sub Guardar()
'Procedimiento para guardar un archivo de texto
On Error GoTo ManipularErrorGuardar
StatusBar1.Panels(1).Text = "Guardando archivo"
With CuadroDeDiálogo
.CancelError = True
.DefaultExt = "txt"
.Filter = "Texto|*.txt|Todos los archivos|*.*"
'Muestra un mensaje preguntando si desea sobreescribir el archivo
.Flags = cdlOFNOverwritePrompt
.ShowSave 'Muestra el cuadro de diálogo Guardar como
Canal = FreeFile
Open .FileName For Output As #Canal
Form1.Caption = .FileName
End With
'Escribir en el archivo los datos necesarios
With Text1
Write #Canal, .Text, .FontName, .FontSize, .FontBold, .FontItalic, .FontUnderline,
.FontStrikethru, .ForeColor
End With
Close #Canal
StatusBar1.Panels(1).Text = " "
Modificado = False
Exit Sub
ManipularErrorGuardar:
If Err.Number = 32755 Then
StatusBar1.Panels(1).Text = " "
Exit Sub
Else
MsgBox "Error desconocido al guardar el archivo"
End If
End Sub
Public Sub Imprimir()
'Procedimiento para imprimir el aspecto actual del formulario
Dim copias As Byte
On Error GoTo ManipularErrorImprimir
StatusBar1.Panels(1).Text = "Imprimiendo archivo"
With CuadroDeDiálogo
.CancelError = True
.Flags = cdlPDNoSelection Or cdlPDNoPageNums Or cdlPDHidePrintToFile
.PrinterDefault = True
.ShowPrinter 'Muestra el cuadro de diálogo Imprimir
copias = .Copies
End With

Ing. Hermas Herrera Callejas Página : 161 de


19
Printer.Copies = copias 'Fijar el número de copias
Printer.Font = Text1.Font 'Tomar el estilo de texto
Printer.Print Text1.Text 'Imprimir el texto actual
Printer.EndDoc 'Fin de impresión
StatusBar1.Panels(1).Text = " "
Exit Sub
ManipularErrorImprimir:
If Err.Number = 32755 Then
StatusBar1.Panels(1).Text = " "
Exit Sub
Else
MsgBox "Error desconocido"
End If
End Sub
Public Sub Copiar()
'Una copia del texto seleccionado en el cuadro de texto Text1 pasa al portapapeles
(Clipboard)
Clipboard.SetText Text1.SelText
EdiciónPegar.Enabled = Trae 'Activa la opción Pegar del menú Edición
Toolbar1.Buttons(7).Enabled = Trae 'Activa el boton Pegar de la barra de
erramientas
End Sub
Public Sub Cortar()
'Una copia del texto seleccionado en el cuadro de texto Text1 pasa al portapapeles
(Clipboard)
Clipboard.SetText Text1.SelText
Text1.SelText = "" 'Borra el texto seleccionado
EdiciónCopiar.Enabled = False 'Inhabilita la opción Copiar del menú Edición
EdiciónPegar.Enabled = Trae 'Habilita la opción Pegar del menú Edición
FormatoFuente.Enabled = False 'Inhabilita la opción Fuente del menú Formato
Toolbar1.Buttons(5).Enabled = False 'Inhabilita el boton Copiar de la barra de
herramientas
Toolbar1.Buttons(6).Enabled = False 'Inhabilita el boton Cortar de la barra de
herramientas
Toolbar1.Buttons(7).Enabled = True 'Habilita el boton Pegar de la barra de
herramientas
End Sub
Public Sub Pegar()
'Transfiere texto desde el portapapeles hacia el cuadro de texto Text1
Text1.SelText = Clipboard.GetText()
End Sub
Public Sub Fuente()
'Procedimiento que modifica el estilo del texto
On Error GoTo ManipularErrorFuente
StatusBar1.Panels(1).Text = "Aplicando estilo"
With CuadroDeDiálogo
.CancelError = True
FontName = Text1.FontName 'Fijar el estilo actual en el cuadro de diálogo
.FontSize = Text1.FontSize
.FontBold = Text1.FontBold
.FontItalic = Text1.FontItalic

Ing. Hermas Herrera Callejas Página : 162 de


19
.FontUnderline = Text1.FontUnderline
.FontStrikethru = Text1.FontStrikethru
.Color = Text1.ForeColor
.Flags = cdlCFBoth Or cdlCFEffects
ShowFont 'Muestra el cuadro de diálogo Fuente
Text1.FontName = .FontName 'Aplica al cuadro de texto Text1 el estilo
elegido
Text1.FontSize = .FontSize
Text1.FontBold = .FontBold
Text1.FontItalic = .FontItalic
Text1.FontUnderline = .FontUnderline
Text1.FontStrikethru = .FontStrikethru
Text1.ForeColor = .Color
End With
StatusBar1.Panels(1).Text = " "
Exit Sub
ManipularErrorFuente:
If Err.Number = 32755 Then
StatusBar1.Panels(1).Text = " "
Exit Sub
Else
MsgBox "Error desconocido"
End If
End Sub
Asociar un procedimiento al formulario accionado por el suceso Unload.
Cuando el usuario finalice el programa, este procedimiento guardará las
modificaciones realizadas en el texto
Private Sub Form_Unload(Cancel As Integer)
If Modificado Then
rpta = MsgBox("Desea guardar los cambios realizados en el documento?", vbYesNo,
"Mi Editor")
If rpta = vbNo Then
Exit Sub
Else
Call Guardar
End If
End If
End Sub
Asociar un procedimiento al cuadro de texto Text1 accionado por el suceso
Change. Cuando el usuario realice alguna modificación en el cuadro de texto
Textl, este procedimiento activará la variable Modificado.
1. Hacer doble clic en el cuadro de texto Text1. La ventana de código muestra el
procedimiento Text1_Change.
2. Digitar el siguiente código:
Private Sub Text1_Change()
Modificado = True
End Sub
Asociar un procedimiento al cuadro de texto Text1 accionado por el suceso
MouseUp.
1. Hacer doble en el cuadro de texto Text1

Ing. Hermas Herrera Callejas Página : 163 de


19
2. Desplegar el cuadro de lista Procedimientos y seleccionar el suceso MouseUp.
La ventana de código abre el procedimiento Text1_MouseUp.
3. Digitar el siguiente código:
Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
'Habilita/Inhabilita el botón Copiar si Seleccionó/No seleccionó texto en el cuadro de texto
Text1.
Toolbar1.Buttons(5).Enabled = (Text1.SelLength > 0)
'Habilita/Inhabilita el botón Cortar si Seleccionó/No seleccionó texto en el cuadro de texto
Text1.
Toolbar1.Buttons(6).Enabled = (Text1.SelLength > 0)
'Habilita/Inhabilita la opción Copiar del menú Edición si Seleccionó/No seleccionó
'texto en el cuadro de texto Text1.
EdiciónCopiar.Enabled = (Text1.SelLength > 0)
'Habilita/Inhabilita la opción Cortar del menú Edición si Seleccionó/No seleccionó
'texto en el cuadro de texto Text1.
EdiciónCortar.Enabled = (Text1.SelLength > 0)
'Habilita/Inhabilita la opción Fuente del menú Formato si Seleccionó/No seleccionó
'texto en el cuadro de texto Text1.
FormatoFuente.Enabled = (Text1.SelLength > 0)
End Sub

8.7 Creación de un Programa que Visualiza Imágenes.- Crear un programa


que permita visualizar imágenes. Al ejecutar esta aplicación, la interfaz de usuario
debe presentar dos opciones: Abrir archivo y Salir. La opción Abrir archivo debe
permitir la selección de un archivo de imagen y la opción Salir finalizar la ejecución
del programa. La interfaz de usuario debe ser similar a la siguiente ilustración:

Observar que en este formulario hay dos etiquetas: Label1 y Label2; un


control PictureBox y un control CommonDialog. Modificar las propiedades de estos
controles:
Control Propiedad Valor
Form Name Form1
Caption Imágenes
BorderStyle 5-Sizable ToolWindow
BackColor &H80000001&
Label Name Label1
AutoSize True
BackStyle 0-Transparent
BorderStyle 0-None
Caption Abrir imagen
Font Comic Sans MS

Ing. Hermas Herrera Callejas Página : 164 de


19
ForeColor &H000000FF&
Label Name LabeI2
AutoSize True
BackStyle 0-Transparent
BorderStyle 0-None
Caption Salir
Font Comic Sans MS
ForeColor &H000000FF&
PictureBox Name Picture1
BorderStyle 0-None
Visible False
Luego de diseñar la interfaz de usuario, escribir el código de la aplicación.
Asociar un procedimiento al control Label1. En el formulario, hacer doble clic
sobre el control Label1 En la ventana de código, desplegar el cuadro de lista
Procedimientos y seleccionar el suceso MouseUp. Escribir el siguiente código:
Private Sub Label1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As
Single)
On Error GoTo ManipularErrorAbrir
Picture1.Picture = LoadPicture() 'Limpia el control Picture Box
CommonDialog1.CancelError = True
CommonDialog1.DialogTitle = "Abrir imágenes"
CommonDialog1.Filter = "Imagenes (.gif)|*.gif|Imágenes (.jpg)|*.jpg|Imágenes
(.bmp)|*.bmp|Todos los archivos (*.*)|*.*"
CommonDialog1.FilterIndex = 3
CommonDialog1.ShowOpen 'Muestra el cuadro de diálogo Abrir
'Inserta la imágen elegida en el control picture box
Picture1.Picture = LoadPicture(CommonDialog1.FileName)
Picture1.Visible = True 'Hace visible el control PictureBox
Label1.ForeColor = &HFF& 'Asigna el color rojo al control Label1
Exit Sub
ManipularErrorAbrir:
If Err.Number = 32755 Then
Exit Sub
Else
MsgBox "Error desconocido al abrir el archivo"
End If
End Sub
Asociar un procedimiento al control LabeI2 accionado por el suceso
MouseUp. Cuando el usuario suelte el botón del mouse en el control Label2, la
ejecución del programa debe finalizar.
Private Sub Label2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As
Single)
Unload Me 'Cierra el formulario
End 'Finaliza la ejecución del programa
End Sub
Asociar un procedimiento al control Labell accionado por el suceso
MouseMove. Cuando el usuario mueva el puntero del mouse sobre el control
Labell, el texto que muestra este control debe cambiar de color.
Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As
Single)

Ing. Hermas Herrera Callejas Página : 165 de


19
'Al mover el puntero del mouse sobre el control label1 el color amarillo se asigna al control
label1
Label1.ForeColor = &HFFFF& 'Color amarillo
End Sub
Asociar un procedimiento al control Label2 accionado por el suceso
MouseMove. Cuando el usuario mueva el puntero del mouse sobre el control
Label2, el texto que muestra este control debe cambiar de color.
Private Sub Label2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As
Single)
'Al mover el puntero del mouse sobre el control label2 el color amarillo se asigna al control
label2
Label2.ForeColor = &HFFFF& 'Color amarillo
End Sub
Asociar un procedimiento al formulario accionado por el suceso MouseMove.
Cuando el usuario desplace el puntero del mouse sobre el formulario, el color del
texto de los controles Label debe cambiar a rojo.
1. Hacer doble clic en el formulario.
2. En la ventana de código, desplegar el cuadro de lista Procedimientos y
seleccionar el suceso MouseMove. La ventana de código abre el procedimiento
Form_MouseMove.
3. Digitar el siguiente código:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As
Single)
'Al mover el puntero del mouse sobre el formulario, asigna el color rojo a los controles
Label1 y Label2
Label1.ForeColor = &HFF&
Label2.ForeColor = &HFF&
End Sub
Asociar un procedimiento al control Picture1 accionado por el suceso Resize.
Cuando el usuario modifique el tamaño del control Picture1, el tamaño del
formulario debe cambiar en función del tamaño del control PictureBox.
1. Hacer doble clic en el control PictureBox.
2. En la ventana de código, desplegar el cuadro de lista Procedimientos y
seleccionar el suceso Resize. La ventana de código abre el procedimiento
Picture1_Resize.
3. Digitar el siguiente código:
Private Sub Picture1_Resize()
'Redimensiona el tamaño del formulario en función del tamaño del control PictureBox
Form1.Top = 0
Form1.Left = 0
Form1.Width = Picture1.Width + 360
Form1.Height = Picture1.Height + 960
End Sub
Guardar el proyecto con el nombre Imagen.Vbp y el formulario con el nombre
Imagen.Frm.
Presionar la tecla F5 para ejecutar el programa.
Desplazar el puntero del mouse sobre la opción Abrir imagen (observar que
“Abrir imagen” adopta el color amarillo) y hacer clic. En el cuadro de diálogo Abrir,
seleccionar una imagen. Por ejemplo, seleccionar la imagen “Imagen1” que se

Ing. Hermas Herrera Callejas Página : 166 de


19
adjunta con las prácticas de laboratorio. Cada vez que seleccione una nueva
imagen el formulario cambiará de tamaño.

Ing. Hermas Herrera Callejas Página : 167 de


19
CAPITULO 9 – VISUAL BASIC – EL CONTROL MSFlexGrid

9.1 El control MSFlexGrid (rejilla).- El control MSFlexGrid permite desarrollar


aplicaciones que requieran un control parecido a una hoja de cálculo. La siguiente
figura muestra un control MSFlexGrid:

Fila fija Filas no fijas


Columna fija Columnas no fijas
Observar que este control tiene dos clases de filas o columnas: fijas y no
fijas. Por defecto, la fila superior y la columna situada más a la izquierda son fijas
y están reservadas para mostrar los títulos. Para definir el número de filas y
columnas que tendrá este control se utiliza las propiedades Rows y Cols,
respectivamente.

9.2 Propiedades
Propiedad Descripción
AllowUserResizing Esta propiedad permite redimensionar el ancho de las columnas o la
altura de las filas. Para ello, en la columna o fila fija, situar el puntero
del Mouse sobre la línea divisoria de las celdas y arrastrar hasta
obtener el tamaño adecuado. La propiedad AllowUserResizing
presenta estas opciones:
0-flexResizeNone El usuario no puede cambiar el tamaño de las
celdas.
1-flexResizeColumns El usuario sólo puede cambiar el ancho de las
columnas.
2-flexResizeRows El usuario sólo puede cambiar la altura de las
filas.
3-flexResizeBoth El usuario puede cambiar el tamaño de filas y
columnas.
Cols Determina el número total de columnas que tendrá el control
MSFlexGrid.
Rows Determina el número total de filas que tendrá el control MSFlexGrid.
FixedCols Define el número total de columnas fijas no desplazables que tendrá
el control.
FixedRows Determina el número total de filas fijas no desplazables que tendrá el
control.
FormatString Permite establecer en tiempo de diseño el ancho de las columnas, las
alineaciones y el texto de las filas y columnas fijas del control
MSFlexGrid. La propiedad FormatString está compuesta por dos
segmentos separados por barras verticales (|). El texto entre dos

Ing. Hermas Herrera Callejas Página : 168 de


19
barras define una nueva columna o fila y puede contener también los
siguientes caracteres de alineación:
< Alinea la columna a la izquierda.
A Centra la columna.
> Alinea la columna a la derecha.
ColWidth Permite ajustar el ancho de una celda. Especificar en twips el nuevo
ancho.
RowHeight Permite ajustar la altura de una celda. Especificar en twips la nueva
altura de la celda. Por ejemplo, las siguientes instrucciones amplían la
segunda fila y la tercera columna de la rejilla a 1500 twips:
Número de la fila cuyo tamaño es
modificado.
MSFlexGrid1.RowHeight(2) = 1500
MSFlexGrid1.ColWidth(3) = 1500 Medidas en twips.
Número de la columna cuyo tamaño es
modificado.
ScrollBars Permite utilizar barras de desplazamiento para tener acceso a
cualquier parte del control MSFlexGrid. Para ello, asignar uno de
estos valores a la propiedad ScrollBars:
0-FlexScrollBarNone Hace que la rejilla no tenga barra de
desplazamiento.
1-FlexScrollBarHorizontal Hace que la rejilla tenga una barra de
desplazamiento
horizontal.
2-FlexScrollBarVertical Hace que la rejilla tenga una barra de
desplazamiento
vertical.
3-FlexScrollBarBoth Hace que la rejilla tenga ambas barras de
desplazamiento.
SelectionMode Permite restringir la forma en que serán seleccionadas las celdas.
Para ello, asignar uno de estos valores a la propiedad SelectionMode:
0-FlexSelectionFree Permite seleccionar celdas libremente,
como en una
hoja de cálculo.
1-FlexSelectionByRow Fuerza la selección por filas.
2-FlexSelectionByColumn Fuerza la selección por columnas.
FillStyle Determina si al establecer la propiedad TextMatrix o una de las
propiedades de formato de celda del control MSFlexGrid los cambios
se aplican a todas las celdas seleccionadas. La propiedad FillStyle
presenta estas opciones:
0-FlexFillSingle Los cambios afectan sólo a la celda activa.
1-FlexFillRepeat Los cambios afectan a todas las celdas
seleccionadas.
9.3 Sucesos
Suceso Descripción
EnterCell Este suceso se produce cuando se selecciona una nueva celda.
LeaveCell Este suceso se produce cuando se abandona una celda.

9.4 Introducir datos en una celda.- La intersección de una fila y una columna
conforman una celda. Para introducir un valor en una celda se utiliza la propiedad

Ing. Hermas Herrera Callejas Página : 169 de


19
TextMatrix. Por ejemplo, para introducir la palabra “Préstamo” en la celda 0, 2 (fila
0, columna 2) escribir la siguiente instrucción de programa:
MSFlexGrid1.TextMatrix(0,2) = ”Préstamo”
Para introducir el número 3250 en la celda 3, 2 (fila 3, columna 2) escribir la
siguiente instrucción:
MSFlexGrid1.TextMatrix(3, 2) = 3250

9.4.1 Selección de celdas.- Para realizar modificaciones en una celda o en un


rango de celdas, lo primero que se debe hacer es seleccionarlas utilizando código
de programa. Para seleccionar una única celda se utiliza las propiedades Row y
Col. En la propiedad Row asignar el número de la fila y en la propiedad Col el
número de columna. La celda seleccionada será la intersección de la fila y la
columna especificadas. Por ejemplo, para seleccionar la celda 3, 2 utilizar estas
instrucciones:
MSFlexGrid1.Row = 3
MSFlexGrid1.Col = 2
La siguiente figura muestra la selección realizada:

Para seleccionar un rango de celdas, primero especificar las coordenadas de


la celda superior izquierda utilizando las propiedades Row y Col. Luego,
especificar las coordenadas de la celda inferior derecha del rango utilizando las
propiedades RowSel y ColSel. Por ejemplo, las siguientes instrucciones
seleccionarán un rango de 8 celdas (celda 3, 2 a 6, 3):
MSFlexGrid1.Row = 3
MSFlexGrid1.Col = 2
MSFlexGrid1.RowSel = 6
MSFlexGrid1.ColSel = 3
La siguiente figura muestra la selección anterior:

Observar que, de todas las celdas seleccionadas, la primera no aparece


resaltada. Esta se distingue del resto porque también es la celda activa.
Para restringir la forma en que se seleccionan las celdas utilizar la propiedad
SelectionMode en la Ventana Propiedades.

Ing. Hermas Herrera Callejas Página : 170 de


19
9.4.2 Formato de celdas.- Utilice la propiedad FillStyle para determinar si un
formato se ha de aplicar a la celda activa o a todas las celdas seleccionadas. Por
ejemplo, para dar formato a un rango de celdas, incluya la siguiente instrucción de
programa después de haber seleccionado el rango:
MSFlexGrid1.FillStyle = flexFillRepeat
El valor flexFillRepeat permite dar formato simultáneo a más de una celda.
Después de ejecutar esta instrucción, proceda a dar formato a las celdas
seleccionadas. El valor por defecto, flexFillSingle, permite dar formato a una única
celda.
Las siguientes propiedades permiten dar formato a las celdas seleccionadas:
Propiedad Formato
CellFontBold Establece el estilo negrita al texto de las celdas seleccionadas.
Ejemplo:
MSFlexGrid1.CellFontBold = True
CellFontItalic Establece el estilo cursiva al texto de las celdas seleccionadas.
Ejemplo:
MSFlexGrid1.CellFontItalic = True
CellFontUnderlíne Establece el estilo subrayado al texto de las celdas seleccionadas.
Ejemplo:
MSFlexGrid1.CellFontUnderline = True
CellAlignment Permite alinear el texto de las celdas seleccionadas. Esta
propiedad puede adoptar los siguientes valores:
Valor Descripción
0 Izquierda Arriba
1 Izquierda Centro
2 Izquierda Abajo
3 Centro Arriba
4 Centro Centro
5 Centro Abajo
6 Derecha Arriba
7 Derecha Centro
8 Derecha Abajo
9 General (cadenas Izquierda Centro, números Derecha Centro). Ejemplo:
MSFlexGrid1.CellAlignment = 7
CellFontName Establece el estilo de letra que se va a usar en las celdas
seleccionadas. Ejm. MSFlexGrid1.CellFontName = ”Curier New”
CellFontSize Establece el tamaño de la fuente, en puntos. Ejemplo:
MSFlexGrid1 .CellFontSize = 14
CellForeColor Establece el color del texto de las celdas seleccionadas. Ejemplo:
MSFlexGrid1.CellForeColor = “Red”
CellBackColor Establece el color del fondo de las celdas seleccionadas. Ejemplo:
MSFIexGrid1.CellBackColor = “Blue”
ColAlignment Permite alinear una columna entera. Por ejemplo, la siguiente
sentencia alinea hacia la derecha el texto de la segunda columna:
MSFlexGrid1.ColAlignment(1) = 7

9.5 Despliegue de información en las celdas.- Para ver con detalle la manera
de utilizar el control MSFlexGrid, se desarrollará una aplicación que calcule la

Ing. Hermas Herrera Callejas Página : 171 de


19
cantidad requerida como pagos periódicos para amortizar un préstamo en un
periodo de tiempo especificado. Los datos que hay que introducir son el Capital
prestado, el tipo de interés por periodo y el plazo (número de cuotas a pagar). Este
programa supone que todos los plazos son iguales.
El cálculo se basa en la fórmula:
Ci (1  i ) N
P
(1  i ) N  1
Donde:
P = pago periódico (cuota)
i = tipo de interés periódico
C = préstamo (Capital prestado)
N = número de pagos (plazo)
Diseñar una interfaz similar a la siguiente ilustración:

1. Hacer clic en el comando ‘Nuevo proyecto’ del menú Archivo para crear una
nueva aplicación.
2. Guardar el formulario con nombre Plandepagos.frm y la aplicación con nombre
Plandepagos.vbp.
3. Hacer clic en el comando Componentes del menú Proyecto. Pulsar sobre la
ficha Controles del cuadro de diálogo Componentes
4. Introducir una marca de verificación en el elemento Microsoft FlexGríd Control
6.0 y hacer clic en Aceptar.
5. Añadir un control MSFlexGrid al formulario y ajustar el tamaño del control
MSFlexGrid.
6. Con el control MSFlexGrid seleccionado asignar las siguientes propiedades:
Propiedad Valor
Name Rejilla
AllowUserResizing 1- FlexResizeColumns
Cols 7
FormatString " | > Capital|>Interes| >Amortización|>Cuotas| |"
Rows 20

Ing. Hermas Herrera Callejas Página : 172 de


19
ScrollBars 3-FlexScrollBarBoth
7. Añadir tres controles Label y tres controles TextBox al formulario. Asignar estas
propiedades:
Control Propiedad Valor
Form Name Form1
Caption Plan de pagos
Label Name Label1
Caption Capital
Label Name Label2
Caption Nro de periodos (Plazo)
Label Name Label3
Caption Interés por periodo
TextBox Name Capital
Text
TextBox Name Periodo
Text
TextBox Name Interés
Text
Completar a 9 los controles Image en el formulario y asignarles los
siguientes nombres:
Boton Salir SalirB

SalirS CalcularB CalcularI CalcularS Calcular


Observar que hay dos controles Image con el mismo nombre (Botón). Estos
forman parte de un array de controles.
Hacer clic en el control Image Botón(0). En la propiedad Picture
hacer clic en el botón del lado derecho. Buscar y seleccionar el gráfico
CalcularIn.bmp y hacer clic en Abrir.
Asignar los siguientes gráficos a cada uno de los controles Image:
CalcularIn.bmp Salir.bmp SalirBaj.bmp SalirSob.bmp Calcular.bmp CalcularBaj.bmp
CalcularSob.bmp

Ing. Hermas Herrera Callejas Página : 173 de


19
El siguiente cuadro resume las propiedades asignadas a cada uno de los
controles:
Control Propiedad Valor
Image Name Boton
Index 0
Picture CalcularIn.bmp
Image Name Boton
Index 1
Picture Salir.bmp
Image Name Salir
Picture Salir.bmp
Visible False
Image Name SalirB
Picture SalirBaj.bmp
Visible False
Image Name SalirS
Picture SalirSob.bmp
Visible False
Image Name Calcular
Picture Calcular.bmp
Visible False
Image Name CalcularB
Picture CalcularBaj.bmp
Visible False
Image Name CalcularS
Picture CalcularSob.bmp
Visible False
Image Name CalcularI
Picture CalcularIn.bmp
Visible False
Luego de asignar las propiedades a cada uno de los controles Image,
seleccionar el control MSFlexGrid y ampliarlo de modo que COPE el ancho del
formulario, cubriendo algunos controles Image que, al no ser visibles en ejecución,
no serán afectados en su funcionalidad. El formulario quedará similar a la
siguiente ilustración:

Ing. Hermas Herrera Callejas Página : 174 de


19
Asociar un procedimiento al formulario.
1. Hacer doble clic en el formulario y digitar el siguiente código:
Dim Cap, i, n, pag As Double
Dim sw1, sw2, sw3 As Boolean
Private Sub Form_Load()
Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
End Sub
Asociar procedimientos al cuadro de texto Capital accionados por los
sucesos Change y KeyPress. Sólo debe permitir el ingreso de valores numéricos
en el cuadro de texto Capital y al presionar la tecla Enter, el cursor debe ubicarse
en la casilla Periodo.
1. Hacer doble clic en el cuadro de texto Capital. La ventana de código abre el
procedimiento Capital_change.
2. Digitar el siguiente procedimiento:
Private Sub Capital_Change()
If IsNumeric(Capital.Text) And Val(Capital.Text) >= 0 Then
Cap = Val(Capital.Text)
sw1 = True
If sw1 And sw2 And sw3 Then
Boton(0).Picture = Calcular.Picture
End If
Else
Boton(0).Picture = CalcularI.Picture
MsgBox "Introduzca solo números positivos", , "Error de ingreso"
sw1 = False
End If
End Sub
Luego seleccionar el suceso KeyPress y digitar el siguiente código
Private Sub Capital_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Periodo.SetFocus
End If
End Sub
Asociar procedimientos al cuadro de texto Periodo accionados por los
sucesos Change y KeyPress. Sólo se debe permitir el ingreso de valores
numéricos en el cuadro de texto Periodo y al presionar la tecla Enter, el cursor
debe ubicarse en la casilla Interes.

Ing. Hermas Herrera Callejas Página : 175 de


19
1. Hacer doble en el cuadro de texto Periodo. La ventana de código abre el
procedimiento Periodo_Change.
2. Digitar el siguiente procedimiento:
Private Sub Periodo_Change()
If IsNumeric(Periodo.Text) And Val(Periodo.Text) >= 0 Then
n = Val(Periodo.Text)
sw2 = True
If sw1 And sw2 And sw3 Then
Boton(0).Picture = Calcular.Picture
End If
Else
Boton(0).Picture = CalcularI.Picture
MsgBox "Introduzca solo números positivos", , "Error de ingreso"
sw2 = False
End If
End Sub
Luego seleccionar el suceso KeyPress y digitar el siguiente procedimiento
Private Sub Periodo_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Interes.SetFocus
End If
End Sub
Asociar procedimientos al cuadro de texto Interés accionados por los
sucesos Change y KeyPress. Sólo debe permitir el ingreso de valores numéricos
en el cuadro de texto Interés y al presionar la tecla Enter, el cursor debe ubicarse
en la casilla Capital.
1. Hacer doble en el cuadro de texto Interés. La ventana de código abre el
procedimiento Interés_Change.
2. Digitar el siguiente procedimiento:
Private Sub Interes_Change()
If IsNumeric(Interes.Text) And Val(Interes.Text) >= 0 Then
i = Val(Interes.Text) / 100
sw3 = True
If sw1 And sw2 And sw3 Then
Boton(0).Picture = Calcular.Picture
End If
Else
Boton(0).Picture = CalcularI.Picture
MsgBox "Introduzca solo números positivos", , "Error de ingreso"
sw3 = False
End If
End Sub
Luego seleccionar el suceso KeyPress y digitar el siguiente código
Private Sub Interes_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Capital.SetFocus
End If
End Sub

Ing. Hermas Herrera Callejas Página : 176 de


19
Asociar un procedimiento al array de controles Botón accionado por el
suceso MouseMove. Cuando el usuario desplace el puntero del mouse sobre uno
de estos dos botones, este procedimiento se ejecutará y cambiará el gráfico del
botón.
1. Hacer doble clic sobre uno de los controles Botón.
2. En la ventana de código, desplegar el cuadro de lista Procedimientos y
seleccionar el suceso MouseMove.
3. Digitar el siguiente procedimiento:
Private Sub Boton_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single,
Y As Single)
Select Case Index
Case 0
If Boton(0).Picture = Calcular.Picture Then
Boton(0).Picture = CalcularS.Picture
End If
Boton(1).Picture = Salir.Picture
Case 1
If Boton(0).Picture = CalcularS.Picture Then
Boton(0).Picture = Calcular.Picture
End If
Boton(1).Picture = SalirS.Picture
End Select
End Sub
Asociar un procedimiento al formulario accionado por el suceso
MouseMove. Cuando el usuario desplace el puntero del mouse sobre el
formulario, este procedimiento se ejecutará y cambiará los gráficos de los
controles Botón.
1. Hacer doble clic en el formulario.
2. En la ventana de código, desplegar el cuadro de lista Procedimientos y
seleccionar el suceso MouseMove.
3. Digitar el siguiente procedimiento:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As
Single)
If Boton(0).Picture = CalcularS.Picture Then
Boton(0).Picture = Calcular.Picture
End If
Boton(1).Picture = Salir.Picture
End Sub
Asociar un procedimiento al array de controles Botón accionado por el
suceso MouseDown. Cuando el usuario sitúe el puntero del mouse sobre el botón
Botón(0) o Botón(1) y pulse el botón izquierdo del mouse, este procedimiento se
ejecutará cambiando el gráfico del control bajo el puntero y se es Boton(0)
calculará y desplegará el cuadro de amortizaciones además de cambiar el puntero
del mouse mientras dura el cálculo.
1. Hacer doble clic sobre uno de los controles Botón.
2. En la ventana de código, desplegar el cuadro de lista Procedimientos y
seleccionar el suceso MouseDown.
3. Digitar el siguiente código:

Ing. Hermas Herrera Callejas Página : 177 de


19
Private Sub Boton_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single,
Y As Single)
Dim fila As Integer
Dim sumaamort, sumacuotas, amort, Intere, sumaint As Double
Cap = Val(Capital.Text)
Select Case Index
Case 0
If Boton(0).Picture = CalcularS.Picture Then
Boton(0).Picture = CalcularB.Picture
MousePointer = 11
limpiarrejilla
pag = (Cap * i * (1 + i) ^ n) / ((1 + i) ^ n - 1)
sumaint = 0: sumaamort = 0: sumacuotas = 0
With Rejilla
For fila = 1 To n
.TextMatrix(fila, 0) = fila
.TextMatrix(fila, 1) = Format(Cap, "###,##0.00")
Intere = Cap * i
.TextMatrix(fila, 2) = Format(Intere, "#,##0.00")
amort = pag - Intere
.TextMatrix(fila, 3) = Format(amort, "#,##0.00")
.TextMatrix(fila, 4) = Format(pag, "#,##0.00")
Cap = Cap - amort
sumaint = sumaint + Intere
sumaamort = sumaamort + amort
sumacuotas = sumacuotas + pag
Next fila
.TextMatrix(fila, 2) = Format(sumaint, "##,##0.00")
.TextMatrix(fila, 3) = Format(sumaamort, "##,##0.00")
.TextMatrix(fila, 4) = Format(sumacuotas, "###,##0.00")
End With
MousePointer = 0
End If
Case 1
Boton(1).Picture = SalirB.Picture
End Select
End Sub
Asociar otro procedimiento al array de controles Botón accionado por el
suceso MouseUp. Cuando el usuario sitúe el puntero del mouse sobre el botón
Botón(0) o Botón(1), pulse y suelte el botón izquierdo del mouse, se ejecutará este
procedimiento y cambiará el gráfico del control Botón(0) o finalizará la ejecución
del programa.
1. Hacer doble clic sobre uno de los controles Botón.
2. En la ventana de código, desplegar el cuadro de lista Procedimientos y
seleccionar el suceso MouseUP.
3. Digitar el siguiente código:
Private Sub Boton_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y
As Single)
Select Case Index
Case 0

Ing. Hermas Herrera Callejas Página : 178 de


19
If Boton(0).Picture = CalcularB.Picture Then
Boton(0).Picture = Calcular.Picture
End If
Case 1
End
End Select
End Sub
Digitar el procedimiento LimpiarRejilla. Este procedimiento limpiará todos
los datos de las celdas en el control MSFlexGrid.
Public Sub limpiarrejilla()
With Rejilla
.Rows = n + 4
.Row = 1
.Col = 0
.RowSel = .Rows - 1
.ColSel = .Cols - 1
.FillStyle = flexFillRepeat
.Text = ""
End With
End Sub
Presionar la tecla F5 para ejecutar el programa. Introducir el Capital, Nro.
de periodos (Plazo) y el Interés por periodo.

Ing. Hermas Herrera Callejas Página : 179 de


19
9.6 Edición de datos en las celdas.- En el programa anterior se ha utilizado el
control MSFlexGrid para mostrar datos, pero observar que los datos contenidos en
las celdas no pueden ser editados. Esta limitación puede superarse fácilmente
integrando el control TextBox con el control MSFlexGrid.
Para ello, se usan las propiedades CellWidth, CellHeight, CellTop y CeIlLeft
del control MSFlexGrid. Las propiedades CellWidth, CellHeight proporcionan
información sobre el ancho y alto de la celda seleccionada en el control
MSFlexGrid; mientras que las propiedades CellTop y CellLeft proporcionan
información sobre la ubicación de la celda.
Si se asigna a un control TextBox las propiedades de tamaño y ubicación
de la celda seleccionada, el control se situará sobre ella de manera tal que el
usuario tendrá la impresión de que está editando la celda directamente.
Una vez situado el control TextBox sobre la celda, el contenido de la celda
se copia sobre el control TextBox. Cuando el usuario se mueve a otra celda, se
copia el contenido del control TextBox a la celda que abandona y después se
coloca el control TextBox sobre la celda que se acaba de seleccionar.
La siguiente aplicación mostrará los pasos para integrar el control TextBox
con el control MSFlexGrid. El programa debe permitir el mantenimiento de los
datos almacenados en el archivo de alumnos cuyo nombre se definió al crearlo en
una práctica anterior.
Seguir estos pasos:
1. Hacer clic en el comando Nuevo proyecto del menú Archivo para crear una
nueva aplicación.
2. Añadir cinco controles CommandButton y un control TextBox en el formulario.
3. Hacer clic en el comando Componentes del menú Proyecto. Visual Basic
muestra el cuadro de diálogo Componentes.
4. Hacer clic en el cuadro de verificación a la izquierda del elemento Microsoft
Common Dialog Control 6.0 y del elemento Microsoft FlexGrid Control 6.0,
luego hacer clic en Aceptar.
5. En el cuadro de herramientas, hacer doble clic sobre el control MSFlexGrid.
En el formulario, ajustar el tamaño del control MSFlexGrid.
6. Añadir un control CommonDialog y tres controles Label al formulario
7. Asignar las siguientes propiedades a cada uno de los controles:
Control Propiedad Valor .
Form Name MantDatos
Caption Mantenimiento del archivo de alumnos
TextBox Name Campo
BorderStyle 0-None
Text “”
Visible False
CommandButton Name Corrsultar
Caption Consultar
CommandButton Name Guardar
Caption Guardar
CommandButton Name Modificar
Caption Modificar
CommandButton Name Eliminar
Caption Eliminar

Ing. Hermas Herrera Callejas Página : 180 de


19
CommandButton Name Salir
Caption Salir
MSFlexGrid Name Rejilla
AllowUserResizing 1 – flexResizeColumns
Rows 25
Cols 12
Enabled False
FixedRows 1
FixedCols 0
FormatString Cédula |<Paterno |<Materno |<Nombres
|
|<Dirección |<F. de Nacim |<Gén |<Sw |
ScrollBars 3-flexScrollBarBoth
CommonDialog Name Abrir
Label Name Mensaje1
Caption ““
AutoSize True
Label Name Mensaje2
Caption ““
AutoSize True
Label Name Mensaje3
Caption ““
AutoSize True
Hacer Clic en el menú Proyecto y seleccionar el Sub-menú Agregar Módulo.
Cuando el Visual Basic despliegue el cuadro de diálogo Agregar módulo, hacer
clic en el comando Abrir. En la ventana que abre el Visual Basic, digitar la
estructura del archivo de alumnos con nombre de registro Reg_Alumnos, al final
definir la variable Alumnos de tipo Reg_Alumnos para que tenga la misma
estructura de datos de acuerdo al siguiente detalle
Type Reg_Alumnos
Cédula As String * 10
Paterno As String * 20
Materno As String * 20
Nombres As String * 30
Dirección As String * 40
Fecha_Nac As Date
Género As String * 1
SW As String * 1
End Type
Global Alumnos As Reg_Alumnos
Guardar el formulario con el nombre MantDatos.frm y la aplicación con el
nombre MantDatos.vbp. La interfaz debe tener el siguiente aspecto:

Ing. Hermas Herrera Callejas Página : 181 de


19
Asociar un procedimiento a cada uno de los controles del formulario:
1. Hacer doble clic sobre el formulario. La ventana de código abre el procedimiento
Form_Load.
2. Digitar el siguiente código:
Dim AuxCéd, AuxCédula As String
Dim Fila, XFila As Integer
Private Sub Form_Load()
'Sitúa al formulario en el centro de la pantalla
Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
'lnhabilita los botones Ingresar, Modificar y eliminar
Guardar.Enabled = False
Modificar.Enabled = False
Eliminar.Enabled = False
'Abre el archivo de alumnos, cuyo nombre se definió al crearlo en una práctica
anterior
'El nombre de registro es Alumnos y se utiliza en la sentencia Open para abrir el
archivo
Abrir.ShowOpen
Open Abrir.FileName For Random As #1 Len = Len(Alumnos)
End Sub
Asociar un procedimiento al botón de comando Consultar accionado por el
suceso Click. Cuando el usuario haga clic en este botón, los datos del archivo de
alumnos, cuyo nombre se definió al crearlo en una práctica anterior, deben
aparecer en las celdas del control MSFlexGrid.
1. Hacer doble clic en el botón de comando Consultar. La ventana de código
muestra el procedimiento Consultar_Click.
2. Digitar el siguiente código:
Private Sub Consultar_Click()
MantDatos.Caption = "Consulta de datos"
Mensaje1.Caption = "Haga clic con el botón izquierdo del mouse sobre un registro
para eliminarlo."
Mensaje2.Caption = "Haga clic con el botón derecho del mouse para añadir un
registro."

Ing. Hermas Herrera Callejas Página : 182 de


19
Mensaje3.Caption = "Presione la tecla Alt y haga clic sobre un campo para realizar
modificaciones."
Guardar.Enabled = False 'Inhabilita el botón de comando Guardar
Modificar.Enabled = False 'Inhabilita el botón de comando Modificar
Eliminar.Enabled = False 'Inhabilita el botón de comando Eliminar
Rejilla.Enabled = True 'Habilita el control MSFlexgrid
'Líneas que muestran los datos del archivo de alumnos en las celdas del control
MSFlexGrid.
TotalRegistros = LOF(1) \ Len(Alumnos)
Fila = 0
If TotalRegistros <> 0 Then
LimpiarRegistros 'Llama al procedimiento LimpiarRegistros
With Rejilla
For i = 1 To TotalRegistros
Get #1, i, Alumnos
If Alumnos.SW = "1" Then
Fila = Fila + 1
.TextMatrix(Fila, 0) = Alumnos.Cédula
.TextMatrix(Fila, 1) = Alumnos.Paterno
.TextMatrix(Fila, 2) = Alumnos.Materno
.TextMatrix(Fila, 3) = Alumnos.Nombres
.TextMatrix(Fila, 4) = Alumnos.Dirección
.TextMatrix(Fila, 5) = Alumnos.Fecha_Nac
.TextMatrix(Fila, 6) = Alumnos.Género
.TextMatrix(Fila, 7) = Alumnos.SW
If Fila >= 21 Then .AddItem (" ") 'Añade una nueva fila al control
MSFlexGrid
End If
Next i
Campo.Text = .TextMatrix(1, 0)
End With
Else
Exit Sub
End If
End Sub
Para el mantenimiento del archivo de alumnos, cuyo nombre se definió al
crearlo en una práctica anterior, el usuario debe modificar, ingresar y eliminar
registros. Para eliminar un registro, el usuario debe seleccionar el registro situando
el puntero del mouse sobre el registro y haciendo clic sobre él. Seguidamente,
debe hacer clic en el botón Eliminar.
Para ingresar un nuevo registro, el usuario debe hacer clic con el botón
derecho del mouse sobre el control MSFlexGrid (el control Campo debe aparecer
enfocado después del último registro), ingresar los datos del nuevo registro y
hacer clic en el botón Guardar.
Para modificar los campos de un registro, el usuario debe mantener
presionada la tecla Alt, situar el puntero del mouse sobre uno de los campos de un
determinado registro y hacer clic. Luego de realizar las modificaciones en el
campo y presionar la tecla Enter, el usuario debe hacer clic en el botón Modificar.

Ing. Hermas Herrera Callejas Página : 183 de


19
Asociar un procedimiento al control MSFlexGrid accionado por el suceso
MouseUp. Este procedimiento debe responder a las siguientes acciones
realizadas por el usuario: un clic con el botón izquierdo del mouse sobre un
registro, un clic con el botón derecho del mouse sobre el control MSFlexGrid y un
clic sobre un campo mientras la tecla Alt está presionada.
Si el usuario hace clic con el botón izquierdo del mouse sobre un registro, el
registro debe quedar seleccionado y la variable AuxCod debe almacenar el código
del mismo. Si el usuario hace clic con el botón derecho del mouse sobre el control
MSFlexGrid, el programa debe seleccionar la celda ubicada más a la izquierda
después del último registro. Si el usuario mantiene presionada la tecla Alt y pulsa
el botón izquierdo del mouse sobre una de las celdas del control MSFlexGrid, el
programa debe seleccionar la celda, guardar el código del registro que contiene a
la celda en la variable AuxCodigo y el número de la fila en la variable XFila.
1. Hacer doble clic en el control MSFlexGrid. En la ventana de código desplegar el
cuadro de lista Procedimientos y seleccionar el suceso MouseUp. La ventana de
código abre el procedimiento Rejilla_MouseUp.
2. Digitar el siguiente código:
Private Sub Rejilla_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
Mensaje2.Caption = " "
Mensaje3.Caption = " "
With Rejilla
'Si se pulsó el botón izquierdo del mouse.
If Button = 1 Then
MantDatos.Caption = "Eliminar registros"
Mensaje1.Caption = "Haga clic en el botón Eliminar para borrar el registro seleccionado."
Guardar.Enabled = False 'Inhabilita el botón de comando Guardar
Modificar.Enabled = False 'Inhabilita el botón de comando Modificar
Eliminar.Enabled = True 'Habilita el botón de comando Eliminar
.Row = .MouseRow: .Col = 0 'Selecciona la fila con el registro que será eliminado.
.RowSel = .MouseRow: .ColSel = .Cols - 1
AuxCéd = .Text 'La Cédula del registro se almacena en la variable
AuxCéd
End If
If Button = 2 Then 'Se pulso el botón derecho del mouse.
MantDatos.Caption = "Ingreso de datos"
Mensaje1.Caption = "Ingrese los datos en todos los campos y haga clic en el botón
Guardar"
Guardar.Enabled = True 'Habilita el botón de comando Guardar
Modificar.Enabled = False 'Inhabilita el botón de comando Modificar
Eliminar.Enabled = False 'Inhabilita el botón de comando Eliminar
'Selecciona la celda a partir de la cual se ingresarán los datos del nuevo registro.
.Row = Fila + 1
.Col = 0
End If
If Button = 1 And Shift = 4 Then 'Se pulsó la tecla Alt y el botón izquierdo del mouse.
MantDatos.Caption = "Modificar registros"
Mensaje1.Caption = "Presione la tecla Enter para confirmar el cambio realizado"
Mensaje2.Caption = " "
Mensaje3.Caption = " "

Ing. Hermas Herrera Callejas Página : 184 de


19
Guardar.Enabled = False 'Inhabilita el botón de comando Guardar
Modificar.Enabled = True 'Habilita el botón de comando Modificar
Eliminar.Enabled = False 'Inhabilita el botón de comando Eliminar
.Row = .MouseRow 'Selecciona la celda en la que se hizo clic.
.Col = .MouseCol
AuxCédula = .TextMatrix(.Row, 0) 'La Cédula del registro se almacena en variable
AuxCédula.
'El número de la fila en la que se encuentra la celda seleccionada es almacenado en la
variable XFila.
XFila = .Row
End If
End With
End Sub
Asociar otro procedimiento al control MSFlexGrid accionado por el suceso
EnterCell. El suceso EnterCell tiene lugar cada vez que se selecciona una nueva
celda. El procedimiento deberá:
1. Borrar el contenido del cuadro de texto Campo.
2. Ocultar el cuadro de texto Campo.
3. Situar el cuadro de texto Campo sobre la celda seleccionada y ajustar su tamaño al de
ésta.
4. Asignar el contenido de la celda seleccionada a la propiedad Text del cuadro de texto
Campo.
5. Visualizar el cuadro de texto Campo.
6. Mover el enfoque al cuadro de texto Campo.
Seguir estos pasos para asociar un procedimiento al control MSFIexGrid
accionado por el suceso EnterCell:
1. Hacer doble clic en el control MSFIexGríd. En la ventana de código desplegar
el cuadro de lista Procedimientos y seleccionar el suceso EnterCell. La ventana
de código abre el procedimiento Rejilla_EnterCell.
2. Digitar el siguiente código:
Private Sub Rejilla_EnterCell()
Campo.Text = " " 'Borra el contenido del control TextBox
Campo.Visible = True 'Oculta el control TextBox
Campo.Top = Rejilla.Top + Rejilla.CellTop 'Sitúa el control TextBox sobre la celda
seleccionada
Campo.Left = Rejilla.Left + Rejilla.CellLeft
'Ajusta el tamaño del control TextBox al tamaño de la celda seleccionada
Campo.Width = Rejilla.CellWidth
Campo.Height = Rejilla.CellHeight
'Asigna el contenido de la celda seleccionada a la propiedad Text del control TextBox
Campo.Text = Rejilla.Text
Campo.Visible = True 'Visualiza el control TextBox
Campo.SetFocus
End Sub
Asociar un procedimiento más al control MSFlexGrid accionado por el
suceso LeaveCell. El suceso LeaveCell tiene lugar cada vez que una celda es
abandonada, cambiando el enfoque a otra celda. El procedimiento deberá copiar
el contenido del cuadro de texto Campo sobre la celda activa antes de ser
abandonada.

Ing. Hermas Herrera Callejas Página : 185 de


19
1. Hacer doble clic en el control MSFlexGrid. En la ventana de código desplegar
el cuadro de lista Procedimientos y seleccionar el suceso LeaveCell. La
ventana de código abre el procedimiento Rejilla_LeaveCell.
2. Digitar el siguiente código:
Private Sub Rejilla_LeaveCell()
'Asigna el contenido del control TextBox a la celda activa antes de ser abandonada.
Rejilla.Text = Campo.Text
End Sub
Asociar un procedimiento al cuadro de texto Campo accionado por el
suceso KeyPress. Cuando el usuario introduzca los datos en este control y
presione la tecla Enter, este procedimiento deberá seleccionar la celda contigua a
la derecha de la celda activa
1. Hacer doble clic en el cuadro de texto Campo. En la ventana de código,
desplegar el cuadro de lista Procedimientos y seleccionar el suceso KeyPress.
La ventana de código abre el procedimiento Campo_KeyPress.
2. Digitar el siguiente código:
Private Sub Campo_KeyPress(KeyAscii As Integer)
'Selecciona la celda contigua a la derecha de la celda activa cuando la tecla Enter es
presionada.
If KeyAscii = 13 Then
If Campo.Text <> " " Then
Rejilla.Row = Rejilla.RowSel
Rejilla.Col = Rejilla.ColSel + 1
End If
End If
End Sub
Asociar un procedimiento al botón de comando Guardar accionado por el
suceso Click. Cuando el usuario haga clic en este botón, los datos ingresados en
la fila Fila + 1 deben ser almacenados en el archivo de alumnos, cuyo nombre se
definió en una práctica anterior.
1. Hacer doble clic en el botón de comando Guardar. La ventana de código
muestra el procedimiento Guardar_Click.
2. Digitar el siguiente procedimiento:
Private Sub Guardar_Click()
'lngresa nuevos registros en el archivo de alumnos cuyo nombre se eligió al crearlo
anteriormente.
Alumnos.Cédula = Rejilla.TextMatrix(Fila + 1, 0)
Alumnos.Paterno = Rejilla.TextMatrix(Fila + 1, 1)
Alumnos.Materno = Rejilla.TextMatrix(Fila + 1, 2)
Alumnos.Nombres = Rejilla.TextMatrix(Fila + 1, 3)
Alumnos.Dirección = Rejilla.TextMatrix(Fila + 1, 4)
Alumnos.Fecha_Nac = Rejilla.TextMatrix(Fila + 1, 5)
Alumnos.Género = Rejilla.TextMatrix(Fila + 1, 6)
Alumnos.SW = "1"
TotalRegistros = LOF(1) \ Len(Alumnos)
Put #1, TotalRegistros + 1, Alumnos
Consultar_Click
Guardar.Enabled = False
End Sub

Ing. Hermas Herrera Callejas Página : 186 de


19
Asociar un procedimiento al botón de comando Modificar accionado por el
suceso Click. Cuando el usuario haga clic en este botón, los datos modificados de
una determinada fila del control MSFlexGrid deben ser almacenados en el archivo
de alumnos cuyo nombre se definió al crearlo en una práctica anterior.
1. Hacer doble clic en el botón de comando Modificar. La ventana de código
muestra el procedimiento Modificar_Click.
2. Digitar el siguiente procedimiento:
Private Sub Modificar_Click()
Dim i As Integer
Dim encontrado As Boolean
MantDatos.Caption = "Modificar datos"
For i = 1 To LOF(1) \ Len(Alumnos)
Get #1, i, Alumnos
If Trim(Alumnos.Cédula) = Trim(AuxCédula) And Alumnos.SW = "1" Then
encontrado = True
posición = i
Exit For
End If
Next i
If encontrado Then
Alumnos.Cédula = Rejilla.TextMatrix(XFila, 0)
Alumnos.Paterno = Rejilla.TextMatrix(XFila, 1)
Alumnos.Materno = Rejilla.TextMatrix(XFila, 2)
Alumnos.Nombres = Rejilla.TextMatrix(XFila, 3)
Alumnos.Dirección = Rejilla.TextMatrix(XFila, 4)
Alumnos.Fecha_Nac = Rejilla.TextMatrix(XFila, 5)
Alumnos.Género = Rejilla.TextMatrix(XFila, 6)
Put #1, posición, Alumnos
Consultar_Click
End If
Modificar.Enabled = False
End Sub
Asociar un procedimiento al botón de comando Eliminar accionado por el
suceso Click. Cuando el usuario haga clic en este botón, el registro seleccionado
debe ser eliminado del archivo de alumnos, cuyo nombre se definió al crearlo en
una práctica anterior.
1. Hacer doble clic en el botón de comando Eliminar. La ventana de código
muestra el procedimiento Eliminar_Click().
2. Digitar el siguiente procedimiento:
Private Sub Eliminar_Click()
Dim i, posición As Integer
Dim encontrado As Boolean
MantDatos.Caption = "Eliminar datos"
encontrado = False
For i = 1 To LOF(1) \ Len(Alumnos)
Get #1, i, Alumnos
If Trim(Alumnos.Cédula) = Trim(AuxCéd) Then
encontrado = True
posición = i
Exit For

Ing. Hermas Herrera Callejas Página : 187 de


19
End If
Next i
If encontrado Then
Get #1, posición, Alumnos
Alumnos.SW = "0"
Put #1, posición, Alumnos
Consultar_Click
End If
Eliminar.Enabled = False 'lnhabilita el botón Eliminar
End Sub
El procedimiento LimpiarRegistros tiene la función de limpiar las celdas del
control MSFlexGrid.
Public Sub LimpiarRegistros()
With Rejilla
'Selecciona todas las celdas del control MSFlexGrid menos las de la fila 0
.Row = 1: .Col = 0: .RowSel = .Rows - 1: .ColSel = .Cols - 1
'Los cambios afectan a todas las celdas seleccionadas
.FillStyle = flexFillRepeat
.Text = " "
.FillStyle = flexFillSingle 'Los cambios afectan sólo a la celda activa
.Row = 1: .Col = 0: 'Selecciona la celda 1,0
End With
End Sub
Hacer doble clic en el botón de comando Salir. En la ventana de código
digitar el siguiente código:
Private Sub Salir_Click()
Close 'Cierra el archivo de alumnos
Unload Me
End 'Finaliza la ejecución del programa
End Sub
Presionar la tecla F5 para ejecutar el programa. Hacer clic en el botón
Consultar y los datos del archivo de alumnos aparecerán en las celdas del control
MSFlexGrid. Para eliminar un registro, situar el puntero del mouse sobre el registro
y hacer clic (el registro queda resaltado bajo un fondo azul y el botón Eliminar se
activa). Hacer clic en el botón Eliminar y los registros serán eliminados del archivo
de alumnos.

Ing. Hermas Herrera Callejas Página : 188 de


19
Para modificar la información de un registro, mantener presionada la tecla
Alt, situar el puntero del mouse sobre uno de los campos del registro y hacer clic.
El punto de inserción aparecerá al inicio de la celda listo para realizar las
modificaciones. Utilizar las teclas de dirección flecha derecha o flecha izquierda
para desplazar el punto de inserción.
Para ingresar nuevos datos al archivo de alumnos, situar el puntero del
mouse sobre el control MSFlexGrid y hacer clic con el botón derecho del mouse.
El punto de inserción, parpadeante, aparecerá después del último registro.
Ingresar una cédula y presionar la tecla Enter. Al presionar la tecla Enter, el punto
de inserción aparecerá en la siguiente celda de la derecha. Ingresar el apellido
paterno del alumno y presionar Enter. Proceder así hasta llenar todos los campos
del registro. Finalmente, hacer clic en el botón Guardar.
Al presionar el botón derecho del mouse, el punto de inserción aparece
después del último registro listo para ingresar nuevos datos.

Ing. Hermas Herrera Callejas Página : 189 de


19

Potrebbero piacerti anche