View
234
Download
0
Category
Preview:
Citation preview
CAPÍTULO 1
FUNDAMENTOS
Microsoft Visual Basic es un conjunto de herramientas que
posibilitan el desarrollo de aplicaciones para Windows de una
manera rápida y sencilla, basado en el lenguaje BASIC y en la
programación orientada a objetos.
La palabra “Visual” hace referencia al método que se
utiliza para crear la interfaz gráfica de usuario. En lugar de
escribir numerosas líneas de código para implementar la
interfaz, simplemente se utiliza el ratón para agregar objetos
prefabricados en el lugar deseado dentro de la pantalla.
La palabra “Basic” hace referencia al lenguaje BASIC
(Beginners All-Purpose Symbolic Instruction Code), un lenguaje
utilizado por más programadores que ningún otro lenguaje en la
historia de la informática. Visual Basic ha evolucionado a
partir del lenguaje BASIC original y ahora contiene centenares
de instrucciones, funciones y palabras clave, muchas de las
cuales están directamente relacionadas con la interfaz gráfica
de Windows.
El lenguaje de programación Visual Basic no es exclusivo
de Microsoft Visual Basic. Este lenguaje es utilizado también
por Microsoft Excel, Microsoft Access y muchas otras
Pág. 1
aplicaciones Windows. El lenguaje de programación Visual Basic
Script para programar en Internet es un subconjunto del
lenguaje Visual Basic. De tal forma, que la inversión realizada
en el aprendizaje de Visual Basic le ayudará a abarcar estas
otras áreas.
EJECUTANDO VISUAL BASIC
Si ya tiene instalado Visual Basic, para ejecutarlo
proceda igual que con cualquier otra aplicación Windows: hacer
click en el icono correspondiente.
En seguida se presentará una ventana similar a la figura
siguiente:
Pág. 2
En la ventana anterior indicar el tipo de proyecto que
desea crear (para nuestro caso seleccionar EXE estándar) y dar
click sobre el botón “Abrir”. En ese instante se presentará el
Entorno Integrado de Desarrollo (IDE) de Visual Basic:
Los elementos que componen el IDE de Visual Basic son:
• Barra de menús • Barra de herramientas
• Cuadro de herramientas • Diseñador de formularios
• Explorador de proyectos • Ventana de propiedades
• Posición del formulario • Menús contextuales
Barra de menús
Pág. 3
Presenta las órdenes que se utilizan para desarrollar una
aplicación. Las opciones más utilizadas son: Archivo, Edición,
Ver, Ventana y Ayuda. Se proporcionan otros menús para tener
acceso a funciones específicas de programación como Proyecto,
Formato o Depuración.
Barra de herramientas
Facilita el acceso rápido a las órdenes más comúnmente
utilizadas. Omitimos el significado de cada botón porque le
será mostrado al pasar el puntero del ratón sobre cada uno de
ellos.
Puede visualizar otras barras de herramientas ejecutando
la opción Barra de herramientas del Menú Ver.
Cuadro de herramientas
Proporciona un conjunto de herramientas que permiten
diseñar la interfaz gráfica de usuario.
Pág. 4
Icono Descripción
Puntero
Cuadro de imagen
Etiqueta
Cuadro de texto
Marco
Botón de comando
Casilla de verificación
Botón de opción
Cuadro combinado
Cuadro de lista
Barra de desplazamiento horizontal
Barra de desplazamiento vertical
Cronómetro
Cuadro de lista de unidades
Cuadro de lista de directorios
Cuadro de lista de archivos
Formas
Líneas
Imagen
Contenedor OLE
Pág. 5
Para utilizar algún objeto simplemente debe hacer doble
click sobre el icono correspondiente, luego puede cambiar su
posición y sus dimensiones.
Diseñador de formularios
Es la ventana sobre la que colocaremos los objetos
(controles) de la interfaz de usuario.
Explorador de proyectos
Contiene el conjunto de archivos que constituyen la
aplicación o proyecto.
Pág. 6
Ventana de propiedades
Como veremos más adelante, cada objeto lleva asociado un
conjunto de propiedades. Para ver o especificar los valores de
las propiedades de los objetos, utilizaremos la ventana de
propiedades.
Posición del formulario
Esta ventana le permite especificar la posición de los
formularios de la aplicación.
Menús contextuales
Pág. 7
Es un menú emergente que presenta órdenes específicas
relativas a un determinado objeto. Para abrir un menú
contextual, dar click derecho sobre el objeto. Por ejemplo, al
dar click derecho sobre el formulario se presenta el siguiente
menú contextual.
Ventana de código
Se presenta cuando se hace doble click sobre un objeto que
se encuentra en el Diseñador de formularios. Esta ventana
muestra dos cuadros combinados (combos) en la parte superior,
en una aparece el nombre del objeto (izquierda) y en la otra el
nombre del evento (derecha).
Pág. 8
MI PRIMERA APLICACIÓN
Hay tres pasos principales para crear una aplicación en
Visual Basic:
• Crear la interfaz.
• Establecer propiedades.
• Escribir el código.
Para ver como se realiza esto, siga los pasos del
siguiente ejemplo para crear una aplicación sencilla que
consiste en un formulario y un botón de comando. Cuando haga
click en el botón de comando aparecerá el mensaje “Visual Basic
es fácil” en un cuadro de diálogo predefinido.
Creación de la interfaz
Para el desarrollo del presente ejemplo proceda a crear
una nueva aplicación. En seguida añadir un botón de comando al
formulario, para ello en el Cuadro de herramientas, dar doble
click sobre el control deseado, tal como se indica en la figura
siguiente:
Pág. 9
La apariencia de la interfaz debe ser similar a la figura
mostrada:
Estableciendo las propiedades
Para ver las propiedades de un objeto, simplemente debe
seleccionarlo y pulsar la tecla F4. Por ejemplo la figura
siguiente muestra las propiedades del botón de comando y
podemos ver que la propiedad Caption tiene el valor “Command1”.
Pág. 10
Puede cambiar el valor de cualquier propiedad
seleccionándolo de la ventana anterior y simplemente
modificando su valor, por ejemplo para el caso anterior
establezca el valor de la propiedad Caption de “Command1” a
“Haga click aquí”.
De manera similar proceda cambiar la propiedad Caption del
formulario a “Mi primera aplicación”. La apariencia de la
interfaz debe ser similar a la figura mostrada:
Pág. 11
Escribiendo el código
Para ingresar el código a la aplicación debe dar doble
click sobre el control al cual asociaremos dicho código. Para
nuestro caso dar doble click sobre el botón de comando e
ingresar el código que se indica a continuación:
Para guardar la aplicación que acaba de crear, seleccione
la opción Guardar Proyecto del Menú Archivo.
Bueno, ahora sólo falta que ejecute su aplicación. Para
ello simplemente debe pulsar la tecla F5. El resultado debe ser
similar al siguiente:
Pág. 12
CAPÍTULO 2
LOS OBJETOS
Visual Basic se basa en la programación orientada a
objetos (POO), la cual es una forma de programación que utiliza
objetos (similares a los objetos del mundo real) para la
solución de problemas. La POO permite descomponer un problema
en bloques relacionados. Cada bloque pasa a ser un objeto
autocontenido que contiene sus propios datos e instrucciones.
De esta manera, la complejidad se reduce y se pueden realizar
programas más largos de una manera sencilla.
MECANISMOS BÁSICOS DE LA POO
Los mecanismos básicos de la programación orientada a
objetos son:
• Objetos
• Propiedades
• Métodos
• Eventos
• Mensajes
• Clases
Pág. 13
Objetos
Un objeto es una entidad que tiene atributos particulares
(propiedades) y unas formas de operar sobre ellos (métodos).
Por tanto, un objeto contiene variables que especifican su
estado y operaciones que definen su comportamiento.
Son ejemplos de objetos: formularios, botones de comando,
cuadros de texto, etiquetas, etc.
Propiedades
Las propiedades representan las características del
objeto. Hay propiedades particulares, como Caption que la
poseen los botones de comando por ejemplo, y genéricas como
Name que la poseen todos lo objetos.
Métodos
Los métodos son procedimientos asociados a un objeto. Se
ejecutan como respuesta a un evento, por ejemplo al dar click
en un botón de comando. También pueden ser invocados
explícitamente en el programa.
Eventos
Un evento es la capacidad de un objeto de reaccionar
cuando ocurre una determinada acción (acción y reacción). Como
respuesta a un evento se envía un mensaje y se ejecuta un
determinado método (procedimiento).
Pág. 14
Mensajes
Un mensaje es una llamada a un método (procedimiento), de
tal forma que cuando un objeto recibe un mensaje la respuesta a
ese mensaje es ejecutar el procedimiento asociado.
Cuando se ejecuta un programa orientado a objetos, los
objetos están constantemente recibiendo, interpretando y
respondiendo a mensajes de otros objetos.
Clases
Una clase es una descripción para producir objetos de esa
clase o tipo. Es decir se trata de una generalización de un
tipo específico de objetos. En otras palabras, un objeto es una
variable del tipo definido por una clase. Por ejemplo, piense
en un molde para hacer pasteles, el molde es la clase y los
pasteles los objetos.
CARACTERÍSTICAS DE LA POO
Las características fundamentales de la programación
orientada a objetos son:
• Abstracción
• Encapsulamiento
• Herencia
• Polimorfismo
Pág. 15
Abstracción
La abstracción permite no detenernos en los detalles
concretos del funcionamiento de las cosas, sino centrarnos en
los aspectos que realmente nos importan y nos son útiles en un
determinado momento, en cierta medida, se podría decir que es
“úsese el objeto y olvídese de como funciona en forma interna”.
Por ejemplo, para manejar una computadora no necesitamos
saber como funcionan sus circuitos electrónicos, en términos de
corriente, tensión, etc.
Encapsulamiento
Esta característica permite ver un objeto como una “caja
negra” autocontenida en la que se ha metido de alguna manera
toda la información que maneja dicho objeto. Esto permite
manipular los objetos como unidades básicas, permaneciendo
oculta su estructura interna.
Herencia
La herencia es la característica que permite compartir
automáticamente propiedades y métodos entre objetos. Es decir,
se pueden crear nuevas clases de objetos en base a clases
existentes. Más concreto, un objeto puede heredar un conjunto
general de propiedades y métodos a las que puede añadir
Pág. 16
aquellas características que son específicas suyas. El usuario
de Visual Basic no dispone de esta característica.
Polimorfismo
Polimorfismo, del griego cuyo significado es “muchas
formas”, es la característica que permite implementar múltiples
formas de un mismo método, dependiendo cada una de ellas de la
clase sobre la que se realiza la implementación. Esto hace
posible que se puede acceder a una variedad de métodos
distintos (todos con el mismo nombre) utilizando exactamente el
mismo medio de acceso.
LOS OBJETOS DE VISUAL BASIC
Visual Basic soporta la abstracción, la encapsulación, el
polimorfismo y la reutilización de código.
La reutilización de código es la capacidad de trasladar
características de un objeto a otro, lo que se logra con alguna
forma de herencia. Esto se consigue mediante la creación y uso
del objeto.
Los objetos de Visual Basic están divididos en dos tipos:
controles y contenedores.
Los controles son un medio gráfico que permiten a los
usuarios interactuar con la aplicación para la manipulación de
datos y ejecución de tareas. Son ejemplo de controles:
etiquetas, cuadros de texto, botones de comando, casillas de
Pág. 17
verificación, botones de opción, cuadros de lista, cuadros
combinados, etc.
Los contenedores son objetos que pueden incluir otros
objetos y permiten el acceso a los objetos que contienen. Entre
los más utilizados tenemos a los formularios, marcos y
cuadrículas.
El formulario más los controles constituyen la interfaz de
la aplicación.
REFERENCIANDO OBJETOS
La sintaxis para referenciar objetos es la siguiente:
OBJETO.PROPIEDAD = VALOR
Por ejemplo, para establecer el título de un formulario a
“Visual Basic es fácil”, la orden sería:
Form1.Caption = “Visual Basic es fácil”
LOS EVENTOS
Cada objeto responde a un conjunto de eventos. Como
respuesta a un evento se ejecuta un determinado procedimiento.
Los procedimientos asociados a un evento presentan la forma:
Private Sub OBJETO_EVENTO()
SENTENCIAS
End Sub
Pág. 18
Para aclarar este concepto desarrollaremos la siguiente
aplicación, la cual consiste en un formulario, un cuadro de
texto y un botón de comando. El usuario debe ingresar un
mensaje en el cuadro de texto y al pulsar el botón de comando,
el mensaje recientemente ingresado, se coloca como título del
formulario.
Para ello proceda a construir la interfaz mostrada en la
figura anterior. Luego, dar doble click sobre el botón de
comando e ingrese el siguiente código:
Private Sub Command1_Click()
Form1.Caption = Text1.Text
End Sub
Seguidamente guarde y proceda ejecutar su aplicación. Como
puede verificar, el evento Click se dispara cada vez que el
usuario pulsa (hace click) sobre un control.
CONVENCIÓN DE NOMBRES PARA LOS OBJETOS
Pág. 19
La convención a seguir en la presente guía - para dar
nombre a los objetos - consiste en utilizar ciertos prefijos,
los cuales indicaran el tipo de objeto del que se trata.
Prefijo Objeto
Frm Formulario
Fra Marco
Lbl Etiqueta
Txt Cuadro de texto
Cmd Botón de comando
Chk Casilla de verificación
Opt Botón de opción
Lst Cuadro de lista
Cbo Cuadro combinado
Tim Cronómetro
HS Barra de desplazamiento horizontal
VS Barra de desplazamiento vertical
Pic Cuadro de imagen
Img Imagen
Drv Cuadro de lista de unidades
Dir Cuadro de lista de directorios
Fil Cuadro de lista de archivos
Ole Contenedor OLE
Grd Cuadrícula
Pág. 20
Gra Gráfico
Ctr Control (se utiliza en procedimientos cuando
el tipo de control es desconocido)
CAPÍTULO 3
EL LENGUAJE
Visual Basic es un lenguaje de programación basado en el
lenguaje BASIC, al cual incorpora la funcionalidad de la
programación orientada a objetos.
El código de Visual Basic se almacena en módulos, donde
cada módulo está subdividido en distintas secciones, una para
cada objeto del módulo. Cada sección de código puede contener
uno o más procedimientos, formados por declaraciones de
constantes y variables, expresiones, sentencias de control y
llamadas a procedimientos y/o funciones.
En este capítulo vamos a analizar los diferentes elementos
que intervienen al momento de realizar el código para una
aplicación.
TIPOS DE DATOS
Pág. 21
Los datos con los que trabajaremos probablemente incluyan
información relacionada con números, dinero, nombres,
descripciones, fechas, etc. Cada dato corresponde a un
determinado tipo, es decir, pertenece a una categoría de datos
que se manipulan de maneras similares.
Tipo Descripción Rango
Integer Entero (2 bytes) -32768 a 32767
Long Entero largo (4 bytes) -2147483648 a
2147483647
Single Punto flotante de simple
precisión (4 bytes)
-3.40E+38 a
3.40E+38
Double Punto flotante de doble
precisión (8 bytes)
-1.79D+308 a
1.79D+308
Currency Monetario (8 bytes) +/-
922337203685477.5807
Byte Carácter (1 byte) 0 a 255
String Cadena de caracteres (1
byte por carácter)
Aproximadamente
hasta 64K (65400
caracteres)
Boolean Lógico (2 bytes) True o False
Date Fecha/Hora (8 bytes) 01/ENERO/100 a
31/DICIEMBRE/9999
Variant
(por omisión)
Cualquier tipo de dato Con números hasta el
intervalo de un tipo
Double.
Con caracteres 22
Pág. 22
bytes + 1 byte por
carácter
IDENTIFICADORES
Los identificadores son nombres dados a los elementos de
una aplicación, tales como constantes, variables,
procedimientos, funciones, objetos, etc. Un identificador es
una secuencia de caracteres que puede ser de hasta 255
caracteres. Para la construcción de identificadores debemos
tener presente las siguientes reglas:
• Deben comenzar con una letra y no puede contener espacios en
blanco.
• Letras, dígitos y caracteres subrayados están permitidos
después del primer carácter.
• No se puede utilizar una palabra reservada como
identificador. Una palabra reservada tiene un significado
especial para Visual Basic.
CONSTANTES
Una constante almacena un dato cuyo valor no cambia
durante la ejecución de un programa. Para declarar una
constante utilice la siguiente sintaxis:
Const NOMBRE_CONSTANTE [As TIPO] = VALOR
Pág. 23
Si no se declara el tipo de constante (utilizando As TIPO)
se asigna a la constante el tipo de dato más apropiado a su
valor.
El valor de una constante puede ser numérico,
alfanumérico, carácter o de tipo fecha y hora. Por ejemplo:
Const MAXIT = 25
Const PI As Double = 3.141592
Const CADENA As String = “Visual Basic es fácil”
Const FECHA_POR_DEFECTO = #01/01/99#
VARIABLES
Una variable almacena un dato cuyo valor puede cambiar
durante la ejecución de un programa. Para declarar una variable
utilice la siguiente sintaxis:
Dim NOMBRE_VARIABLE [As TIPO]
Cuando se declara una variable y no se especifica su tipo
(con As TIPO), se asume que es de tipo Variant.
La instrucción Dim puede realizar más de una declaración,
teniendo en cuenta que la cláusula opcional As TIPO le permite
definir el tipo de dato de cada variable que vaya a declarar.
Por ejemplo:
Dim X, Y As Integer
Pág. 24
La sentencia anterior le puede inducir a pensar que X e Y
son de tipo Integer, lo cual no es cierto, pues X es de tipo
Variant (por omisión) e Y es de tipo Integer.
Para asignar valores a una variable, utilizar la siguiente
sintaxis:
NOMBRE_VARIABLE = VALOR
A manera de ejemplo considere lo siguiente:
Dim CANTIDAD As Integer, PRECIO As Double, TOTAL As Double
CANTIDAD = 30
PRECIO = 1.5
TOTAL = CANTIDAD * PRECIO
OPERADORES
Los operadores son símbolos que indican cómo serán
manipulados los operandos. Los operandos son los datos
(constantes y/o variables) sobre los que actúa los operadores
para producir un determinado resultado.
Operadores aritméticos
Operador Significado
^ Exponenciación
- Menos unario
Pág. 25
* / Multiplicación y división
\ División entera
Mod Resto de una división entera
+ - Suma y resta
Operadores relacionales
Operador Significado
= Igual que
<> Diferente que
< Menor que
> Mayor que
<= Menor o igual que
=> Mayor o igual que
Operadores lógicos
Operador Significado
Not Negación
And Conjunción
Or Disyunción inclusiva
Xor Disyunción exclusiva
Eqv Equivalencia (opuesto a Xor)
Imp Implicación (falso si primer operando
verdadero y segundo operando falso)
Pág. 26
Operadores de cadenas de caracteres
Operador Significado
& Concatenación
Like Compara dos cadenas de caracteres
SENTENCIAS
Una sentencia es una línea de código que indica una o más
operaciones a realizar. Una línea puede incluir varias
sentencias, separadas unas de otras por dos puntos. Por
ejemplo:
Dim CANTIDAD As Integer, PRECIO As Double, TOTAL As Double
CANTIDAD = 30 : PRECIO = 1.5 : TOTAL = CANTIDAD * PRECIO
Una sentencia Visual Basic puede escribirse en más de una
línea física utilizando el carácter de continuación de línea
(un espacio en blanco seguido del carácter de subrayado). Por
ejemplo:
Dim CH4_ENTRADA As Double, CH4_SALIDA As Double, _
CH4_GENERA As Double, CH4_CONSUME AS Double
ENTRADA Y SALIDA DE DATOS
Visual Basic posee una serie de objetos (controles) que
pueden ser utilizados como mecanismos de entrada y salida (E/S)
de datos. Sin embargo, estos serán estudiados en capítulos
posteriores.
Pág. 27
Otra posibilidad de proporcionar datos o de visualizarlos
durante la ejecución de una aplicación es utilizando cajas de
diálogos predefinidas. Debido a que esta es la forma más simple
de realizar la E/S de datos nos ocuparemos de ella.
Entrada de datos
La entrada de datos permite proporcionar valores durante
la ejecución de una aplicación. Estos valores son ingresados
generalmente mediante el teclado y asignados a variables del
programa. En Visual Basic una forma de ingresar datos a la
aplicación es utilizando la caja de diálogo predefinida
provista por la función InputBox. Su sintaxis es la siguiente:
VARIABLE = InputBox(MENSAJE [, TÍTULO] [, PREDETERMINADO])
Donde MENSAJE es el mensaje que indica al usuario el tipo
de información que debe ingresar. Por ejemplo, las sentencias:
Dim EDAD As Integer
EDAD = InputBox(“Ingrese su edad?”)
Da lugar a que Visual Basic presente la siguiente caja de
diálogo solicitando la información requerida:
Pág. 28
Como puede observar, el resto de los parámetros son
opcionales. TÍTULO es el texto que se muestra en la barra de
título del cuadro de diálogo, si se omite TÍTULO, el nombre de
la aplicación es la que se muestra en la barra de título.
PREDETERMINADO es una expresión de cadena que aparece en el
cuadro de texto como respuesta predeterminada si no se
proporciona ningún otro texto. Si se omite PREDETERMINADO el
cuadro de texto se muestra vacío. A manera de ejemplo considere
lo siguiente:
Dim EDAD As Integer
EDAD = InputBox(“Ingrese su edad?”, “Ficha de datos”, 18)
En este caso se visualiza la caja de diálogo que se
presenta en la figura siguiente:
Pág. 29
Salida de datos
La salida de datos generalmente consiste en tomar la
información de la memoria y mostrarla en pantalla. Para
realizar la operación de salida de datos en Visual Basic,
podemos utilizar el procedimiento MsgBox, cuya sintaxis es como
sigue:
MsgBox MENSAJE [, ICONO, TÍTULO]
MENSAJE es La cadena que se muestra como salida en la caja
de diálogo. ICONO es se refiere al estilo de icono que se va ha
utilizar y TÍTULO es una texto que se mostrará en la barra de
título de la caja de diálogo. Por ejemplo:
Dim EDAD As Integer
EDAD = InputBox(“Ingrese su edad?”)
EDAD = EDAD + 10
MsgBox “Dentro de 10 años su edad será:” & Str(EDAD)
Si ejecuta el código anterior e ingresa su edad (en mi
caso 29 años) la salida debe ser similar a la figura siguiente:
Pág. 30
Para que pueda ejecutar el código anterior, proceda a
crear una nueva aplicación y haga doble click sobre el
formulario, luego ingrese el código anterior:
Private Sub Form_Load()
Dim EDAD As Integer
EDAD = InputBox(“Ingrese su edad?”)
EDAD = EDAD + 10
MsgBox “Dentro de 10 años su edad será:” & Str(EDAD)
End Sub
A manera de observación cabe señalar que la función Str()
se utiliza para convertir una expresión numérica a una cadena
de caracteres.
ESTRUCTURAS DE CONTROL
Las estructuras de control permiten tomar decisiones y
realizar un proceso repetidas veces (procesos iterativos). Para
ello Visual Basic dispone de las siguientes estructuras de
control: If . . . Then . . . Else, If . . . Then . . . ElseIf,
Select Case, For . . . Next, While . . . . Wend, Do . . . Loop
y GoTo.
Estructura If . . . Then . . . Else
Este tipo de estructura evalúa una determinada condición y
en función a ello ejecuta uno de entre dos posibles grupos de
sentencias. Su sintaxis es la siguiente:
Pág. 31
If CONDICIÓN Then
SENTENCIAS_VERDADERAS
Else
SENTENCIAS_FALSAS
End If
Si CONDICIÓN es verdadera se ejecuta el grupo de
SENTENCIAS_VERDADERAS. Si CONDICIÓN es falsa se ejecuta el
grupo de SENTENCIAS_FALSAS.
Por ejemplo, el siguiente código determina si un entero A
es o no divisible por otro entero B:
Dim A As Integer, B As Integer
A = InputBox(“Ingrese A?”)
B = InputBox(“Ingrese B?”)
If A Mod B = 0 Then
MsgBox Str(A) & “ es divisible por ” & Str(B)
Else
MsgBox Str(A) & “ no es divisible por ” & Str(B)
End If
Estructura If . . . Then . . . ElseIf
Este tipo de estructura se utiliza para elegir una de
entre múltiples alternativas. Su sintaxis es como sigue:
If CONDICIÓN_1 Then
Pág. 32
SENTENCIAS_1
ElseIf CONDICIÓN_2 Then
SENTENCIAS_2
.
.
.
Else
SENTENCIAS_FALSAS
End If
Si CONDICIÓN_1 es verdadera se ejecuta el grupo de
SENTENCIAS_1, y si es no se cumple, se evalúan secuencialmente
las condiciones siguientes hasta Else, ejecutándose las
sentencias correspondientes al primer ElseIf cuya condición sea
verdadera. Si todas las condiciones son falsas, se ejecutan las
SENTENCIAS_FALSAS correspondientes a Else.
Por ejemplo considere el siguiente código, el cual imprime
el nombre del mes correspondiente a los números del 1 al 12.
Dim N As Integer
N = InputBox(“Ingrese N?”)
If N = 1 Then
MsgBox “Enero”
ElseIf N = 2 Then : MsgBox “Febrero”
ElseIf N = 3 Then : MsgBox “Marzo”
ElseIf N = 4 Then : MsgBox “Abril”
ElseIf N = 5 Then : MsgBox “Mayo”
Pág. 33
ElseIf N = 6 Then : MsgBox “Junio”
ElseIf N = 7 Then : MsgBox “Julio”
ElseIf N = 8 Then : MsgBox “Agosto”
ElseIf N = 9 Then : MsgBox “Setiembre”
ElseIf N = 10 Then : MsgBox “Octubre”
ElseIf N = 11 Then : MsgBox “Noviembre”
ElseIf N = 12 Then : MsgBox “Diciembre”
Else : MsgBox “Error de datos”
End If
Estructura Select Case
Este estructura es una alternativa a la estructura
If . . . Then . . . ElseIf, cuando lo que necesita es comparar
la misma expresión con diferentes valores. Su sintaxis es la
siguiente:
Select Case EXPRESIÓN_TEST
Case EXPRESIÓN_1
SENTENCIAS_1
Case EXPRESIÓN_2
SENTENCIAS_2
.
.
.
Case Else
SENTENCIAS_FALSAS
End Select
Pág. 34
En este caso se comprueba el valor de EXPRESIÓN_TEST
frente a la lista expresiones EXPRESIÓN_1, EXPRESIÓN_2, . . . y
así sucesivamente, y busca el primer Case que incluya el valor
evaluado en EXPRESIÓN_TEST, ejecutando a continuación el bloque
de sentencias correspondiente. Si no existe un valor igual a
EXPRESIÓN_TEST, entonces se ejecuta las SENTENCIAS_FALSAS
correspondientes al Case Else.
A manera de ejemplo vamos a codificar el programa de la
sección anterior el cual imprime el nombre del mes
correspondiente a los números del 1 al 12. Pero en esta vez
utilizaremos la estructura Select Case (compare con cual de
ambas estructuras es más cómodo trabajar).
Dim N As Integer
N = InputBox(“Ingrese N?”)
Select Case N
Case 1 : MsgBox “Enero”
Case 2 : MsgBox “Febrero”
Case 3 : MsgBox “Marzo”
Case 4 : MsgBox “Abril”
Case 5 : MsgBox “Mayo”
Case 6 : MsgBox “Junio”
Case 7 : MsgBox “Julio”
Case 8 : MsgBox “Agosto”
Case 9 : MsgBox “Setiembre”
Pág. 35
Case 10 : MsgBox “Octubre”
Case 11 : MsgBox “Noviembre”
Case 12 : MsgBox “Diciembre”
Case Else
MsgBox “Error de datos”
End Select
Cabe destacar que Select Case también se puede utilizar de
la siguiente manera:
Dim X As Integer
X = InputBox(“Ingrese X?”)
Select Case X
Case 1
MsgBox “X = 1”
Case 2, 3
MsgBox “X = 2 o X = 3”
Case 4 To 10
MsgBox “4 <= X <= 10”
Case Else
MsgBox “X < 1 o X > 10”
End Select
Estructura For . . . Next
Pág. 36
Esta estructura es utilizada para ejecutar un bucle un
número determinado de veces. El número de iteraciones deberá
ser conocido de antemano. Su sintaxis es la que se presenta a
continuación:
For CONTADOR = INICIO To FINAL [Step INCREMENTO/DECREMENTO]
SENTENCIAS_REPETITIVAS
[Exit For]
Next
Donde la variable CONTADOR es inicializada con el valor de
INICIO y se incrementa o decrementa hasta un valor FINAL.
INCREMENTO/DECREMENTO define la manera en que cambia el valor
de la variable CONTADOR en cada iteración.
La sentencia Exit For permite salir del bucle For . . . Next
antes de que este finalice.
Por ejemplo, el siguiente código imprime los cuadrados de
los números enteros del 1 al 25.
Dim C As Integer
For C = 1 To 25
Print C
Next
Para que este código funcione correctamente debe
establecer la propiedad AutoRedraw del formulario a True.
Estructura While . . . Wend
Pág. 37
La estructura While . . . Wend es aquella en la que el
número de iteraciones no se conoce por anticipado y el cuerpo
del bucle se repite mientras se cumple una determinada
condición. Su sintaxis es la siguiente:
While CONDICIÓN
SENTENCIAS_REPETITIVAS
Wend
La estructura While . . . Wend evalúa la CONDICIÓN en cada
iteración y si el resultado es verdadero continúa su ejecución.
El bucle termina cuando CONDICIÓN es falsa.
A manera de ejemplo, considere el siguiente código, el
cual imprime en pantalla la suma de los primeros números
naturales, es decir = 1 + 2 + 3 + 4 + . . . +
N
S N
Dim N As Integer, S As Integer
S = 0
N = InputBox(“Ingrese N?”)
While N <> 0
S = S + N
N = N - 1
Wend
MsgBox “La suma es S= ” & Str(S)
Estructura Do . . . Loop
Esta estructura ejecuta un bucle mientras una condición
dada sea cierta, o hasta que una condición dada sea cierta. La
Pág. 38
condición puede ser verificada antes o después de ejecutarse el
cuerpo del bucle. Su sintaxis es:
Formato 1: Do [While/Until] CONDICIÓN
SENTENCIAS_REPETITIVAS
[Exit Do]
Loop
Formato 2: Do
SENTENCIAS_REPETITIVAS
[Exit Do]
Loop [While/Until] CONDICIÓN
Esta estructura (como se puede observar en ambos formatos)
permite realizar varias estructuras diferentes dependiendo si
la condición de terminación está al principio o al final del
cuerpo del bucle.
Como ejemplo, consideremos el siguiente programa, el cual
calcula el factorial de un entero ingresado por teclado: N
Dim N As Integer, FACT As Integer, C As Integer
FACT = 1
C = 1
N = InputBox(“Ingrese N?”)
Do
FACT = FACT * C
C = C + 1
Pág. 39
Loop While C <= N
MsgBox “El factorial de ” & Str(N) & “ es=” & Str(FACT)
Sentencia GoTo
Transfiere el control a una línea específica de código,
identificada por una etiqueta o por un número de línea. Su
sintaxis es:
GoTo ETIQUETA/NUMERO_LÍNEA
Aunque el uso del GoTo se ha depreciado considerablemente,
en el presente trabajo no se juzgará su validez. Sin embargo,
se ha establecido que no hay situaciones de programación que
requieran el uso del GoTo, es decir, no es un elemento
necesario para hacer completo el lenguaje.
Sin embargo, el GoTo es un convenio que, si su usa con
cuidado, puede ser beneficioso en ciertas situaciones de
programación.
Por ejemplo podría escribir un bucle para imprimir los
cuadrados de los números enteros del 1 al 25.
Dim X As Integer
X = 0
LABEL1:
X = X + 1
Print X ^ 2
If X < 25 Then GoTo LABEL1
Pág. 40
Un uso abusivo de la sentencia GoTo da lugar a códigos
difíciles de interpretar y de mantener. Por ello, se recomienda
su uso solamente en ocasiones excepcionales. La tarea que vaya
a desempeñar una sentencia GoTo puede suplirse utilizando
cualquiera de las estructuras de control vistas en las
secciones anteriores.
ARREGLOS
Un arreglo o matriz es una estructura de datos en la que
se almacena una colección finita de datos del mismo tipo, que
comparten un nombre común, a los que se puede acceder por la
posición (índice) que ocupa cada uno de ellos dentro del
arreglo. Cada elemento del arreglo es una variable que puede
contener un número o una cadena de caracteres, dependiendo del
tipo de arreglo que se declare.
Los arreglos en Visual Basic se clasifican en estáticos y
dinámicos.
Arreglos estáticos
Son aquellos arreglos cuyo tamaño no puede cambiar en
tiempo de ejecución. La declaración de un arreglo estático se
puede realizar mediante la siguiente sintaxis:
Dim NOMBRE_ARREGLO(DIMENSONES) As TIPO
Pág. 41
Donde DIMENSIONES es una lista de números, separados por
comas y que definen las dimensiones del arreglo. Esta lista
puede ser de la siguiente forma:
DIMENSIÓN_1, DIMENSIÓN_2, DIMENSIÓN_3, . . ., DIMENSIÓN_K
Para el caso de un arreglo formado por “K ” dimensiones,
es decir un arreglo K -dimensional.
A manera de ejemplo considere los siguientes casos que se
pueden presentar:
Dim LISTA(9) As Integer
Dim MATRIZ(4, 3) As Double
Dim NOMBRES(19) As String * 30
En el primer caso se declara un arreglo unidimensional de
10 elementos de tipo entero (por defecto los elementos de un
arreglo se numeran a partir de 0).
En el segundo caso se define de un arreglo bidimensional
de 20 elementos (5 filas por 4 columnas) de tipo punto flotante
en doble precisión.
En el tercer caso se define una arreglo unidimensional de
20 elementos de tipo cadena de caracteres (cada elemento tiene
una longitud fija de 30 caracteres).
Como se observa la numeración de los elementos de un
arreglo por defecto comienza en cero, para hacer que la
Pág. 42
numeración comience en 1, debe ingresar la siguiente orden en
la sección de Declaraciones del módulo de formulario:
Luego, para declarar los mismos arreglos de los casos
anteriores, las sentencias serían las siguientes:
Dim LISTA(10) As Integer
Dim MATRIZ(5, 4) As Double
Dim NOMBRES(20) As String * 30
Establecer la sentencia Option Base a 1 o trabajar con el
valor predeterminado (cero) queda a consideración del lector.
Arreglos dinámicos
Son aquellos arreglos en los que su tamaño puede definirse
o modificarse en tiempo de ejecución. Para declara una arreglo
dinámico utilice la siguiente sintaxis:
Dim NOMBRE_ARREGLO() As TIPO
Para definir el tamaño del arreglo utilizar la siguiente
sintaxis:
Pág. 43
ReDim NOMBRE_ARREGLO(NÚMERO_ELEMENTOS)
Cada vez que se ejecuta la sentencia ReDim, todos los
valores almacenados en el arreglo se pierden. Para definir o
cambiar el tamaño del arreglo conservando los valores del mismo
use la siguiente sintaxis:
ReDim Preserve NOMBRE_ARREGLO(NÚMERO_ELEMENTOS)
Para liberar el espacio de memoria utilizado por arreglos
dinámicos que ya no son útiles, utilizar la sintaxis:
Erase NOMBRE_ARREGLO
La orden Erase asigna cero a cada elemento de los arreglos
numéricos y nulo (“”) a cada elemento de los arreglos de cadena
de caracteres.
A manera de ejemplo considere el siguiente código que
declara y hace uso de un arreglo dinámico:
Dim I As Integer, N As Integer, TEMP() As Integer
N = InputBox(“Ingrese N?”)
ReDim TEMP(N - 1)
For I = 0 To N - 1
TEMP(I) = I + 1
Print TEMP(I)
Next
Erase TEMP
Pág. 44
REGISTROS
Un registro es un nuevo tipo de dato, que se define como
una colección de datos de diferentes tipos, conocidos como
“campos”, los cuales se encuentran evidentemente relacionados.
Un registro sólo se puede ser creado en la sección de
declaraciones de un módulo. La sintaxis correspondiente es:
Private Type NOMBRE_REGISTRO
DECLARACIONES_DE_LOS_MIEMBROS
End Type
Por ejemplo considere el siguiente código que define la
estructura ALUMNO:
Private Type ALUMNO
ID_ALUMNO As String * 7
NOMBRE As String * 25
DIRECCION As String * 35
TELEFONO As String * 7
ESTADO As Boolean
End Type
Luego, podemos declarar una variable tipo ALUMNO de la
siguiente forma:
Dim X As ALUMNO
Pág. 45
Para referirse a un determinado miembro del registro se
utiliza el operador selector de campos ( . ), veamos:
X.ID_ALUMNO = “980976G”
X.NOMBRE = “Carlos Castillo Peralta”
X.DIRECCION = “Jr. C. Richardson 412 Chorrillos”
X.TELEFONO = “2510850”
X.ESTADO = True
Las mismas órdenes del párrafo anterior se pueden escribir
de una manera más fácil, más legible y más eficiente si utiliza
la sentencia With . . . End With, del siguiente modo:
With X
. ID_ALUMNO = “980976G”
.NOMBRE = “Carlos Castillo Peralta”
.DIRECCION = “Jr. C. Richardson 412 Chorrillos”
.TELEFONO = “2510850”
.ESTADO = True
End With
FUNCIONES
Las funciones son uno de los elementos básicos en
programación. A continuación serán estudiadas detalladamente.
Declaración de una función
Pág. 46
Una función es un procedimiento que cuando se ejecuta
devuelve un único resultado al procedimiento que la invocó. La
sintaxis correspondiente a la declaración de una función es:
Function NOMBRE_FUNCIÓN([LISTA_PARÁMETROS]) [As TIPO]
SENTENCIAS
[NOMBRE_FUNCIÓN = VALOR_RETORNADO]
[Exit Function]
End Function
Donde LISTA_PARÁMETROS es una secuencia de variables
separadas por comas que se corresponden con los argumentos
pasados cuando es invocada la función.
Para especificar el tipo de datos que será retornado por
la función utilice la cláusula opcional As TIPO, el tipo es
Variant por omisión.
El valor retornado por la función es almacenado en su
propio nombre, es decir en NOMBRE_FUNCIÓN, que actúa como
variable dentro del cuerpo de la función. Si no se efectúa esta
asignación el valor devuelto será cero si la función es de tipo
numérica, nulo (“”) si la función es de tipo cadena, o vacío
(Empty) si la función es de tipo Variant.
La cláusula opcional Exit Function permite salir de una
función antes de que la función finalice, en caso sea esto
necesario.
Pág. 47
La sintaxis para la llamada a una función es de la
siguiente forma:
VARIABLE = NOMBRE_FUNCIÓN([LISTA_ARGUMENTOS])
Donde LISTA_ARGUMENTOS es una secuencia de constantes,
variables o expresiones separadas por comas. El número de
argumentos debe ser igual al número de parámetros de la
función. Los tipos de los argumentos deben coincidir con los
tipos de sus correspondientes parámetros.
A manera de ejemplo considere la implementación de la
siguiente función:
32)( 2 ++= xxxf
En la sección de Declaraciones del módulo de formulario
ingrese el siguiente código:
Function F(X As Double) As Double
F = X ^ 2 + 2 * X + 3
End Function
Para invocar la función creada recientemente, codifique
las siguientes líneas:
Dim A As Double, RESP As Double
A = InputBox(“Ingrese A?”)
RESP = F(A)
Pág. 48
MsgBox (Str(RESP))
Paso de argumentos a una función
El paso de argumentos a una función es la forma como se
ingresan los datos y variables al interior de la función y se
presenta de dos formas:
• Por referencia
• Por valor
Paso de argumentos por referencia
En las funciones de Visual Basic, los argumentos se pasan
por referencia (forma por defecto), de este modo cualquier
cambio de valor que sufra un parámetro en el cuerpo de la
función, también se produce en el argumento correspondiente de
la llamada a la función. Esta forma de pasar los argumentos a
una función es útil para funciones que devuelven más de un
valor. Por ejemplo, considere la siguiente función que calcula
las raíces reales de una ecuación cuadrática Ax Bx C2 0+ + = .
Function RAIZ(A As Double, B As Double, C As Double, _
X1 As Double, X2 As Double) As Boolean
Dim D As Double
D = B ^ 2 - 4 * A * C
If D >= 0 Then
X1 = (-B - Sqr(D)) / (2 * A)
X2 = (-B + Sqr(D)) / (2 * A)
Pág. 49
RAIZ = True ' Verdadero si hay raíces reales
Else
RAIZ = False ' Falso si no hay raíces reales
End If
End Function
La llamada a esta función se puede realizar de la manera
que se presenta a continuación:
Dim A As Double, B As Double, C As Double
Dim X1 As Double, X2 As Double
A = InputBox(“Ingrese A?”)
B = InputBox(“Ingrese B?”)
C = InputBox(“Ingrese C?”)
If RAIZ(A, B, C, X1, X2) Then
MsgBox “X1= ” & Str(X1)
MsgBox “X2= ” & Str(X2)
Else
MsgBox “NO EXISTEN RAÍCES REALES”
End If
Paso de argumentos por valor
Cuando se ejecuta una función, se podrá especificar que el
valor de un argumento no sea cambiado por esta función, pasando
dicho argumento por valor. Para ello se debe anteponer la
Pág. 50
palabra reservada ByVal a la declaración del parámetro en la
cabecera de la función. Por ejemplo:
Function F(ByVal X As Double) As Double
F = X ^ 2 + 2 * X + 3
End Function
La cabecera de la función F especifica que X será pasado
por valor y no por referencia.
Funciones recursivas
Se dice que una función es recursiva si se llama a sí
misma. Por ejemplo la función FACTORIAL cuyo código se presenta
a continuación es recursiva:
Function FACTORIAL(N As Integer) As Long
If N 0 Then <>
FACTORIAL = FACTORIAL(N - 1) * N
Else
FACTORIAL = 1
End If
End Function
PROCEDIMIENTOS
La sintaxis para definir un procedimiento es la
siguiente:
Private Sub NOMBRE_PROCEDIMIENTO([LISTA_PARÁMETROS])
Pág. 51
SENTENCIAS
[Exit Sub]
End Sub
La explicación es análoga a la dada para las funciones.
Sin embargo, un procedimiento no puede ser utilizado en una
expresión, ya que un procedimiento no retorna ningún valor a
través de su nombre.
La llamada a un procedimiento puede ser realizada de
alguna de las dos formas siguientes:
Call NOMBRE_PROCEDIMIENTO([LISTA_ARGUMENTOS])
ó
NOMBRE_PROCEDIMIENTO([LISTA_ARGUMENTOS])
Por ejemplo, el siguiente código corresponde a un
procedimiento que calcula e imprime la suma de los primeros
números naturales impares, es decir: = 1 + 3 + 5 + . . . +
N
S N
Private Sub SUMA_IMPAR(N As Integer)
Dim S As Integer, I As Integer
S = 0
For I = 1 To N
If I Mod 2 <> 0 Then
S = S + I
Pág. 52
End If
Next
MsgBox “La suma es S= ” & Str(S)
End Sub
La llamada a este procedimiento podría ser de la forma:
Call SUMA_IMPAR(25)
Pág. 53
CAPÍTULO 4
USO DE LOS CONTROLES
Los controles son aquellos objetos que se encuentran
dentro de un contenedor y que permiten la interacción entre el
usuario y la aplicación, ya sea para manipular datos y/o
ejecutar tareas.
En Visual Basic, los controles suelen ser agrupados en
tres categorías:
• Controles básicos
• Controles complementarios
• Controles externos
Los controles básicos son las etiquetas, cuadros de texto
y botones de comando, pues utilizando estos tres controles se
puede construir cualquier interfaz.
Los controles complementarios son el resto de los
controles, por ejemplo una casilla de verificación, un cuadro
combinado o un cronómetro.
Los controles externos se refieren a aquellos controles
creados por terceros. Este tipo de controles son llamados
ActiveX.
Pág. 54
CONTROLES BÁSICOS
Los controles básicos lo conforman las etiquetas, cuadros
de texto y botones de comando, debido a que cualquier interfaz
se puede implementar con sólo estos tres objetos.
Etiqueta
Una etiqueta es un control que permite presentar texto de
solo lectura. Se utiliza para mostrar títulos y mensajes que
por lo general no cambian. Sin embargo, si lo desea, puede
escribir procedimientos que cambien el texto mostrado por una
etiqueta como respuesta a eventos en tiempo de ejecución.
Propiedad Descripción
Alignment Especifica la forma como se alineará el
texto.
AutoSize Especifica si se cambia automáticamente el
tamaño del control para que quepan sus
contenidos.
BackColor,
ForeColor
Especifica el color de fondo y de primer
plano empleado para mostrar el texto.
BackStyle Especifica si el fondo del control es
transparente u opaco.
Caption Especifica el texto que se muestra en el
control.
WordWrap Especifica si la etiqueta se extiende a más
de una línea cuando el texto es amplio.
Pág. 55
Cuadro de texto
Un cuadro de texto es un control en el que el usuario
pueda ingresar datos desde el teclado o visualizar un resultado
generado por la aplicación. El valor de un cuadro de texto por
lo general se asocia a una variable de memoria.
Propiedad Descripción
Enabled Habilita o deshabilita el control, es decir
si se puede o no modificar el contenido.
Locked Permite bloquear el acceso al control en
tiempo de ejecución.
MaxLenght Especifica la longitud máxima (en caracteres)
que puede escribirse en el control.
MultiLine Especifica si el control admitirá múltiples
líneas.
PasswordChar Determina si se muestran en el control los
caracteres escritos por el usuario o los
caracteres de marcador de posición.
ScrollBars Especifica si se muestran las barras de
desplazamiento horizontales o verticales.
SelLength Especifica el número de caracteres
seleccionados.
SelStart Especifica el inicio del texto seleccionado.
Si su valor es 0, el texto seleccionado
comienza por el primer carácter.
SelText Contiene el texto seleccionado.
Text Contiene el texto introducido en el control.
Puede inicializar el contenido en tiempo de
diseño.
Pág. 56
Los eventos asociados a un cuadro de texto son los
siguientes:
Evento Descripción
Change Ocurre cuando se cambia el contenido del
control utilizando el teclado o el ratón.
KeyPress Ocurre cuando se pulsa una tecla.
Botón de comando
Un botón de comando es un control que suele emplearse para
ejecutar una acción, como cerrar un formulario, imprimir un
informe, etc.
Propiedad Descripción
Cancel Especifica si el control responderá a la
tecla ESC, por lo general para terminar la
aplicación.
Caption Muestra un título para el control.
Default Especifica si el control responderá a la
tecla ENTRAR, sin importar la ubicación del
enfoque.
Enabled Permite habilitar o deshabilitar el control.
Picture Especifica una imagen tipo icono para el
control.
Style Especifica la apariencia del control, ya sea
estándar (estilo estándar de Windows) o
gráfica (con una imagen personalizada).
Pág. 57
Los botones de comando suelen responder al evento Click,
cuya descripción es:
Evento Descripción
Click Ocurre cuando el usuario hace click sobre el
control.
A manera de ejemplo vamos a desarrollar la siguiente
aplicación. Esta consiste en un cajero automático el cual
permite manipular cierta cantidad de dinero para lo cual
dispone de los siguientes billetes: S/. 10.00; S/. 20.00;
S/. 50.00; S/. 100.00 y S/. 200.00. Elaborar una aplicación que
permita la lectura de la cantidad a retirar e indique el menor
número de billetes a utilizar.
Para el desarrollo de la presente aplicación proceda a
ubicar los siguientes controles en el formulario:
6 etiquetas
Pág. 58
6 cajas de texto
3 botones de comando
Una vez ubicados los controles, establezca las propiedades
según se indica:
Form1
Nombre FrmCajero
BorderStyle 3-Fixed Dialog
Caption Cajero automático
Label1
Nombre LblCantidad
AutoSize True
Caption Cantidad a retirar:
Label2
Nombre LblB10
AutoSize True
Caption Billetes de S/. 10
Label3
Nombre LblB20
AutoSize True
Caption Billetes de S/. 20
Label4
Nombre LblB50
AutoSize True
Caption Billetes de S/. 50
Label5
Pág. 59
Nombre LblB100
AutoSize True
Caption Billetes de S/. 100
Label6
Nombre LblB200
AutoSize True
Caption Billetes de S/. 200
Text1
Nombre TxtCantidad
Text
Text2
Nombre TxtB10
Text
Text3
Nombre TxtB20
Text
Text4
Nombre TxtB50
Text
Text5
Nombre TxtB100
Text
Text6
Nombre TxtB200
Text
Command1
Pág. 60
Nombre CmdAceptar
Caption &Aceptar
Command2
Nombre CmdLimpiar
Caption &Limpiar
Command3
Nombre CmdSalir
Caption &Salir
Para añadir código a la aplicación haga doble click sobre
el botón “Aceptar” e ingrese lo siguiente:
Private Sub CmdAceptar_Click()
Dim C As Integer, B200 As Integer, B100 As Integer, _
B50 As Integer, B20 As Integer, B10 As Integer
C = Val(TxtCantidad)
If C Mod 10 = 0 Then
B200 = C \ 200 : C = C Mod 200
B100 = C \ 100 : C = C Mod 100
B50 = C \ 50 : C = C Mod 50
B20 = C \ 20 : B10 = C Mod 20
TxtB200 = Str(B200)
TxtB100 = Str(B100)
TxtB50 = Str(B50)
TxtB20 = Str(B20)
TxtB10 = Str(B10)
Else
Pág. 61
MsgBox “Cantidad a retirar debe ser múltiplo de 10”
TxtCantidad = “”
TxtCantidad.SetFocus
End If
End Sub
Luego, haga doble click sobre el botón “Limpiar” y añada
el siguiente código:
Private Sub CmdLimpiar_Click()
TxtCantidad = “”
TxtB200 = “”
TxtB100 = “”
TxtB50 = “”
TxtB20 = “”
TxtB10 = “”
TxtCantidad.SetFocus
End Sub
Finalmente dar doble click sobre el botón “Salir” y añada
el siguiente código:
Private Sub CmdSalir_Click()
End
End Sub
Pág. 62
En el código anterior hemos utilizado el método SetFocus
para enfocar la caja de texto TxtCantidad, esto es, para
posicionar el cursor sobre ella.
CONTROLES COMPLEMENTARIOS
Los controles complementarios se utilizan como alternativa
a los controles básicos en aplicaciones en las cuales su uso
facilita o mejora el diseño de la interfaz. Como el lector
podrá verificar, algunos controles son más adecuados que otros
dependiendo del tipo de aplicación que se pretenda desarrollar.
Marco
Un marco es un objeto contenedor que puede utilizarse para
agrupar casillas de verificación, botones de opción, botones de
comando, etc.
Propiedad Descripción
Caption Muestra un título para el control.
Casilla de verificación
Una casilla de verificación se utiliza para alternar entre
dos posibles valores (Activado/Desactivado). Cada casilla de
verificación es independiente de las demás ya que cada una
tiene su propio nombre (Name). Puede utilizar casillas de
verificación en grupos para mostrar múltiples opciones entre
Pág. 63
las cuales el usuario puede seleccionar todas las que desee a
la vez.
Propiedad Descripción
Caption Muestra un título para el control.
Value Devuelve o establece el estado del control,
puede ser: Desactivado (0), Activado (1).
Las casillas de verificación suelen responder al evento
Click.
Botón de opción
Un botón de opción se utiliza para alternar entre dos
posibles valores (Activado/Desactivado), de manera similar a
las casillas de verificación, la diferencia radica en que de un
grupo de botones de opción el usuario sólo puede seleccionar un
único botón a la vez.
Propiedad Descripción
Caption Muestra un título para el control.
Value Devuelve o establece el estado del control,
puede ser: Desactivado (Falso), Activado
(True).
Los botones de opción también suelen responder al evento
Click.
Pág. 64
A manera de ejemplo vamos a desarrollar la siguiente
aplicación, la cual permite cambiar el aspecto de un cuadro de
texto, el usuario debe elegir el color (rojo, verde, azul) y el
estilo (negrita, cursiva, subrayado) de la fuente a utilizar.
Adicionalmente, cuando el usuario active la casilla de
verificación “Convertir a mayúsculas”, todo el texto que haya
escrito en el cuadro de texto se presentará en mayúsculas y
todo texto que escriba a continuación (mientras la opción esté
activada) también deberá aparecer en mayúsculas.
Para el desarrollo de la presente aplicación proceda a
ubicar los siguientes controles en el formulario:
1 cuadro de texto
2 marcos
3 botones de opción
4 casillas de verificación
Pág. 65
Una vez ubicados los controles, establezca las propiedades
según se indica:
Form1
Nombre FrmEditor
BorderStyle 3-Fixed Dialog
Caption Editor
Text1
Nombre TxtMensaje
ForeColor &H000000FF&
Text
Frame1
Nombre FraColor
Caption Color
Frame2
Nombre FraEstilo
Caption Estilo
Option1
Nombre OptRojo
Caption Rojo
ForeColor &H000000FF&
Value True
Option2
Nombre OptVerde
Caption Verde
ForeColor &H00008000&
Pág. 66
Option3
Nombre OptAzul
Caption Azul
ForeColor &H00C00000&
Check1
Nombre ChkNegrita
Caption Negrita
Font Arial (Negrita)
Check2
Nombre ChkCursiva
Caption Cursiva
Font Arial (Cursiva)
Check3
Nombre ChkSubrayado
Caption Subrayado
Font Arial (Subrayado)
Check4
Nombre ChkMayuscula
Caption Convertir a mayúsculas
Una vez establecidas las propiedades, proceda a ingresar
el código que se indica a continuación:
Private Sub OptRojo_Click()
If OptRojo.Value Then
TxtMensaje.ForeColor = RGB(255, 0, 0)
End If
Pág. 67
End Sub
Private Sub OptVerde_Click()
If OptVerde.Value Then
TxtMensaje.ForeColor = RGB(0, 255, 0)
End If
End Sub
Private Sub OptAzul_Click()
If OptAzul.Value Then
TxtMensaje.ForeColor = RGB(0, 0, 255)
End If
End Sub
Private Sub ChkNegrita_Click()
If ChkNegrita.Value Then
TxtMensaje.Font.Bold = True
Else
TxtMensaje.Font.Bold = False
End If
End Sub
Private Sub ChkCursiva_Click()
If ChkCursiva.Value Then
TxtMensaje.Font.Italic = True
Else
TxtMensaje.Font.Italic = False
End If
End Sub
Pág. 68
Private Sub ChkSubrayado_Click()
If ChkSubrayado.Value Then
TxtMensaje.Font.Underline = True
Else
TxtMensaje.Font.Underline = False
End If
End Sub
Private Sub ChkMayuscula_Click()
If ChkMayuscula.Value Then
TxtMensaje = UCase(TxtMensaje)
End If
End Sub
Private Sub TxtMensaje_KeyPress(KeyAscii As Integer)
Dim CAR As String * 1
If ChkMayuscula.Value Then
CAR = UCase(Chr(KeyAscii))
KeyAscii = Asc(CAR)
End If
End Sub
La función RGB() especifica el color que se asigna a la
propiedad ForeColor.
La función UCase() retorna una cadena de caracteres en
mayúsculas.
Pág. 69
Cuadro de lista
Un cuadro de lista es un control que presenta una lista de
elementos en la que el usuario puede seleccionar uno o más de
dichos elementos. Si el número de elementos supera el número
que puede mostrarse, se agregará automáticamente una barra de
desplazamiento al control.
Propiedad Descripción
List Contiene los elementos de la lista. Puede
definirlos en tiempo de diseño.
ListCount Especifica el número de elementos de la
lista. Su valor siempre es uno más que el
mayor valor de ListIndex.
ListIndex Especifica el número de orden que ocupa el
elemento seleccionado en la lista. Toma el
valor de 0 para el primer elemento, si no ha
selecciona ninguno retorna -1.
MultiSelect Especifica si se pueden seleccionar varios
elementos de la lista.
SelCount Devuelve el número de elementos
seleccionados.
Selected Especifica si un elemento de la lista está
seleccionado.
Sorted Especifica si los elementos de la lista se
ordenan alfabéticamente.
Text Especifica el valor del elemento seleccionado
en ese instante. El valor es tratado como una
cadena de caracteres.
Pág. 70
Los métodos que se pueden utilizar para un cuadro de lista
son los siguientes:
Método Descripción
AddItem Agrega un nuevo elemento a la lista.
Clear Elimina todos los elementos contenidos en la
lista.
RemoveItem Elimina en elemento de la lista.
Cuadro combinado
Un cuadro combinado es una mezcla de un cuadro de texto
con una lista. En él no sólo se podrá ingresar un dato sino
también seleccionarlo de la lista. Presenta las mismas
propiedades, eventos y métodos que el cuadro de lista a
excepción de lo siguiente:
Propiedad Descripción
Style Especifica si el control se comporta como un
cuadro de texto o como una lista desplegable.
Un cuadro de texto permite ingresar valores.
Una lista desplegable sólo permite
seleccionar valores. El valor predeterminado
es 0-vbComboDropDown, e incluye una lista
desplegable y un cuadro de texto. El valor
1-vbComboSimple incluye tan solo cuadro de
texto. El valor 2-Dropdown List incluye sólo
una lista desplegable.
Pág. 71
Como ejemplo del uso de listas vamos a desarrollar una
aplicación que permita ingresar el nombre de un curso, el cual
pasa a formar parte de una lista de espera antes de ser
programado para su dictado. Los cursos deben ser seleccionados
de la lista de espera y trasladados a la lista de cursos
programados y viceversa.
Para el desarrollo de la presente aplicación proceda a
ubicar los siguientes controles en el formulario:
3 etiquetas
1 cuadro de texto
2 listas
5 botones de comando
Pág. 72
En seguida proceda a establecer las propiedades según se
indica:
Form1
Nombre FrmCursos
BorderStyle 3-Fixed Dialog
Caption Cursos
Label1
Nombre LblCurso
AutoSize True
Caption Ingrese nuevo curso:
Label2
Nombre LblSeleccionar
AutoSize True
Caption Seleccione un curso:
Label3
Nombre LblProgramado
AutoSize True
Caption Curso programado:
Text1
Nombre TxtCurso
Text
List1
Nombre LstSeleccionar
List2
Nombre LstProgramado
Pág. 73
Command1
Nombre CmdAgregar
Caption
Picture C:\FundVB\Bitmaps\AddItem.Bmp
Style 1-Graphical
Command2
Nombre CmdAgregarTodo
Caption
Picture C:\FundVB\Bitmaps\AddAll.Bmp
Style 1-Graphical
Command3
Nombre CmdQuitar
Caption
Picture C:\FundVB\Bitmaps\Remove.Bmp
Style 1-Graphical
Command4
Nombre CmdQuitarTodo
Caption
Picture C:\FundVB\Bitmaps\RemoveAll.Bmp
Style 1-Graphical
Command5
Nombre CmdAnnadir
Caption &Añadir
Default True
Seguidamente proceda a ingresar el código que se indica a
continuación:
Pág. 74
Private Sub CmdAnnadir_Click()
LstSeleccionar.AddItem TxtCurso
TxtCurso = “”
TxtCurso.SetFocus
End Sub
Private Sub CmdAgregar_Click()
Dim CURSO As String, I As Integer
CURSO = LstSeleccionar.Text
I = LstSeleccionar.ListIndex
If LstSeleccionar.ListIndex >= 0 Then
LstProgramado.AddItem CURSO
LstSeleccionar.RemoveItem I
End If
End Sub
Private Sub CmdQuitar_Click()
Dim CURSO As String, I As Integer
CURSO = LstProgramado.Text
I = LstProgramado.ListIndex
If LstProgramado.ListIndex >= 0 Then
LstSeleccionar.AddItem CURSO
LstProgramado.RemoveItem I
End If
End Sub
Private Sub CmdAgregarTodo_Click()
Dim I As Integer
Pág. 75
For I = 0 To LstSeleccionar.ListCount - 1
LstProgramado.AddItem LstSeleccionar.List(I)
Next
LstSeleccionar.Clear
End Sub
Private Sub CmdQuitarTodo_Click()
Dim I As Integer
For I = 0 To LstProgramado.ListCount - 1
LstSeleccionar.AddItem LstProgramado.List(I)
Next
LstProgramado.Clear
End Sub
Seguidamente mostraremos un ejemplo del uso de los cuadros
combinados. Para tal fin vamos a desarrollar una aplicación que
permita realizar consultas acerca de un determinado curso. La
relación de cursos se presentará mediante un cuadro combinado,
del cual el usuario debe seleccionar el curso de su interés y
en seguida se presentará el nombre del profesor encargado del
curso (teoría), el nombre del jefe de práctica (laboratorio),
así como los horarios de teoría y de laboratorio,
respectivamente.
Pág. 76
Para el desarrollo de la presente aplicación proceda a
ubicar los siguientes controles en el formulario:
1 etiqueta
1 cuadro de texto
1 cuadro combinado
1 botón de comando
En seguida proceda a establecer las propiedades según se
indica:
Form1
Nombre FrmConsultaCursos
BorderStyle 3-Fixed Dialog
Caption Consulta de cursos
Pág. 77
Label1
Nombre LblCursos
Caption Cursos:
Text1
Nombre TxtCurso
MultiLine True
ScrollBars 2-Vertical
Text
Combo1
Nombre CboCursos
Text
Style 2-Dropdown List
Command1
Nombre CmdSalir
Caption &Salir
Seguidamente proceda a ingresar el código que se indica a
continuación:
Dim Matriz(5, 3) As String
Private Sub Form_Load()
CboCursos.AddItem “Microsoft Visual Basic Nivel I”
CboCursos.AddItem “Microsoft Visual Basic Nivel II”
CboCursos.AddItem “Microsoft Visual FoxPro Nivel I”
CboCursos.AddItem “Microsoft Visual FoxPro Nivel II”
CboCursos.AddItem “Microsoft Visual C++ Nivel I”
CboCursos.AddItem “Microsoft Visual C++ Nivel II”
Pág. 78
Matriz(0, 0) = “Castillo Peralta, Carlos”
Matriz(1, 0) = “Castillo Peralta, Carlos”
Matriz(2, 0) = “Linares Alarcon, Adams”
Matriz(3, 0) = “Castillo Peralta, Carlos”
Matriz(4, 0) = “Córdoba Saavedra, Javier”
Matriz(5, 0) = “Castillo Peralta, Carlos”
Matriz(0, 1) = “Sa 08-11”
Matriz(1, 1) = “Sa 14-17”
Matriz(2, 1) = “Sa 08-11”
Matriz(3, 1) = “Do 08-11”
Matriz(4, 1) = “Sa 14-17”
Matriz(5, 1) = “Sa 17-20”
Matriz(0, 2) = “Castillo Peralta, Carlos”
Matriz(1, 2) = “Linares Alarcon, Adams”
Matriz(2, 2) = “Montes Tejada, Estela”
Matriz(3, 2) = “Linares Alarcon, Adams”
Matriz(4, 2) = “Córdoba Saavedra, Javier”
Matriz(5, 2) = “Córdoba Saavedra, Javier”
Matriz(0, 3) = “Sa 11-13”
Matriz(1, 3) = “Do 08-10”
Matriz(2, 3) = “Sa 11-13”
Matriz(3, 3) = “Do 14-16”
Matriz(4, 3) = “Sa 18-20”
Matriz(5, 3) = “Do 08-10”
End Sub
Pág. 79
Private Sub CboCursos_Click()
Dim P_TEORIA As String, H_TEORIA As String
Dim P_LAB As String, H_LAB As String
P_TEORIA = “Profesor de teoría: ” & _
Matriz(CboCursos.ListIndex, 0)
H_TEORIA = “Horario de teoría: ” & _
Matriz(CboCursos.ListIndex, 1)
P_LAB = “Jefe de práctica: ” & _
Matriz(CboCursos.ListIndex, 2)
H_LAB = “Horario laboratorio: ” & _
Matriz(CboCursos.ListIndex, 3)
TxtCurso = P_TEORIA & vbCrLf & H_TEORIA & vbCrLf & _
P_LAB & vbCrLf & H_LAB
End Sub
Private Sub CmdSalir_Click()
End
End Sub
La constante vbCrLf es una combinación de retorno de carro
y avance de línea, es equivalente a Chr(13) + Chr(10).
Para este ejemplo en particular hemos almacenado la
información en memoria RAM mediante el uso de un arreglo
bidimensional (Matriz).
Pág. 80
Cronómetro
Un cronómetro sirve para controlar el tiempo transcurrido
desde el inicio de una acción.
Propiedad Descripción
Interval Especifica el número de milisegundos que se
esperará para disparar el evento Timer.
El control Cronómetro responde al evento Timer, cuya
descripción es:
Evento Descripción
Timer Ocurre cuando el número de milisegundos
especificado en la propiedad Interval ha
transcurrido.
A manera de ejemplo vamos a desarrollar la siguiente
aplicación que simula el funcionamiento de un reloj digital.
Pág. 81
Para el desarrollo de la presente aplicación proceda a
ubicar los siguientes controles sobre el formulario:
1 etiqueta
1 cuadro de texto
1 cronómetro
1 botón de comando
En seguida proceda a establecer las propiedades según se
indica:
Form1
Nombre FrmReloj
BorderStyle 3-Fixed Dialog
Caption Reloj digital
Label1
Nombre LblHora
Caption Hora
Text1
Nombre TxtHora
Text
Timer1
Nombre Timer1
Interval 500
Command1
Nombre CmdTerminar
Caption &Terminar
Pág. 82
Seguidamente proceda a ingresar el código que se indica a
continuación:
Private Sub Form_Activate()
TxtHora = Time()
End Sub
Private Sub Timer1_Timer()
If TxtHora Time() Then <>
TxtHora = Time()
End If
End Sub
Private Sub CmdTerminar_Click()
End
End Sub
Cuadro de imagen
Un cuadro de imagen se utiliza para mostrar un archivo de
imagen (BMP, GIF o JPG). Recorta el gráfico si el control no es
lo bastante grande para mostrar la imagen completa.
Propiedad Descripción
AutoSize Especifica si el control ajusta
automáticamente su tamaño para mostrar un
gráfico completo.
Picture Especifica el archivo de imagen para el
control.
Pág. 83
El evento que suele manejarse para este control es
MouseMove, cuya descripción es:
Evento Descripción
MouseMove Ocurre cuando el usuario mueve el ratón sobre
el control.
Imagen
Un control imagen se utilizará para mostrar un archivo de
imagen (BMP, GIF o JPG) de manera similar a un Cuadro de
imagen. Sin embargo, este control utiliza menos recursos del
sistema y se actualiza con más rapidez que un cuadro de imagen.
Propiedad Descripción
Picture Especifica el archivo de imagen para el
control.
Stretch Especifica como se ajusta el tamaño del
archivo gráfico para que quepa dentro del
control imagen.
Para este control también se suele manejar el evento
MouseMove.
Barras de desplazamiento horizontal
Una barra de desplazamiento horizontal representa un valor
entero, la cual tiene un cuadrado que se desplaza a lo largo de
la misma para fijar un valor.
Pág. 84
La posición más a la izquierda se corresponde con el valor
mínimo, la posición más a la derecha con el valor máximo, y
cualquier otra posición es un valor entre ellos dos.
Propiedad Descripción
Max Especifica el valor máximo que puede tomar la
propiedad Value.
Min Especifica el valor mínimo que puede tomar la
propiedad Value.
LargeChange Especifica en cuanto cambiará el valor de la
propiedad Value cuando el usuario haga click
antes o después del cuadrado de
desplazamiento.
SmallChange Especifica en cuanto cambiará el valor de la
propiedad Value cuando el usuario haga click
en alguna de las flechas de los extremos de
la barra.
Value Especifica el valor del control, este se
encuentra siempre entre los valores de las
propiedades Min y Max.
Las barras de desplazamientos responden a los eventos:
Evento Descripción
Change Ocurre inmediatamente después que el cuadrado
de desplazamiento ha sido movido.
Scroll Ocurre mientras el cuadrado de desplazamiento
está siendo movido (este evento sólo ocurre
cuando el cuadrado es arrastrado).
Barras de desplazamiento vertical
Pág. 85
Una barra de desplazamiento vertical representa un valor
entero, la cual tiene un cuadrado que se desplaza a lo largo de
la misma para fijar un valor.
La posición más hacia arriba se corresponde con el valor
mínimo, la posición más hacia abajo se corresponde con el valor
máximo, y cualquier otra posición es un valor entre ellos dos.
Las propiedades y eventos de las barras de desplazamiento
horizontal y vertical son análogas.
Como ejemplo, vamos a construir una aplicación que permita
cambiar el color de fondo de un cuadro de imagen, mediante tres
barras de desplazamiento (rojo, verde y azul).
Para el desarrollo de la presente aplicación proceda a
ubicar los siguientes controles en el formulario:
3 etiquetas
Pág. 86
3 barras de desplazamiento horizontal
1 cuadro de imagen
En seguida proceda a establecer las propiedades según se
indica:
Form1
Nombre FrmColores
BorderStyle 3-Fixed Dialog
Caption Colores
Label1
Nombre LblRojo
Caption Rojo
Label2
Nombre LblVerde
Caption Verde
Label3
Nombre LblAzul
Caption Azul
HScroll1
Nombre HSRojo
LargeChange 10
Max 255
Min 0
SmallChange 1
Value 255
HScroll2
Pág. 87
Nombre HSVerde
LargeChange 10
Max 255
Min 0
SmallChange 1
Value 0
HScroll3
Nombre HSAzul
LargeChange 10
Max 255
Min 0
SmallChange 1
Value 0
Picture1
Nombre PicFondo
BackColor &H000000FF&
Seguidamente proceda a ingresar el código que se indica a
continuación:
Private Sub HSRojo_Change()
PicFondo.BackColor = RGB(HSRojo, HSVerde, HSAzul)
End Sub
Private Sub HSVerde_Change()
PicFondo.BackColor = RGB(HSRojo, HSVerde, HSAzul)
End Sub
Private Sub HSAzul_Change()
Pág. 88
PicFondo.BackColor = RGB(HSRojo, HSVerde, HSAzul)
End Sub
En el código anterior se debió colocar HSRojo.Value,
HSVerde.Value y HSAzul.Value, pero debido a que la propiedad
Value es por defecto se puede omitir.
Cuadro de lista de unidades
Un cuadro de lista de unidades permite al usuario
seleccionar una unidad de disco válida en tiempo de ejecución.
Utilice este control para presentar una lista de todas las
unidades válidas del sistema.
Propiedad Descripción
Drive Especifica la unidad seleccionada en tiempo
de ejecución.
Este control responde al evento Change, cuya descripción
es la siguiente:
Evento Descripción
Change Ocurre cuando el usuario hace click sobre la
unidad que desea seleccionar. El evento
Change también ocurre si se selecciona la
unidad mediante el teclado.
Cuadro de lista de directorios
Pág. 89
Un cuadro de lista de directorios muestra directorios y
rutas de acceso en tiempo de ejecución. Utilice este control
para mostrar una lista jerárquica de directorios.
Propiedad Descripción
Path Especifica la ruta de acceso actual.
Un cuadro de lista de directorios también responde al
evento Change.
Cuadro de lista de archivos
Un cuadro de lista de archivos encuentra y muestra los
archivos del directorio especificado por la propiedad Path en
tiempo de ejecución. Utilice este control para mostrar una
lista de los archivos seleccionados por tipo.
Propiedad Descripción
Path Especifica la ruta de acceso actual.
Pattern Especifica el tipo de archivo que se desea
visualizar en el control.
List Devuelve los elementos contenidos en la parte
de lista del control.
ListIndex Especifica el índice del elemento
seleccionado actualmente en el control.
Como ejemplo vamos a desarrollar una aplicación que
permita el manejo de unidades, carpetas y archivos. El usuario
Pág. 90
puede seleccionar la unidad actual de trabajo, la carpeta y el
archivo y poder visualizar su contenido (en este caso archivos
gráficos *.JPG).
Para el desarrollo de la presente aplicación proceda a
ubicar los siguientes controles en el formulario:
4 etiquetas
1 cuadro de lista de unidades
1 cuadro de lista de directorios
1 cuadro de lista de archivos
1 imagen
En seguida proceda a establecer las propiedades según se
indica:
Form1
Nombre FrmVisor
Caption Visor
Pág. 91
Label1
Nombre LblUnidad
Caption Unidad
Label2
Nombre LblCarpeta
Caption Carpeta
Label3
Nombre LblArchivo
Caption Archivo
Label4
Nombre LblVista
Caption Vista previa
Drive1
Nombre Drive1
Dir1
Nombre Dir1
File1
Nombre File1
Pattern *.JPG
Image1
Nombre ImgVista
Stretch True
Seguidamente proceda a ingresar el código que se indica a
continuación:
Private Sub Drive1_Change()
Pág. 92
On Error GoTo DRIVE_ERROR
Dir1.Path = Drive1.Drive
Exit Sub
DRIVE_ERROR:
MsgBox “ERROR: Unidad no preparada”, vbCritical, “Error”
Exit Sub
End Sub
Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub
Private Sub File1_Click()
Dim ARCHIVO As String
ARCHIVO = File1.Path & “\”
ARCHIVO = ARCHIVO & File1.List(File1.ListIndex)
ImgVista.Picture = LoadPicture(ARCHIVO)
End Sub
La instrucción On Error activa una rutina de control de
errores y especifica la ubicación de la misma en un
procedimiento.
LA FUNCIÓN MSGBOX
A menudo habrá situaciones en las cuales tendrá que
presentar algún mensaje (por ejemplo una pregunta) y en función
Pág. 93
de la respuesta del usuario se ejecutará una determinada
acción.
La función MsgBox() muestra un cuadro de diálogo
predefinido y retorna un valor de tipo entero dependiendo del
botón seleccionado por el usuario. Su sintaxis es de la
siguiente forma:
VALOR = MsgBox(MENSAJE [, BOTÓN + ICONO, TÍTULO])
Donde MENSAJE se refiere a una expresión de cadena que se
muestra como mensaje en el cuadro de diálogo.
BOTÓN es una expresión numérica que se refiere al tipo y
cantidad de botones a utilizar.
ICONO es una expresión numérica que se refiere al estilo
de icono que se va ha utilizar.
TÍTULO es una texto que se mostrará en la barra de título
de la caja de diálogo.
Tipo de botón
Valor Botón Nombre
0 Aceptar vbOKOnly
Pág. 94
1 Aceptar y Cancelar vbOKCancel
2 Anular, Reintentar, Ignorar vbAbortRetryIgnore
3 Sí, No y Cancelar vbYesNoCancel
4 Sí y No vbYesNo
5 Reintentar y Cancelar vbRetryCancel
Tipo de icono
Valor Icono Nombre
16 Mensaje crítico vbCritical
32 Signo de interrogación vbQuestion
48 Signo de exclamación vbExclamation
64 Signo de información vbInformation
Valores retornados
Valor Botón Nombre
1 Aceptar vbOK
2 Cancelar vbCancel
3 Anular vbAbort
4 Reintentar vbRetry
5 Ignorar vbIgnore
6 Sí vbYes
7 No vbNo
Como ejemplo vamos a construir un formulario que presente
un botón “Salir”, de tal forma que cuando el usuario pulse
dicho botón se presente el siguiente mensaje:
Pág. 95
En caso de que el usuario elija la opción “Sí”, la
aplicación debe terminar. En caso contrario, es decir si el
usuario elige la opción “No”, se debe proseguir con la
aplicación.
Para el desarrollo del presente ejemplo, proceda a ubicar
sobre el formulario un botón de comando (CmdSalir), a
continuación ingresar el siguiente código:
Private Sub CmdSalir_Click()
Dim RESP As Integer
RESP = MsgBox(“Desea terminar la aplicación?”, _
vbQuestion + vbYesNo, “Pregunta”)
If RESP = vbYes Then
End
End If
End Sub
Para ilustrar mejor el uso de la función MsgBox() vamos a
desarrollar la siguiente aplicación que permite mostrar los
diferentes tipos de botones e iconos generados por la función.
Pág. 96
Para ello proceda a ubicar los siguientes controles en el
formulario:
2 cuadros de lista
1 botón de comando
En seguida proceda a establecer las propiedades según se
indica:
Form1
Nombre FrmFuncionMsgBox
BorderStyle 3-Fixed Dialog
Caption Función MsgBox
List1
Nombre LstBoton
List2
Nombre LstIcono
Command1
Pág. 97
Nombre CmdMensaje
Caption &Mensaje
Seguidamente proceda a ingresar el código que se indica a
continuación:
Private Sub Form_Load()
LstBoton.AddItem “Aceptar”
LstBoton.AddItem “Aceptar y Cancelar”
LstBoton.AddItem “Anular, Reintentar, Ignorar”
LstBoton.AddItem “Sí, No y Cancelar”
LstBoton.AddItem “Sí y No”
LstBoton.AddItem “Reintentar y Cancelar”
LstIcono.AddItem “Mensaje crítico”
LstIcono.AddItem “Signo de interrogación”
LstIcono.AddItem “Signo de exclamación”
LstIcono.AddItem “Signo de información”
End Sub
Private Sub CmdMensaje_Click()
Dim RESP As Integer, BOTON As Integer, ICONO As Integer
BOTON = LstBoton.ListIndex
ICONO = (LstIcono.ListIndex + 1) * 16
RESP = MsgBox(“Hola Mundo”, BOTON + ICONO, “Ejemplo”)
End Sub
Pág. 98
CAPÍTULO 5
EL FORMULARIO
Un formulario es un objeto contenedor que sirve para
diseñar la interfaz de usuario. En el formulario se colocan los
controles para que el usuario pueda interactuar con la
aplicación de una manera fácil e intuitiva.
Los formularios tienen sus propias propiedades, eventos y
métodos con los que se puede controlar su apariencia y
comportamiento, muchos de los cuales ya han sido utilizados en
las aplicaciones de los capítulos anteriores y que a
continuación pasamos a describir.
Pág. 99
Propiedad Descripción
AutoRedraw Especifica si se activa el redibujado
automático del formulario.
BackColor Especifica el color de fondo del formulario.
BorderStyle Especifica un estilo de borde para el
formulario.
Caption Especifica el texto que se muestra en la
barra de título del formulario.
ControlBox Especifica si aparece un icono de menú
desplegable en el ángulo superior izquierdo
del formulario.
ForeColor Especifica el color de primer plano utilizado
para mostrar texto sobre el formulario.
Height Especifica el alto del formulario. Se mide en
“twips”.
Icon Especifica el icono que se muestra para un
formulario.
MaxButton Especifica si el formulario tiene un botón
Maximizar.
MinButton Especifica si el formulario tiene un botón
Minimizar.
Picture Especifica el archivo de imagen que se va ha
mostrar como fondo para el formulario.
StartUpPosition Especifica la posición del formulario la
primera vez que se ejecuta.
Visible Establece si el formulario es visible o está
oculto.
Width Especifica el ancho del formulario. Se mide
en “twips”.
WindowState Establece el estado del formulario (normal,
minimizado o maximizado).
Pág. 100
Nota
Un twip es una unidad independiente de la pantalla
utilizada para asegurar que la colocación y la proporción de
los elementos de la pantalla de la aplicación son los mismos en
todos los sistemas de pantallas. Un twip es igual a 1/20 de un
punto de impresora. Existen aproximadamente 1440 twips en una
pulgada o 567 twips en un centímetro.
Los eventos a los que responde un formulario son los
siguientes:
Evento Descripción
Activate Ocurre cuando el formulario se convierte en
ventana activa.
Deactivate Ocurre cuando el formulario deja de ser la
ventana activa.
Load Ocurre cuando el formulario se carga en la
memoria.
MouseDown Ocurre cuando el usuario pulsa el botón
derecho del ratón sobre el formulario.
QueryUnload Ocurre antes de iniciarse el proceso de
descarga del formulario (antes del evento
Unload).
Resize Ocurre cuando se muestra primero el
formulario o se cambian sus dimensiones.
Unload Ocurre cuando el formulario se descarga de la
memoria.
Pág. 101
Los métodos que se pueden utilizar con un formulario son
los siguientes:
Método Descripción
Hide Oculta un formulario.
PopupMenu Presenta un menú popup en la posición actual
del ratón.
Print Imprime un valor sobre el formulario.
Refresh Vuelve a pintar un formulario y actualiza
todos los valores contenidos en él.
Show Muestra un formulario y determina si es modal
o carece de modo. Si el formulario a mostrar
no está cargado Visual Basic lo carga
automáticamente.
Como ejemplo vamos a desarrollar una aplicación que
utilice dos formularios. Desde el primer formulario el usuario
podrá ir al segundo formulario y viceversa.
Pág. 102
Para el desarrollo de la presente aplicación proceda a
crear un nuevo proyecto. Seguidamente debe ubicar dos botones
de comando en el formulario. Luego establezca las siguientes
propiedades:
Form1
Nombre Form1
Caption Primer formulario
Command1
Nombre CmdIr
Caption &Ir
Command2
Nombre CmdSalir
Caption &Salir
Seguidamente procede a ingresar el código que se muestra a
continuación:
Private Sub CmdIr_Click()
Form2.Show
Form1.Hide
End Sub
Private Sub CmdSalir_Click()
End
End Sub
Pág. 103
Luego debe añadir un formulario adicional al proyecto.
Para tal fin, seleccione el menú Proyecto y elija la opción
Agregar formulario.
Del cuadro de diálogo que se presenta elija el icono
Formulario y haga click en el botón “Abrir”, tal como se indica
en la figura. En ese instante se añadirá un nuevo formulario al
proyecto. Luego, proceda a ubicar un botón de comandos en el
formulario que acaba de añadir y establezca las siguientes
propiedades:
Form2
Nombre Form2
Caption Segundo formulario
ControlBox False
Pág. 104
Command2
Nombre CmdVolver
Caption &Volver
En seguida proceda a ingresar el código que se indica a
continuación:
Private Sub CmdVolver_Click()
Form1.Show
Form2.Hide
End Sub
ESTILOS DE FORMULARIO
Visual Basic cuenta con seis diferentes estilos de
formulario, cuya descripción es la siguiente:
Valor Estilo Descripción
0 None No presenta ningún borde.
1 Fixed Single Puede incluir un Menú de control,
una Barra de título , un botón
Maximizar y un botón Minimizar.
Sólo puede cambiar de tamaño
mediante los botones Maximizar y
Minimizar.
2 Sizable (Predeterminado). Puede cambiar de
tamaño mediante cualquiera de los
elementos opcionales de borde
indicados para Fixed Single.
Pág. 105
Valor Estilo Descripción
3 Fixed Dialog Puede incluir un Menú de control y
una Barra de título, pero no los
botones Maximizar ni Minimizar. No
puede cambiar de tamaño.
4 Fixed ToolWindow Sólo muestra el botón Cerrar y el
texto de la barra de título aparece
con un tamaño de fuente reducido.
No puede cambiar su tamaño.
5 Sizable ToolWindow Sólo muestra el botón Cerrar y el
texto de la barra de título aparece
con un tamaño de fuente reducido.
Puede cambiar de tamaño.
Como ejemplo vamos a desarrollar una aplicación que
permita representar los diferentes estilos de formulario de
Visual Basic.
Pág. 106
Para el desarrollo de la presente aplicación proceda a
crear un nuevo proyecto y luego ubique los siguientes controles
en el formulario:
1 cuadro de lista
2 botones de comando
Luego debe establecer las propiedades que se indican a
continuación:
Form1
Nombre FrmPrincipal
Caption Estilos de formulario
BorderStyle 3-Fixed Dialog
List1
Nombre LstTipoForm
List 0-None
1-Fixed Single
2-Sizable
3-Fixed Dialog
4-Fixed ToolWindow
5-Sizable ToolWindow
Command1
Nombre CmdMostrar
Caption &Mostrar
Command2
Nombre CmdSalir
Caption &Salir
Pág. 107
Seguidamente procede a ingresar el código que se muestra a
continuación:
Private Sub Form_Load()
Load FrmNone
Load FrmFixedSingle
Load FrmSizable
Load FrmFixedDialog
Load FrmFixedToolWindow
Load FrmSizableToolWindow
End Sub
Private Sub CmdMostrar_Click()
Dim OP As Integer
OP = LstTipoForm.ListIndex
Select Case OP
Case 0 : FrmNone.Show vbModal
Case 1 : FrmFixedSingle.Show vbModal
Case 2 : FrmSizable.Show vbModal
Case 3 : FrmFixedDialog.Show vbModal
Case 4 : FrmFixedToolWindow.Show vbModal
Case 5 : FrmSizableToolWindow.Show vbModal
Case Else
MsgBox “Debe seleccionar estilo de formulario”
End Select
End Sub
Pág. 108
Private Sub LstTipoForm_DblClick()
Call CmdMostrar_Click
End Sub
Private Sub CmdSalir_Click()
End
End Sub
Seguidamente proceda a añadir los formularios para las
diferentes opciones del cuadro de lista. Cambie los nombres de
los formularios según se indica:
Formulario Nombre
Form2 FrmNone
Form3 FrmFixedSingle
Form4 FrmSizable
Form5 FrmFixedDialog
Form6 FrmFixedToolWindow
Form7 FrmSizableToolWindow
Luego debe activar el formulario FrmNone, ubicar un botón
de comandos sobre el mismo y establecer las siguientes
propiedades:
Form2
Nombre FrmNone
BorderStyle 0-None
Caption None
Pág. 109
Command1
Nombre CmdVolver
Caption &Volver
Una vez establecidas las propiedades, proceda a ingresar
el código que se muestra a continuación:
Private Sub CmdVolver_Click()
Unload Me
End Sub
Para concluir con el diseño de la aplicación, simplemente
repita el procedimiento anterior para los demás tipos de
formularios.
Como habrá podido observar, al mostrar un formulario
mediante el método Show podemos hacerlo de forma modal
(vbModal) o no modal (opción por defecto). Un formulario modal
es aquel que necesita cerrarse antes de pasar el enfoque a otro
formulario. Un formulario no modal no requiere cerrarse para
pasar el enfoque a otro formulario.
PASANDO VALORES ENTRE FORMULARIOS
Muchas veces se requieren pasar valores de un formulario a
otro, esto se puede realizar mediante el uso módulos estándar,
los cuales son contenedores de procedimientos y declaraciones a
los que tienen acceso otros módulos de la aplicación.
Pág. 110
Como ejemplo vamos a construir la siguiente aplicación, la
cual envía un mensaje de texto del primer formulario hacia el
segundo formulario.
Para el desarrollo de la presente aplicación proceda a
crear un nuevo proyecto y añada un formulario adicional, de tal
forma que tenga los formularios Form1 y Form2. Seguidamente
ubicar los siguientes controles:
Form1 Form2
Text1 TxtMensaje1 Text1 TxtMensaje2
Command1 CmdEnviar Command1 CmdRecibir
Command2 CmdSalir Command2 CmdVolver
A continuación proceda a ingresar el código que se indica
para el primer formulario (Form1):
Pág. 111
Private Sub CmdEnviar_Click()
Mensaje = TxtMensaje1
Form1.Hide
Form2.Show
End Sub
Private Sub CmdSalir_Click()
End
End Sub
Para el segundo formulario (Form2) proceda a ingresar el
código siguiente:
Private Sub CmdRecibir_Click()
TxtMensaje2 = Mensaje
End Sub
Private Sub CmdVolver_Click()
Form2.Hide
Form1.Show
End Sub
Seguidamente debe añadir un módulo estándar al proyecto,
para ello, seleccione el Menú Proyecto y elija la opción
Agregar módulo, se debe presentar un cuadro de diálogo similar
a la figura mostrada, en el cual debe dar click en el botón
“Abrir”.
Pág. 112
Seguidamente proceda a declarar la variable Mensaje como
“pública” en la sección de declaraciones del módulo que acaba
de añadir:
Una variable pública (Public) es una variable que se
declara a nivel de módulo y se le puede acceder desde cualquier
otro módulo.
Pág. 113
FORMULARIOS MDI
Un formulario MDI (Interfaz de Documentos Múltiples) es
una ventana que actúa como fondo de una aplicación y es el
contenedor (ventana padre) de otros formularios (ventanas
hijas).
En una aplicación MDI pueden haber varias ventanas hijas,
pero sólo una ventana padre por aplicación. Para que una
ventana actúe como hija debe tener su propiedad MDIChild
establecida a True.
Como ejemplo vamos a desarrollar una aplicación MDI que
incluya tres ventanas hijas. Para tal fin proceda a crear un
nuevo proyecto y seguidamente agregar dos formularios (simples)
al mismo.
Pág. 114
No olvide establecer la propiedad MDIChild de los
formularios Form1, Form2 y Form3 a True.
Luego, debemos agregar el formulario MDI, para ello
acceder al Menú Proyecto y elegir la opción Agregar formulario
MDI, del cuadro de diálogo que se presenta hacer click en el
botón “Abrir”.
A continuación dar doble click sobre el formulario MDI e
ingresar el siguiente código:
Private Sub MDIForm_Load()
Form1.Show
Form2.Show
Form3.Show
End Sub
Pág. 115
Ahora sólo tiene que indicarle a Visual Basic que el
formulario de arranque (inicial) será el formulario MDI. Para
ello vaya al Menú Proyecto y elija la opción Propiedades de
Proyecto. En el cuadro combinado “Objeto inicial” seleccionar
MDIForm1, tal como se indica en la figura:
Eso es todo, ahora simplemente tiene que ejecutar su
aplicación.
Cabe destacar que en los formularios MDI por lo general no
se pueden incluir controles, debido a ello se suele trabajar
con menús de opciones o barras de herramientas para indicar
alguna acción a realizar.
Pág. 116
CREACIÓN DE MENÚS
Un menú es un conjunto de opciones que se presentan al
usuario, entre las cuales debe elegir una de ellas. Dependiendo
de la decisión se realizarán una serie de acciones.
Para diseñar un menú cualquiera dar click derecho sobre el
formulario y del menú emergente que se presenta elegir la
opción Editor de menús.
Pág. 117
En seguida se ha de presentar el Editor de menús de Visual
Basic.
Para crear un menú, tener en cuenta los siguiente
procedimientos:
• Ingresar el Editor de menús.
• Introducir el título del menú en el cuadro de texto Caption,
el cual aparecerá en la barra de menús.
• Introducir un nombre para el menú en el cuadro de texto Name,
el cual será utilizado en el código para referirse al menú.
• Introducir los elementos que componen el menú, para ello
escriba en los cuadros de texto Caption y Name el título y el
nombre del correspondiente elemento del menú.
Pág. 118
• Para diferenciar un elemento del menú del propio menú, hay
que sangrar el título del elemento, para tal fin,
selecciónelo y haga click en el botón flecha hacia la derecha
( ).
• Un elemento de menú puede ser una orden (si el elemento
siguiente aparece sangrado al mismo nivel) o un submenú (si
el elemento siguiente aparece sangrado un nivel más).
• Utilizando separadores puede agrupar las órdenes en función
de lo que realizan. Para insertar un separador, escriba un
único guión (-) en el cuadro Caption del Editor de menús.
Tiene que especificar también un nombre para el separador.
• Para añadir un acelerador (una tecla o combinación de teclas
que permiten activar un menú), utilizar la propiedad
Shortcut.
• La propiedad Checked es útil para indicar si una orden está
activa o no lo está. Cuando se especifica esta propiedad
aparece una marca (3) a la izquierda del elemento de menú.
• La propiedad Enabled es útil para desactivar una orden en un
momento en el cual no tiene sentido que esté activa.
• La propiedad Visible es útil cuando durante la ejecución se
desea ocultar un elemento de menú.
• Cerrar el Editor de menús, para ello una vez que haya
finalizado su diseño pulse el botón “Aceptar”.
Pág. 119
Como ejercicio intente construir el menú mostrado en la
figura anterior.
Caption Name ShortCut
&Archivo MnuArchivo Ninguno
. . . &Artículo MnuArchivoArticulo Ninguno
. . . &Cliente MnuArchivoCliente Ninguno
. . . &Vendedor MnuArchivoVendedor Ninguno
. . . - MnuArchivoLinea Ninguno
. . . &Salir MnuArchivoSalir Ctrl + X
&Proceso MnuProceso Ninguno
. . . &Pedido MnuProcesoPedido Ninguno
. . . &Facturación MnuProcesoFacturacion Ninguno
&Reporte MnuReporte Ninguno
. . . &Registro de ventas MnuReporteRegVentas Ninguno
. . . Catálogo de &artículos Ninguno
. . . - MnuReporteLinea Ninguno
. . . &Cliente del mes MnuReporteClienteMes Ninguno
. . . &Vendedor del mes MnuReporteVendMes Ninguno
Ay&uda MnuAyuda Ninguno
. . . &Contenido MnuAyudaContenido Ninguno
. . . &Indice MnuAyudaIndice Ninguno
. . . &Búsqueda MnuAyudaBusqueda Ninguno
. . . - MnuAyudaLinea Ninguno
. . . &Acerca de MnuAyudaAbout Ninguno
Pág. 120
Para probar el menú que acaba de crear, ingrese el
siguiente código:
Private Sub MnuArchivoArticulo_Click()
MsgBox “Seleccionó la opción Artículo”
End Sub
Private Sub MnuArchivoCliente_Click()
MsgBox “Seleccionó la opción Cliente”
End Sub
Private Sub MnuArchivoVendedor_Click()
MsgBox “Seleccionó la opción Vendedor”
End Sub
Private Sub MnuArchivoSalir_Click()
Unload Me
End Sub
Private Sub MDIForm_Unload(Cancel As Integer)
Dim RESP As Integer
RESP = MsgBox(“¿Desea terminar la aplicación?”, _
vbQuestion + vbYesNo, “Pregunta”)
If RESP = vbYes Then
End
Else: Cancel = True
End If
End Sub
Pág. 121
Luego al ejecutar su aplicación y seleccionar el menú
Archivo, opción Artículo, el resultado será similar a la figura
mostrada:
Hasta ahora hemos programado la salida de una aplicación,
asociando el código al botón “Salir”. Sin embargo, cuando el
usuario hace click en el botón “Cerrar” de la barra de título o
en la opción “Salir” del Menú de control del formulario, el
código escrito para el botón “Salir” es ignorado.
Para remediar esta situación, en el ejemplo anterior
cuando el usuario pulsa el botón “Salir”, se invoca al evento
Unload. La palabra reservada “Me” proporciona una forma de
referirse al formulario desde donde se está ejecutando el
código.
Recordar que el evento Unload del formulario se
desencadena cuando el usuario intenta cerrar el formulario
mediante cualquiera de las formas descritas anteriormente.
Para determinar si ocurre la descarga del formulario
utilice el parámetro Cancel. Si Cancel es False ocurre la
descarga, si Cancel es True impide que el formulario se quite.
CREACIÓN DE UNA BARRA DE HERRAMIENTAS
Pág. 122
Una barra de herramientas contiene botones con las
opciones más utilizadas de un menú, de tal manera que el
usuario haciendo click en dicho control activaría la opción
indicada de una manera más rápida.
Para crear una barra de herramientas debemos utilizar dos
controles que no están en la lista de controles estándar, por
tanto debemos agregar dichos controles que se encuentran en el
componente Microsoft Windows Common Controls 6.0, tal como se
indica a continuación:
Pág. 123
Como ejemplo, vamos a crear la barra de herramientas de la
figura mostrada:
Para ello, ubicar un control ImageList sobre el
formulario, para establecer sus propiedades dar click derecho
sobre el control y elija la opción Propiedades.
Pág. 124
Se ha de presentar un cuadro de diálogo similar a la
figura mostrada:
Activar la ficha Imágenes y pulsar el botón “Insertar
imagen” para seleccionar las imágenes que se incluirán en el
control ImageList.
Para el ejemplo, debe incluir ocho imágenes que
corresponden a cada uno de los botones de la barra de
herramientas.
Concluido el proceso anterior, proceda a ubicar un control
Toolbar sobre el formulario. Luego hacer click derecho sobre
dicho control y del menú emergente que se presenta seleccionar
la opción Propiedades. Del cuadro de diálogo que se presenta en
la ficha General establecer las siguientes propiedades:
Pág. 125
Luego, en la ficha Botones pulse el botón “Insertar
botón”. En el cuadro de texto Image se debe indicar un número
que corresponde al orden de imagen a mostrar.
Pág. 126
El lector debe continuar con este proceso hasta completar
los botones restantes, según:
Index ToolTipText Image
1 Artículo 1
2 Cliente 2
3 Vendedor 3
4 Pedido 4
5 Facturación 5
6 Registro de ventas 6
7 Catálogo de artículos 7
8 Ayuda 8
Como el código a ejecutar tiene que ser el mismo cuando el
usuario elija una opción del menú o de un click sobre un botón
de la barra de herramientas se pueden programar procedimientos
de usuario que realicen dichas tareas, luego se deben invocar a
estos procedimientos tanto para las opciones del menú como para
la barra de herramientas.
Sin embargo, para el ejemplo el código es muy sencillo, ya
que sólo muestra un mensaje con la opción seleccionada (esto
por razones de simplicidad). Para probar la funcionalidad de la
barra de herramientas que acaba de crear ingrese el siguiente
código:
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Pág. 127
Select Case Button.Index
Case 1: MsgBox “Seleccionó la opción Artículo”
Case 2: MsgBox “Seleccionó la opción Cliente”
Case 3: MsgBox “Seleccionó la opción Vendedor”
Case 4: MsgBox “Seleccionó la opción Pedido”
Case 5: MsgBox “Seleccionó la opción Facturación”
Case 6: MsgBox “Seleccionó la opción Registro de ventas”
Case 7: MsgBox “Seleccionó opción Catálogo de artículos”
Case 8: MsgBox “Seleccionó la opción Ayuda”
End Select
End Sub
El evento ButtonClick se dispara cuando el usuario hace
click sobre un botón de la barra de herramientas. La propiedad
Index permite identificar el número de botón pulsado.
CREACIÓN DE UNA BARRA DE ESTADO
Una barra de estado es un marco que se ubica en la parte
inferior del formulario y puede contener varios paneles que
informan al usuario acerca del estado de la aplicación. Para
crear una barra de estado utilizar el control StatusBar, el
cual forma de los controles personalizados que se encuentran en
el componente Microsoft Windows Common Controls 6.0.
Como ejemplo vamos a crear una barra de estado similar a
la de la figura mostrada:
Pág. 128
Para ello ubicar un control StatusBar sobre el formulario,
dar click derecho sobre el mismo y en la ficha Paneles incluir
una imagen para la hora del sistema.
Pág. 129
El resto de propiedades se establecerán mediante código al
momento de la carga del formulario.
Private Sub MDIForm_Load()
Dim I As Integer
For I = 1 To 2
StatusBar1.Panels.Add ' Se agregan 2 paneles más
Next
With StatusBar1.Panels
.Item(1).Style = sbrTime
.Item(2).Style = sbrCaps
.Item(3).Style = sbrIns
End With
End Sub
La propiedad Style permite mostrar el estado de las
teclas, la hora y la fecha del sistema con un mínimo de código.
Constante Valor Descripción
sbrText 0 (Predeterminado). Texto o mapa de bits.
sbrCaps 1 Tecla BLOQ MAYÚS.
sbrNum 2 Tecla BLOQ NÚM.
sbrIns 3 Tecla INS.
sbrScrl 4 Tecla BLOQ DESPL.
sbrTime 5 Muestra la hora actual con el formato del
sistema.
sbrDate 6 Muestra la fecha actual con el formato
del sistema.
Pág. 130
CREACIÓN DE UN MENÚ CONTEXTUAL
Un menú contextual es un menú emergente (flotante) que se
muestra sobre un formulario, independiente de la barra de
menús. Para mostrar un menú contextual el usuario debe pulsar
el botón derecho del ratón sobre el formulario.
A menudo querrá usar un menú contextual para tener acceso
a opciones que no se encuentran disponibles en la barra de
menús. Para crear un menú que no se presente en la barra de
menús, haga invisible un elemento de menú de nivel superior en
tiempo de diseño (asegúrese de que la casilla de verificación
Visible del Editor de menús no esté activada). Cuando Visual
Basic presenta un menú emergente, pasa por alto la propiedad
Visible del menú de nivel superior especificado.
Pág. 131
Para crear el menú contextual de la figura, debe ingresar
al Editor de menús y añadir lo siguiente:
Caption Name Visible
&Herramientas MnuTools
. . . Calculadora MnuToolsCalc 3
. . . Calendario MnuToolsCalen 3
. . . Solitario MnuToolsSol 3
Seguidamente proceda a ingresar el código que se indica a
continuación:
Private Sub MDIForm_MouseDown(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
If Button = vbRightButton Then
PopupMenu MnuTools
End If
End Sub
Private Sub MnuToolsCalc_Click()
Dim I
I = Shell(“C:\WINDOWS\CALC.EXE”, 1)
End Sub
Private Sub MnuToolsCalen_Click()
FrmCalendario.Show
Pág. 132
End Sub
Private Sub MnuToolsSol_Click()
Dim I
I = Shell(“C:\WINDOWS\SOL.EXE”, 1)
End Sub
En el ejemplo anterior se asume que existe otro formulario
de nombre FrmCalendario. Este puede ser construido usando el
control MonthView.
La función Shell ejecuta un programa ejecutable y devuelve
un tipo Variant (Double) que representa la identificación de la
tarea del programa si se ha ejecutado con éxito, en caso
contrario devuelve cero.
Pág. 133
CAPÍTULO 6
CONTROLES ACTIVEX
Los controles ActiveX son objetos que no forman parte del
conjunto de controles estándar de Visual Basic, sino más bien
han sido desarrollados por terceras personas.
Los controles ActiveX existen como archivos independientes
con extensión .OCX y deben ser cargados antes de utilizarse.
Para ello ingresar al Menú Proyecto y elija la opción
Componentes.
Pág. 134
CONTROL ANIMATION
El control Animation permite reproducir archivos de
extensión .AVI que no tengan sonido para crear animaciones.
Para agregar este control debe seleccionar el componente
Microsoft Windows Common Controls-2 6.0.
Propiedad Descripción
AutoPlay Especifica si el archivo AVI se reproducirá
automáticamente al cargarse el control.
Método Descripción
Close Cierra el archivo AVI abierto actualmente.
Open Permite abrir el archivo AVI.
Play Reproduce el archivo AVI en el control
Animation.
Stop Termina la reproducción del archivo AVI.
Como ejemplo vamos a desarrollar un formulario que permita
reproducir un archivo AVI, tal como se muestra en la figura:
Pág. 135
Para ello crear un nuevo formulario y agregar un control
Animation (Animation1) y dos botones de comando (CmdIniciar y
CmdTerminar, respectivamente). Luego ingrese el código que se
muestra:
Private Sub CmdIniciar_Click()
Dim RUTA As String
RUTA = “C:\Archivos de programa\Microsoft Visual Studio\”
RUTA = RUTA & “Common\Graphics\Videos\Filenuke.avi”
Animation1.Open (RUTA)
Animation1.Play
End Sub
Private Sub CmdTerminar_Click()
Animation1.Close
End
End Sub
CONTROL COMMONDIALOG
El control CommonDialog proporciona un conjunto de cuadros
de diálogo estándar que permiten realizar las operaciones más
comúnmente empleadas en el diseño de aplicaciones, como abrir y
guardar archivos, seleccionar colores y fuentes, imprimir, etc.
Para agregar este control seleccionar el componente Microsoft
Common Dialog Control 6.0.
Pág. 136
Propiedad Descripción
Color Especifica el color seleccionado.
FileName Especifica la ruta y nombre del archivo
seleccionado.
Filter Especifica el tipo de archivos que se han de
mostrar en un cuadro de diálogo Abrir o
Guardar como.
FilterIndex Especifica el filtro predeterminado para un
cuadro de diálogo Abrir o Guardar como, en
caso se esté utilizando varios filtros.
Método Descripción
ShowColor Presenta la paleta de colores.
ShowFont Presenta el cuadro de diálogo Fuentes.
ShowHelp Presenta la ayuda de Windows.
ShowOpen Presenta el cuadro de diálogo Abrir.
ShowPrinter Presenta el cuadro de diálogo Imprimir.
ShowSave Presenta el cuadro de diálogo Guardar como.
Como ejemplo vamos a desarrollar una aplicación que
permite cambiar el color de fondo de un formulario en tiempo de
ejecución. Para ello el usuario debe dar click en el botón
“Cambiar color” y en seguida se presentará la paleta de colores
de donde debe elegir el color deseado, tal como se muestra en
la figura siguiente:
Pág. 137
Para ello crear un nuevo formulario, agregarle un botón de
comando (CmdCambiarColor) y un control CommonDialog. Luego
ingresar el siguiente código:
Private Sub CmdCambiarColor_Click()
CommonDialog1.ShowColor
Form1.BackColor = CommonDialog1.Color
End Sub
Como siguiente ejemplo vamos a desarrollar una aplicación
que permita mostrar el contenido de un archivo JPG. Este deberá
ser seleccionado por el usuario de un cuadro de diálogo Abrir,
tal como se indica en la figura:
Pág. 138
Al hacer click en el botón “Abrir”, el archivo
seleccionado debe ser mostrado en el formulario:
Para el diseño de esta aplicación crear un nuevo
formulario y ubicar un botón de comando (CmdAbrirArchivo), un
control imagen y un control CommonDialog.
Pág. 139
Seguidamente ingrese el código que se indica a
continuación:
Private Sub CmdAbrirArchivo_Click()
Dim FILTRO As String, FILE As String
FILTRO = “Imágenes JPEG (*.JPG)|*.JPG”
CommonDialog1.Filter = FILTRO
CommonDialog1.ShowOpen
FILE = CommonDialog1.FileName
Image1.Picture = LoadPicture(FILE)
End Sub
CONTROL MARCHOSO
El control Marchoso tiene como función reproducir archivos
GIF animados. Para agregar este control seleccionar el
componente Marchoso ActiveX Control Module. Este control fue
creado en Visual Basic y si no lo tiene en su disco duro lo
puede bajar de Internet.
Propiedad Descripción
FileName Especifica la ruta y nombre del archivo GIF
animado.
A manera de ejemplo vamos a diseñar un formulario que
permita mostrar archivos GIF animados.
Pág. 140
Para ello proceda a crear un nuevo formulario y ubicar un
botón de comando (CmdVerGIFAnimado), un control Marchoso y un
control CommonDialog. Luego, ingresar el siguiente código:
Private Sub CmdVerGIFAnimado_Click()
Dim FILTRO As String, FILE As String
FILTRO = “Archivos GIF Animados (*.GIF)|*.GIF”
CommonDialog1.Filter = FILTRO
CommonDialog1.ShowOpen
FILE = CommonDialog1.FileName
Marchoso1.FileName = FILE
End Sub
CONTROL HIERARCHICAL FLEXGRID
El control Hierarchical FlexGrid presenta una cuadrícula
la cual permite mostrar datos en forma de celdas. Una celda es
la región formada por la intersección de una fila y una
columna.
Pág. 141
Para agregar este control debe seleccionar el componente
Microsoft Hierarchical FlexGrid Control 6.0 (OLEDB).
Propiedad Descripción
Col Especifica el número de columna de la celda
actual.
Cols Especifica el número total de columnas, fijas
y no fijas.
FixedCols Especifica el número de columnas fijas. El
valor por defecto es 1.
FixedRows Especifica el número de filas fijas. El valor
por defecto es 1.
Row Especifica el número de fila de la celda
actual.
Rows Especifica el número total de filas, fijas y
no fijas.
Text Especifica el contenido de la celda actual.
TextArray Especifica el contenido de una celda elegida
aleatoriamente, se debe especificar el índice
de la celda a la cual se desea acceder.
ScrollBars Especifica si la cuadrícula presenta barras
de desplazamiento horizontales, verticales o
ambas a la vez.
Como ejemplo vamos a desarrollar una aplicación que
visualice un cuadrado mágico de orden impar . Un cuadrado
mágico se compone de números enteros comprendidos entre 1 y
. La suma de los números que figuran en cada fila, cada
columna y cada diagonal son idénticos.
N
2N
Pág. 142
Por ejemplo para = 5 tenemos el siguiente arreglo de
números:
N
Un método de construcción del cuadrado consiste en situar
el número 1 en el centro de la primera fila, el número
siguiente en la casilla situada encima y a la derecha, y así
sucesivamente. Es preciso considerar que el cuadrado se cierra
sobre sí mismo, la fila encima de la primera es de hecho la
última y la columna a la derecha de la última es la primera.
Sin embargo, cuando la posición del número caiga en una celda
ocupada, se elige la casilla situada por debajo del número que
acaba de ser situado.
Para el desarrollo de la presente aplicación proceda a
crear un nuevo formulario y ubicar una etiqueta (N?), un cuadro
de texto (TxtN) y un control Hierarchical FlexGrid.
Seguidamente debe ingresar el código que se indica:
Private Sub TxtN_Change()
Pág. 143
Dim N As Integer, I As Integer
Dim FIL As Integer, COL As Integer
N = Val(TxtN)
FIL = 1
COL = (N \ 2) + 1
MSHFlexGrid1.Cols = N
MSHFlexGrid1.Rows = N
MSHFlexGrid1.FixedCols = 0
MSHFlexGrid1.FixedRows = 0
For I = 1 To N ^ 2
MSHFlexGrid1.COL = COL - 1
MSHFlexGrid1.Row = FIL - 1
MSHFlexGrid1.Text = Str(I)
If I Mod N = 0 Then
FIL = FIL + 1
If FIL = N + 1 Then FIL = 1
Else
FIL = FIL - 1
If FIL = 0 Then FIL = N
COL = COL + 1
If COL = N + 1 Then COL = 1
End If
Next
End Sub CONTROL UPDOWN
Pág. 144
El control UpDown tiene dos botones con flechas en los que
el usuario puede hacer clic para incrementar o disminuir un
valor de un control asociado, denominado control auxiliar. A
menudo, al usuario le parecerá que el control UpDown y su
control auxiliar son un único control. Por lo general se usa un
control UpDown con un cuadro de texto para solicitar al usuario
una entrada numérica, una combinación que en ocasiones se
denomina control Spinner.
Para agregar un control UpDown debe seleccionar el
componente Microsoft Windows Common Controls-2 6.0.
Propiedad Descripción
BuddyControl Especifica el control utilizado como
auxiliar.
BuddyProperty Especifica la propiedad utilizada para
sincronizar el control UpDown con su
auxiliar.
Increment Especifica un valor que determina la cantidad
en que varía la propiedad Value cuando se
hace click en los botones del control UpDown.
Max Especifica el valor máximo del intervalo de
desplazamiento del control UpDown.
Min Especifica el valor mínimo del intervalo de
desplazamiento del control UpDown.
SyncBuddy Especifica si el control UpDown sincroniza la
propiedad Value con una propiedad del control
auxiliar.
Como ejemplo vamos a desarrollar una aplicación que
permita mostrar el código ANSI de un carácter especificado.
Pág. 145
Para tal fin crear un nuevo formulario y ubicar los
siguientes controles: 2 etiquetas (Código ANSI, Carácter), 2
cuadros de texto (TxtANSI, TxtCaracter) y 1 control UpDown.
Luego establezca las propiedades que se indican:
UpDown1
Nombre UpDown1
BuddyControl TxtANSI
BuddyProperty Text
Increment 1
Max 255
Min 0
SyncBuddy True
Seguidamente proceda a transcribir el siguiente código:
Private Sub TxtANSI_Change()
TxtCaracter = Chr(TxtANSI)
End Sub
CONTROL MONTHVIEW
Pág. 146
El control MonthView permite al usuario la posibilidad de
ver y establecer información de fechas mediante una interfaz
similar a un calendario. Para agregar este control seleccionar
el componente Microsoft Windows Common Controls-2 6.0.
Propiedad Descripción
Day Especifica el número de día mostrado.
Month Especifica el número de mes mostrado.
Year Especifica el número de año mostrado.
Value Especifica la fecha mostrada.
DayOfWeek Especifica el día de la semana
correspondiente a la fecha mostrada.
Week Especifica el número de la semana en que cae
la fecha mostrada.
MultiSelect Especifica si se puede seleccionar un
intervalo contiguo de fechas.
MaxSelCount Especifica el número máximo de días que
pueden seleccionarse mediante la propiedad
MultiSelect.
SelStart
SelEnd
Especifica los límite inferior y superior
respectivamente del intervalo de fechas
seleccionado.
MonthColumns
MonthRows
Permiten mostrar más de un mes
simultáneamente. MonthColumns especifica el
número de meses que se mostrarán en sentido
horizontal. MonthRows especifica el número de
meses que se mostrarán en sentido vertical.
Evento Descripción
Pág. 147
Click Ocurre cada vez que el usuario hace click
sobre el control.
DateClick Ocurre cada vez que el usuario hace click
sobre una fecha mostrada en el control.
Como ejemplo vamos a crear un sencillo calendario. Cuando
el usuario haga click sobre alguna fecha, esta aparecerá en el
cuadro de texto. Pamela Anderson representará la parte
atractiva de nuestra aplicación.
Para ello crear un nuevo formulario y agregar una etiqueta
(La fecha selecciona es), un cuadro de texto (TxtFecha), un
control imagen (ImgPamela) y un control MonthView. Luego
ingresar el siguiente código:
Private Sub MonthView1_DateClick(ByVal DateClicked As Date)
Pág. 148
TxtFecha = WeekdayName(MonthView1.DayOfWeek) & “ , ” _
& Str(MonthView1.Day) & “ de ” _
& MonthName(MonthView1.Month) & “ de ” _
& Str(MonthView1.Year)
End Sub
Private Sub MonthView1_Click()
Call MonthView1_DateClick(MonthView1.Value)
End Sub
Private Sub Form_Load()
Call MonthView1_DateClick(MonthView1.Value)
End Sub
La función WeekdayName retorna una cadena con el nombre
del día de la semana especificado. Requiere como argumento el
número de día de la semana.
La función MonthName retorna una cadena con el nombre del
mes especificado. Requiere como argumento el número de mes.
El evento DateClick tiene un parámetro DateClicked que
especifica la fecha seleccionada. Puede utilizar este valor
(DateClicked) para obtener la fecha en la que el usuario hizo
click.
CONTROL CALENDAR
Pág. 149
El control Calendar es similar en funcionalidad al control
MonthView, pues también presenta un calendario. Para agregar
este control seleccionar el componente Control Calendar de
Microsoft 9.0.
Propiedad Descripción
Day Especifica el número de día mostrado.
Month Especifica el número de mes mostrado.
Year Especifica el número de año mostrado.
Value Especifica la fecha mostrada.
Como ejemplo vamos a desarrollar la aplicación anterior,
pero esta vez haciendo uso de un control Calendar.
Pág. 150
Para ello crear un nuevo formulario y agregar una etiqueta
(La fecha selecciona es), un cuadro de texto (TxtFecha), un
control imagen (ImgPamela) y un control Calendar. Luego
ingresar el siguiente código:
Private Sub Calendar1_Click()
TxtFecha = WeekdayName(Weekday(Calendar1.Value)) & “ , ” _
& Str(Calendar1.Day) & “ de ” _
& MonthName(Calendar1.Month) & “ de ” _
& Str(Calendar1.Year)
End Sub
La función Weekday retorna un número entero que representa
el día de la semana de una fecha dada. Se utiliza para suplir a
la propiedad DayOfWeek la cual no está permitida para el
control Calendar.
Pág. 151
CAPÍTULO 7
ARCHIVOS
Un archivo (fichero) es un conjunto de información
relacionada entre sí, almacenada como una unidad en un
dispositivo de almacenamiento secundario (disquete, disco
duro). Los datos almacenados en un archivo son de manera
permanente de modo que pueden ser manipulados en cualquier
momento. Cada archivo está referenciado por un identificador,
su nombre.
CONCEPTO DE ARCHIVO BAJO WINDOWS/VISUAL BASIC
Un archivo tiene un nombre almacenado en una carpeta junto
con otros archivos de disco. Los nombres de los archivos en
Windows y Visual Basic requieren de 1 a 215 caracteres
(incluidos espacios en blanco), y pueden incluir también una
extensión de 1 a 3 letras, normalmente son significativas y
relativas al contenido del mismo. Por ejemplo:
LEAME.TXT Archivo de texto
MISDATOS.DAT Archivo de datos
PLANILLA.XLS Archivo de MS-Excel
SHAKIRA.BMP Archivo de mapa de bits
Pág. 152
El nombre de un archivo para ser referenciado
correctamente consta de:
• Unidad (Especificador de unidad, por ejemplo A, B, C)
• Camino (Especificador de ruta, por ejemplo \DATA\)
• Nombre (Especificador de archivo, por ejemplo DEMO.DAT)
Como ejemplo, suponga que el archivo DEMO.DAT está en la
carpeta DATA de la unidad C (disco duro); la descripción
completa del nombre del archivo es:
C:\DATA\DEMO.DAT
Ahora, suponga que el archivo CONSTANTES.DAT se encuentra
en la carpeta LIB, que a su vez está contenida en la carpeta
DATA de la unidad C. La descripción completa del nombre de
dicho archivo está dada por:
C:\DATA\LIB\CONSTANTES.DAT
Desde el punto de vista de Visual Basic un archivo
almacena los datos como un conjunto de registros, conteniendo
todos ellos, generalmente, los mismos campos. Cada campo
almacena un dato de tipo predefinido o de un tipo definido por
el usuario. El elemento de información más simple estaría
formado por un carácter.
Pág. 153
OPERACIONES SOBRE EL SISTEMA DE ARCHIVOS
Para manipular el sistema de archivos de un disco, Visual
Basic proporciona las sentencias que a continuación se
describen.
Sentencia Kill
Permite eliminar un archivo almacenado en un disco. Su
sintaxis es de la forma:
Kill NOMBRE_ARCHIVO
Donde NOMBRE_ARCHIVO es una cadena de caracteres que
identifica al archivo que se desea borrar. Se permiten
caracteres comodín (* y ?). Si el archivo no existe se produce
un error. Por ejemplo:
Kill “C:\TEMP\TEMPO.DAT”
La instrucción anterior elimina el archivo TEMPO.DAT
ubicado en la carpeta C:\TEMP.
Sentencia Name
Permite cambiar el nombre (renombrar) de un archivo del
disco y moverlo a otro directorio si fuera preciso. Su sintaxis
es la siguiente:
Name NOMBRE_ACTUAL As NOMBRE_NUEVO
Pág. 154
Donde NOMBRE_ACTUAL es una cadena de caracteres que
especifica el nombre actual del archivo y NOMBRE_NUEVO es otra
cadena de caracteres que indica el nuevo nombre que se desea
dar al archivo. Este nombre no debe existir, de lo contrario se
obtendrá un error. Por ejemplo:
Name “C:\TEMP\TEMPO.DAT” As “C:\DATA\CURSO.DAT”
La instrucción anterior cambia el nombre del archivo
TEMPO.DAT por el nombre CURSO.DAT. El contenido del archivo
permanece inalterado y su localización física se cambia de la
carpeta C:\TEMP a C:\DATA.
Sentencia MkDir
Permite crear una nueva carpeta. Su sintaxis es:
MkDir NUEVA_CARPETA
Donde NUEVA_CARPETA es una cadena de caracteres que
identifica la carpeta que se va ha crear. Por ejemplo:
MkDir “C:\DATA\TEMP”
Sentencia RmDir
Elimina una carpeta vacía existente en el disco. Su
sintaxis es de la forma:
RmDir NOMBRE_CARPETA
Donde NOMBRE_CARPETA es una cadena de caracteres que
identifica la carpeta que se desea eliminar. Por ejemplo:
Pág. 155
RmDir “C:\DATA\TEMP”
Sentencia ChDir
Permite cambiar la carpeta actual. Su sintaxis es:
ChDir NOMBRE_CARPETA
Donde NOMBRE_CARPETA es una cadena de caracteres que
identifica la nueva ruta de acceso predeterminada. Por ejemplo:
ChDir “C:\DATA\GRAFICOS”
MsgBox App.Path
La propiedad Path del objeto App especifica la ruta de
acceso actual.
Sentencia ChDrive
Permite cambiar la unidad de disco actual. Su sintaxis es:
ChDrive UNIDAD
Donde UNIDAD es un carácter que especifica la nueva unidad
de disco. Si el parámetro UNIDAD es una cadena de múltiples
caracteres sólo se lee la primera letra. Por ejemplo:
ChDrive “A”
OPERACIONES CON ARCHIVOS
Pág. 156
Para realizar alguna operación sobre un archivo hay
referenciarlo mediante su nombre completo. Las operaciones
básicas que se pueden realizar con los archivos son:
• Abrir, preparar un archivo para hacer referencia a él.
• Escribir, introducir un elemento de información a un archivo.
• Leer, obtener un elemento de información de un archivo.
• Modificar, alterar un elemento de información ya existente en
un archivo.
• Cerrar, evitar cualquier otra referencia al archivo en tanto
no se le abra otra vez.
TIPOS DE ARCHIVOS
Los tipos de archivos dependen del modo como están
organizados los registros y de la forma de accesar a la los
datos contenidos en ellos. En Visual Basic existen tres tipos
de archivos de datos, estos son:
• Archivos secuenciales (acceso secuencial).
• Archivos aleatorios (acceso aleatorio).
• Archivos binarios (acceso binario).
A continuación pasamos a describir cada uno de ellos en
forma detallada.
ARCHIVOS DE ACCESO SECUENCIAL
Pág. 157
En un archivo de acceso secuencial los registros se
almacenan siguiendo una a otro, según el orden en que son
ingresados. Cuando se lee la información, se empieza por el
primer registro y se continua al siguiente hasta alcanzar el
final. Las sentencias y funciones necesarias para manipular
archivos de tipo secuencial se presentan a continuación.
Sentencia Open
Permite abrir un archivo. La sintaxis para esta sentencia
es la siguiente:
Open NOMBRE_ARCHIVO For MODO As # NÚMERO_ARCHIVO
Donde NOMBRE_ARCHIVO es una cadena que especifica el
nombre del archivo que se debe ser abierto en MODO Output,
Append o Input.
Modo Descripción
Output Escritura de datos. Si el archivo existe, su
contenido actual se destruye. Si el archivo no
existe, se crea.
Append Añadir datos. Los datos son añadidos a partir de
los últimos existentes. Si el archivo no existe,
se crea.
Input Lectura de datos. La lectura empieza desde el
principio del archivo. Si el archivo no existe, se
produce un error.
El parámetro NÚMERO_ARCHIVO es un entero cuyo valor debe
estar comprendido entre 1 y 511. Este número será asociado al
Pág. 158
nombre del archivo mientras éste permanezca abierto. Para
obtener el número del siguiente archivo disponible se utiliza
la función FreeFile().
Como ejemplo suponga que se requiere abrir el archivo
DEMO.DAT ubicado en la carpeta C:\DATA, la instrucción sería la
siguiente:
Dim N1 As Integer
N1 = FreeFile()
Open “C:\DATA\DEMO.DAT” For Output As # N1
Sentencia Print
Permite escribir datos secuencialmente en un archivo. Su
sintaxis es:
Print # NÚMERO_ARCHIVO, LISTA_DE_EXPRESIONES
Donde NÚMERO_ARCHIVO es el número utilizado cuando el
archivo fue abierto. LISTA_DE_EXPRESIONES es un conjunto de
expresiones (numéricas, de cadena, de fecha, etc.) separadas
por punto y coma (;) que serán escritas en el archivo.
La sentencia Print escribe en el archivo una imagen de los
datos tal y como se habrían visualizado sobre el formulario con
la sentencia Print. Por ejemplo:
Dim N1 As Integer
N1 = FreeFile()
Pág. 159
Open “C:\DATA\DEMO.DAT” For Output As # N1
Print # N1, “Visual Basic es fácil”; “, ”; Date()
Al ejecutarse el código anterior se escribiría en el
archivo la siguiente información:
Visual Basic es fácil, 24/04/2001
Como se observa, al utilizar la sentencia Print se deben
delimitar los datos para que se impriman correctamente.
Sentencia Write
Permite escribir datos secuencialmente en un archivo. Su
sintaxis es:
Write # NÚMERO_ARCHIVO, LISTA_DE_EXPRESIONES
Donde NÚMERO_ARCHIVO es el número utilizado cuando el
archivo fue abierto. LISTA_DE_EXPRESIONES es un conjunto de
expresiones (numéricas, de cadena, de fecha, etc.) separadas
por punto y coma (;) que serán escritas en el archivo.
La sentencia Write inserta comas (,) entre las expresiones
de la LISTA_DE_EXPRESIONES, por tanto no es necesario poner
delimitadores explícitamente como en el caso de la sentencia
Print.
Cuando se utiliza la sentencia Write para escribir
información en un archivo, se siguen distintas convenciones
Pág. 160
universales, de modo que los datos siempre se pueden leer e
interpretar correctamente, independientemente de la
configuración regional, estas convenciones son:
• Los datos numéricos siempre se escriben utilizando la coma
(,) como separador decimal.
• Para datos de tipo Boolean se imprime # TRUE # o # FALSE #.
• Los datos de tipo Date se escriben en el archivo usando el
formato de fecha universal (fechas como # aaaa-mm-dd # y horas
como # hh:mm:ss #).
A manera de ejemplo considere el siguiente segmento de
código:
Dim N1 As Integer
N1 = FreeFile()
Open “C:\DATA\DEMO.DAT” For Output As # N1
Write # N1, “Visual Basic es fácil”; Date()
La ejecución de este código escribiría en el archivo la
siguiente información:
Visual Basic es fácil", # 2002-04-11 #
Sentencia Close
Pág. 161
Cierra uno archivo abierto mediante la sentencia Open. Su
sintaxis es la siguiente:
Close # NÚMERO_ARCHIVO [, # NÚMERO_ARCHIVO, . . .]
Donde NÚMERO_ARCHIVO es el número con el cual se abrió el
archivo. Por ejemplo:
Close # 1, # 2
La instrucción anterior cierra los archivos asociados con
los números 1 y 2. La siguiente sentencia cierra todos los
archivos abiertos.
Close
Sentencia Input
Permite leer datos de un archivo secuencial y los asigna a
las variables especificadas. Su sintaxis es:
Input # NÚMERO_ARCHIVO, VARIABLE1 [, VARIABLE2, . . .]
Donde NÚMERO_ARCHIVO es el número utilizado cuando el
archivo fue abierto. VARIABLE1, VARIABLE2, . . . son los
nombres de las variables que han de recibir los
correspondientes datos del archivo.
Pág. 162
Los datos del archivo deben aparecer en el mismo orden que
tienen las variables en la sentencia Input y deben coincidir
con variables del mismo tipo de datos. Por ejemplo:
Dim N1 As Integer
N1 = FreeFile()
Open “C:\DATA\DEMO.DAT” For Input As # N1
Dim A As Integer
Dim B As Double
Dim S As String
Dim F As Date
Input # N1, A, B, S, F
El segmento de código anterior espera encontrar en el
archivo un entero, un real, una cadena y una fecha, en ese
orden (separados por comas o un retorno de carro).
Sentencia Line Input
Permite leer una línea de un archivo secuencial ignorando
los delimitadores (comas) y la asigna a una variable tipo
cadena. Su sintaxis es:
Line Input # NÚMERO_ARCHIVO, VARIABLE
Donde NÚMERO_ARCHIVO es el número utilizado cuando el
archivo fue abierto. VARIABLE es el nombre de una variable tipo
cadena de caracteres.
Pág. 163
La sentencia Line Input se utiliza especialmente para leer
un archivo de texto línea a línea, ya que esta sentencia lee
todos los caracteres del archivo hasta que encuentra un retorno
de carro, entonces continua en la siguiente línea y así
sucesivamente. Por ejemplo:
Dim N1 As Integer, LINE1 As String, LINE2 As String
N1 = FreeFile()
Open “C:\DATA\DEMO.TXT” For Output As # N1
Print # N1, “Línea de prueba 1”
Print # N1, “Línea de prueba 2”
Close # N1
Open “C:\DATA\DEMO.TXT” For Input As # N1
Line Input # N1, LINE1
MsgBox LINE1
Line Input # N1, LINE2
MsgBox LINE2
La ejecución del código anterior produce la siguiente salida:
Pág. 164
Función Input
Retorna los siguientes caracteres de un archivo
secuencial y los asigna a una variable de cadena. Su sintaxis
es de la forma:
N
VARIABLE = Input( , # NÚMERO_ARCHIVO) N
A diferencia de la sentencia Input, la función Input()
retorna todos los caracteres que lee, incluyendo comas,
retornos de carro, continuaciones de línea, etc. Por ejemplo:
Dim N1 As Integer, S As String
N1 = FreeFile()
Open “C:\DATA\DEMO.TXT” For Output As # N1
Print # N1, “Línea de prueba 1”
Print # N1, “Línea de prueba 2”
Close # N1
Open “C:\DATA\DEMO.TXT” For Input As # N1
S = Input(24, # N1)
MsgBox S
La ejecución del código anterior produce la siguiente salida:
Función EOF
Pág. 165
Especifica si se ha llegado al final de un archivo. Su
sintaxis es de la forma:
VARIABLE = EOF(NÚMERO_ARCHIVO)
Se utiliza EOF() para evitar producir un error al intentar
obtener información más allá del final del archivo. EOF()
retorna un valor True si se ha alcanzado el final del archivo y
False en caso contrario. Por ejemplo:
Dim N1 As Integer
Dim CADENA As String
N1 = FreeFile()
Open “C:\DATA\DEMO.TXT” For Input As # N1
While Not EOF(N1)
Line Input # N1, CADENA
Print CADENA
Wend
Close # N1
Este segmento de código lee y visualiza cada línea del
archivo de texto DEMO.TXT. El bucle finaliza cuando se detecta
el final del archivo. Para que el código anterior funcione
correctamente, no olvide poner la propiedad AutoRedraw del
formulario a True.
Pág. 166
Como ejemplo final del uso de archivos secuenciales vamos
a desarrollar un sencillo editor de texto. Este editor aunque
sus prestaciones son bastante limitadas va ha servir para poner
en práctica lo aprendido recientemente.
El menú que se muestra en la figura obedece a la siguiente
descripción:
Caption Name ShortCut
&Archivo MnuArchivo Ninguno
. . . &Nuevo MnuArchivoNuevo Ninguno
. . . &Abrir MnuArchivoAbrir Ninguno
. . . &Guardar MnuArchivoGuardar Ninguno
. . . - MnuArchivoLinea Ninguno
. . . &Salir MnuArchivoSalir Ctrl + X
Luego proceda a ubicar los siguientes controles sobre el
formulario:
Pág. 167
1 cuadro de texto
1 control CommonDialog
Seguidamente debe establecer las propiedades que se
indican:
Form1
Nombre FrmEditor
Caption Editor
Text1
Nombre TxtEditor
MultiLine True
ScrollBars 3-Both
Text
CommonDialog1
Nombre CommonDialog1
CancelError True
Una vez establecidas las propiedades de la interfaz
ingresar el código que se muestra:
Private Sub Form_Resize()
TxtEditor.Move 0, 0, ScaleWidth, ScaleHeight
End Sub
Private Sub MnuArchivoNuevo_Click()
TxtEditor = “”
End Sub
Pág. 168
Private Sub MnuArchivoAbrir_Click()
Dim FILTRO As String, FILE As String
Dim N1 As Integer, CADENA As String
On Error GoTo ERROR_ABRIR
FILTRO = “Archivos de texto (*.TXT)|*.TXT”
CommonDialog1.Filter = FILTRO
CommonDialog1.ShowOpen
FILE = CommonDialog1.FileName
N1 = FreeFile()
CADENA = “”
TxtEditor = “”
Open FILE For Input As # N1
While Not EOF(N1)
Input # N1, CADENA
TxtEditor = TxtEditor & CADENA & vbCrLf
Wend
Close # N1
FrmEditor.Caption = “Editor - ” & FILE
SALIR_ABRIR:
Exit Sub
ERROR_ABRIR:
MsgBox Err.Description
Resume SALIR_ABRIR
End Sub Private Sub MnuArchivoGuardar_Click()
Dim FILTRO As String, FILE As String
Dim N1 As Integer
Pág. 169
On Error GoTo ERROR_GUARDAR
FILTRO = “Archivos de texto (*.TXT)|*.TXT”
CommonDialog1.Filter = FILTRO
CommonDialog1.ShowSave
FILE = CommonDialog1.FileName
N1 = FreeFile()
Open FILE For Output As # N1
Print # N1, TxtEditor
Close # N1
FrmEditor.Caption = “Editor - ” & FILE
SALIR_GUARDAR:
Exit Sub
ERROR_GUARDAR:
MsgBox Err.Description
Resume SALIR_GUARDAR
End Sub
La sentencia Err.Description retorna una cadena que
contiene la descripción asociada a un error en tiempo de
ejecución.
La sentencia Resume continua la ejecución en la etiqueta
especificada cuando termina una rutina de gestión de errores.
ARCHIVOS DE ACCESO ALEATORIO
En los archivo de acceso aleatorio el almacenamiento de
los datos se hace mediante registros (todos de la misma
Pág. 170
longitud), lo cuales son identificados mediante un único número
denominado índice. El primer registro de un archivo tiene como
índice 1, el segundo tiene índice 2 y así sucesivamente. La
información contenida en un archivo de este tipo puede ser
accedida en cualquier secuencia, ya que cada registro
individual se asocia con su respectivo índice y puede ser
leído, escrito o actualizado.
Las sentencias y funciones necesarias para manipular
archivos de tipo aleatorio se presentan a continuación.
Sentencia Open
Permite abrir un archivo. La sintaxis para acceder
aleatoriamente a un archivo es:
Open NOMBRE_ARCHIVO For Random As # NÚMERO_ARCHIVO Len = LON_REG
Donde NOMBRE_ARCHIVO es una cadena que especifica el
nombre del archivo que se debe ser abierto en modo Random.
El parámetro NÚMERO_ARCHIVO es un entero cuyo valor está
comprendido entre 1 y 511. Este número será asociado con el
nombre del archivo mientras permanezca abierto.
LON_REG es un entero que establece la longitud del
registro para archivos aleatorios.
Sentencia Put
Permite grabar un registro en un archivo abierto para
acceso aleatorio. Su sintaxis es:
Pág. 171
Put # NÚMERO_ARCHIVO, NÚMERO_REG, VARIABLE
Donde NÚMERO_ARCHIVO es el número bajo el cual se abrió el
archivo, NÚMERO_REG es el número correspondiente al registro
que se va ha grabar y VARIABLE contiene los datos a escribir en
el archivo. Por ejemplo:
Dim N1 As Integer, REG As DISTRITO
REG.ID_DISTRITO = “L09”
REG.NOMBRE = “Chorrillos”
N1 = FreeFile()
Open “C:\DATA\RAND1.DAT” For Random As # N1 Len = Len(REG)
Put # N1, 1, REG
Close # N1
El segmento de código anterior utiliza una variable REG de
tipo DISTRITO, cuya definición es la siguiente:
Private Type DISTRITO
ID_DISTRITO As String * 3
NOMBRE As String * 30
End Type
Sentencia Get
Permite leer un registro procedente de un archivo de
acceso aleatorio, almacenando los datos en una variable
específica. Su sintaxis es de la forma:
Pág. 172
Get # NÚMERO_ARCHIVO, NÚMERO_REG, VARIABLE
Donde NÚMERO_ARCHIVO es el número bajo el cual se abrió el
archivo, NÚMERO_REG es el número correspondiente al registro
que se va ha leer y VARIABLE almacena los datos del registro
leído. Por ejemplo:
Dim N1 As Integer, I As Integer, REG As DISTRITO
N1 = FreeFile()
Open “C:\DATA\RAND1.DAT” For Random As # N1 Len = Len(REG)
I = 1
While Not EOF(# N1)
Get # N1, I, REG
MsgBox REG.ID_DISTRITO & “ ” & REG.NOMBRE
I = I + 1
Wend
Close # N1
Cuando EOF() se utiliza con un archivo aleatorio, retorna
un valor True si una sentencia Get intenta leer y no puede
porque ha alcanzado el final del archivo.
Función LOF
Retorna el número de bytes (caracteres) que ocupa un
determinado archivo abierto mediante la sentencia Open. Su
sintaxis es:
Pág. 173
VARIABLE = LOF(# NÚMERO_ARCHIVO)
Donde NÚMERO_ARCHIVO es el número con el que se abrió el
archivo.
Esta función es de utilidad, porque aplicada a un archivo
de acceso aleatorio, permite conocer el número de registros
almacenados en el archivo. Para ello debe dividir el valor
retornado entre la longitud del registro. Como ejemplo,
considere lo siguiente:
Dim N1 As Integer, REG As DISTRITO
Dim NUM_REGS As Integer, I As Integer
N1 = FreeFile()
Open “C:\DATA\RAND1.DAT” For Random As # N1 Len = Len(REG)
NUM_REGS = LOF(N1) / Len(REG)
For I = 1 To NUM_REGS
Get # N1, I, REG
MsgBox REG.ID_DISTRITO & “ ” & REG.NOMBRE
Next
Close # N1
Función Loc
Esta función retorna la posición actual dentro de un
fichero. Su sintaxis es:
VARIABLE = Loc(# NÚMERO_ARCHIVO)
Pág. 174
La función Loc() aplicada a un archivo de acceso aleatorio
retorna el número del último registro leído o grabado en el
archivo especificado. Por ejemplo:
Dim N1 As Integer, REG As DISTRITO
Dim NUM_REGS As Integer, I As Integer
N1 = FreeFile()
Open “C:\DATA\RAND1.DAT” For Random As # N1 Len = Len(REG)
NUM_REGS = LOF(N1) / Len(REG)
I = 1
Do While True
Get # N1, I, REG
MsgBox REG.ID_DISTRITO & “ ” & REG.NOMBRE
I = I + 1
If Loc(N1) = NUM_REGS Then Exit Do
Loop
Close # N1
La sentencia If finaliza el bucle si se ha alcanzado el
último registro.
Como ejemplo final vamos a desarrollar una aplicación que
permita realizar el mantenimiento de los datos almacenados en
el archivo C:\DATA\CURSO.DAT.
Pág. 175
Los botones ubicados en el marco Navegador (Primero,
Anterior, Siguiente y Ultimo, de izquierda a derecha) permiten
desplazarse a través de los registros del archivo. Los botones
ubicados en el marco Mantenimiento (Nuevo, Editar, Guardar y
Eliminar, de izquierda a derecha) permiten realizar las
operaciones básicas de mantenimiento de los registros.
Para el desarrollo de la presente aplicación ubicar los
siguientes controles al formulario:
3 marcos
4 etiquetas
4 cuadros de texto
9 botones de comando
Seguidamente proceda a establecer las propiedades que se
indican:
Form1
Pág. 176
Nombre FrmCurso
Caption Mantenimiento de cursos
BorderStyle 3-Fixed Dialog
StarUpPosition 2-CenterScreen
Frame1
Nombre FraIngreso
Caption
Frame2
Nombre FraNavegador
Caption Navegador
Frame3
Nombre FraMantenimiento
Caption Mantenimiento
Label1
Nombre LblCodigo
Caption Código:
Label2
Nombre LblNombre
Caption Nombre:
Label3
Nombre LblVacantes
Caption Vacantes:
Label4
Nombre LblProfesor
Caption Profesor:
Pág. 177
Text1
Nombre TxtCodigo
Locked True
Text
Text2
Nombre TxtNombre
Locked True
Text
Text3
Nombre TxtVacantes
Locked True
Text
Text4
Nombre TxtProfesor
Locked True
Text
Command1
Nombre CmdPrimero
Caption
Picture C:\FundVB\Bitmaps\First.bmp
Style 1-Graphical
Command2
Nombre CmdAnterior
Caption
Picture C:\FundVB\Bitmaps\Previous.bmp
Pág. 178
Style 1-Graphical
Command3
Nombre CmdSiguiente
Caption
Picture C:\FundVB\Bitmaps\Next.bmp
Style 1-Graphical
Command4
Nombre CmdUltimo
Caption
Picture C:\FundVB\Bitmaps\Last.bmp
Style 1-Graphical
Command5
Nombre CmdNuevo
Caption
Picture C:\FundVB\Bitmaps\New.bmp
Style 1-Graphical
Command6
Nombre CmdEditar
Caption
Picture C:\FundVB\Bitmaps\Edit.bmp
Style 1-Graphical
Command7
Nombre CmdGuardar
Caption
Picture C:\FundVB\Bitmaps\Save.bmp
Pág. 179
Style 1-Graphical
Command8
Nombre CmdEliminar
Caption
Picture C:\FundVB\Bitmaps\Delete.bmp
Style 1-Graphical
Command9
Nombre CmdSalir
Caption &Salir
Picture C:\FundVB\Bitmaps\Exit.bmp
Style 1-Graphical
Luego, proceda a transcribir el código mostrado a continuación:
Private Type CURSO
ID_CURSO As String * 3
NOMBRE As String * 30
VACANTES As Integer
PROFESOR As String * 25
ESTADO As Boolean
End Type
Dim N1 As Integer, POSICION As Integer
Dim REG As CURSO
Private Sub MODO_EDITAR(ByVal Ok As Boolean)
TxtCodigo.Locked = Not Ok
TxtNombre.Locked = Not Ok
Pág. 180
TxtVacantes.Locked = Not Ok
TxtProfesor.Locked = Not Ok
CmdNuevo.Enabled = Not Ok
CmdEditar.Enabled = Not Ok
CmdGuardar.Enabled = Ok
CmdEliminar.Enabled = Not Ok
CmdPrimero.SetFocus
If Ok Then TxtCodigo.SetFocus
End Sub
Private Sub ABRIR_ARCHIVO()
On Error GoTo ERROR_ABRIR:
N1 = FreeFile()
Open “C:\DATA\CURSO.DAT” For Random As # N1 Len = Len(REG)
SALIR_ABRIR:
Exit Sub
ERROR_ABRIR:
MsgBox Err.Description
Resume SALIR_ABRIR:
End Sub
Private Sub Form_Load()
Call ABRIR_ARCHIVO
End Sub Private Sub Form_Activate()
MODO_EDITAR False
Call CmdPrimero_Click
Pág. 181
End Sub
Private Sub CmdPrimero_Click()
POSICION = 1
Get # N1, POSICION, REG
TxtCodigo = REG.ID_CURSO
TxtNombre = REG.NOMBRE
TxtVacantes = Str(REG.VACANTES)
TxtProfesor = REG.PROFESOR
End Sub
Private Sub CmdAnterior_Click()
POSICION = Loc(N1) - 1
If POSICION = 0 Then
Get # N1, 1, REG
MsgBox “Estamos en el primer registro”
Else
Get # N1, POSICION, REG
End If
TxtCodigo = REG.ID_CURSO
TxtNombre = REG.NOMBRE
TxtVacantes = Str(REG.VACANTES)
TxtProfesor = REG.PROFESOR
End Sub Private Sub CmdSiguiente_Click()
Dim ULTIMO As Integer
ULTIMO = LOF(N1) / Len(REG)
Pág. 182
POSICION = Loc(N1) + 1
If POSICION = ULTIMO + 1 Then
Get # N1, ULTIMO, REG
MsgBox “Estamos en el último registro”
Else
Get # N1, POSICION, REG
End If
TxtCodigo = REG.ID_CURSO
TxtNombre = REG.NOMBRE
TxtVacantes = Str(REG.VACANTES)
TxtProfesor = REG.PROFESOR
End Sub
Private Sub CmdUltimo_Click()
POSICION = LOF(N1) / Len(REG)
If POSICION <> 0 Then
Get #N1, POSICION, REG
TxtCodigo = REG.ID_CURSO
TxtNombre = REG.NOMBRE
TxtVacantes = Str(REG.VACANTES)
TxtProfesor = REG.PROFESOR
End If
End Sub Private Sub CmdNuevo_Click()
POSICION = LOF(N1) / Len(REG) + 1
MODO_EDITAR True
Pág. 183
TxtCodigo = “”
TxtNombre = “”
TxtVacantes = “”
TxtProfesor = “”
TxtCodigo.SetFocus
End Sub
Private Sub CmdEditar_Click()
MODO_EDITAR True
End Sub
Private Sub CmdGuardar_Click()
REG.ID_CURSO = Trim(TxtCodigo)
REG.NOMBRE = Trim(TxtNombre)
REG.VACANTES = TxtVacantes
REG.PROFESOR = Trim(TxtProfesor)
REG.ESTADO = True
Put # N1, POSICION, REG
MODO_EDITAR False
End Sub
Private Sub CmdEliminar_Click()
Dim N2 As Integer
Dim I As Integer, J As Integer REG.ESTADO = False
Put # N1, POSICION, REG
N2 = FreeFile()
Pág. 184
Open “C:\DATA\TEMPO.DAT” For Random As # N2 Len = Len(REG)
I = 1
J = 1
While Not EOF(N1)
Get # N1, I, REG
If REG.ESTADO Then
Put # N2, J, REG
J = J + 1
End If
I = I + 1
Wend
Close # N1, # N2
Kill “C:\DATA\CURSO.DAT”
Name “C:\DATA\TEMPO.DAT” As “C:\DATA\CURSO.DAT”
Call ABRIR_ARCHIVO
Call CmdPrimero_Click
End Sub
Private Sub CmdSalir_Click()
Close # N1
End
End Sub
ARCHIVOS DE ACCESO BINARIO
Pág. 185
Un archivo binario contiene más que simplemente texto.
Puede contener imágenes, sonido, hojas de cálculo, o documentos
concebidos para el procesamiento de texto.
El acceso binario permite la posibilidad de tratar
cualquier archivo como una secuencia numerada de bytes,
independientemente de la estructura del mismo. Los bytes ocupan
las posiciones 1, 2, 3, etc. Por ejemplo, si se requiere
recuperar un dato de tipo entero (Integer, 2 bytes) de la
posición 3 del archivo, serían recuperados los bytes 3 y 4 para
poder formar el valor del entero. Por tanto, antes de trabajar
con archivos binarios es necesario conocer cómo fueron escritos
los datos que contiene para poder recuperarlos correctamente.
Sentencia Open
Permite abrir un archivo para acceso binario. Su sintaxis
es de la forma:
Open NOMBRE_ARCHIVO For Binary As # NÚMERO_ARCHIVO
Donde NOMBRE_ARCHIVO es una cadena que especifica el
nombre del archivo que se debe ser abierto en modo Binary.
El parámetro NÚMERO_ARCHIVO es un entero cuyo valor está
comprendido entre 1 y 511. Este número será asociado con el
nombre del archivo mientras permanezca abierto.
Sentencia Put
Pág. 186
Permite grabar en un archivo binario tantos bytes como
haya en una variable. Su sintaxis es:
Put # NÚMERO_ARCHIVO, POSICIÓN, VARIABLE
Donde NÚMERO_ARCHIVO es el número bajo el cual se abrió el
archivo. POSICIÓN es el número de byte a partir del cual se han
de grabar los datos contenidos en VARIABLE.
Sentencia Get
Permite leer de un archivo binario tantos bytes como
quepan en una variable. Su sintaxis es de la forma:
Get # NÚMERO_ARCHIVO, POSICIÓN, VARIABLE
Donde NÚMERO_ARCHIVO es el número bajo el cual se abrió el
archivo. POSICIÓN es el número de byte a partir del cual se han
de leer los datos almacenados en VARIABLE.
Sentencia Seek
Permite situar la posición de lectura o de escritura en
una posición determinada dentro del archivo. Su sintaxis es:
Get # NÚMERO_ARCHIVO, POSICIÓN, VARIABLE
Donde POSICIÓN es el número de byte a partir del cual
queremos leer o escribir dentro del archivo.
Pág. 187
Como ejemplo vamos a desarrollar una aplicación que
permite guardar “cifrados” los textos ingresados en un cuadro
de texto. Para ello crear un nuevo proyecto y ubicar en el
formulario un cuadro de texto (TxtMensaje) y un botón de
comando (CmdCifrar). Luego, ingrese el siguiente código:
Const CLAVE As Integer = 3
Private Sub CmdCifrar_Click()
Dim N1 As Integer, I As Integer
Dim CAR As String * 1
N1 = FreeFile()
Open “C:\DATA\DEMO.BIN” For Binary As # N1
For I = 1 To Len(TxtMensaje)
CAR = Chr((Asc(Mid(TxtMensaje, I, 1)) + CLAVE) Mod 256)
Put # N1, , CAR
Next
Close # N1
End Sub
En el código la función Mid() obtiene el carácter “I” de
la caja de texto, la función Asc() obtiene su código ANSI, al
que sumamos el valor de CLAVE, para después obtener el resto de
la división entre 256, con el fin de mantenernos en el rango de
0 a 255 (rango de valores de la tabla de caracteres ANSI). Por
último, la función Chr() retorna el carácter correspondiente al
valor obtenido, el cual es almacenado en el archivo binario.
Pág. 188
Por ejemplo si ingresa el mensaje “HOLA” se almacena en el
archivo como “KROD” (lo puede comprobar mediante el Bloc de
notas), ya que el valor ANSI de la “H” es 72, este carácter al
sumarle el valor de CLAVE sería el 75 (72 + 3), que es la “K”,
y así sucesivamente (ver la tabla de caracteres ANSI).
El descifrado sería el proceso inverso, para ello crear un
nuevo formulario y ubicar un botón de comando (CmdDescifrar),
luego ingresar el código siguiente:
Const CLAVE As Integer = 3
Private Sub CmdDescifrar_Click()
Dim N1 As Integer, I As Integer
Dim CAR As String * 1, CADENA As String
N1 = FreeFile()
Open “C:\DATA\DEMO.BIN” For Binary As # N1
Get # N1, , CAR
While Not EOF(N1)
CAR = Chr((Asc(CAR) + (256 - Val(CLAVE))) Mod 256)
CADENA = CADENA & CAR
Get # N1, , CAR
Wend
MsgBox CADENA
End Sub
Pág. 189
CAPÍTULO 8
GRÁFICOS
Un gráfico tiene por finalidad facilitar la legibilidad de
la información que se presenta: “un gráfico vale más que mil
palabras”.
LOS COLORES
En Visual Basic se pueden manipular los colores mediante
tres formas diferentes: código hexadecimal, la función RGB() y
la función QBColor().
Código Hexadecimal
Un código de color se compone de seis dígitos
hexadecimales, cuyos valores van desde &H000000& (cero) hasta
&HFFFFFF& (16 777 215). De forma práctica podemos guiarnos
mediante:
&HAAVVRR&
Donde AA representa al color azul, VV al color verde y RR
al color rojo. Todos los demás colores se obtienen mezclando
estos tres colores.
Pág. 190
Como ejemplo considere los siguientes códigos de colores
que se presentan a continuación:
AZUL = &HFF0000&
VERDE = &H00FF00&
ROJO = &H0000FF&
NEGRO = &H000000&
La función RGB()
La función RGB() retorna un número de tipo entero largo
(Long) que representa el valor de un color. Su sintaxis es:
COLOR = RGB(nROJO, nVERDE, nAZUL)
Donde nROJO, nVERDE, nAZUL son enteros comprendidos entre
0 y 255. La siguiente tabla muestra algunos colores estándar y
sus valores de nROJO, nVERDE y nAZUL:
Color nROJO nVERDE nAZUL
Negro 0 0 0
Azul 0 0 255
Verde 0 255 0
Cián 0 255 255
Rojo 255 0 0
Magenta 255 0 255
Amarillo 255 255 0
Blanco 255 255 255
Pág. 191
El ejemplo anterior (código hexadecimal) utilizando la
función RGB() será similar a:
AZUL = RGB(0, 0, 255)
VERDE = RGB(0, 255, 0)
ROJO = RGB(255, 0, 0)
NEGRO = RGB(0, 0, 0)
La función QBColor()
La función QBColor() retorna un número de tipo entero largo
(Long) que representa el código de color RGB correspondiente al
número de color especificado. Su sintaxis es:
COLOR = QBColor(nCOLOR)
Donde el argumento nCOLOR es un entero entre 0 y 15; los
valores que puede tomar se presentan en la siguiente tabla:
Número Color Número Color
0 Negro 8 Gris
1 Azul 9 Azul claro
2 Verde 10 Verde claro
3 Cián 11 Cián claro
4 Rojo 12 Rojo claro
5 Magenta 13 Magenta claro
6 Amarillo 14 Amarillo claro
7 Blanco 15 Blanco brillante
Pág. 192
Pág. 193
El ejemplo inicial (código hexadecimal) utilizando la
función QBColor() se soluciona como se muestra a continuación:
AZUL = QBColor(1)
VERDE = QBColor(2)
ROJO = QBColor(4)
NEGRO = QBColor(0)
EL SISTEMA DE COORDENADAS
Todas las operaciones gráficas descritas en este capítulo
utilizan el sistema de coordenadas del área de dibujo (que
puede ser la pantalla, un formulario, un cuadro de imagen, o
cualquier otro contenedor).
El sistema de coordenadas es una cuadrícula bidimensional
que define ubicaciones del área de dibujo. Las ubicaciones de
esta cuadrícula se definen mediante las coordenadas del área de
dibujo:
( X ,Y )
Donde el valor de X es la ubicación del punto sobre el
“eje X”, con la ubicación predeterminada (cero) en el extremo
izquierdo. El valor de Y es la ubicación del punto sobre el
eje Y , con la ubicación predeterminada (cero) en el extremo
superior. Este sistema de coordenadas se ilustra en la
siguiente figura:
El sistema de coordenadas de Visual Basic tiene las
siguientes reglas:
• El sistema de coordenadas predeterminado de cualquier
contenedor empieza por la coordenada (0, 0) en la esquina
superior izquierda del contenedor.
• Las unidades de medida utilizadas para definir las
ubicaciones a lo largo de los ejes se denominan
colectivamente “escala”. En Visual Basic, cada eje del
sistema de coordenadas puede tener su propia escala.
• Todos los métodos gráficos utilizan el sistema de coordenadas
del contenedor. Por ejemplo, las instrucciones que dibujan
dentro de un cuadro de imagen utilizan el sistema de
coordenadas de dicho control.
Establecer las coordenadas de dibujo
Para establecer las coordenadas de dibujo del contenedor
se utilizan las propiedades CurrentX y CurrentY de dicho
contenedor.
Pág. 194
Por ejemplo, las instrucciones siguientes establecen las
coordenadas de dibujo a la esquina superior izquierda de un
cuadro de imagen:
Picture1.CurrentX = 0
Picture1.CurrentY = 0
De forma predeterminada, los formularios y los cuadros de
imagen utilizan un sistema de coordenadas en el que cada unidad
corresponde a un “twip” (1 440 twips equivalen a una pulgada y
567 twips son aproximadamente un centímetro).
Cambiar la unidad de medida del sistema de coordenadas
Para cambiar la unidad de medida del sistema de
coordenadas su establece la propiedad ScaleMode a uno de los
valores enumerados en la tabla siguiente:
Valor de
ScaleMode
Descripción
1 Twips
2 Puntos
3 Pixeles
4 Caracteres
5 Pulgadas
6 Milímetros
7 Centímetros
Pág. 195
Por ejemplo la siguiente orden establece la escala a
pulgadas de un cuadro de imagen:
Picture1.ScaleMode = 5
Crear una escala personalizada
Para crear una escala personalizada se pueden utilizar las
propiedades ScaleLeft, ScaleTop, ScaleWidth y ScaleHeight de un
determinado objeto.
Las propiedades ScaleLeft y ScaleTop asignan valores
numéricos a la esquina superior izquierda de un objeto. Por
ejemplo, las instrucciones siguientes establecen el valor de la
esquina superior izquierda de un cuadro de imagen:
Picture1.ScaleLeft = 100
Picture1.ScaleTop = 100
Las propiedades ScaleWidth y ScaleHeight definen las
unidades según el ancho y el alto real del área de dibujo (si
el objeto cambia de tamaño posteriormente, las unidades siguen
siendo las mismas). Por ejemplo las instrucciones siguientes
definen la unidad horizontal como 1/1 000 del ancho interno
actual del cuadro de imagen y la unidad vertical como 1/500 del
alto interno actual del cuadro de imagen:
Picture1.ScaleWidth = 1000
Picture1.ScaleHeight = 500
Pág. 196
A manera de ejemplo considere la escala mostrada en la
siguiente figura, la cual tiene ScaleLeft, ScaleTop, ScaleWidth
y ScaleHeight establecidas todas a 100.
Una forma más eficiente de personalizar la escala de un
sistema de coordenadas es utilizando el método Scale. Su
sintaxis es:
OBJETO.Scale (X1, Y1) – (X2, Y2)
Donde los valores de (X1, Y1) determinan las coordenadas
de la esquina superior izquierda, los valores de (X2, Y2)
determinan los valores de la esquina inferior derecha. Para
obtener el mismo sistema de coordenadas de ejemplo anterior
(donde se utilizó las propiedades ScaleLeft, ScaleTop,
ScaleWidth y ScaleHeight) la orden sería la siguiente:
Scale (100, 100)-(200, 200)
Pág. 197
Donde es evidente que las diferencias entre las dos
coordenadas “X” y las dos coordenadas “Y” determinan los
valores de ScaleWidth y ScaleHeight, respectivamente.
MÉTODOS GRÁFICOS
Visual Basic proporciona varios métodos para la creación
de gráficos. Los métodos gráficos, resumidos en la tabla
siguiente, son aplicables a los formularios y a los cuadros de
imagen.
Método Descripción
Cls Borra todos los gráficos y el resultado del
método Print.
Pset Dibuja un punto individual.
Point Devuelve el color de un punto especificado.
Line Dibuja una línea, un rectángulo o un cuadro
relleno.
Circle Dibuja una círculo, una elipse o un arco.
PaintPicture Dibuja gráficos en ubicaciones arbitrarias.
Print Imprime texto en formularios y cuadros de
imagen.
Para que la mayoría de los métodos gráficos funcionen
correctamente la propiedad AutoRedraw del formulario debe está
activada, caso contrario el dibujo no se visualizará.
Pág. 198
Puntos
Para el dibujo de puntos se usará el método Pset, cuya
sintaxis es:
OBJETO.Pset (X, Y), COLOR
Donde X, Y son valores de tipo Single que indican las
coordenadas horizontal (eje X) y vertical (eje Y) del punto que
se va a dibujar. COLOR es un entero largo (Long) que indica el
color RGB especificado para el punto, si se omite se usará el
valor actual de la propiedad ForeColor de OBJETO.
Como ejemplo vamos a crear una sencilla aplicación que
permita dibujar puntos en la posición especificada mediante el
ratón, con la posibilidad de poder seleccionar colores (tipo
“Paint”).
Pág. 199
Para el desarrollo de la presente aplicación proceda a
crear un nuevo proyecto y agregar al formulario 34 cuadros de
imagen. Luego ingresar el código mostrado.
Objeto Nombre Descripción
Picture1 . . . Picture32 PicColor Opciones de color
Picture33 PicMuestra Color actual utilizado
Picture34 PicLienzo Area de dibujo
Dim COLOR As Single
Private Sub Form_Load()
PicLienzo.ScaleMode = 3
PicLienzo.DrawWidth = 5
COLOR = RGB(0, 0, 0)
End Sub
Private Sub PicColor_Click(Index As Integer)
COLOR = PicColor(Index).BackColor
PicMuestra.BackColor = COLOR
End Sub
Private Sub PicLienzo_MouseDown(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
PicLienzo.PSet (X, Y), COLOR
End If
End Sub
Pág. 200
En el ejemplo anterior se utiliza la propiedad DrawWidth,
la cual sirve para fijar el tamaño del punto dibujado.
Para que el método Pset funcione correctamente la
propiedad ScaleMode debe estar establecida a pixeles.
Líneas, rectángulos y cuadros rellenos
Para dibujar líneas, rectángulos o cuadros rellenos
utilice el método Line, cuya sintaxis es:
OBJETO.Line (X1, Y1) - (X2, Y2), COLOR, B/BF
Donde X1, Y1 son valores de tipo Single que indican las
coordenadas del punto inicial para la línea o el rectángulo.
X2, Y2 son valores de tipo Single que indican las coordenadas
del punto final para la línea o el rectángulo que se está
dibujando. COLOR es un entero largo (Long) que indica el color
RGB especificado para dibujar la línea, si se omite se usará el
valor actual de la propiedad ForeColor de OBJETO. Los
parámetros B y BF son opcionales: B hace que se dibuje un
rectángulo usando las coordenadas para especificar las esquinas
opuestas del mismo. BF especifica que el cuadro se rellena con
el mismo color especificado mediante el parámetro COLOR.
A manera de ejemplo vamos a mejorar nuestro sencillo
“Editor gráfico”, de tal forma que además de dibujar puntos
permita también dibujar líneas cuando se mantenga pulsado el
botón izquierdo del ratón.
Pág. 201
Para lograr nuestro cometido añadir el siguiente código a
la aplicación anterior:
Private Sub PicLienzo_MouseMove(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
PicLienzo.Line -(X, Y), COLOR
End If
End Sub
Otro ejemplo sencillo para ilustrar como se usa el método
Line para dibujar rectángulos y cuadros rellenos se presenta a
continuación, consiste en dibujar una bandera directamente
sobre el formulario, en este caso será la bandera de mi país:
Perú.
Pág. 202
Para este ejemplo crear una nueva aplicación e ingresar el
código mostrado:
Private Sub Form_Click()
Height = 3 * 1440
Width = 5 * 1440
BackColor = QBColor(12)
ForeColor = QBColor(15)
Line (Width / 3, 0) - ((Width / 3) * 2, Height), , BF
End Sub
Círculos, elipses y arcos
Para dibujar círculos, elipses o arcos se utiliza el
método Circle, cuya sintaxis es:
OBJETO.Circle (X, Y), RADIO, COLOR, INICIO, FIN, ASPECTO
Pág. 203
Donde X, Y son valores de tipo Single que indican las
coordenadas para el punto central del círculo, elipse o arco.
RADIO es un valor de tipo Single que indica el radio del
círculo, elipse o arco. COLOR es un valor entero de tipo Long
que indica el color RGB del contorno del círculo, elipse o
arco (es opcional). INICIO y FIN son valores de tipo Single,
que especifican (en radianes) las posiciones de inicio y de fin
del arco (son opcionales). ASPECTO es un valor de tipo Single
que indica la relación de aspecto del círculo, el valor
predeterminado es 1.0, lo que produce un círculo perfecto (no
elíptico) en cualquier pantalla (opcional).
A manera de ejemplo vamos a mejor aún más nuestro “Editor
gráfico” de tal manera que se podrá dibujar puntos, líneas,
rectángulos, círculos y elipses.
Pág. 204
Para el desarrollo de la presente aplicación se debe
añadir al ejemplo anterior 5 botones de comandos y formar una
matriz de controles (CmdForma). Luego ingresar el siguiente
código:
Dim COLOR As Single
Dim FORMA As Integer
Dim X1 As Single, Y1 As Single, X2 As Single, Y2 As Single
Private Sub CmdForma_Click(Index As Integer)
FORMA = Index + 1
End Sub
Private Sub Form_Load()
COLOR = RGB(0, 0, 0)
FORMA = 1
PicLienzo.ScaleMode = 3
PicLienzo.DrawWidth = 3
End Sub
Private Sub PicColor_Click(Index As Integer)
COLOR = PicColor(Index).BackColor
PicMuestra.BackColor = COLOR
End Sub
Private Sub PicLienzo_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
If Button = vbLeftButton Then
X1 = X
Y1 = Y
End If
End Sub
Pág. 205
Private Sub PicLienzo_MouseUp(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
If Button = vbLeftButton Then
X2 = X
Y2 = Y
RADIO = Sqr((X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2)) / 2
Select Case FORMA
Case 1
PicLienzo.PSet (X, Y), COLOR
Case 2
PicLienzo.Line -(X, Y), COLOR
Case 3
PicLienzo.Line (X1, Y1)-(X2, Y2), COLOR, B
Case 4
PicLienzo.Circle (X, Y), RADIO, COLOR
Case 5
PicLienzo.Circle (X, Y), RADIO, COLOR, , , 0.5
End Select
End If
End Sub
CONTROLES GRÁFICOS
Visual Basic proporciona tres controles gráficos diseñados
para crear efectos gráficos en las aplicaciones:
• Control Image (estudiado en el Capítulo 4)
• Control Line
• Control Shape
Pág. 206
Control Line
Line es un control gráfico que se muestra como una línea
horizontal, vertical o diagonal.
El control Line tiene una funcionalidad limitada y está
pensado para usos sencillos. Para usos más avanzados debe usar
el método Line.
Propiedad Descripción
BorderColor Devuelve o establece el color de la línea.
BorderStyle Devuelve o establece el estilo de la línea.
BorderWidth Devuelve o establece el ancho de la línea.
X1, Y1, X2, Y2 Devuelven o establecen las coordenadas del
punto inicial (X1, Y1) y del punto final
(X2, Y2) de la línea.
Control Shape
Shape es un control gráfico que se muestra como un
rectángulo, un cuadrado, una elipse, un círculo, un rectángulo
redondeado o un cuadrado redondeado.
El control Shape presenta propiedades similares al control
Line (BorderColor, BorderStyle, BorderWidth). Adicionalmente,
la propiedad Shape del control Shape proporciona seis formas
predefinidas. En la tabla siguiente se enumeran todas las
formas predefinidas, sus valores y las constantes de Visual
Basic equivalentes:
Pág. 207
Forma Estilo Constante
Rectángulo 0 vbShapeRectangle
Cuadrado 1 vbShapeSquare
Elipse 2 vbShapeOval
Círculo 3 vbShapeCircle
Rectángulo redondeado 4 vbShapeRoundedRectangle
Cuadrado redondeado 5 vbShapeRoundedSquare
Las seis formas predefinidas que presenta el control Shape
se muestran en el siguiente formulario:
GRAFICACIÓN MATEMÁTICA
Como la mayor parte de las ecuaciones matemáticas expresa
relaciones complicadas en una, dos tres o más dimensiones,
tratar de entenderlas sin gráficas es casi lo mismo que tratar
de caminar con los ojos vendados.
Pág. 208
Funciones algebraicas
Como ejemplo de este tipo de gráficas vamos a dibujar una
parábola, cuya ecuación matemática (ecuación general de segundo
grado) es de la forma:
2( )f x Ax Bx C= + +
Para realizar la presente aplicación crear un nuevo
proyecto y añadir al formulario un cuadro de imagen (PicPlano),
tres cuadros de texto (TxtA, TxtB, TxtC) y un botón de comandos
(CmdVisualizar). Los aspectos decorativos (etiquetas, marcos,
etc.) quedan a criterio del lector. Luego ingresar el siguiente
código:
Dim A As Double, B As Double, C As Double
Pág. 209
Function F(ByVal X As Single) As Single
F = A * (X * X) + B * X + C
End Function
Private Sub CmdVisualizar_Click()
Dim X As Single
A = TxtA
B = TxtB
C = TxtC
PicPlano.Cls
PicPlano.Scale (-100, 100)-(100, -100)
PicPlano.Line (-100, 0)-(100, 0)
PicPlano.Line (0, -100)-(0, 100)
PicPlano.CurrentX = -10
PicPlano.CurrentY = F(-10)
For X = -10 To 10
PicPlano.Line -(X, F(X))
Next
End Sub
Funciones trigonométricas
Graficar funciones trigonométricas (seno, coseno,
tangente, cotangente, secante, cosecante) no es nada
complicado, sino analice el siguiente ejemplo.
Pág. 210
Para realizar nuestra aplicación de ejemplo crear un nuevo
proyecto y añadir al formulario un cuadro de imagen (PicPlano)
y 6 botones de comandos (CmdFuncion, es decir se trata de una
matriz de controles). Luego ingresar el código siguiente:
Private Sub CmdFuncion_Click(Index As Integer)
PicPlano.Cls
Dibuja (Index)
End Sub
Private Sub Dibuja(OP As Integer)
PicPlano.Scale (-5, 5)-(5, -5)
PicPlano.Line (-5, 0)-(5, 0)
PicPlano.Line (0, -5)-(0, 5)
DosPi = 8 * Atn(1)
Pág. 211
Dim X As Single
For X = -DosPi To DosPi Step 0.025
Select Case OP
Case 0
Y = Sin(X)
Case 1
Y = Cos(X)
Case 2
Y = Sin(X) / Cos(X)
Case 3
If X < -0.001 Or X > 0.001 Then
Y = Cos(X) / Sin(X)
End If
Case 4
Y = 1 / Cos(X)
Case 5
If X < -0.001 Or X > 0.001 Then
Y = 1 / Sin(X)
End If
End Select
PicPlano.PSet (X, Y)
Next
End Sub
Gráficas en coordenadas polares
Pág. 212
Pág. 213
Para el caso de las gráficas de ecuaciones polares tampoco
es complicado, sólo hay que tener presente las siguientes
consideraciones.
Dado un punto del plano, tal punto se encuentra a
una distancia del origen, y a un ángulo
( , )P x y
r θ respecto del
semieje horizontal positivo.
De la gráfica se tiene que el punto tiene coordenadas
rectangulares
P
( , )x y ( , )r y coordenadas polares θ entonces se
cumplen las siguientes relaciones de transformación:
cosx r θ=
seny r
θ=
2 2 2 y= +
De donde: r x ; tan yx
θ =
Pág. 214
A continuación presentamos algunas ecuaciones polares
características:
Nombre Ecuación
Circunferencia de radio n r n=
Trébol de cuatro hojas 2 cos 2r θ=
Cardioide 1 cosr θ= +
Limazón 1 2 cosr θ= +
Lemniscata
2 cos 2r θ=
Pétalo de rosa sen 4r θ=
Espiral
2r
nθ
=
Espiral logarítmica nr e θ=
Astroide
3(cos 2 )r θ=
Nefroide 3 cos 2 cos 6r θ θ= −
Concoide
1 1cos 2
rθ
= +
Estrofoide
1 cos 2 2
rtanθ θ
=+
Para realizar una aplicación que permita dibujar
ecuaciones polares crear un nuevo proyecto y añadir al
formulario 1 cuadro de imagen (PicPlano), un cuadro de lista
(LstEcuacion) y un botón de comandos (CmdVisualizar). La
apariencia de la interfaz debe ser similar a la de la figura
mostrada:
Luego proceda a ingresar el código que se presenta a
continuación:
Dim OP As Integer
Function F(ByVal THETA As Single) As Single
Select Case OP
Case 0 : F = 2
Case 1 : F = 2 * Cos(2 * THETA)
Case 2 : F = 1 + Cos(THETA)
Case 3 : F = 1 + 2 * Cos(THETA)
Case 4 : If Cos(2 * THETA) >= 0 Then F = Sqr(Cos(2 * THETA))
Case 5 : F = Sin(4 * THETA)
Case 6 : F = THETA / 2
Case 7 : F = Exp(THETA / 8)
Case 8 : F = Cos(2 * THETA) * Cos(2 * THETA) * Cos(2 * THETA)
Pág. 215
Case 9 : F = 3 * Cos(2 * THETA) - Cos(6 * THETA)
Case 10: F = 1 / Cos(2 * THETA) + 1
Case 11: If Int(THETA / 45) <> THETA / 45 Or THETA <> 0 _
Then F = 1 / (Cos(2 * THETA) + Tan(2 * THETA))
End Select
End Function
Private Sub LstEcuacion_Click()
OP = LstEcuacion.ListIndex
End Sub
Private Sub CmdVisualizar_Click()
Dim X As Single, Y As Single
Dim I As Single, R As Single
DosPi = 8 * Atn(1)
PicPlano.Cls
PicPlano.ScaleMode = 3
PicPlano.Scale (-3.25, 3.25)-(3.25, -3.25)
PicPlano.Line (-3.25, 0)-(3.25, 0)
PicPlano.Line (0, -3.25)-(0, 3.25)
For I = 0 To DosPi Step 0.01
R = F(I)
X = R * Cos(I)
Y = R * Sin(I)
PicPlano.PSet (X, Y), QBColor(1)
Next
End Sub
Fractales
Pág. 216
Pág. 217
La matemática fractal es producto de la interacción de un
matemático genial (Benoit B. Mandelbrot) y la computadora.
El ahora ubicuo término fractal se debe al hecho de que la
matemática fractal trabaja con fracciones, las figuras
generadas no tienen una relación de enteros entre sus
componentes, de modo que ninguna dimensión es producto de otra
multiplicada por un entero. Es decir, al dividir una dimensión
entre otra nunca se obtiene un resultado exacto. Los fractales
generan figuras y estas figuras resultan tener una extraña
similitud con algunas formas que genera la naturaleza.
Entre las ecuaciones para generar fractales Mandelbrot ha
producido una en particular que ha recibido el nombre de
“Conjunto de Mandelbrot”. Esta ecuación se resuelve en el campo
de los números comprendidos entre las longitudes -2.0 a +0.5 y
las latitudes -1.25 a +1.25, está dominado por un gran mar
fractal con bahías y entrantes. La expresión matemática del
Conjunto de Mandelbrot es:
2
1 nnZ Z C+ = +
C
Donde es un número complejo constante y Z es un número
complejo variable que permite obtener las respectivas
iteraciones (los valores de cada punto del paisaje fractal,
latitud y longitud).
Pág. 218
Como ejemplo vamos a obtener las tres primeras
iteraciones. Para ello asignamos valores a C de cualquier
posición arbitraria dentro del conjunto, digamos C y para
arrancar las iteraciones podemos comenzar con , luego:
1 i= +
0 0Z =
21 (0) (1 ) 1
Z i i= + + = +
22 (1 ) (1 ) 1 3
Z i i i= + + + = +
23 (1 3 ) (1 ) 7 7
Z i i i= + + + = − +
Cuando se continua desarrollando el Conjunto de Mandelbrot
se obtiene una figura similar a la mostrada:
Para el desarrollo de la presente aplicación crear un
nuevo proyecto y añadir sobre el formulario un cuadro de imagen
(PicPlano) y un botón de comandos (CmdVisualizar), luego
ingresar el código siguiente:
Function Hipotenusa(ByVal A As Double, ByVal B As Double) As Double
Hipotenusa = Sqr(A * A + B * B)
End Function
Private Sub CmdVisualizar_Click()
Dim MaxX As Integer, MaxY As Integer
Dim Limite As Integer, Pasos As Integer
Dim I As Integer, J As Integer
Dim PasoX As Double, PasoY As Double
Dim PosX As Double, PosY As Double
Dim OrigX As Double, OrigY As Double
Dim DimX As Double, DimY As Double
Dim IterX As Double, IterY As Double, TempX As Double
Dim Terminar As Boolean
PicPlano.ScaleMode = 3
MaxX = PicPlano.ScaleWidth
MaxY = PicPlano.ScaleHeight
Limite = 16
OrigX = -2
OrigY = -1.25
DimX = 0.5
DimY = 1.25
PasoX = (DimX - OrigX) / MaxX
Pág. 219
PasoY = (DimY - OrigY) / MaxY
For I = 0 To MaxX
For J = 0 To MaxY
PosX = OrigX + I * PasoX
PosY = OrigY + J * PasoY
IterX = 0 : IterY = 0
Terminar = False
Pasos = 0
While (Not Terminar)
TempX = (IterX * IterX) - (IterY * IterY) + PosX
IterY = 2 * (IterX * IterY) + PosY
IterX = TempX
Pasos = Pasos + 1
If Hipotenusa(Abs(IterX), Abs(IterY)) >= 2 Then
Terminar = True
End If
If (Pasos >= Limite) Then
Terminar = True
End If
Wend
If (Pasos < Limite) Then
PicPlano.PSet (I, J), QBColor(Pasos)
End If
Next
Next
End Sub
Pág. 220
En este capítulo, debido a las limitaciones de espacio y
materia, tan sólo se ofrece el camino de acceso a unos pocos de
los diversos temas que abarca el fascinante mundo de la
programación de gráficos por computadora.
Muchos de estos temas siguen siendo materia de
investigación (como el caso de los fractales), por lo que si
Ud. desea profundizar en este laberinto de fascinación, no hay
la garantía de un retorno sano y salvo a nuestro universo
mundano.
Pág. 221
GUÍA DE LABORATORIO
Parte I
ELABORADO POR
CARLOS CASTILLO PERALTA
cc_peralta@hotmail.com
INTRODUCCIÓN
Pág. 222
La presente Guía de Laboratorio de Microsoft Visual Basic,
se elaboró con la finalidad de complementar la parte teórica
con la parte práctica del curso. Los problemas presentan un
grado de dificultad gradual, es decir, en cada práctica primero
se comienzan con problemas muy sencillos con la finalidad de
que el estudiante esclarezca dudas y quede claro en los
conceptos asimilados en la teoría, y luego en los problemas
posteriores se va incrementando el nivel de dificultad.
Esta guía explora una gran variedad de materias y contiene
muchos problemas recopilados a lo largo de varios años de
experiencia. Espero que satisfaga las necesidades de los
estudiantes y colegas, ya que ha sido elaborada teniendo en
cuenta los objetivos de aprendizaje del curso.
Si desean compartirla con otros colegas, me agradaría
mucho que lo hicieran, con la única condición de que siempre se
respete el derecho del autor.
Desde ya les deseo la mejor de las suertes en el
aprendizaje de Microsoft Visual Basic.
Lima, Diciembre del 2000
Carlos Castillo Peralta
Microsoft Visual Basic
Pág. 223
GUÍA DE LABORATORIO Nº 1
Objetivos
Luego de completar este laboratorio, el estudiante será
capaz de:
• Identificar los elementos del entorno integrado de
desarrollo de Microsoft Visual Basic 6.0.
• Añadir controles a un formulario.
• Establecer las propiedades de los controles.
• Trabajar con procedimientos de eventos.
• Crear una aplicación simple con Microsoft Visual Basic.
Consideraciones
Para el desarrollo del presente laboratorio Ud. deberá
crear una carpeta C:\FundVB\Lab1, para guardar sus trabajos
correspondientes a este laboratorio.
Aplicación Nº 1
Elaborar una aplicación que permita calcular el salario
neto de un trabajador en función del número de horas
trabajadas, pago por hora de trabajo y un descuento fijo al
sueldo bruto del 20 por 100. Los cálculos a efectuar para
obtener el salario neto de un trabajador se muestran a
continuación:
SalarioBruto = HorasTrabajadas * PagoPorHora
Descuento = 0.2 * SalarioBruto
SalarioNeto = SalarioBruto - Descuento
El diseño de la interfaz debe ser similar a la figura
mostrada:
Pág. 224
Para el desarrollo de esta aplicación, proceda a ubicar
los siguientes controles en el formulario:
2 marcos
6 etiquetas
6 cajas de texto
3 botones de comando
Una vez ubicados los controles, establezca las propiedades
según se indica:
Form1
Nombre FrmSalarioNeto
BorderStyle 3-Fixed Dialog
Caption Cálculo del salario neto
Moveable False
StartUpPosition 2-CenterScreen
Frame1
Nombre FraIngreso
Pág. 225
Caption Ingreso de datos:
Frame2
Nombre FraSalida
Caption Salida de datos:
Label1
Nombre LblApellidosNombres
AutoSize True
Caption Apellidos y nombres:
Label2
Nombre LblHorasTrabajadas
AutoSize True
Caption Horas trabajadas:
Label3
Nombre LblPagoPorHora
AutoSize True
Caption Pago por hora S/.
Label4
Nombre LblSalarioBruto
AutoSize True
Caption Salario bruto S/.
Label5
Nombre LblDescuento
AutoSize True
Caption Descuento S/.
Label6
Nombre LblSalarioNeto
Pág. 226
AutoSize True
Caption Salario neto S/.
Text1
Nombre TxtApellidosNombres
Text
Text2
Nombre TxtHorasTrabajadas
Text
Text3
Nombre TxtPagoPorHora
Text
Text4
Nombre TxtSalarioBruto
Text
Text5
Nombre TxtDescuento
Text
Text6
Nombre TxtSalarioNeto
Text
Command1
Nombre CmdAceptar
Caption &Aceptar
Command2
Nombre CmdLimpiar
Pág. 227
Caption &Limpiar
Command3
Nombre CmdSalir
Caption &Salir
Luego de establecer las propiedades para los controles,
debe añadir código a la aplicación. Para ello haga doble click
sobre el botón Aceptar e ingrese el siguiente código:
Private Sub CmdAceptar_Click()
Dim HorasTrabajadas As Integer, PagoPorHora As Double
Dim SalarioBruto As Double
Dim Descuento As Double
Dim SalarioNeto As Double
HorasTrabajadas = Val(TxtHorasTrabajadas)
PagoPorHora = Val(TxtPagoPorHora)
SalarioBruto = HorasTrabajadas * PagoPorHora
Descuento = 0.2 * SalarioBruto
SalarioNeto = SalarioBruto - Descuento
TxtSalarioBruto = Str(SalarioBruto)
TxtDescuento = Str(Descuento)
TxtSalarioNeto = Str(SalarioNeto)
End Sub
A continuación haga doble click sobre el botón Salir y
añada el siguiente código:
Private Sub CmdSalir_Click()
End
End Sub
Guarde y luego ejecute la aplicación que acaba de crear.
Pruebe ingresando diferentes valores.
Pág. 228
Luego, haga doble click sobre el botón Limpiar y añada el
siguiente código:
Private Sub CmdLimpiar_Click()
TxtApellidosNombres = “”
TxtHorasTrabajadas = “”
TxtPagoPorHora = “”
TxtSalarioBruto = “”
TxtDescuento = “”
TxtSalarioNeto = “”
TxtApellidosNombres.SetFocus
End Sub
Guarde y ejecute su aplicación. ¿Cómo afecta el código
añadido en el botón Limpiar a la aplicación?. Anote sus
observaciones.
Aplicación Nº 2
El menú de un restaurante rápido se muestra a
continuación:
MENÚ PRECIO (S/.)
Hamburguesa 2.50
Cerveza 4.00
Gaseosa 3.00
Ensalada 1.50
Salchichas 2.00
Refresco 1.00
Sopa 1.50
Postre 1.50
Se desea construir una
aplicación que calcule las
ventas totales al final del
día, así como los impuestos
a pagar (18 por 100).
La interfaz de entrada
y salida deberá ser similar
a la figura mostrada a
continuación:
Pág. 229
Para el diseño del cuadro de menú utilizaremos el control
Microsoft Hierarchical FlexGrid. Para tal fin, seleccione el
Menú Proyecto y elija la opción Componentes:
Pág. 230
A continuación active la casilla de verificación Microsoft
Hierarchical FlexGrid Control 6.0 OLEDB y haga click sobre el
botón Aceptar. En seguida este control se añadirá al Cuadro de
Herramientas.
Para el desarrollo de esta aplicación, proceda a ubicar
los siguientes controles en el formulario:
10 etiquetas
10 cajas de texto
1 control MSHFlexGrid
3 botones de comando
En seguida, elabore el diseño de entrada y salida. Para
ello proceda a establecer las propiedades según se indica a
continuación:
Form1
Nombre FrmRestaurante
BorderStyle 3-Fixed Dialog
Caption Restaurante
Moveable False
StartUpPosition 2-CenterScreen
Label1
Nombre LblHamburguesa
AutoSize True
Caption Hamburguesa:
Label2
Nombre LblCerveza
AutoSize True
Caption Cerveza:
Pág. 231
Label3
Nombre LblGaseosa
AutoSize True
Caption Gaseosa:
Label4
Nombre LblEnsalada
AutoSize True
Caption Ensalada:
Label5
Nombre LblSalchichas
AutoSize True
Caption Salchichas:
Label6
Nombre LblRefresco
AutoSize True
Caption Refresco:
Label7
Nombre LblSopa
AutoSize True
Caption Sopa:
Label8
Nombre LblPostre
AutoSize True
Caption Postre:
Label9
Nombre LblVentaTotal
Caption Venta total S/.
Pág. 232
Label10
Nombre LblImpuesto
Caption Impuesto S/.
MSHFlexGrid1
Nombre GrdMenu
Font Arial (Negrita 10)
FontFixed Arial (Negrita 10)
Text1
Nombre TxtHamburguesa
Text
Text2
Nombre TxtCerveza
Text
Text3
Nombre TxtGaseosa
Text
Text4
Nombre TxtEnsalada
Text
Text5
Nombre TxtSalchichas
Text
Text6
Nombre TxtRefresco
Text
Pág. 233
Text7
Nombre TxtSopa
Text
Text8
Nombre TxtPostre
Text
Text9
Nombre TxtVentaTotal
Locked True
Text
Text10
Nombre TxtImpuesto
Locked True
Text
Command1
Nombre CmdAceptar
Caption &Aceptar
Command2
Nombre CmdLimpiar
Caption &Limpiar
Command3
Nombre CmdSalir
Caption &Salir
Picture C:\Archivos de programa\Microsoft Visual
Studio\Common\Graphics\Icons\Arrows\Point04.ico
Style 1-Graphical
Pág. 234
En primer lugar debemos cargar los datos a la cuadrícula.
Esto lo vamos a realizar en tiempo de ejecución al momento de
cargarse en memoria el formulario. Para ello, haga doble click
sobre el formulario y añada el siguiente código:
Private Sub Form_Load()
GrdMenu.Cols = 2
GrdMenu.Rows = 9
GrdMenu.FixedCols = 0
GrdMenu.FixedRows = 1
GrdMenu.TextArray(0) = “Menú”
GrdMenu.TextArray(1) = “Precio”
GrdMenu.TextArray(2) = “Hamburguesa”
GrdMenu.TextArray(3) = “2.50”
GrdMenu.TextArray(4) = “Cerveza”
GrdMenu.TextArray(5) = “4.00”
GrdMenu.TextArray(6) = “Gaseosa”
GrdMenu.TextArray(7) = “3.00”
GrdMenu.TextArray(8) = “Ensalada”
GrdMenu.TextArray(9) = “1.50”
GrdMenu.TextArray(10) = “Salchichas”
GrdMenu.TextArray(11) = “2.00”
GrdMenu.TextArray(12) = “Refresco”
GrdMenu.TextArray(13) = “1.00”
GrdMenu.TextArray(14) = “Sopa”
GrdMenu.TextArray(15) = “1.50”
GrdMenu.TextArray(16) = “Postre”
GrdMenu.TextArray(17) = “1.50”
End Sub
Luego debemos añadir el código que se encargará de
realizar los cálculos. Para tal fin haga doble click sobre el
botón Aceptar y proceda a ingresar lo siguiente:
Pág. 235
Private Sub CmdAceptar_Click()
Dim Hamburguesa As Integer, Cerveza As Integer
Dim Gaseosa As Integer, Ensalada As Integer
Dim Salchichas As Integer, Refresco As Integer
Dim Sopa As Integer, Postre As Integer
Dim VentaTotal As Double, Impuesto As Double
Hamburguesa = Val(TxtHamburguesa)
Cerveza = Val(TxtCerveza)
Gaseosa = Val(TxtGaseosa)
Ensalada = Val(TxtEnsalada)
Salchichas = Val(TxtSalchichas)
Refresco = Val(TxtRefresco)
Sopa = Val(TxtSopa)
Postre = Val(TxtPostre)
VentaTotal = Hamburguesa * 2.5 + Cerveza * 4.0 _
+ Gaseosa * 3.0 + Ensalada * 1.5 + Salchichas * 2.0 _
+ Refresco * 1.0 + Sopa * 1.5 + Postre * 1.5
Impuesto = 0.18 * VentaTotal
TxtVentaTotal = Str(VentaTotal)
TxtImpuesto = Str(Impuesto)
End Sub
Luego, haga doble click sobre el botón Limpiar y añada el
siguiente código:
Private Sub CmdLimpiar_Click()
TxtHamburguesa = “” : TxtCerveza = “”
TxtGaseosa = “” : TxtEnsalada = “”
TxtSalchichas = “” : TxtRefresco = “”
TxtSopa = “” : TxtPostre = “”
TxtVentaTotal = “” : TxtImpuesto = “”
TxtHamburguesa.SetFocus
End Sub
Pág. 236
A continuación haga doble click sobre el botón Salir y
añada el siguiente código:
Private Sub CmdSalir_Click()
End
End Sub
Aplicación Nº 3
Elaborar una aplicación que permita calcular la edad de
una persona a partir de su fecha de nacimiento. El diseño de la
interfaz debe ser similar a la figura mostrada:
Para el desarrollo de esta aplicación, proceda a ubicar
los siguientes controles en el formulario:
2 etiquetas
2 cajas de texto
3 botones de comando
Luego, proceda a establecer las propiedades según se
indica a continuación:
Form1
Nombre FrmEdad
BorderStyle 3-Fixed Dialog
Caption Calcula la edad de una persona
Pág. 237
Label1
Nombre LblFecNac
AutoSize True
Caption Fecha de nacimiento:
Label2
Nombre LblEdad
AutoSize True
Caption Su edad es:
Text1
Nombre TxtFecNac
Text
Text2
Nombre TxtEdad
Locked True
Text
Command1
Nombre CmdAceptar
Caption &Aceptar
Default True
Command2
Nombre CmdLimpiar
Caption &Limpiar
Command3
Nombre CmdSalir
Cancel True
Caption &Salir
Pág. 238
En seguida proceda a ingresar el siguiente código:
Private Sub CmdAceptar_Click()
Dim FecNac As Date, Edad As Integer
FecNac = CDate(TxtFecNac)
Edad = CInt((Date - FecNac) / 365)
TxtEdad = Str(Edad) & “ años”
End Sub
Se deja como ejercicio para el estudiante el código
asociado con los botones Limpiar y Salir, respectivamente.
Aplicación Nº 4
Se tiene un cajero automático el cual permite manipular
cierta cantidad de dinero para lo cual dispone de los
siguientes billetes: S/. 10.00, S/. 20.00, S/. 50.00,
S/. 100.00 y S/. 200.00. Elaborar una aplicación que permita la
lectura de la cantidad a retirar e indique el menor número de
billetes a utilizar.
Creo que a estas alturas Ud. ya entendió como funciona
esto. Por ello, esta aplicación se deja como ejercicio para el
estudiante.
Pág. 239
Microsoft Visual Basic
GUÍA DE LABORATORIO Nº 2
Objetivos
Luego de completar este laboratorio, el estudiante será
capaz de:
• Implementar aplicaciones utilizando estructuras de control
selectivas.
• Usar casillas de verificación y botones de opción para
alternar entre uno o más valores.
• Utilizar cajas de diálogo predefinidas para visualizar
mensajes.
Consideraciones
Para el desarrollo del presente laboratorio Ud. deberá
crear una carpeta C:\FundVB\Lab2, para guardar sus trabajos
correspondientes a este laboratorio.
Aplicación Nº 1
Se desea elaborar la boleta de pago de los trabajadores de
una fábrica. Para ello se cuenta con los siguientes datos de
entrada:
Apellidos y nombres del trabajador
Sueldo básico
Horas extras trabajadas
Además, se sabe que los trabajadores laboran en dos
turnos: diurno y nocturno. Y que la tarifa por las horas extras
diurnas es de 10 soles y por las horas extras nocturnas es de
15 soles.
Pág. 240
Los descuentos a aplicar son sobre el sueldo básico y se
obtienen de la siguiente manera:
Renta = SueldoBasico * 0.1
Fonavi = SueldoBasico * 0.07
AFP = SueldoBasico * 0.03
Finalmente el sueldo neto del trabajador se calcula
mediante las siguientes expresiones:
Ingresos = SueldoBasico + HorasExtras * PagoHoraExtra
Egresos = Renta + Fonavi + AFP
SueldoNeto = Ingresos - Egresos
El diseño de la interfaz deberá ser similar a la figura
mostrada:
Pág. 241
Para el desarrollo de esta aplicación, proceda a ubicar
los siguientes controles en el formulario:
2 marcos
5 etiquetas
8 cajas de texto
2 botones de opción
3 casillas de verificación
3 botones de comando
Luego, proceda a establecer las propiedades según se
indica a continuación:
Form1
Nombre FrmBoletaDePago
BorderStyle 3-Fixed Dialog
Caption Boleta de pago
Moveable False
Label1
Nombre LblTrabajador
AutoSize True
Caption Trabajador:
Label2
Nombre LblSueldoBasico
AutoSize True
Caption Sueldo Bruto S/.
Label3
Nombre LblHorasExtras
AutoSize True
Caption Horas extras:
Pág. 242
Label4
Nombre LblPagoHoraExtra
AutoSize True
Caption Pago hora extra S/.
Label5
Nombre LblSueldoNeto
AutoSize True
Caption Sueldo neto S/.
Text1
Nombre TxtTrabajador
Text
Text2
Nombre TxtSueldoBasico
Text
Text3
Nombre TxtHorasExtras
Text
Text4
Nombre TxtPagoHoraExtra
BackColor &H80000004&
Text
Text5
Nombre TxtRenta
BackColor &H80000004&
Locked True
Text
Pág. 243
Text6
Nombre TxtFonavi
BackColor &H80000004&
Locked True
Text
Text7
Nombre TxtAFP
BackColor &H80000004&
Locked True
Text
Text8
Nombre TxtSueldoNeto
BackColor &H80000004&
Locked True
Text
Option1
Nombre OptDiurno
Caption Diurno
Value True
Option2
Nombre OptNocturno
Caption Nocturno
Value False
Check1
Nombre ChkRenta
Caption Renta
Check2
Pág. 244
Nombre ChkFonavi
Caption Fonavi
Check3
Nombre ChkAFP
Caption AFP
Command1
Nombre CmdAceptar
Caption &Aceptar
Default True
Command2
Nombre CmdLimpiar
Caption &Limpiar
Command3
Nombre CmdSalir
Cancel True
Caption &Salir
Una vez establecidas las propiedades, proceda a ingresar
el código que se indica a continuación:
Private Sub CmdAceptar_Click()
Dim SueldoBasico As Double
Dim HorasExtras As Integer, PagoHoraExtra As Double
Dim Renta As Double, Fonavi As Double, AFP As Double
Dim Ingresos As Double, Egresos As Double
Dim SueldoNeto As Double
SueldoBasico = Val(TxtSueldoBasico)
HorasExtras = Val(TxtHorasExtras)
If OptDiurno Then
Pág. 245
PagoHoraExtra = 10
End If
If OptNocturno Then
PagoHoraExtra = 15
End If
If ChkRenta.Value Then
Renta = SueldoBasico * 0.1
Else
Renta = 0
End If
If ChkFonavi.Value Then
Fonavi = SueldoBasico * 0.07
Else
Fonavi = 0
End If
If ChkAFP.Value Then
AFP = SueldoBasico * 0.03
Else
AFP = 0
End If
Ingresos = SueldoBasico + HorasExtras * PagoHoraExtra
Egresos = Renta + Fonavi + AFP
SueldoNeto = Ingresos - Egresos
TxtPagoHoraExtra = Str(PagoHoraExtra)
TxtRenta = Str(Renta)
TxtFonavi = Str(Fonavi) : TxtAFP = Str(AFP)
TxtSueldoNeto = Str(SueldoNeto)
End Sub
Private Sub CmdSalir_Click()
End
End Sub
Aplicación Nº 2
Pág. 246
Cuatro notas entre 0 y 20 representan las calificaciones
de un estudiante de un curso de programación. Elaborar una
aplicación para obtener el promedio de esas calificaciones y
visualizar su puntuación de acuerdo al siguiente cuadro:
Promedio Puntuación
19-20 A
16-18 B
11-15 C
6-10 D
0-5 E
El diseño de la interfaz deberá ser similar a la figura
mostrada:
Para el desarrollo de esta aplicación, proceda a ubicar
los siguientes controles en el formulario:
7 etiquetas
7 cajas de texto
3 botones de comando
Pág. 247
Luego, proceda a establecer las propiedades según se
indica a continuación:
Form1
Nombre FrmNotas
BorderStyle 3-Fixed Dialog
Caption Puntuación de un estudiante
Label1
Nombre LblAlumno
AutoSize True
Caption Alumno:
Label2
Nombre LblN1
AutoSize True
Caption Nota 1:
Label3
Nombre LblN2
AutoSize True
Caption Nota 2:
Label4
Nombre LblN3
AutoSize True
Caption Nota 3:
Label5
Nombre LblN4
AutoSize True
Caption Nota 4:
Pág. 248
Label6
Nombre LblPromedio
AutoSize True
Caption Promedio:
Label7
Nombre LblPuntuacion
AutoSize True
Caption Puntuación:
Text1
Nombre TxtAlumno
Text
Text2
Nombre TxtN1
Text
Text3
Nombre TxtN2
Text
Text4
Nombre TxtN3
Text
Text5
Nombre TxtN4
Text
Pág. 249
Text6
Nombre TxtPromedio
BackColor &H80000004&
Locked True
Text
Text7
Nombre TxtPuntuacion
BackColor &H80000004&
Locked True
Text
Command1
Nombre CmdAceptar
Caption &Aceptar
Default True
Command2
Nombre CmdLimpiar
Caption &Limpiar
Command3
Nombre CmdSalir
Cancel True
Caption &Salir
Una vez establecidas las propiedades, proceda a ingresar
el código que se indica:
Private Sub CmdAceptar_Click()
Dim N1 As Double, N2 As Double, N3 As Double, N4 As Double
Dim Promedio As Integer
Pág. 250
N1 = Val(TxtN1) : N2 = Val(TxtN2)
N3 = Val(TxtN3) : N4 = Val(TxtN4)
Promedio = CInt((N1 + N2 + N3 + N4) / 4)
TxtPromedio = Str(Promedio)
If Promedio >= 19 And Promedio <= 20 Then
TxtPuntuacion = “A”
ElseIf Promedio >= 16 And Promedio <= 18 Then
TxtPuntuacion = “B”
ElseIf Promedio >= 11 And Promedio <= 15 Then
TxtPuntuacion = “C”
ElseIf Promedio >= 6 And Promedio <= 10 Then
TxtPuntuacion = “D”
ElseIf Promedio >= 0 And Promedio <= 5 Then
TxtPuntuacion = “B”
Else: MsgBox “Error de datos”, vbCritical, “Mensaje”
End If
End Sub
Aplicación Nº 3
Escribir un aplicación que acepte fechas como tres números
(dd, mm, aaaa) y las visualice del modo usual. A manera de
ejemplo considere lo siguiente:
Pág. 251
En caso de que el usuario ingrese algún dato incorrecto
(por ejemplo 13 como un número de mes), se debe visualizar el
siguiente mensaje:
Cuando el usuario haga click en el botón Salir, se debe
observar el siguiente mensaje:
En caso de que el usuario elija la opción Si, la
aplicación debe terminar. En caso contrario, es decir si el
usuario elige la opción No, se debe proseguir con la
aplicación.
Para el desarrollo de esta aplicación, proceda a ubicar
los siguientes controles en el formulario:
4 etiquetas
3 cajas de texto
1 marco
3 botones de comando
En seguida proceda a establecer las propiedades según se
indica:
Pág. 252
Form1
Nombre FrmFecha
BorderStyle 3-Fixed Dialog
Caption Fecha en letras
Label1
Nombre LblDia
AutoSize True
Caption Día:
Label2
Nombre LblMes
AutoSize True
Caption Mes:
Label3
Nombre LblAnno
AutoSize True
Caption Año:
Label4
Nombre LblFecha
AutoSize True
Caption
Text1
Nombre TxtDia
Text
Text2
Nombre TxtMes
Text
Pág. 253
Text3
Nombre TxtAnno
Text
Command1
Nombre CmdAceptar
Caption &Aceptar
Default True
Command2
Nombre CmdLimpiar
Caption &Limpiar
Command3
Nombre CmdSalir
Caption &Salir
Una vez establecidas las propiedades de la interfaz
proceda a ingresar el siguiente código:
Private Sub CmdAceptar_Click()
Dim CadMes As String, Mes As Integer
Mes = Val(TxtMes)
Select Case Mes
Case 1: CadMes = “Enero”
Case 2: CadMes = “Febrero”
Case 3: CadMes = “Marzo”
Case 4: CadMes = “Abril”
Case 5: CadMes = “Mayo”
Case 6: CadMes = “Junio”
Case 7: CadMes = “Julio”
Case 8: CadMes = “Agosto”
Case 9: CadMes = “Setiembre”
Pág. 254
Case 10: CadMes = “Octubre”
Case 11: CadMes = “Noviembre”
Case 12: CadMes = “Diciembre”
Case Else
MsgBox “Error de datos...”, vbCritical, “Mensaje”
Call CmdLimpiar_Click
Exit Sub
End Select
LblFecha = TxtDia & “ de ” & CadMes & “ de ” & TxtAnno
End Sub
Private Sub CmdLimpiar_Click()
TxtDia = “” : TxtMes = “” : TxtAnno = “”
TxtDia.SetFocus
End Sub
Private Sub CmdSalir_Click()
If MsgBox(“¿Desea terminar la aplicación?”, _
vbQuestion + vbYesNo, “Pregunta”) = vbYes Then
End
Else: Call CmdLimpiar_Click
End If
End Sub
Aplicación Nº 4
Un restaurante ofrece un descuento del 10% para consumos
entre S/. 30.00 y S/. 50.00; un descuento del 20% para
consumos mayores a S/. 50.00 nuevos soles; para todos los demás
casos no se aplica ningún tipo de descuento. Elaborar una
aplicación que permita determinar el importe a pagar por el
consumidor. El diseño de la interfaz y otras consideraciones se
dejan a su criterio.
Pág. 255
Microsoft Visual Basic
GUÍA DE LABORATORIO Nº 3
Objetivos
Luego de completar este laboratorio, el estudiante será
capaz de:
• Implementar aplicaciones utilizando estructuras de control
repetitivas.
• Cambiar las propiedades de los controles en tiempo de
ejecución.
Consideraciones
Para el desarrollo del presente laboratorio Ud. deberá
crear una carpeta C:\FundVB\Lab3, para guardar sus trabajos
correspondientes a este laboratorio.
Aplicación Nº 1
Escribir una aplicación que lea un número entero y muestre
la tabla de multiplicar de dicho número. El diseño de entrada y
salida debe ser similar al siguiente:
Pág. 256
Para el desarrollo de esta aplicación, proceda a ubicar
los siguientes controles en el formulario:
1 etiqueta
2 cajas de texto
1 botón de comando
En seguida proceda a establecer las propiedades según se
indica:
Form1
Nombre FrmTabla
BorderStyle 3-Fixed Dialog
Caption Tabla de multiplicar
Label1
Nombre LblNumero
Caption Ingrese un número:
Text1
Nombre TxtNumero
Text
Text2
Nombre TxtTabla
MultiLine True
Locked True
ScrollBars 2-Vertical
Text
Command1
Nombre CmdLimpiar
Caption &Limpiar
Pág. 257
Una vez diseñada la interfaz, proceda a ingresar el código
que se indica a continuación:
Private Sub TxtNumero_Change()
If IsNumeric(TxtNumero) Then
Dim N As Integer, P As Integer, I As Integer
Dim S As String
N = Val(TxtNumero)
S = “”
For I = 0 To 12
P = N * I
S = S & N & “ * ” & I & “ = ” & P & vbCrLf
Next I
TxtTabla = S
ElseIf TxtNumero = “” Then
Exit Sub
Else: MsgBox “Ingrese un número”, vbCritical, “Mensaje”
TxtTabla = “”
End If
End Sub
Private Sub CmdLimpiar_Click()
TxtNumero = “” : TxtTabla = “”
TxtNumero.SetFocus
End Sub
Aplicación Nº 2
Un número perfecto es un entero positivo, que es igual a
la suma de todos los enteros positivos (excluido el mismo) que
son divisores del número. El primer número perfecto es 6, ya
que los divisores de 6 son 1, 2, 3 y 1 + 2 + 3 = 6. Escribir
una aplicación que encuentre los tres primeros números
perfectos.
Pág. 258
El diseño de la interfaz debe ser similar a la figura
mostrada:
Para el desarrollo de esta aplicación, proceda a ubicar
los siguientes controles en el formulario:
1 marco
1 caja de texto
En seguida proceda a establecer las propiedades según se
indica:
Form1
Nombre FrmNumeroPerfecto
BorderStyle 3-Fixed Dialog
Caption Los 3 primeros números perfectos
Frame1
Nombre FraPerfecto
Caption Número perfecto
Text1
Nombre TxtPerfecto
MultiLine True
Text
Pág. 259
Una vez establecidas las propiedades proceda a ingresar el
código que se indica a continuación:
Private Sub Form_Load()
Dim N As Long, I As Long, S As Long
Dim K As Integer, Cad As String
N = 1 : K = 0 : Cad = “”
While True
S = 0
For I = 1 To (N - 1)
If N Mod I = 0 Then S = S + I
Next I
If N = S Then
Cad = Cad & N & vbCrLf
K = K + 1
End If
If K = 3 Then
TxtPerfecto = Cad
Exit Sub
End If
N = N + 1
Wend
End Sub
Aplicación Nº 3
Construya una aplicación que permita el ingreso de un
número entero y muestre en pantalla la siguiente información:
1) Cantidad de cifras, 2) Suma de cifras impares, 3) Suma de
cifras pares, 4) Suma total de cifras, 5) Cifra mayor, 6) Cifra
menor y 7) Divisores de dicho número.
El diseño de la interfaz debe ser similar a la figura
siguiente:
Pág. 260
Para el desarrollo de esta aplicación, proceda a ubicar
los siguientes controles en el formulario:
4 marcos
7 etiquetas
8 cajas de texto
1 botón de comando
En seguida proceda a establecer las propiedades según se
indica:
Form1
Nombre FrmNumeroPerfecto
BorderStyle 3-Fixed Dialog
Caption Los 3 primeros números perfectos
Moveable False
StartUpPosition 2-CenterScreen
Pág. 261
Frame1
Nombre FraEntrada
Caption
Frame2
Nombre FraSalida
Caption
Frame3
Nombre FraDivisores
Caption Divisores
Frame4
Nombre FraSalir
Caption
Label1
Nombre LblNumero
AutoSize True
Caption Ingrese un número:
Label2
Nombre LblCantCifras
AutoSize True
Caption Cantidad de cifras:
Label3
Nombre LblSumImpares
AutoSize True
Caption Suma de cifras impares:
Pág. 262
Label4
Nombre LblSumPares
AutoSize True
Caption Suma de cifras pares:
Label5
Nombre LblSumTotal
AutoSize True
Caption Suma total de cifras:
Label6
Nombre LblCifraMayor
AutoSize True
Caption Cifra mayor:
Label7
Nombre LblCifraMenor
AutoSize True
Caption Cifra menor:
Text1
Nombre TxtNumero
Text
Text2
Nombre TxtCantCifras
Locked True
Text
Text3
Nombre TxtSumImpares
Locked True
Text
Text4
Pág. 263
Nombre TxtSumPares
Locked True
Text
Text5
Nombre TxtSumTotal
Locked True
Text
Text6
Nombre TxtCifraMayor
Locked True
Text
Text7
Nombre TxtCifraMenor
Locked True
Text
Text8
Nombre TxtDivisores
MultiLine True
Locked True
ScrollBars 2-Vertical
Text
Command3
Nombre CmdSalir
Caption &Salir
Picture C:\FundVB\Bitmaps\Exit.bmp
Style 1-Graphical
Pág. 264
Una vez establecidas las propiedades proceda ha ingresar
el código que se indica a continuación:
Private Sub CmdAceptar_Click()
If IsNumeric(TxtNumero) Then
Dim S As Integer, SI As Integer, SP As Integer
Dim May As Integer, Min As Integer
Dim Cad As String
Dim I As Integer, J As Integer
N = CLng(TxtNumero)
M = CLng(TxtNumero)
Cad = “”
I = 0
J = 1
S = SP = SI = 0
For J = 1 To N
If (N Mod J = 0) Then
Cad = Cad & J & vbCrLf
End If
Next J
While (N > 0)
If ((N Mod 10) Mod 2) = 0 Then
SP = SP + (N Mod 10)
Else
SI = SI + (N Mod 10)
End If
S = S + (N Mod 10)
N = N \ 10
I = I + 1
Wend
May = Mid(TxtNumero, 1, 1)
Men = May
While (M > 0)
Pág. 265
If May < (M Mod 10) Then
May = M Mod 10
End If
If Men > (M Mod 10) Then
Men = M Mod 10
End If
M = M \ 10
Wend
TxtCantCifras = Str(I)
TxtSumImpares = Str(SI)
TxtSumPares = Str(SP)
TxtSumTotal = Str(S)
TxtCifraMayor = Str(May)
TxtCifraMenor = Str(Men)
TxtDivisores = Cad
Else
MsgBox “Debe ingresar un número”, vbCritical, “Mensaje”
TxtNumero.SetFocus
End If
End Sub
Private Sub CmdSalir_Click()
If MsgBox(“¿Desea terminar la aplicación?”, _
vbQuestion + vbYesNo, "Pregunta") = vbYes Then
End
Else
Cancel = True
TxtNumero.SetFocus
End If
End Sub
Aplicación Nº 4
Pág. 266
Un centro numérico es un número que separa una lista de
números enteros (comenzando en 1) en dos grupos de números,
cuyas sumas son iguales. El primer centro numérico es el 6, el
cual separa la lista (1 a 8) en los grupos: (1; 2; 3; 4; 5) y
(7; 8) cuyas sumas son ambas iguales a 15. El segundo centro
numérico es el 35, el cual separa la lista (1 a 49) en los
grupos: (1 a 34) y (36 a 49) cuyas sumas son ambas iguales a
595. Se pide elaborar una aplicación que calcule los centros
numéricos entre 1 y N.
El diseño de la interfaz y otras consideraciones se dejan
a su criterio.
Pág. 267
Microsoft Visual Basic
GUÍA DE LABORATORIO Nº 4
Objetivos
Luego de completar este laboratorio, el estudiante será
capaz de:
• Manipular y realizar operaciones con arreglos.
• Crear una estructura y realizar operaciones con los campos de
la misma.
• Implementar arreglos de estructuras.
• Trabajar con listas desplegables y cuadros combinados.
Consideraciones
Para el desarrollo del presente laboratorio Ud. deberá
crear una carpeta C:\FundVB\Lab4 para guardar sus trabajos
correspondientes a este laboratorio.
Aplicación Nº 1
Elabore una aplicación que permita leer N números de tipo
entero, y a continuación los visualice ordenados en forma
ascendente o descendente.
Pág. 268
Para el desarrollo de esta aplicación, proceda a ubicar
los siguientes controles en el formulario:
3 marcos
1 caja de texto
1 control lista
2 botones de opción
3 botones de comando
En seguida proceda a establecer las propiedades según se
indica:
Form1
Nombre FrmBurbuja
BorderStyle 3-Fixed Dialog
Caption Ordenación por burbuja
Moveable False
Frame1
Nombre FraNumero
Caption Ingrese un nuevo número:
Frame2
Nombre FraLista
Caption Lista de números:
Frame3
Nombre FraOrden
Caption Orden:
Text1
Nombre TxtNumero
Text
Pág. 269
List1
Nombre LstNumero
List
Option1
Nombre OptAscendente
Caption Ascendente
Value True
Option2
Nombre OptDescendente
Caption Descendente
Value False
Command1
Nombre CmdAnnadir
Caption &Añadir
Default True
Command2
Nombre CmdOrdenar
Caption &Ordenar
Command3
Nombre CmdSalir
Caption &Salir
Picture C:\Archivos de programa\Microsoft Visual
Studio\Common\Graphics\Icons\Arrows\
Point04.ico
Style 1-Graphical
Una vez establecidas las propiedades proceda a ingresar el
código que se indica a continuación:
Pág. 270
Private Sub CmdAceptar_Click()
If IsNumeric(TxtNumero.Text) Then
LstNumero.AddItem TxtNumero.Text
TxtNumero.Text = “”
TxtNumero.SetFocus
Else
MsgBox “Ingrese un número”, vbCritical, “Mensaje”
TxtNumero.SelStart = 0
TxtNumero.SelLength = Len(TxtNumero.Text)
TxtNumero.SetFocus
End If
End Sub
Private Sub CmdOrdenar_Click()
Dim I As Integer, J As Integer, T As Integer, N As Integer
Dim A() As Integer
N = LstNumero.ListCount
ReDim A(N)
For I = 0 To N - 1
A(I) = LstNumero.List(I)
Next I
If OptAscendente.Value Then
For I = 0 To N - 2
For J = I + 1 To N - 1
If A(I) > A(J) Then
T = A(I)
A(I) = A(J)
A(J) = T
End If
Next J
Next I
End If
Pág. 271
If OptDescendente.Value Then
For I = 0 To N - 2
For J = I + 1 To N - 1
If A(I) < A(J) Then
T = A(I)
A(I) = A(J)
A(J) = T
End If
Next J
Next I
End If
LstNumero.Clear
For I = 0 To N - 1
LstNumero.List(I) = A(I)
Next I
End Sub
Private Sub Form_Unload(Cancel As Integer)
If MsgBox(“Desea terminar la aplicación?”, _
vbQuestion + vbYesNo, “Pregunta”) = vbYes Then
End
Else: Cancel = True : TxtNumero.SetFocus
End If
End Sub
Private Sub CmdSalir_Click()
Unload Me
End Sub
Aplicación Nº 2
Pág. 272
Elaborar una aplicación que permita seleccionar un
artículo de un cuadro combinado (Combo). Apenas el usuario
seleccione un artículo se debe mostrar el precio del mismo, el
interés es fijo para esta ocasión.
El diseño de la interfaz debe ser similar a la siguiente
figura:
La venta ha realizarse es a plazos, ello condiciona la
cuota mensual a pagarse. Cuando se haga click sobre el botón
Cuota mensual debe mostrarse un cuadro de diálogo con los datos
propuestos:
De manera similar al hacer click sobre el botón Total nos
debe mostrar la cantidad total a pagar.
Pág. 273
Para el desarrollo de esta aplicación, proceda a ubicar
los siguientes controles en el formulario:
1 marco
3 etiquetas
1 cuadro combinado
2 cajas de texto
3 botones de opción
2 botones de comando
En seguida proceda a establecer las propiedades según se
indica:
Form1
Nombre FrmCotizacion
BorderStyle 3-Fixed Dialog
Caption Pedido de cotizaciones
Frame1
Nombre FraPlazo
Caption Plazo:
Label1
Nombre LblArticulo
Caption Artículo:
Label2
Nombre LblPrecio
Caption Precio US$
Label3
Nombre LblInteres
Caption Interés:
Pág. 274
Combo1
Nombre CboArticulo
Text
Text1
Nombre TxtPrecio
Locked True
Text
Text2
Nombre TxtInteres
Locked True
Text
Option1
Nombre OptPlazo
Caption 6 meses
Value True
Option2
Nombre OptPlazo
Caption 12 meses
Value False
Option3
Nombre OptPlazo
Caption 24 meses
Value False
Command1
Nombre CmdCuotaMensual
Caption &Cuota mensual
Pág. 275
Command2
Nombre CmdTotal
Caption &Total
Una vez establecidas las propiedades de la interfaz, haga
doble click sobre el formulario e ingrese las siguientes
declaraciones en la sección General del módulo de formulario:
Private Type Articulo
Nombre As String * 30
Precio As Double
End Type
Dim A(4) As Articulo, Plazo As Integer
Const Interes = 0.12
Recuerde que un dato declarado en la sección General de un
módulo puede ser accedido por todos los procedimientos de dicho
módulo. Luego, continúe ingresando el código que se muestra a
continuación:
Private Sub Form_Load()
A(0).Nombre = “Monitor SAMSUNG SyncMaster 3”
A(1).Nombre = “Impresora Hewlett Packard DeskJet 930C”
A(2).Nombre = “Impresora Epson Stylus Color 740”
A(3).Nombre = “Microprocesador Pentium I 233 MHZ”
A(0).Precio = 150 : A(1).Precio = 275
A(2).Precio = 145 : A(3).Precio = 80
Dim I As Integer
For I = 1 To 4
CboArticulo.AddItem A(I - 1).Nombre
Next I
TxtInteres = Interes : Plazo = 6
End Sub
Pág. 276
Private Sub CboArticulo_Click()
Dim I As Integer
I = CboArticulo.ListIndex
TxtPrecio = A(I).Precio
End Sub
Private Sub OptPlazo_Click(Index As Integer)
Select Case Index
Case 0: Plazo = 6
Case 1: Plazo = 12
Case 2: Plazo = 24
End Select
End Sub
Private Sub CmdCuotaMensual_Click()
Dim Total As Double, CuotaMensual As Double, I As Integer
I = CboArticulo.ListIndex
Total = A(I).Precio * (1 + Interes)
CuotaMensual = Total / Plazo
MsgBox “Cuota Mensual US$” & Str(CuotaMensual)
End Sub
Private Sub CmdTotal_Click()
Dim Total As Double, I As Integer
I = CboArticulo.ListIndex
Total = A(I).Precio * (1 + Interes)
MsgBox “Total US$” & Str(Total)
End Sub
Aplicación Nº 3
Se desea elaborar una aplicación que permita controlar el
proceso de matrícula en un curso de computación. Para ello se
deben recabar los siguientes datos: 1) Curso en que se
Pág. 277
matricula el alumno, 2) Fecha de matrícula, 3) Apellidos y
nombres, 4) Sexo, 5) Dirección, y 6) Distrito de residencia.
Para el desarrollo de esta aplicación proceda a ubicar los
siguientes controles en el formulario:
4 marcos
6 etiquetas
5 cajas de texto
1 cuadro combinado
2 controles de lista
4 botones de comando
En seguida proceda a establecer las propiedades según se
indica:
Pág. 278
Form1
Nombre FrmFichaMatricula
BorderStyle 3-Fixed Dialog
Caption Ficha de matrícula
Frame1
Nombre FraIngreso
Caption Ingreso de datos:
Frame2
Nombre FraOpciones
Caption Opciones:
Frame3
Nombre FraCursos
Caption Cursos:
Frame4
Nombre FraDistritos
Caption Distritos:
Label1
Nombre LblCurso
Caption Curso:
Label2
Nombre LblFechaMat
Caption Fecha de matrícula:
Label3
Nombre LblAlumno
Caption Alumno:
Pág. 279
Label4
Nombre LblSexo
Caption Sexo:
Label5
Nombre LblDirección
Caption Dirección:
Label6
Nombre LblDistrito
Caption Distrito:
Combo1
Nombre CboSexo
Text
List1
Nombre LstCursos
Text
List2
Nombre LstDistrito
Text
Text1
Nombre TxtCurso
Text
Text2
Nombre TxtFechaMat
Text
Pág. 280
Text3
Nombre TxtAlumno
Text
Text4
Nombre TxtDireccion
Text
Text5
Nombre TxtDistrito
Text
Command1
Nombre CmdGuardar
Caption &Guardar
Command2
Nombre CmdCancelar
Caption &Cancelar
Command3
Nombre CmdLimpiar
Caption &Limpiar
Command4
Nombre CmdSalir
Caption &Salir
Picture C:\FundVB\Bitmaps\Exit.bmp
Style 1-Graphical
Una vez establecidas las propiedades de la interfaz,
proceda a ingresar el código que se indica a continuación:
Pág. 281
Private Sub Form_Load()
LstCursos.AddItem “Borland C++ Nivel I”
LstCursos.AddItem “Borland C++ Nivel II”
LstCursos.AddItem “Microsoft Visual Basic Nivel I”
LstCursos.AddItem “Microsoft Visual Basic Nivel II”
LstCursos.AddItem “Microsoft Visual FoxPro Nivel I”
LstCursos.AddItem “Microsoft Visual FoxPro Nivel II”
LstCursos.AddItem “Microsoft Visual C++ Nivel I”
LstCursos.AddItem “Microsoft Visual C++ Nivel II”
LstCursos.AddItem “Microsoft Visual J++ Nivel I”
LstCursos.AddItem “Microsoft Visual J++ Nivel II”
LstCursos.AddItem “Microsoft SQL Server Nivel I”
LstCursos.AddItem “Microsoft SQL Server Nivel II”
LstCursos.AddItem “Microsoft Power Builder Nivel I”
LstCursos.AddItem “Microsoft Power Builder Nivel II”
LstDistrito.AddItem “Callao”
LstDistrito.AddItem “Bellavista”
LstDistrito.AddItem “Carmen de la Legua”
LstDistrito.AddItem “La Perla”
LstDistrito.AddItem “La Punta”
LstDistrito.AddItem “Ventanilla”
LstDistrito.AddItem “Cercado de Lima”
LstDistrito.AddItem “Ancón”
LstDistrito.AddItem “Ate”
LstDistrito.AddItem “Barranco”
LstDistrito.AddItem “Breña”
LstDistrito.AddItem “Carabayllo”
LstDistrito.AddItem “Comas”
LstDistrito.AddItem “Chaclacayo”
LstDistrito.AddItem “Chorrillos”
LstDistrito.AddItem “El Agustino”
LstDistrito.AddItem “Jesús María”
LstDistrito.AddItem “La Molina”
Pág. 282
LstDistrito.AddItem “La Victoria”
LstDistrito.AddItem “Lince”
LstDistrito.AddItem “Lurigancho”
LstDistrito.AddItem “Lurín”
LstDistrito.AddItem “Magdalena del Mar”
LstDistrito.AddItem “Miraflores”
LstDistrito.AddItem “Pachacamac”
LstDistrito.AddItem “Pucusana”
LstDistrito.AddItem “Pueblo Libre”
LstDistrito.AddItem “Puente Piedra”
LstDistrito.AddItem “Punta Negra”
LstDistrito.AddItem “Rimac”
LstDistrito.AddItem “San Bartolo”
LstDistrito.AddItem “San Isidro”
LstDistrito.AddItem “Independencia”
LstDistrito.AddItem “San Juan de Miraflores”
LstDistrito.AddItem “San Luis”
LstDistrito.AddItem “San Martín de Porres”
LstDistrito.AddItem “San Miguel”
LstDistrito.AddItem “Santiago de Surco”
LstDistrito.AddItem “Villa María del Triunfo”
LstDistrito.AddItem “San Juan de Lurigancho”
LstDistrito.AddItem “Santa María del Mar”
LstDistrito.AddItem “Santa Rosa”
LstDistrito.AddItem “Los Olivos”
LstDistrito.AddItem “Cieneguilla”
LstDistrito.AddItem “San Borja”
LstDistrito.AddItem “Villa el Salvador”
LstDistrito.AddItem “Santa Anita”
CboSexo.AddItem “Masculino” : CboSexo.AddItem “Femenino”
End Sub
Private Sub Form_Unload(Cancel As Integer)
If MsgBox(“¿Desea terminar la aplicación?”, _
Pág. 283
vbQuestion + vbYesNo, “Pregunta”) = vbYes Then
End
Else
Cancel = True
Call CmdLimpiar_Click
End If
End Sub
Private Sub LstCursos_Click()
TxtCursos = LstCursos
End Sub
Private Sub LstDistrito_Click()
TxtDistrito = LstDistrito
End Sub
Private Sub CmdGuardar_Click()
LstCursos.Enabled = False
LstDistrito.Enabled = False
TxtCursos.Locked = True
TxtFechaMat.Locked = True
TxtAlumno.Locked = True
CboSexo.Locked = True
TxtDireccion.Locked = True
TxtDistrito.Locked = True
MsgBox “Alumno matriculado”, vbInformation, “Mensaje”
End Sub
Private Sub CmdLimpiar_Click()
LstCursos.Enabled = True
LstDistrito.Enabled = True
TxtCursos.Locked = False
TxtFechaMat.Locked = False
TxtAlumno.Locked = False
Pág. 284
CboSexo.Locked = False
TxtDireccion.Locked = False
TxtDistrito.Locked = False
TxtCursos = “”
TxtFechaMat = “”
TxtAlumno = “”
CboSexo = “”
TxtDireccion = “”
TxtDistrito = “”
TxtCursos.SetFocus
End Sub
Private Sub CmdCancelar_Click()
If MsgBox(“¿Desea modificar algún dato?”, _
vbQuestion + vbYesNo, “Mensaje”) = vbYes Then
LstCursos.Enabled = True
LstDistrito.Enabled = True
TxtCursos.Locked = False
TxtFechaMat.Locked = False
TxtAlumno.Locked = False
CboSexo.Locked = False
TxtDireccion.Locked = False
TxtDistrito.Locked = False
End If
End Sub
Private Sub CmdSalir_Click()
Unload Me
End Sub
Aplicación Nº 4
Pág. 285
Desarrollar una aplicación que permita realizar consultas
acerca de un determinado curso, los cuales se mostraran en una
lista. El usuario debe seleccionar un curso y en seguida se
debe presentar el nombre del profesor encargado del curso
(teoría), el nombre del jefe de práctica (laboratorio), así
como los horarios de teoría y de laboratorio. El diseño de la
interfaz deberá ser similar al siguiente:
Pág. 286
Microsoft Visual Basic
GUÍA DE LABORATORIO Nº 5
Objetivos
Luego de completar este laboratorio, el estudiante será
capaz de:
• Crear procedimientos y funciones definidos por el usuario.
• Añadir formularios creados anteriormente a un proyecto.
• Cambiar el formulario de arranque de un proyecto.
• Utilizar formularios MDI.
• Manejar diferentes métodos y propiedades de los formularios.
• Crear y utilizar menús en una aplicación.
Consideraciones
Para el desarrollo del presente laboratorio Ud. deberá
crear una carpeta C:\FundVB\Lab5, para guardar sus trabajos
correspondientes a este laboratorio.
Aplicación Nº 1
Escriba una función que reciba como argumento una cadena
de caracteres y la devuelva en forma inversa, por ejemplo si se
ingresa la cadena CORAZON deberá retornar NOZAROC.
Pág. 287
Para el desarrollo de esta aplicación, proceda a ubicar
los siguientes controles en el formulario:
2 etiquetas
2 cajas de texto
3 botones de comando
En seguida proceda a establecer las propiedades según se
indica:
Form1
Nombre FrmCadInvertida
Caption Cadena invertida
BorderStyle 3-Fixed Dialog
Label1
Nombre LblCadena
Autosize True
Caption Ingresa una cadena:
Label2
Nombre LblInvertida
Autosize True
Caption Cadena invertida:
Text1
Nombre TxtCadena
Text
Text2
Nombre TxtInvertida
Locked True
Text
Pág. 288
Command1
Nombre CmdAceptar
Caption &Aceptar
Command2
Nombre CmdLimpiar
Caption &Limpiar
Command3
Nombre CmdSalir
Caption &Salir
Una vez establecidas las propiedades de la interfaz,
proceda a ingresar el siguiente código:
Function CadInvertida(Cadena As String) As String
Dim Invertida() As String * 1
Dim I As Integer
Dim J As Integer
N = Len(Cadena)
ReDim Invertida(N)
For I = 1 To N
Invertida(I - 1) = Mid(Cadena, I, 1)
Next I
For J = (N - 1) To 0 Step -1
CadInvertida = CadInvertida & Invertida(J)
Next J
End Function
Private Sub CmdInvertir_Click()
TxtInvertida = CadInvertida(TxtCadena)
End Sub
Pág. 289
Private Sub CmdLimpiar_Click()
TxtCadena = “”
TxtInvertida = “”
TxtCadena.SetFocus
End Sub
Private Sub CmdSalir_Click()
End
End Sub
Aplicación Nº 2
Se desea elaborar una aplicación que permita controlar el
proceso de matrícula en un curso de computación. Para ello se
deben recabar los siguientes datos: 1) Curso en que se
matricula el alumno, 2) Fecha de matrícula, 3) Apellidos y
nombres, 4) Sexo, 5) Dirección, y 6) Distrito de residencia. El
diseño de la interfaz debe ser similar a la figura mostrada:
Para seleccionar un curso el usuario deberá hacer click en
el botón punteado que se encuentra al lado de la caja de texto.
En seguida se presentará un menú de selección por realce en el
cual se presenta la relación de todos los cursos disponibles.
Pág. 290
El curso quedará seleccionado al hacer click en el botón
Aceptar.
El mismo tipo de selección deberá realizarse al momento de
ingresar el nombre del distrito.
Para el desarrollo de esta aplicación necesitamos tres
formularios y un módulo. En primer lugar proceda a añadir un
módulo de código al proyecto. Seleccione el Menú Proyecto y
Pág. 291
elija la opción Agregar módulo, se debe presentar un cuadro de
diálogo similar a la siguiente figura:
Del cuadro de diálogo Agregar módulo, en la ficha Nuevo,
haga click en el botón Abrir. Luego ingrese el siguiente código
en la sección de Declaraciones del módulo que acabamos de
añadir:
Public Curso As String
Public Distrito As String
En seguida proceda a cambiar el nombre formulario
principal por FrmFichaMatricula. Luego debe añadir los demás
formularios necesarios para construir la aplicación. Para tal
fin, seleccione el menú Proyecto y elija la opción Agregar
formulario. Del cuadro de diálogo Agregar formulario, en la
ficha Nuevo, elija la opción Formulario y haga click en el
botón Abrir. Se debe presentar un cuadro de diálogo similar a
la siguiente figura:
Pág. 292
En ese instante se añadirá un nuevo formulario al
proyecto. Cambie el nombre del nuevo formulario por FrmCurso.
Repita el procedimiento anterior para añadir el formulario
FrmDistrito.
A continuación copie los pasos de la pág. 55 a la pág. 62
de la Guía de Laboratorio Nº 4 (Aplicación Nº 3) con los
siguientes cambios:
En la pág. 55, añadir sólo 2 marcos. No añadir ningún
control de lista. En vez de 4 botones de comando, añadir 6
botones de comando. Luego, establecer las siguientes
propiedades para los dos nuevos botones:
Command5
Nombre CmdCurso
Caption . . .
Command6
Pág. 293
Nombre CmdDistrito
Caption . . .
En la pág. 59, reemplazar el código del evento Load del
formulario por el siguiente:
Private Sub Form_Load()
CboSexo.AddItem "Masculino"
CboSexo.AddItem "Femenino"
End Sub
En la pág. 61, suprimir el código asociado al evento Click
de los controles de lista LstCursos y LstDistrito. En su lugar
añadir lo siguiente:
Private Sub CmdCurso_Click()
Load FrmCurso
FrmCurso.Show vbModal
TxtCurso = Curso
End Sub
Private Sub CmdDistrito_Click()
Load FrmDistrito
FrmDistrito.Show vbModal
TxtDistrito = Distrito
End Sub
A continuación active el formulario FrmCurso, para ello
haga click sobre el mismo. En seguida proceda a ubicar los
siguientes controles en el formulario:
1 control de lista
1 botones de comando
Pág. 294
Luego proceda a establecer las propiedades según se
indica:
Form2
Nombre FrmCurso
BorderStyle 3-Fixed Dialog
Caption Cursos
List1
Nombre LstCursos
Text
Command1
Nombre CmdAceptar
Caption &Aceptar
Una vez establecidas las propiedades proceda a ingresar el
código que se indica a continuación:
Private Sub Form_Load()
LstCursos.AddItem “Borland C++ Nivel I”
LstCursos.AddItem “Borland C++ Nivel II”
LstCursos.AddItem “Microsoft Visual Basic Nivel I”
LstCursos.AddItem “Microsoft Visual Basic Nivel II”
LstCursos.AddItem “Microsoft Visual FoxPro Nivel I”
LstCursos.AddItem “Microsoft Visual FoxPro Nivel II”
LstCursos.AddItem “Microsoft Visual C++ Nivel I”
LstCursos.AddItem “Microsoft Visual C++ Nivel II”
LstCursos.AddItem “Microsoft SQL Server Nivel I”
LstCursos.AddItem “Microsoft SQL Server Nivel II”
LstCursos.AddItem “Microsoft Power Builder Nivel I”
LstCursos.AddItem “Microsoft Power Builder Nivel II”
End Sub
Pág. 295
Private Sub CmdAceptar_Click()
Curso = LstCursos.Text
FrmCurso.Hide
End Sub
Por último, proceda Ud. a desarrollar el código respectivo
para el formulario FrmDistrito.
Aplicación Nº 3
Elaborar una aplicación que permita presentar los
diferentes tipos de formularios de Visual Basic. Utilice como
contenedor principal un formulario MDI, tal como se muestra en
la figura:
Para el desarrollo de esta aplicación necesitamos utilizar
un formulario MDI (interfaz de múltiples documentos). Para ello
seleccione el Menú Proyecto y elija la opción Agregar
formulario MDI, se debe presentar un cuadro de diálogo similar
a la siguiente figura:
Pág. 296
Del cuadro de diálogo Agregar formulario MDI, en la ficha
Nuevo, haga click en el botón Abrir. En seguida cambie el
nombre del formulario MDI por MDIPrincipal.
A continuación proceda a añadir los formularios para las
diferentes opciones del menú. Cambie los nombres de los
formularios según se indica:
Formulario Nombre
Form1 FrmNone
Form2 FrmFixedSingle
Form3 FrmSizable
Form4 FrmFixedDialog
Form5 FrmFixedToolWindow
Form6 FrmSizableToolWindow
Form7 FrmAcercaDe
Pág. 297
Luego proceda a diseñar el menú de opciones. Para ello
haga click derecho sobre el formulario MDI y elija la opción
Editor de menús. Establezca las propiedades según:
Caption Name ShortCut
&Menú Principal MnuPrincipal Ninguno
&0-None MnuNone Ninguno
MnuFixedSingle Ninguno &1-Fixed Single
&2-Sizable MnuSizable Ninguno
MnuFixedDialog Ninguno &3-Fixed Dialog
&4-Fixed ToolWindow MnuFixedToolWindow Ninguno
MnuSizableToolWindow Ninguno &5-Sizable ToolWindow
- MnuLinea Ninguno
&Acerca del autor MnuAcercaDe Ninguno
&Salir MnuSalir Ctrl + X
A continuación haga click en el botón Aceptar del Editor
de menús. Luego proceda a ingresar el siguiente código para el
formulario MDI:
Private Sub MDIForm_Unload(Cancel As Integer)
If MsgBox(“¿Desea terminar la aplicación?”, _
vbQuestion + vbYesNo, “Mensaje”) = vbYes Then
End
Else: Cancel = True
End If
End Sub
Private Sub MnuNone_Click()
Load FrmNone
FrmNone.Show
End Sub
Pág. 298
Private Sub MnuFixedSingle_Click()
Load FrmFixedSingle
FrmFixedSingle.Show
End Sub
Private Sub MnuSizable_Click()
Load FrmSizable
FrmSizable.Show
End Sub
Private Sub MnuFixedDialog_Click()
Load FrmFixedDialog
FrmFixedDialog.Show
End Sub
Private Sub MnuFixedToolWindow_Click()
Load FrmFixedToolWindow
FrmFixedToolWindow.Show
End Sub
Private Sub MnuSizableToolWindow_Click()
Load FrmSizableToolWindow
FrmSizableToolWindow.Show
End Sub
Private Sub MnuAcercaDe_Click()
Load FrmAcercaDe
FrmAcercaDe.Show
End Sub
Private Sub MnuSalir_Click()
Unload Me
End Sub
Pág. 299
A continuación proceda a activar el formulario FrmNone y
ubique un botón de comandos sobre el mismo. En seguida
establezca las propiedades según se indica a continuación:
Form1
Nombre FrmNone
BorderStyle 0-None
Caption None
MDIChild True
Command1
Nombre CmdVolver
Caption &Volver
Una vez establecidas las propiedades, proceda a ingresar
el código que se muestra a continuación:
Private Sub CmdVolver_Click()
Unload Me
End Sub
Repita el procedimiento anterior para los demás tipos de
formularios.
Aplicación Nº 4
Elaborar una aplicación que acepte como entrada la reserva
de agua de un depósito y los litros que se consumen a la
semana. Utilizando una función definida por el usuario
determinar como resultado las cantidades de agua que quedan al
final de cada semana. El proceso finalizará cuando no quede
agua suficiente para una semana. Utilizar otro formulario para
mostrar la salida.
FIN PARTE I
Pág. 300
GUÍA DE LABORATORIO
Parte II
ELABORADO POR
CARLOS CASTILLO PERALTA
cc_peralta@hotmail.com
INTRODUCCIÓN
Pág. 301
La presente Guía de Laboratorio de Microsoft Visual Basic,
se elaboró con la finalidad de complementar la parte teórica
con la parte práctica del curso. Los problemas presentan un
grado de dificultad gradual, es decir, en cada práctica primero
se comienzan con problemas muy sencillos con la finalidad de
que el estudiante esclarezca dudas y quede claro en los
conceptos asimilados en la teoría, y luego en los problemas
posteriores se va incrementando el nivel de dificultad.
Esta guía explora una gran variedad de materias y contiene
muchos problemas recopilados a lo largo de varios años de
experiencia. Espero que satisfaga las necesidades de los
estudiantes y colegas, ya que ha sido elaborada teniendo en
cuenta los objetivos de aprendizaje del curso.
Si desean compartirla con otros colegas, me agradaría
mucho que lo hicieran, con la única condición de que siempre se
respete el derecho del autor.
Desde ya les deseo la mejor de las suertes en el
aprendizaje de Microsoft Visual Basic.
Lima, Diciembre del 2000
Carlos Castillo Peralta
Microsoft Visual Basic
Pág. 302
GUÍA DE LABORATORIO Nº 6
Objetivos
Luego de completar este laboratorio, el estudiante será
capaz de:
• Crear y manipular bases de datos utilizando Microsoft Access.
• Adicionar un entorno de datos a un proyecto.
• Conectar un origen de datos a un objeto Connection.
• Utilizar un objeto Command para recuperar registros de un
origen de datos.
• Crear formularios con datos enlazados.
• Realizar consultas utilizando sentencias SQL.
Consideraciones
Para el desarrollo del presente laboratorio Ud. deberá
crear una carpeta C:\FundVB\Lab6, para guardar sus trabajos
correspondientes a este laboratorio.
Creación de la base de datos con Microsoft Access 2000
Para desarrollar nuestras prácticas de laboratorio debemos
crear una base de datos cuyo nombre es CursosLibres.MDB, la
cual contendrá las tablas Curso y Laboratorio. La tarea de
crear una base de datos con Microsoft Access 2000 es muy
sencilla. Para tal fin debe realizar lo siguiente:
• Arrancar Microsoft Access 2000.
• Seleccionar la orden Nueva. . . del Menú Archivo.
• Dentro del cuadro de diálogo Nueva, en la ficha General,
seleccionar Base de datos y hacer click en el botón Aceptar.
• Ingresar un nombre para la base de datos, para nuestro caso
ingrese CursosLibres. En seguida se mostrará una ventana
similar a la siguiente:
Pág. 303
• Proceda a crear una nueva tabla. Para ello seleccionar la
opción Tablas y haga doble click en Crear una tabla en vista
Diseño.
• Introducir el nombre, el tipo y las propiedades para cada uno
de los campos. Para nuestro caso ingrese lo siguiente:
Tabla Curso
Nombre del
Campo
Tipo Ancho Descripción
CurCodigo T 03 Código del curso
CurNombre T 30 Nombre del curso
CurVacantes N 03 Número de vacantes disponibles
CurProfe T 50 Nombre del profesor de teoría
CurSilabo M 50 Sílabo de cada curso
• Luego, debe asignar un nombre a la tabla al momento de
cerrarla. Para nuestro caso asígnele el nombre de Curso.
• Por último, proceda a abrir la tabla e introducir datos. Para
nuestro caso, ingrese la siguiente información:
Pág. 304
CurCodigo CurNombre CurProfe
BC1 Borland C++ Nivel I Linares Alarcon, Adams
BC2 Borland C++ Nivel II Córdoba Saavedra, Javier
BC3 Borland C++ Nivel III Castillo Peralta, Carlos
VB1 MS Visual Basic Nivel I Linares Alarcon, Adams
VB2 MS Visual Basic Nivel II Linares Alarcon, Adams
VB3 MS Visual Basic Nivel III Castillo Peralta, Carlos
VC1 MS Visual C++ Nivel I Córdoba Saavedra, Javier
VC2 MS Visual C++ Nivel II Castillo Peralta, Carlos
VJ1 MS Visual J++ Nivel I Castillo Peralta, Carlos
VJ2 MS Visual J++ Nivel II Castillo Peralta, Carlos
VF1 MS Visual FoxPro Nivel I Linares Alarcon, Adams
VF2 MS Visual FoxPro Nivel II Castillo Peralta, Carlos
VF3 MS Visual FoxPro Nivel III Castillo Peralta, Carlos
PB1 Power Builder Nivel I Córdoba Saavedra, Javier
PB2 Power Builder Nivel II Córdoba Saavedra, Javier
SQ1 MS SQL Server Nivel I Córdoba Saavedra, Javier
SQ2 MS SQL Server Nivel II Córdoba Saavedra, Javier
WIN MS Windows 98 Montes Tejada, Estela
A menudo, el proceso de diseño de la base de datos es
bastante complejo. Para nosotros ha sido fácil, pues se nos
brinda la estructura de las tablas.
De manera análoga, proceda a crear la siguiente tabla
según se indica a continuación:
Tabla Laboratorio
Nombre del
Campo
Tipo Ancho Descripción
LabCodigo T 03 Código del curso
Pág. 305
LabHora T 08 Horario de laboratorio
LabProfe T 50 Nombre del profesor de laboratorio
Al momento de cerrar la tabla que acaba de crear, asígnele
el nombre de Laboratorio. Luego, proceda a ingresar la
siguiente información:
LabCodigo LabHora LabProfe
BC1 SA 08-10 Castillo Peralta, Carlos
BC2 SA 10-12 Linares Alarcon, Adams
BC3 DO 10-12 Castillo Peralta, Carlos
VB1 SA 08-10 Montes Tejada, Estela
VB2 DO 10-12 Linares Alarcon, Adams
VB3 DO 08-10 Castillo Peralta, Carlos
VC1 DO 08-10 Linares Alarcon, Adams
VC2 DO 10-12 Córdoba Saavedra, Javier
VJ1 SA 16-18 Castillo Peralta, Carlos
VJ2 SA 18-20 Castillo Peralta, Carlos
VF1 SA 08-10 Linares Alarcon, Adams
VF2 DO 08-10 Córdoba Saavedra, Javier
VF3 DO 14-16 Linares Alarcon, Adams
PB1 VI 16-18 Córdoba Saavedra, Javier
PB2 VI 14-16 Córdoba Saavedra, Javier
SQ1 SA 16-18 Córdoba Saavedra, Javier
SQ2 SA 18-20 Córdoba Saavedra, Javier
WIN SA 10-12 Montes Tejada, Estela
Aplicación Nº 1
Elaborar una aplicación que permita realizar el
mantenimiento de la información almacenada en la tabla Curso de
Pág. 306
la base de datos CursosLibres.MDB. El diseño de la interfaz
debe ser similar a la figura mostrada:
Los botones ubicados en el marco Navegador (Primero,
Anterior, Siguiente y Ultimo, de izquierda a derecha) permiten
desplazarse a través de la tabla. Los botones ubicados en el
marco Mantenimiento (Nuevo, Editar, Guardar y Eliminar, de
izquierda a derecha) permiten realizar las operaciones básicas
de mantenimiento de la tabla.
Para desarrollar nuestra aplicación, lo primero que
debemos hacer es conectarnos a la base de datos
CursosLibres.MDB. Para ello ingrese a Visual Basic de manera
habitual, a continuación en el menú Proyecto seleccione la
opción Agregar Data Environment y se creará una nueva conexión
para la que debe establecer propiedades de vínculo de datos. En
la ventana Data Environment cambie el nombre del objeto
DataEnvironment por DeCursosLibres y el de la conexión por
CnCursosLibres. El aspecto de la ventana Data Environment
deberá ser similar a la siguiente figura:
Pág. 307
Luego haga click con el botón derecho del ratón en
CnCursosLibres y seleccione la opción Propiedades. Deberá
presentarse un cuadro de diálogo similar al siguiente:
En la ficha Proveedor del cuadro de diálogo anterior,
seleccione Microsoft Jet 4.0 OLE DB Provider y haga click en el
Pág. 308
botón Siguiente. En seguida aparecerá un cuadro de diálogo
similar al mostrado:
En la ficha Conexión del cuadro de diálogo Propiedades de
Data Link escriba el nombre de la base de datos
CursosLibres.MDB y haga click en el botón Probar conexión.
Luego si la conexión es satisfactoria haga click en el botón
Aceptar.
En seguida en la barra de herramientas de la ventana Data
Environment haga click en el botón Agregar Comando y denomine
al comando CmCurso. Luego haga click derecho sobre el comando y
seleccione Propiedades:
Pág. 309
Compruebe que este comando utiliza la conexión
CnCursosLibres, luego establezca el nombre de la tabla a
utilizar, en este caso Curso y haga click en el botón Aceptar.
A continuación seleccione el comando CmCurso y arrástrelo
hacia el formulario. Finalmente agregue los siguientes
controles al formulario:
3 marcos
9 botones de comandos
En seguida proceda a establecer las propiedades
requeridas:
Form1
Nombre FrmMantenCurso
Caption Mantenimiento de cursos
BorderStyle 3-Fixed Dialog
Frame1
Pág. 310
Nombre FraIngreso
Caption
Frame2
Nombre FraNavegador
Caption Navegador
Frame3
Nombre FraMantenimiento
Caption Mantenimiento
LblFieldLabel(0)
Nombre LblFieldLabel
Caption Código:
LblFieldLabel(1)
Nombre LblFieldLabel
Caption Nombre:
LblFieldLabel(2)
Nombre LblFieldLabel
Caption Vacantes:
LblFieldLabel(3)
Nombre LblFieldLabel
Caption Profesor:
TxtCurCodigo
Nombre TxtCurCodigo
Locked True
Text
TxtCurNombre
Pág. 311
Nombre TxtCurNombre
Locked True
Text
TxtCurVacantes
Nombre TxtCurVacantes
Locked True
Text
TxtCurProfe
Nombre TxtCurProfe
Locked True
Text
Command1
Nombre CmdPrimero
Caption
Picture C:\FundVB\Bitmaps\First.bmp
Style 1-Graphical
Command2
Nombre CmdAnterior
Caption
Picture C:\FundVB\Bitmaps\Previous.bmp
Style 1-Graphical
Command3
Nombre CmdSiguiente
Caption
Picture C:\FundVB\Bitmaps\Next.bmp
Style 1-Graphical
Pág. 312
Command4
Nombre CmdUltimo
Caption
Picture C:\FundVB\Bitmaps\Last.bmp
Style 1-Graphical
Command5
Nombre CmdNuevo
Caption
Picture C:\FundVB\Bitmaps\New.bmp
Style 1-Graphical
Command6
Nombre CmdEditar
Caption
Picture C:\FundVB\Bitmaps\Edit.bmp
Style 1-Graphical
Command7
Nombre CmdGuardar
Caption
Picture C:\FundVB\Bitmaps\Save.bmp
Style 1-Graphical
Command8
Nombre CmdEliminar
Caption
Picture C:\FundVB\Bitmaps\Delete.bmp
Style 1-Graphical
Command9
Nombre CmdSalir
Pág. 313
Caption &Salir
Picture C:\FundVB\Bitmaps\Exit.bmp
Style 1-Graphical
El código asociado a la aplicación se muestra a
continuación:
Private Sub CmdPrimero_Click()
DeCursosLibres.rsCmCurso.MoveFirst
End Sub
Private Sub CmdUltimo_Click()
DeCursosLibres.rsCmCurso.MoveLast
End Sub
Private Sub CmdAnterior_Click()
DeCursosLibres.rsCmCurso.MovePrevious
If DeCursosLibres.rsCmCurso.BOF Then
DeCursosLibres.rsCmCurso.MoveFirst
MsgBox “Estamos en el primer registro”
End If
End Sub
Private Sub CmdSiguiente_Click()
DeCursosLibres.rsCmCurso.MoveNext
If DeCursosLibres.rsCmCurso.EOF Then
DeCursosLibres.rsCmCurso.MoveLast
MsgBox “Estamos en el último registro”
End If
End Sub
Private Sub CmdNuevo_Click()
DeCursosLibres.rsCmCurso.AddNew
Pág. 314
ModoEditar True
End Sub
Private Sub CmdEditar_Click()
ModoEditar True
End Sub
Private Sub CmdGuardar_Click()
DeCursosLibres.rsCmCurso.Update
ModoEditar False
End Sub
Private Sub CmdEliminar_Click()
DeCursosLibres.rsCmCurso.Delete
DeCursosLibres.rsCmCurso.MoveNext
If DeCursosLibres.rsCmCurso.EOF Then
DeCursosLibres.rsCmCurso.MoveLast
End If
End Sub
Private Sub CmdSalir_Click()
Unload Me
End
Private Sub Form_Unload(Cancel As Integer)
If MsgBox(“¿Desea terminar la aplicación?”, _
vbQuestion + vbYesNo, “Pregunta”) = vbYes Then
End
Else
Cancel = True
End If
End Sub
Private Sub Form_Activate()
ModoEditar False
Pág. 315
End Sub
Private Sub ModoEditar(ByVal Ok As Boolean)
TxtCurCodigo.Locked = Not Ok: TxtCurNombre.Locked = Not Ok
TxtCurVacantes.Locked = Not Ok: TxtCurProfe.Locked = Not Ok
CmdNuevo.Enabled = Not Ok: CmdEditar.Enabled = Not Ok
CmdGuardar.Enabled = Ok: CmdEliminar.Enabled = Not Ok
CmdPrimero.SetFocus: If Ok Then TxtCurCodigo.SetFocus
End Sub
Finalmente antes de ejecutar la aplicación debemos
asegurarnos de elegir el tipo de bloqueo adecuado. Para ello
haga click derecho sobre el comando CmCurso y elija la opción
Propiedades y en la ficha Avanzadas selecciones el tipo de
bloqueo 3-Optimistic, tal como se muestra en la figura
siguiente:
Aplicación Nº 2
Pág. 316
Desarrollar una aplicación que permita mostrar en una
grilla el contenido de la tabla Curso. El diseño de la interfaz
se muestra a continuación:
Para desarrollar la aplicación, lo primero que debemos
hacer es conectarnos a la base de datos CursosLibres.MDB.
Luego, añada un Comando y denomínelo CmConsultaCurso. Haga
click derecho sobre el comando y seleccione Propiedades:
Pág. 317
Compruebe que este comando utiliza la conexión
CnCursosLibres. Luego seleccione la opción Instrucción SQL
(Structured Query Language, Lenguaje de Estructuras de
Consultas) e ingrese el siguiente código:
Select CurCodigo As Código, CurNombre As Nombre,
CurVacantes As Vacantes, CurProfe As Profesor From Curso
Luego, haga click en el botón Aceptar. La ventana
DataEnvironment debe presentar el siguiente aspecto:
A continuación seleccione el comando CmConsultaCurso y
arrástrelo con el botón derecho del ratón hacia el formulario.
Del menú desplegable que se presenta, seleccione la opción
Cuadrícula de datos.
Luego, cambie las dimensiones de la grilla de tal forma
que ocupe la totalidad del formulario. Finalmente guarde y
pruebe su aplicación.
Aplicación Nº 3
Pág. 318
Desarrollar una aplicación que permita seleccionar de un
control DataCombo el nombre de un profesor y visualizar los
cursos que dicta dicho profesor.
Lo primero que debe hacer es conectarse a la base de datos
CursosLibres.MDB. En seguida añada un comando y denomínelo
CmConsultaProfe. Luego haga click derecho sobre el comando y
seleccione Propiedades. Compruebe que este comando utiliza la
conexión CnCursosLibres. Luego seleccione la opción Instrucción
SQL e ingrese el siguiente código:
Select CurCodigo As Código, CurNombre As Nombre,
CurProfe As Profesor From Curso Where (CurProfe = ?)
A continuación proceda a añadir otro comando y denomínelo
CmProfe. Compruebe que este comando utiliza la conexión
CnCursosLibres. Seleccione la opción Instrucción SQL e ingrese
el siguiente código:
Select Distinct CurProfe From Curso
Luego proceda ha ubicar los siguientes controles en el
formulario:
1 control DataCombo
1 control DataGrid
Pág. 319
1 botón de comandos
En seguida proceda a establecer las propiedades según se
indica:
Form1
Nombre FrmConsultaProfe
Caption Consulta de profesores
BorderStyle 3-Fixed Dialog
DataCombo1
Nombre DbcProfe
ListField CurProfe
RowMember CmProfe
RowSource DeCursosLibres
DataGrid1
Nombre DbgrdCursos
Font Arial (Negrita 10)
HeadFont Arial (Negrita 10)
Command1
Nombre CmdBuscar
Caption &Buscar
A continuación ingrese el siguiente código:
Private Sub CmdBuscar_Click()
If DeCursosLibres.rsCmConsultaProfe.State = adStateOpen Then
DeCursosLibres.rsCmConsultaProfe.Close
End If
DeCursosLibres.CmConsultaProfe (DbcProfe.Text)
Set DbgrdCursos.DataSource = DeCursosLibres.rsCmConsultaProfe
Pág. 320
End Sub
Aplicación Nº 4
Desarrollar una aplicación que permita mostrar el
contenido de la tabla Laboratorio, relacionada con la tabla
Curso, tal como se muestra a continuación:
Observar que la tabla Laboratorio sólo cuenta con tres
campos. El campo que contiene el nombre del curso pertenece a
la tabla Curso.
La sentencia SQL que permite obtener consultas a partir de
múltiples tablas (para nuestro caso Curso y Laboratorio), se
indica a continuación:
Select Laboratorio.LabCodigo As Código,
Curso.CurNombre As Nombre,
Laboratorio.LabHora As Horario,
Laboratorio.LabProfe As [Jefe de práctica]
From Laboratorio, Curso
Where Laboratorio.LabCodigo = Curso.CurCodigo
Microsoft Visual Basic
Pág. 321
GUÍA DE LABORATORIO Nº 7
Objetivos
Luego de completar este laboratorio, el estudiante será
capaz de:
• Utilizar el objeto ADO Connection para crear una conexión a
una base de datos.
• Crear un objeto ADO Recordset para recuperar información de
una base de datos.
• Utilizar el método Execute de una conexión para actualizar la
información de una base de datos.
Consideraciones
Para el desarrollo del presente laboratorio Ud. deberá
crear una carpeta C:\FundVB\Lab7, para guardar sus trabajos
correspondientes a este laboratorio.
Aplicación Nº 1
Elaborar una aplicación que permita realizar el
mantenimiento de la información contenida en la tabla Curso.
En esta aplicación Ud. debe diseñar la interfaz y luego
escribir código para conectarse y recuperar información de la
base de datos.
Pág. 322
Para el diseño de la interfaz, proceda a ubicar los
siguientes controles en el formulario:
3 marcos
4 etiquetas
4 cajas de texto
8 botones de comando
En seguida proceda a establecer las propiedades según se
indica:
Form1
Nombre FrmMantenCursos
Caption Mantenimiento de cursos
BorderStyle 3-Fixed Dialog
Moveable False
StartUpPosition 2-CenterScreen
Frame1
Nombre FraIngreso
Caption
Frame2
Nombre FraNavegador
Caption Navegador
Frame3
Nombre FraMantenimiento
Caption Mantenimiento
Label1
Nombre LblCodigo
Caption Código:
Pág. 323
Label2
Nombre LblNombre
Caption Nombre:
Label3
Nombre LblVacantes
Caption Vacantes:
Label4
Nombre LblProfesor
Caption Profesor:
Text1
Nombre TxtCurCodigo
Locked True
Text
Text2
Nombre TxtCurNombre
Locked True
Text
Text3
Nombre TxtCurVacantes
Locked True
Text
Text4
Nombre TxtCurProfe
Locked True
Pág. 324
Text
Para establecer las propiedades de los botones de comando
Command1, Command2, . . ., Command8, copiar los pasos de la
pág. 87 a la pág. 88 de la Guía de Laboratorio Nº 6 (Aplicación
Nº 1).
Antes de ingresar código a la aplicación, debemos tener en
cuenta que para poder utilizar los objetos ADO es una
aplicación Visual Basic es necesario cargar la librería
correspondiente. Para ello selecciones el menú Proyecto y elija
la opción Referencias. En el cuadro de diálogo Referencias
seleccione la opción Microsoft ActiveX Data Objects 2.1
Library, tal como se indica en la figura siguiente:
Luego de hacer click en el botón Aceptar estará en
condiciones de utilizar los objetos ADO en su aplicación.
Pág. 325
El código necesario para realizar la conexión y efectuar
el mantenimiento de la tabla se muestra a continuación.
Observar la analogía cuando se utiliza Data Environment.
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Private Sub ModoEditar(ByVal Ok As Boolean)
TxtCurCodigo.Locked = Not Ok
TxtCurNombre.Locked = Not Ok
TxtCurVacantes.Locked = Not Ok
TxtCurProfe.Locked = Not Ok
CmdNuevo.Enabled = Not Ok
CmdEditar.Enabled = Not Ok
CmdGuardar.Enabled = Ok
CmdEliminar.Enabled = Not Ok
If Ok Then TxtCurCodigo.SetFocus
End Sub
Private Sub Form_Load()
ModoEditar False
Set Cn = New ADODB.Connection
Set Rs = New ADODB.Recordset
Cn.Open “Provider=Microsoft.Jet.OLEDB.4.0;” & _
“Data Source=C:\FundVB\Data\CursosLibres.MDB;” & _
“Persist Security Info=False”
Rs.ActiveConnection = Cn
Rs.CursorType = adOpenKeyset
Rs.LockType = adLockOptimistic
Rs.Open “Select * From Curso”
Set TxtCurCodigo.DataSource = Rs
TxtCurCodigo.DataField = “CurCodigo”
Set TxtCurNombre.DataSource = Rs
Pág. 326
TxtCurNombre.DataField = “CurNombre”
Set TxtCurVacantes.DataSource = Rs
TxtCurVacantes.DataField = “CurVacantes”
Set TxtCurProfe.DataSource = Rs
TxtCurProfe.DataField = “CurProfe”
End Sub
Private Sub CmdPrimero_Click()
Rs.MoveFirst
End Sub
Private Sub CmdAnterior_Click()
Rs.MovePrevious
If Rs.BOF Then
Rs.MoveFirst
MsgBox “Estamos en el primer registro”
End If
End Sub
Private Sub CmdSiguiente_Click()
Rs.MoveNext
If Rs.EOF Then
Rs.MoveLast
MsgBox “Estamos en el último registro”
End If
End Sub
Private Sub CmdUltimo_Click()
Rs.MoveLast
End Sub
Private Sub CmdNuevo_Click()
Rs.AddNew
ModoEditar True
Pág. 327
End Sub
Private Sub CmdEditar_Click()
ModoEditar True
End Sub
Private Sub CmdGuardar_Click()
Rs.Update
ModoEditar False
End Sub
Private Sub CmdEliminar_Click()
Rs.Delete
Rs.MoveNext
If Rs.EOF Then
Rs.MoveLast
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
Cn.Close
Set Cn = Nothing
End Sub
Aplicación Nº 2
Desarrollar una aplicación que permita realizar una
consulta a la tabla Curso. Para ello el usuario debe
seleccionar de un cuadro combinado (combo) el nombre de un
profesor y a continuación se deben visualizar los cursos a su
cargo. El diseño de la interfaz debe ser similar a la figura
mostrada:
Pág. 328
Para el desarrollo de esta aplicación, proceda ha ubicar
los siguientes controles en el formulario:
1 control ComboBox
1 control DataGrid
1 botón de comandos
En seguida proceda a establecer las propiedades según se
indica:
Form1
Nombre FrmConsultaProfe
Caption Consulta de profesores
BorderStyle 3-Fixed Dialog
Combo1
Nombre CboProfe
Text
DataGrid1
Nombre DbgrdCursos
Font Arial (Negrita 10)
HeadFont Arial (Negrita 10)
Pág. 329
Command1
Nombre CmdBuscar
Caption &Buscar
Default True
A continuación debe ingresar el código que se muestra en
seguida:
Dim Cn As ADODB.Connection
Dim RsCurso As ADODB.Recordset
Dim RsProfe As ADODB.Recordset
Private Sub Form_Load()
Set Cn = New ADODB.Connection
Set RsProfe = New ADODB.Recordset
Cn.Open “Provider=Microsoft.Jet.OLEDB.4.0;” & _
“Data Source=C:\FundVB\Data\CursosLibres.MDB;” & _
“Persist Security Info=False”
RsProfe.ActiveConnection = Cn
RsProfe.CursorType = adOpenStatic
RsProfe.LockType = adLockOptimistic
RsProfe.CursorLocation = adUseClient
RsProfe.Open “Select Distinct CurProfe From Curso”
Do While Not RsProfe.EOF()
CboProfe.AddItem RsProfe(“CurProfe”)
RsProfe.MoveNext
Loop
End Sub
Private Sub CmdBuscar_Click()
Set RsCurso = New ADODB.Recordset
RsCurso.ActiveConnection = Cn
RsCurso.CursorType = adOpenStatic
Pág. 330
RsCurso.LockType = adLockReadOnly
RsCurso.CursorLocation = adUseClient
RsCurso.Open “Select CurCodigo As Código, ” & _
“CurNombre As Nombre, CurProfe As Profesor ” & _
“From Curso Where CurProfe = '” & CboProfe.Text & “'”
Set DbgrdCursos.DataSource = RsCurso
End Sub
Private Sub Form_Unload(Cancel As Integer)
Cn.Close
Set Cn = Nothing
End Sub
Aplicación Nº 3
Desarrollar una aplicación que permita realizar el
mantenimiento de las tablas de la base de datos
CursosLibres.MDB (estas tablas le serán proporcionadas con
datos suficientes, por el Jefe de Práctica).
El diseño de la interfaz debe ser similar a la siguiente
figura:
Pág. 331
Por ejemplo para realizar el mantenimiento de la tabla
Curso debemos preparar los siguientes formularios:
Pág. 332
Para desarrollar nuestra aplicación debe agregar un módulo
de código al proyecto. Luego ingrese lo siguiente:
Public Cn As ADODB.Connection
También será necesario agregar un formulario MDI. Luego,
cambie el nombre del formulario por el de MDICursosLibres. En
seguida, diseñe el menú para la aplicación según se indica:
Caption Name ShortCut
MnuManten Ninguno &Mantenimiento
&Alumnos MnuMantenAlumno Ninguno
MnuMantenAlumnoNuevo Ninguno &Nuevo
&Editar MnuMantenAlumnoEditar Ninguno
MnuMantenAlumnoEliminar Ninguno &Eliminar
&Cursos MnuMantenCurso Ninguno
MnuMantenCursoNuevo Ninguno &Nuevo
MnuMantenCursoEditar &Editar Ninguno
MnuMantenCursoEliminar Ninguno &Eliminar
&Laboratorio MnuMantenLaboratorio Ninguno
MnuMantenLaboratorioNuevo Ninguno &Nuevo
&Editar MnuMantenLaboratorioEditar Ninguno
&Eliminar MnuMantenLaboratorioEliminar Ninguno
&Distrito MnuMantenDistrito Ninguno
&Nuevo MnuMantenDistritoNuevo Ninguno
&Editar MnuMantenDistritoEditar Ninguno
&Eliminar MnuMantenDistritoEliminar Ninguno
- MnuMantLinea Ninguno
&Salir MnuMantSalir Ctrl + X
Pág. 333
Luego, haga doble click sobre el formulario e ingrese el
siguiente código:
Private Sub MDIForm_Load()
Set Cn = New ADODB.Connection
Cn.Open “Provider=Microsoft.Jet.OLEDB.4.0;” & _
“Data Source=C:\FundVB\Data\CursosLibres.MDB;” & _
“Persist Security Info=False”
End Sub
Private Sub MnuMantenCursosNuevo_Click()
Load FrmNuevoCurso
FrmNuevoCurso.Show
End Sub
Private Sub MnuMantenCursosEditar_Click()
Load FrmEditarCurso
FrmEditarCurso.Show
End Sub
Private Sub MnuMantenCursosEliminar_Click()
Load FrmEliminarCurso
FrmEliminarCurso.Show
End Sub
Para desarrollar la opción Nuevo de la tabla Curso, añada
un nuevo formulario al proyecto. Luego, ubique los siguientes
controles en el formulario:
4 etiquetas
4 cajas de texto
3 botones de comando
Luego proceda a establecer las propiedades según se
indica:
Pág. 334
Form1
Nombre FrmMantenCursos
Caption Nuevo curso
BorderStyle 3-Fixed Dialog
MDIChild True
Label1
Nombre LblCodigo
Caption Código:
Label2
Nombre LblNombre
Caption Nombre:
Label3
Nombre LblVacantes
Caption Vacantes:
Label4
Nombre LblProfesor
Caption Profesor:
Text1
Nombre TxtCurCodigo
Text
Text2
Nombre TxtCurNombre
Text
Text3
Nombre TxtCurVacantes
Text
Pág. 335
Text4
Nombre TxtCurProfe
Text
Command1
Nombre CmdGrabar
Caption &Grabar
Command2
Nombre CmdNuevo
Caption &Nuevo
Command3
Nombre CmdCerrar
Caption &Cerrar
Una vez establecidas las propiedades, proceda a ingresar
el siguiente código:
Private Sub Form_Load()
CmdGrabar.Enabled = True
CmdNuevo.Enabled = False
End Sub
Private Sub CmdGrabar_Click()
Cn.Execute “Insert Into Curso(CurCodigo, CurNombre, ” & _
“CurVacantes, CurProfe) Values ('” & TxtCurCodigo & _
“',” & “'” & TxtCurNombre & “',” & _
Val(TxtCurVacantes) & “,” & “'” & TxtCurProfe & “')”
CmdGrabar.Enabled = False
CmdNuevo.Enabled = True
End Sub
Pág. 336
Private Sub CmdNuevo_Click()
TxtCurCodigo = “”
TxtCurNombre = “”
TxtCurVacantes = “”
TxtCurProfe = “”
CmdGrabar.Enabled = True: CmdNuevo.Enabled = False
TxtCurCodigo.SetFocus
End Sub
Private Sub CmdCerrar_Click()
Unload Me
End Sub
Para desarrollar la opción Editar de la tabla Curso, añada
un nuevo formulario al proyecto. Luego, ubique los siguientes
controles en el formulario:
1 marco
4 etiquetas
4 cajas de texto
4 botones de comando
En seguida proceda a establecer las propiedades según se
indica:
Form1
Nombre FrmMantenCursos
Caption Editar curso
BorderStyle 3-Fixed Dialog
MDIChild True
Frame1
Nombre FraCodigo
Caption
Pág. 337
Label1
Nombre LblCodigo
Caption Código:
Label2
Nombre LblNombre
Caption Nombre:
Label3
Nombre LblVacantes
Caption Vacantes:
Label4
Nombre LblProfesor
Caption Profesor:
Text1
Nombre TxtCurCodigo
Text
Text2
Nombre TxtCurNombre
Text
Text3
Nombre TxtCurVacantes
Text
Text4
Nombre TxtCurProfe
Text
Pág. 338
Command1
Nombre CmdAceptar
Caption &Aceptar
Command2
Nombre CmdGrabar
Caption &Grabar
Command3
Nombre CmdNuevo
Caption &Nuevo
Command4
Nombre CmdCerrar
Caption &Cerrar
Una vez establecidas las propiedades, proceda a ingresar
el siguiente código:
Private Sub Form_Load()
CmdAceptar.Enabled = True
CmdGrabar.Enabled = False
CmdNuevo.Enabled = False
End Sub
Private Sub CmdAceptar_Click()
Dim Rs As New ADODB.Recordset
Set Rs = Cn.Execute(“Select CurNombre, ” & _
“CurVacantes, CurProfe From Curso ” & _
“Where CurCodigo = '” & TxtCurCodigo & “'”)
If (Rs.EOF And Rs.BOF) Then
MsgBox “No existe ningún curso con este código”
TxtCurCodigo.SetFocus
Pág. 339
TxtCurCodigo.SelStart = 0
TxtCurCodigo.SelLength = Len(TxtCurCodigo)
Exit Sub
End If
TxtCurNombre = Rs!CurNombre
TxtCurVacantes = Rs!CurVacantes
TxtCurProfe = Rs!CurProfe
Rs.Close
Set Rs = Nothing
TxtCurCodigo.Enabled = False
CmdAceptar.Enabled = False
CmdGrabar.Enabled = True
CmdNuevo.Enabled = True
End Sub
Private Sub CmdGrabar_Click()
Cn.Execute “Update Curso Set CurNombre = '” & _
TxtCurNombre & “',” & “CurVacantes = ” & _
Val(TxtCurVacantes) & “,” & “CurProfe = '” & _
TxtCurProfe & “'” & “ Where CurCodigo = '” & _
TxtCurCodigo & “'”
End Sub
Private Sub CmdNuevo_Click()
TxtCurCodigo = “”
TxtCurNombre = “”
TxtCurVacantes = “”
TxtCurProfe = “”
CmdAceptar.Enabled = True
CmdGrabar.Enabled = False
CmdNuevo.Enabled = False
TxtCurCodigo.Enabled = True
TxtCurCodigo.SetFocus
Pág. 340
End Sub
Private Sub CmdCerrar_Click()
Unload Me
End Sub
Para desarrollar la opción Eliminar de la tabla Cursos,
añada un nuevo formulario al proyecto. Luego, ubique los
siguientes controles en el formulario:
1 marco
4 etiquetas
4 cajas de texto
4 botones de comando
En seguida proceda a establecer las propiedades según se
indica:
Form1
Nombre FrmMantenCursos
Caption Eliminar curso
BorderStyle 3-Fixed Dialog
MDIChild True
Frame1
Nombre FraCodigo
Caption
Label1
Nombre LblCodigo
Caption Código:
Label2
Nombre LblNombre
Pág. 341
Caption Nombre:
Label3
Nombre LblVacantes
Caption Vacantes:
Label4
Nombre LblProfesor
Caption Profesor:
Text1
Nombre TxtCurCodigo
Text
Text2
Nombre TxtCurNombre
Text
Text3
Nombre TxtCurVacantes
Text
Text4
Nombre TxtCurProfe
Text
Command1
Nombre CmdAceptar
Caption &Aceptar
Command2
Nombre CmdEliminar
Pág. 342
Caption &Eliminar
Command3
Nombre CmdNuevo
Caption &Nuevo
Command4
Nombre CmdCerrar
Caption &Cerrar
Una vez establecidas las propiedades, proceda a ingresar
el siguiente código:
Private Sub Form_Load()
CmdAceptar.Enabled = True
CmdEliminar.Enabled = False
CmdNuevo.Enabled = False
End Sub
Private Sub CmdEliminar_Click()
Cn.Execute “Delete From Curso ” & _
“Where CurCodigo = '” & TxtCurCodigo & “'”
Call CmdNuevo_Click
End Sub
Private Sub CmdNuevo_Click()
TxtCurCodigo = “”
TxtCurNombre = “”
TxtCurVacantes = “”
TxtCurProfe = “”
CmdAceptar.Enabled = True
CmdEliminar.Enabled = False
CmdNuevo.Enabled = False
Pág. 343
TxtCurCodigo.Enabled = True
TxtCurCodigo.SetFocus
End Sub
Private Sub CmdAceptar_Click()
Dim Rs As New ADODB.Recordset
Set Rs = Cn.Execute(“Select CurNombre, ” & _
“CurVacantes, CurProfe From Curso ” & _
“Where CurCodigo = '” & TxtCurCodigo & “'”)
If (Rs.EOF And Rs.BOF) Then
MsgBox “No existe ningún curso con este código”
TxtCurCodigo.SetFocus
TxtCurCodigo.SelStart = 0
TxtCurCodigo.SelLength = Len(TxtCurCodigo)
Exit Sub
End If
TxtCurNombre = Rs!CurNombre
TxtCurVacantes = Rs!CurVacantes
TxtCurProfe = Rs!CurProfe
Rs.Close
Set Rs = Nothing
TxtCurCodigo.Enabled = False
CmdAceptar.Enabled = False
CmdEliminar.Enabled = True
CmdNuevo.Enabled = True
End Sub
Private Sub CmdCerrar_Click()
Unload Me
End Sub
De manera similar proceda a desarrollar el código para los
formularios de mantenimiento de las demás tablas.
Pág. 344
Aplicación Nº 4
Elaborar una aplicación que permita recuperar y mantener
la información de la base de datos CursosLibres.MDB. Para tal
fin debe preparar un formulario que permita establecer la
conexión con el origen de datos. Luego, si la conexión es
satisfactoria el usuario tiene la posibilidad de elegir una de
las tablas de la base de datos para realizar las operaciones
habituales de mantenimiento o simplemente para ejecutar
consultas. El diseño de la interfaz debe ser similar a la
siguiente figura:
Las opciones Mantenimiento y Consulta deben ser análogas a
las realizadas en aplicaciones anteriores.
Microsoft Visual Basic
Pág. 345
GUÍA DE LABORATORIO Nº 8
Objetivos
Luego de completar este laboratorio, el estudiante será
capaz de:
• Usar el diseñador de reportes DataReport.
• Utilizar y controlar la impresora para obtener reportes
impresos.
Consideraciones
Para el desarrollo del presente laboratorio Ud. deberá
crear una carpeta C:\FundVB\Lab8, para guardar sus trabajos
correspondientes a este laboratorio.
Aplicación Nº 1
Diseñar un reporte que muestre la información almacenada
en la tabla Cursos. El formato del reporte pedido se muestra a
continuación:
Para diseñar nuestro reporte, lo primero que debemos hacer
es conectarnos a la base de datos CursosLibres.MDB. La conexión
la haremos efectiva mediante el Data Environment. Luego, añada
Pág. 346
un Comando y denomínelo CmCurso. Establezca el nombre de la
tabla a utilizar, para nuestro caso Curso. El aspecto de la
ventana Data Environment deberá ser similar a la figura:
Luego, del menú Proyecto seleccionar la opción Agregar
Data Report, lo cual permite agregar el diseñador de reportes:
En seguida del Data Environment seleccionar cada campo que
desee incluir en el reporte y luego arrastre el campo hacia la
sección Detalles del Data Report.
Pág. 347
El diseñador de reportes presenta un conjunto de controles
que permiten mejorar la presentación de nuestro reporte. En
seguida ubicar los siguientes controles:
2 etiquetas en la sección Encabezado de informe
4 etiquetas en la sección Encabezado de página
A continuación proceda a establecer las propiedades según
se indica:
Etiqueta1
Nombre RptLblVAB
Caption Instituto de Educación Superior
“Víctor Andrés Belaúnde”
Font Arial (Negrita 09)
Etiqueta2
Nombre RptLblNombre
Caption Reporte de Cursos
Font Arial (Negrita Cursiva 16)
Etiqueta3
Nombre RptLblCodigo
Caption Código:
Font Arial (Negrita 10)
Etiqueta4
Nombre RptLblNombre
Caption Nombre:
Font Arial (Negrita 10)
Etiqueta5
Nombre RptLblVacantes
Caption Vacantes:
Pág. 348
Font Arial (Negrita 10)
Etiqueta6
Nombre RptLblProfesor
Caption Profesor:
Font Arial (Negrita 10)
Para insertar la fecha actual dar un click con el botón
derecho del ratón sobre el diseñador de reportes en la sección
de Encabezado de informe, del menú contextual que se presenta
seleccionar la opción Insertar control, luego Fecha actual
(formato corto). En seguida, cambiar las siguientes
propiedades:
DataReport1
DataMember CmCurso
DataSource DeCursosLibres
Luego, seleccione del menú Proyecto la opción Propiedades
de Proyecto, y en la ficha General del cuadro de diálogo
Propiedades del proyecto, establecer DataReport1 como objeto
inicial. Haga click en Aceptar y ejecute su aplicación.
Aplicación Nº 2
Diseñar un reporte que permita mostrar un listado de
profesores y los cursos que tienen a su cargo. Tener en cuenta
que la información relacionada con cada profesor debe empezar
en una página nueva. El formato del reporte pedido se muestra a
continuación:
Pág. 349
Pág. 350
En esta aplicación explicaremos como crear grupos de
datos. Para ello iniciar un nuevo proyecto. En seguida,
conectarse a la base de datos CursosLibres.MDB mediante el Data
Environment. Luego, añada un Comando y denomínelo CmProfesor.
Establezca el nombre de la tabla a utilizar, para nuestro caso
Curso. Para realizar el agrupamiento por profesor seleccionar
la ficha Agrupar del cuadro de diálogo Propiedades de
CmProfesor. A continuación activar la casilla de verificación
Agrupar comando, luego seleccionar de la lista de campos, el
campo por el cual se desea agrupar la información, para nuestro
caso seleccionar CurProfe y dar un click en el botón “ ”. El
cuadro de diálogo Propiedades de CmProfesor debe presentar un
aspecto similar a la figura siguiente:
>
A continuación sobre el diseñador de reportes dar un click
con el botón derecho del ratón y del menú emergente que se
presenta elegir la opción Insertar encabezado o pie de grupo.
Del objeto DeCursosLibres arrastrar el campo CurProfe de la
sección Campo de resumen en CmProfesor_Grouping al diseñador de
reportes pero a la sección Encabezado de grupo. Los demás
campos arrastrarlos de la sección Campos de Detalle en
CmProfesor a la sección Detalle del generador de reportes. Por
último proceda a cambiar las siguientes propiedades del objeto
DataReport:
DataReport1
DataMember CmProfesor_Grouping
DataSource DeCursosLibres
Aplicación Nº 3
Desarrollar una aplicación que permita crear un reporte
para mostrar la información de la base de datos
CursosLibres.MDB. Para tal fin debe preparar un formulario que
Pág. 351
permita al usuario elegir una tabla, y en seguida se debe
generar el reporte correspondiente. Además el usuario puede
obtener una vista preliminar del reporte o una copia impresa.
El diseño de la interfaz debe ser similar a la figura que se
muestra a continuación:
Para desarrollar nuestra aplicación, proceda a diseñar los
reportes correspondientes según:
Tabla Reporte
Alumno DataReport1
Curso DataReport2
Laboratorio DataReport3
Luego, ubique los siguientes controles sobre el
formulario:
1 marco
3 botones de opción
3 botones de comando
En seguida proceda a establecer las propiedades según se
indica:
Pág. 352
Form1
Nombre FrmReporteCursosLibres
Caption Cursos Libres
BorderStyle 3-Fixed Dialog
Frame1
Nombre FraTablas
Caption
Option1
Nombre OptTablaAlumno
Caption Alumno
Value True
Option2
Nombre OptTablaCurso
Caption Curso
Value False
Option3
Nombre OptTablaLaboratorio
Caption Laboratorio
Value False
Command1
Nombre CmdVistaPrevia
Caption VistaPrevia
Picture C:\Archivos de programa\Microsoft Visual
Studio\Common\Graphics\Bitmaps\Win95\
Explorer.bmp
Style 1-Graphical
Pág. 353
Command2
Nombre CmdImprimir
Caption Imprimir
Picture C:\Archivos de programa\Microsoft Visual
Studio\Common\Graphics\Bitmaps\Win95\
Printfld.bmp
Style 1-Graphical
Command3
Nombre CmdSalir
Caption Salir
Una vez establecidas las propiedades, proceda a ingresar
el siguiente código:
Private Sub CmdImprimir_Click()
If OptTablaAlumno.Value Then
DataReport1.PrintReport True
ElseIf OptTablaCurso.Value Then
DataReport2.PrintReport True
ElseIf OptTablaLaboratorio.Value Then
DataReport2.PrintReport True
End If
End Sub
Private Sub CmdVistaPrevia_Click()
If OptTablaAlumno.Value Then
DataReport1.Show
ElseIf OptTablaCurso.Value Then
DataReport2.Show
ElseIf OptTablaLaboratorio.Value Then
DataReport2.Show
End If
End Sub
Pág. 354
Private Sub CmdSalir_Click()
Unload Me
End Sub
Cuando ejecute la aplicación, al dar un click en el botón
Imprimir se visualizará el siguiente cuadro de diálogo, el cual
nos permitirá confirmar o cancelar la impresión:
Aplicación Nº 4
Diseñar un reporte combinando datos de la tabla Curso y
Laboratorio. El reporte debe mostrar el código del curso, el
nombre del curso, el nombre del profesor de teoría, el nombre
del jefe de práctica y el horario de laboratorio. Dar formato
al reporte según su criterio.
FIN PARTE II
Pág. 355
GUÍA DE LABORATORIO
Parte III
ELABORADO POR
CARLOS CASTILLO PERALTA
cc_peralta@hotmail.com
INTRODUCCIÓN
Pág. 356
La presente Guía de Laboratorio de Microsoft Visual Basic,
se elaboró con la finalidad de complementar la parte teórica
con la parte práctica del curso. Los problemas presentan un
grado de dificultad gradual, es decir, en cada práctica primero
se comienzan con problemas muy sencillos con la finalidad de
que el estudiante esclarezca dudas y quede claro en los
conceptos asimilados en la teoría, y luego en los problemas
posteriores se va incrementando el nivel de dificultad.
Esta guía explora una gran variedad de materias y contiene
muchos problemas recopilados a lo largo de varios años de
experiencia. Espero que satisfaga las necesidades de los
estudiantes y colegas, ya que ha sido elaborada teniendo en
cuenta los objetivos de aprendizaje del curso.
Si desean compartirla con otros colegas, me agradaría
mucho que lo hicieran, con la única condición de que siempre se
respete el derecho del autor.
Desde ya les deseo la mejor de las suertes en el
aprendizaje de Microsoft Visual Basic.
Lima, Diciembre del 2000
Carlos Castillo Peralta
Microsoft Visual Basic
Pág. 357
GUÍA DE LABORATORIO Nº 9
Objetivos
Luego de completar este laboratorio, el estudiante será
capaz de:
• Crear y utilizar clases dentro de una aplicación Visual
Basic.
• Diseñar y utilizar controles ActiveX personalizados.
Consideraciones
Para el desarrollo del presente laboratorio Ud. deberá
crear una carpeta C:\FundVB\Lab9, para guardar sus trabajos
correspondientes a este laboratorio.
Aplicación Nº 1
Implementar una clase denominada Circulo, la cual debe
contar con las propiedades públicas Radio y Area. Para tal fin
seleccione la opción Agregar módulo de clase del Menú Proyecto:
En la ficha Nuevo seleccione la opción Módulo de clase y
haga click en Abrir. En seguida active la ventana de
propiedades y cambie el nombre de la nueva clase por Circulo.
Pág. 358
La ventana de código de la clase debe presentar la siguiente
apariencia:
A continuación proceda a ingresar el siguiente código para
la clase:
Private R As Double
Public Property Get Radio() As Variant
Radio = R
End Property
Public Property Let Radio(ByVal vNewValue As Variant)
If IsNumeric(vNewValue) Then
R = CDbl(vNewValue)
Else
R = 0
End If
End Property
Public Property Get Area() As Variant
Area = 3.141592 * R * R
End Property
Private Sub Class_Initialize()
R = 0
End Sub
Pág. 359
Luego proceda a ubicar los siguientes controles en el
formulario:
2 etiquetas
2 cajas de texto
3 botones de comando
A continuación proceda a establecer las propiedades según
se indica:
Form1
Nombre FrmEjemClaseCirculo
Caption Ejemplo con la clase Circulo
Label1
Nombre LblRadio
Caption Radio:
Label2
Nombre LblArea
Caption Area:
Text1
Nombre TxtRadio
Text
Text2
Nombre TxtArea
Text
Una vez que ha establecido las propiedades indicadas,
proceda a ingrese el siguiente código para el formulario de
prueba:
Pág. 360
Dim A As Circulo
Private Sub Form_Load()
Set A = New Circulo
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set A = Nothing
End Sub
Private Sub TxtRadio_Change()
A.Radio = TxtRadio
TxtArea = A.Area
End Sub
Guarde y pruebe su aplicación. El resultado debe ser
similar a la siguiente figura:
Aplicación Nº 2
Diseñar un control ActiveX que muestre el mensaje
“Bienvenido al Mundo de la Programación con ActiveX”.
Adicionalmente, el control debe permitir al usuario la
posibilidad de cambiar el color del texto.
Para comenzar nuestra aplicación, debe ingresar a Visual
Basic y en la ventana de diálogo Nuevo Proyecto seleccione
Control ActiveX, y luego haga click en el botón Aceptar.
Pág. 361
Con esta opción, podrá crear un Control Active X. Las
diferencias entre una opción y la usual (EXE estándar) las verá
mejor conforme avance en el desarrollo de la presente Práctica
de Laboratorio.
En seguida añada un nuevo proyecto EXE estándar. Esto lo
puede realizar desde el Menú Archivo opción Agregar Proyecto.
Luego establezca las propiedades indicadas a continuación:
Proyecto1
Nombre ActiveXMiControl
UserControl1
Nombre MiControl
ToolboxBitmap C:\Archivos de programa\Microsoft Visual
Studio\Common\Graphics\Bitmaps\Assorted\
Heart.bmp
Proyecto2
Nombre VbpMiControl
Form1
Pág. 362
Nombre FrmPruebaMiControl
Caption Prueba de Control ActiveX
BorderStyle 3-Fixed Dialog
La ventana del Explorador de proyectos debe presentar la
siguiente apariencia:
En la ventana anterior haga click con el botón derecho del
ratón sobre MiControl y elija la opción Ver código. En el
ComboBox General seleccione UserControl y en el ComboBox
Declaraciones seleccione Paint. Ahora ingrese el siguiente
código:
Private Sub UserControl_Paint()
Const Msg = “Bienvenido al Mundo de la Programación ” & _
“con ActiveX”
UserControl.Cls
UserControl.Print Msg
End Sub
Luego en el Explorador de proyectos, hacer click con el
botón derecho del ratón sobre la carpeta Controles de usuario y
seleccione la opción Propiedades de ActiveXMiControl. En
seguida se mostrará la ventana Propiedades del proyecto:
Pág. 363
En la ventana anterior, en la ficha General, apartado
Descripción del proyecto, escribir “Este es mi primer Control
ActiveX”, tal como se muestra. Luego pulsar el botón Aceptar.
Cierre todas las ventanas abiertas y haga un sólo click
sobre la carpeta Controles de usuario. A continuación ingrese
al Menú Archivo y seleccione la opción Generar
ActiveXMiControl.ocx, guarde el archivo con su nombre por
defecto.
Luego, establezca como inicial el formulario
FrmPruebaMiControl y añadir desde el Cuadro de herramientas
nuestro control recientemente creado.
Del Menú Proyecto seleccione la opción Componentes y
veremos la descripción de nuestro control con su casilla de
verificación activada, tal como se muestra a continuación:
Pág. 364
En seguida, guarde y ejecute su aplicación. El resultado
debe ser similar al siguiente:
En este momento, Ud. acaba de terminar el diseño de su
primer control ActiveX. No se preocupe por las diferencias que
puede haber encontrado con respecto a la forma tradicional de
programar. Conforme avancemos en el desarrollo de la práctica
veremos que esta forma de programar en base a componentes es
bastante sencilla.
Pág. 365
Sin embargo, debemos modificar nuestro control, de tal
forma que nos permita cambiar el color de texto de
presentación. Para tal fin, vamos a hacer uso del Asistente
para interfaz de control ActiveX y el Asistente para páginas de
propiedades. Estos complementos deben ser instalados desde el
menú principal Complementos y seleccionar la opción
Administrador de complementos, tal como se indica a
continuación:
En la ventana anterior debe activar las casillas de
verificación Cargado/Descargado y Cargar al iniciar. Luego haga
click en el botón Aceptar.
En seguida el menú Complementos deberá presentar la
siguiente apariencia:
Pág. 366
Luego, haga click sobre la opción Asistente para interfaz
de control ActiveX. En seguida, aparecerá una ventana de
presentación, haga doble click en el botón Siguiente. Tendremos
entonces una ventana similar a la que se muestra:
Haga click con el ratón sobre el botón << y a continuación
elija de la lista de la izquierda ForeColor y haga click sobre
el botón >. La propiedad ForeColor es la propiedad encargada de
cambiar el color de texto, la cual no está disponible en
nuestro control, por ello debemos asociarla. El aspecto del
Asistente para interfaz de control ActiveX debe ser similar a:
Pág. 367
Pulse, luego el botón Siguiente. En seguida aparecerá otra
ventana, haga nuevamente click en el botón Siguiente.
Pág. 368
Ahora hemos llegado a la ventana en la cual vamos a
asociar a nuestro control la propiedad ForeColor. Seleccione
del ComboBox Control UserControl y del ComboBox Miembro
ForeColor, tal como se indica en la ventana anterior. Pulse el
botón Siguiente y en la siguiente ventana pulse el botón
Finalizar. Aparecerá luego una ventana de información, lea
detenidamente su contenido y luego haga click en el botón
Cerrar. A continuación guarde su aplicación y genere nuevamente
el control.
Para probar el control abra el formulario
FrmPruebaMiControl y añada al Cuadro de herramientas el
componente Microsoft Common Dialog Control 6.0. En seguida
añada al formulario un MiControl, un CommonDialog y un
CommandButton. Cambie el nombre del botón Command1 por
CmdAceptar e ingrese el siguiente código:
Private Sub CmdAceptar_Click()
CommonDialog1.ShowColor
MiControl1.ForeColor = CommonDialog1.Color
MiControl1.Visible = False
MiControl1.Visible = True
End Sub
Guarde y luego ejecute su aplicación, el resultado será
similar al siguiente:
Pág. 369
Al hacer click sobre el botón Aceptar, se presenta la
siguiente caja de diálogo en la cual podemos elegir el nuevo
color para el texto de bienvenida:
Preste atención en que la propiedad Visible se utiliza
para actualizar el contenido del control y se pueda ver el
cambio de color. No es la mejor forma de hacerlo, deberíamos
hacerlo mediante código dentro del mismo control, pero por el
momento y para probar como asociar una propiedad a un control
es más que suficiente.
Aplicación Nº 3
Diseñar un control ActiveX que presente la forma de un
cuadro de texto, pero que sólo admita números. Es decir, el
usuario sólo podrá escribir en el control números, cualquier
otro carácter que no sea un número, será rechazado por el
control y no se imprimirá en el cuadro de texto.
Al igual que en la aplicación anterior crear el grupo de
proyectos y establezca las propiedades según:
Pág. 370
Proyecto1
Nombre ActiveXNumBox
UserControl1
Nombre NumBox
ToolboxBitmap C:\Archivos de programa\Microsoft Visual
Studio\Common\Graphics\Bitmaps\Assorted\
Diamond.bmp
Proyecto2
Nombre VbpNumBox
Form1
Nombre FrmPruebaNumBox
Caption Prueba de Control ActiveX
BorderStyle 3-Fixed Dialog
Para diseñar nuestro control utilizaremos un control
TextBox el cual debe insertar en el formulario NumBox
(UserControl). Luego elimine el contenido de la propiedad Text.
Tener cuidado en que el control ha de ser del mismo tamaño del
cuadro de texto. Luego, el cuadro de texto debe redimensionarse
de acuerdo al control en tiempo de diseño, esto es a la hora de
insertar nuestro control en un formulario. Para ello es
necesario ingresar el siguiente código:
Private Sub UserControl_Resize()
Text1.Top = 0
Text1.Left = 0
Text1.Width = UserControl.Width
Text1.Height = UserControl.Height
End Sub
Pág. 371
Private Sub UserControl_InitProperties()
Text1 = Extender.Name
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If Not (KeyAscii = 8 Or _
(KeyAscii >= 48 And KeyAscii <= 57)) Then
KeyAscii = 0: Beep: Beep: Beep: Beep
End If
End Sub
A continuación genere el control NumBox y cierre el
formulario de diseño del control. Establezca como inicial el
proyecto VbpNumBox y añada un control NumBox y un CommandButton
al formulario FrmPruebaNumBox. Cambie el nombre del botón de
comando por CmdSalir. A continuación guarde y ejecute su
aplicación, el resultado debe ser similar al mostrado:
El control que acabamos de diseñar permite escribir
únicamente números, es decir es un cuadro de números. Trate de
ingresar otros caracteres y vea lo que sucede.
Aplicación Nº 4
Crear un control ActiveX que permita el ingreso del día,
mes y el año correspondiente a cualquier fecha desde el año 1
hasta el año 9999. Deberá validar la fecha ingresada y no
deberá permitir la edición de fechas no existentes como por
Pág. 372
ejemplo 5 de Setiembre de 1752. El control deberá mostrar el
día de la semana correspondiente a la fecha ingresada, tal como
se muestra en la figura siguiente:
El calendario Gregoriano actual obedece a la reforma del
calendario Juliano que ordenó el papa Gregorio XIII en 1752,
para ponerlo de acuerdo con los movimientos de los cuerpos
celestes. Lo cual trajo como consecuencia adelantar las fechas
del 2 de Setiembre al 14 de Setiembre de 1752, es decir las
fechas comprendidas en este intervalo de tiempo nunca
existieron.
Pág. 373
Microsoft Visual Basic
GUÍA DE LABORATORIO Nº 10
Objetivos
Luego de completar este laboratorio, el estudiante será
capaz de:
• Crear documentos ActiveX que se ejecuten directamente en una
página Web.
• Utilizar documentos ActiveX que incorporan hipervínculos.
• Desarrollar documentos ActiveX para interactuar con bases de
datos relacionales.
Consideraciones
Para el desarrollo del presente laboratorio Ud. deberá
crear una carpeta C:\FundVB\Lab10, para guardar sus trabajos
correspondientes a este laboratorio.
Aplicación Nº 1
Como primer ejercicio vamos a desarrollar un documento
ActiveX que permite recuperar información de la base de datos
CursosLibres.MDB.
Un documento ActiveX, es simplemente un formulario que se
puede ejecutar directamente en los exploradores de Internet.
Los documentos ActiveX se diseñan de la misma manera que los
formularios estándar de Visual Basic. Para comenzar a
desarrollar nuestro documento ActiveX, debe ingresar a Visual
Basic y en la ventana de diálogo Nuevo Proyecto seleccione EXE
de documento ActiveX y luego haga click en el botón Aceptar,
tal como se indica en la figura:
Pág. 374
A continuación proceda a diseñar la siguiente interfaz de
usuario:
Pág. 375
Para tal efecto, proceda a ubicar los siguientes controles
en el formulario:
3 etiquetas
1 cuadro combinado
1 control DataGrid
1 botón de comandos
En seguida proceda a establecer las propiedades según se
indica:
Label1
Nombre LblTitulo1
AutoSize True
Caption Instituto de Educación Superior
Font Arial (Negrita 12)
ForeColor &H00C00000&
Label2
Nombre LblTitulo2
AutoSize True
Caption “Víctor Andrés Belaúnde”
Font Times New Roman (Negrita 24)
ForeColor &H000000FF&
Label3
Nombre LblTablas
AutoSize True
Caption Vacantes:
Font Arial (Negrita 10)
Combo1
Nombre CboTabla
Font Arial (Negrita 10)
Text
DataGrid1
Pág. 376
Nombre BdgrdTabla
Font Arial (Negrita 10)
HeadFont Arial (Negrita 10)
Command1
Nombre CmdAceptar
Caption &Mostrar
Una vez establecidas las propiedades, proceda a ingresar
el siguiente código:
Dim Cn As ADODB.Connection
Dim RsAlumno As ADODB.Recordset
Dim RsCurso As ADODB.Recordset
Dim RsLaboratorio As ADODB.Recordset
Private Sub UserDocument_Initialize()
Set Cn = New ADODB.Connection
Cn.Open “Provider=Microsoft.Jet.OLEDB.4.0;” & _
“Data Source=C:\FundVB\Data\CursosLibres.MDB;” & _
“Persist Security Info=False”
CboTabla.AddItem “Alumno”
CboTabla.AddItem “Curso”
CboTabla.AddItem “Laboratorio”
End Sub
Private Sub MostrarAlumno()
Set RsAlumno = New ADODB.Recordset
RsAlumno.ActiveConnection = Cn
RsAlumno.CursorType = adOpenStatic
RsAlumno.LockType = adLockReadOnly
RsAlumno.CursorLocation = adUseClient
RsAlumno.Open “Select AluCodigo As Código, ” & _
Pág. 377
“(AluPaterno + ' ' + AluMaterno) As Apellidos, ” & _
“AluNombres As Nombres From Alumno”
Set DbgrdTabla.DataSource = RsAlumno
End Sub
Private Sub MostrarCurso()
Set RsCurso = New ADODB.Recordset
RsCurso.ActiveConnection = Cn
RsCurso.CursorType = adOpenStatic
RsCurso.LockType = adLockReadOnly
RsCurso.CursorLocation = adUseClient
RsCurso.Open “Select CurCodigo As Código, ” & _
“CurNombre As Nombre, ” & _
“CurVacantes As Vacantes, ” & _
“CurProfe As Profesor From Curso”
Set DbgrdTabla.DataSource = RsCurso
End Sub
Private Sub MostrarLaboratorio()
Set RsLaboratorio = New ADODB.Recordset
RsLaboratorio.ActiveConnection = Cn
RsLaboratorio.CursorType = adOpenStatic
RsLaboratorio.LockType = adLockReadOnly
RsLaboratorio.CursorLocation = adUseClient
RsLaboratorio.Open “Select LabCodigo As Código, ” & _
“LabHora As Horario, ” & _
“LabProfe As [Jefe de práctica] From Laboratorio”
Set DbgrdTabla.DataSource = RsLaboratorio
End Sub
Private Sub CmdMostrar_Click()
Select Case CboTabla.ListIndex
Pág. 378
Case 0
Call MostrarAlumno
Case 1
Call MostrarCurso
Case 2
Call MostrarLaboratorio
End Select
End Sub
Finalmente guarde y pruebe su documento ActiveX. El
resultado debe ser similar a la figura que se muestra a
continuación:
Aplicación Nº 2
Al documento ActiveX desarrollado en el ejercicio
anterior, añadirle un botón Acerca de, que presente la
Pág. 379
información referente al autor (o autores) de la aplicación. El
diseño del formulario debe ser tal como se muestra a
continuación:
En primer lugar proceda a añadir un formulario estándar al
proyecto. Cambie el nombre del formulario por el de FrmAcercaDe
y diseñe la interfaz pedida.
En seguida añada un botón de comandos al documento ActiveX
y cambie su nombre por CmdAcerca. Luego haga doble click sobre
dicho botón e ingrese el siguiente código:
Private Sub CmdAcerca_Click()
Load FrmAcercaDe
FrmAcercaDe.Show vbModal
End Sub
Finalmente guarde y pruebe su aplicación. Como puede
apreciar desarrollar documentos ActiveX no es nada complicado.
Aplicación Nº 3
Al documento ActiveX desarrollado anteriormente añadirle
un botón Ir a, que permita enlazarnos con la dirección que se
Pág. 380
ingrese en el cuadro de texto adjunto. El diseño del documento
se muestra a continuación:
Para lograr lo que se pide, añada un botón de comandos y
un cuadro de texto y cambie sus nombres por CmdURL y TxtURL
respectivamente. Luego ingrese el siguiente código:
Private Sub CmdURL_Click()
UserDocument.Hyperlink.NavigateTo TxtURL
End Sub
Aplicación Nº 4
Elaborar un documento ActiveX que permita mostrar el
contenido de la tabla Curso de la base de datos
Pág. 381
CursosLibres.MDB. A continuación el usuario selecciona un curso
y tiene la posibilidad de separar la matrícula o en su defecto
matricularse en el curso de su elección. El diseño de la
aplicación debe ser similar a la siguiente figura:
Sugerencia: Añadir una nueva tabla a la base de datos para
registrar a los alumnos matriculados o con separación de
matrícula.
Microsoft Visual Basic
Pág. 382
GUÍA DE LABORATORIO Nº 11
Objetivos
Luego de completar este laboratorio, el estudiante será
capaz de:
• Diseñar páginas Web dinámicas mediante aplicaciones DHTML.
• Desarrollar aplicaciones DHTML para interactuar con los datos
de un sistema distribuido de bases de datos relacionales.
• Implementar aplicaciones mediante código Visual Basic y
código HTML.
• Agregar funcionalidad a sus aplicaciones para explorar Web.
Consideraciones
Para el desarrollo del presente laboratorio Ud. deberá
crear una carpeta C:\FundVB\Lab11, para guardar sus trabajos
correspondientes a este laboratorio.
Aplicación Nº 1
En este ejercicio, vamos a desarrollar una aplicación
DHTML que lea un número entero y muestre su tabla de
multiplicar.
En su forma más sencilla, una aplicación DHTML (Dynamic
HyperText Markup Language) puede consistir de una o más páginas
HTML enlazadas con código Visual Basic y el modelo de objetos
HTML dinámico.
Para comenzar a desarrollar nuestra aplicación, ingresar a
Visual Basic y en la ventana de diálogo Nuevo Proyecto
seleccione Aplicación DHTML, y haga click en el botón Aceptar.
Pág. 383
Al observar la ventana del Explorador de proyectos, esta
presentará la siguiente apariencia:
Visual Basic agrega automáticamente un Diseñador de
páginas DHTML al proyecto. En seguida, haga doble click sobre
DHTMLPage1 y proceda a establecer las propiedades que se
indican:
DHTMLPage1
Nombre DHTMLTablaMultiplicar
Id DHTMLTablaMultiplicar
Pág. 384
Para crear la interfaz de la aplicación DHTML, simplemente
tenemos que ir agregando elementos HTML de la caja de
herramientas. De esa manera, realice el diseño de la página
mostrada en la siguiente figura:
Una vez terminado el proceso de diseño de la página,
seleccione el encabezado Tabla de Multiplicar y haga click en
el cuarto botón de la barra de herramientas del Diseñador
(Ajustar la selección en <SPAN> . . . </SPAN>). En seguida, sin
dejar de seleccionar el encabezado, active la Ventana de
propiedades y establezca lo siguiente:
Tabla de Multiplicar
Id Titulo
A continuación proceda a establecer las propiedades para
los demás controles según se indica:
Pág. 385
TextField1
Nombre TxtN
Id TxtN
Value
TextArea1
Nombre TxtTabla
Id TxtTabla
Value
En seguida haga doble click sobre el cuadro de texto TxtN
e ingrese lo siguiente:
Private Sub DHTMLPage_Load()
Document.bgColor = “Yellow”
Titulo.Style.Color = “Red”
End Sub
Private Sub Titulo_onmouseout()
Titulo.Style.Color = “Red”
End Sub
Private Sub Titulo_onmouseover()
Titulo.Style.Color = “Blue”
End Sub Private Sub TxtN_onpropertychange()
If IsNumeric(TxtN.Value) Then
Dim N As Integer, I As Integer, S As String
N = Val(TxtN.Value)
For I = 0 To 12
S = S & N & “ * ” & I & “ = ” & N * I & vbCrLf
Next I
Pág. 386
TxtTabla.Value = S
Else
TxtTabla.Value = “”
End If
End Sub
Finalmente, guarde y pruebe su aplicación DHTML. El
resultado debe ser similar a la figura siguiente:
Aplicación Nº 2
Desarrollar una aplicación DHTML que permita visualizar el
contenido de la tabla Curso de la base de datos
CursosLibres.MDB. El diseño de la página debe ser similar al
mostrado:
Pág. 387
Para desarrollar nuestra aplicación, lo primero que debe
de hacer es abrir una nuevo proyecto DHTML. Luego debe crear la
conexión a la base de datos CursosLibres.MDB. Para ello ingrese
al menú Proyecto seleccione la opción Agregar Data Environment.
En la ventana Data Environment cambie el nombre del objeto
DataEnvironment por DeCursosLibres y el de la conexión por
CnCursosLibres. Luego, añada un Comando y denomínelo CmCurso.
Haga click derecho sobre el comando y seleccione Propiedades. A
continuación seleccione la opción Instrucción SQL e ingrese el
siguiente código:
Pág. 388
Select CurCodigo, CurNombre, CurVacantes, CurProfe From Curso
Luego haga click en el botón Aceptar. El aspecto de la
ventana Data Environment debe ser similar al siguiente:
En seguida proceda a diseñar la página. Para ello digite
los encabezados y etiquetas necesarios. Luego añada los
siguientes controles HTML al diseñador de páginas DHTML:
4 cajas de texto
4 botones de comandos
Pág. 389
A continuación, proceda a establecer las propiedades según
se indica:
“Víctor Andrés Belaúnde”
Id Titulo
TextField1
Nombre TxtCurCodigo
Id TxtCurCodigo
Value
TextField2
Nombre TxtCurNombre
Id TxtCurNombre
Value
TextField3
Nombre TxtCurVacantes
Id TxtCurVacantes
Value
TextField4
Nombre TxtCurProfe
Id TxtCurProfe
Value
Button1
Nombre CmdPrimero
Id CmdPrimero
Value Primero
Pág. 390
Button2
Nombre CmdAnterior
Id CmdAnterior
Value Anterior
Button3
Nombre CmdSiguiente
Id CmdSiguiente
Value Siguiente
Button4
Nombre CmdUltimo
Id CmdUltimo
Value Ultimo
Mediante el Data Environment, ADO y el objeto
BindingCollection, es posible enlazar elementos de una página
DHTML con un origen de datos cuando se carga la página. Esto le
permite modificar los datos y escribir código para actualizar
un conjunto de registros subyacente o simplemente desplazarse a
través de los mismos. Por ejemplo, puede usar un objeto
BindingCollection con un objeto Recordset de ADO para enlazar
los elementos TextField de la página de código HTML con campos
de la tabla Curso.
Para poder utilizar los objetos de la Microsoft Data
Binding Collection es necesario cargar la librería
correspondiente. Selecciones el menú Proyecto y elija la opción
Referencias. En el cuadro de diálogo Referencias seleccione la
opción Microsoft Data Binding Collection, tal como se indica en
la figura:
Pág. 391
A continuación declare una variable de tipo
BindingCollection en la sección de Declaraciones de la página
DHTML y proceda a ingresar el código que se muestra:
Dim ColBind As BindingCollection
Private Sub DHTMLPage_Load()
Document.bgColor = “Yellow”
Titulo.Style.Color = “Blue”
Set ColBind = New BindingCollection
Set ColBind.DataSource = DeCursosLibres
ColBind.DataMember = “CmCurso”
ColBind.Add TxtCurCodigo, “Value”, “CurCodigo”
ColBind.Add TxtCurNombre, “Value”, “CurNombre”
ColBind.Add TxtCurVacantes, “Value”, “CurVacantes”
ColBind.Add TxtCurProfe, “Value”, “CurProfe”
End Sub
Pág. 392
Private Function CmdPrimero_onclick() As Boolean
DeCursosLibres.rsCmCurso.MoveFirst
End Function
Private Function CmdAnterior_onclick() As Boolean
DeCursosLibres.rsCmCurso.MovePrevious
If DeCursosLibres.rsCmCurso.BOF Then
DeCursosLibres.rsCmCurso.MoveFirst
End If
End Function
Private Function CmdSiguiente_onclick() As Boolean
DeCursosLibres.rsCmCurso.MoveNext
If DeCursosLibres.rsCmCurso.EOF Then
DeCursosLibres.rsCmCurso.MoveLast
End If
End Function
Private Function CmdUltimo_onclick() As Boolean
DeCursosLibres.rsCmCurso.MoveLast
End Function
Finalmente, guarde y pruebe su aplicación.
Aplicación Nº 3
Diseñar una aplicación que permita cargar en una tabla
HTML el contenido de la tabla Curso. La tabla HTML se debe
crear dinámicamente de acuerdo al número de registros
existentes.
Para desarrollar nuestra aplicación, añada una nueva
página DHTML al proyecto anterior. Para ello seleccione el menú
Proyecto y elija la opción Agregar DHTML Page. En seguida
proceda a ingresar el siguiente código:
Dim ColBind As BindingCollection
Pág. 393
Private Sub DHTMLPage_Load()
Dim RsResults As ADODB.Recordset
Set ColBind = New BindingCollection
Set ColBind.DataSource = DeCursosLibres
ColBind.DataMember = “CmCurso”
Set RsResults = DeCursosLibres.rsCmCurso
Do While Not RsResults.EOF
Document.body.insertAdjacentHTML “BeforeEnd”, _
“<Table Border Cellspacing=1 Cellpadding=7>” & _
“<Td Width=50>” & RsResults!CurCodigo & “</Td>” & _
“<Td Width=200>” & RsResults!CurNombre & “</Td>” & _
“<Td Width=50>” & RsResults!CurVacantes & “</Td>” & _
“<Td Width=200>” & RsResults!CurProfe & “</Td>” & _
“</Table>”
RsResults.MoveNext
Loop
RsResults.MoveFirst
RsResults.Close
End Sub
Finalmente, no olvide cambiar el componente de inicio
antes de ejecutar su aplicación.
Aplicación Nº 4
Diseñar una aplicación DHTML que permita seleccionar de un
control Select (similar a un cuadro combinado), el nombre de un
profesor y a continuación se muestren en una tabla HTML
dinámica los cursos que dicta dicho profesor.
Un elemento Select, es similar a un cuadro combinado. Por
ejemplo, para agregar un elemento Select denominado SelProfe a
una la página HTML, simplemente arrastrar el elemento a la
página. A continuación establecer las siguientes propiedades:
Pág. 394
Seleccion1
Nombre SelProfe
Id SelProfe
Value
Para especificar los elementos de lista que se deben
mostrar en el elemento Select agregar el siguiente código al
procedimiento de evento Load de la página HTML, veamos:
Private Sub DHTMLPage_Load()
Dim SelElement As HTMLSelectElement
Dim Cn As ADODB.Connection
Dim RsProfe As ADODB.Recordset
Set Cn = New ADODB.Connection
Set RsProfe = New ADODB.Recordset
Cn.Open “Provider=Microsoft.Jet.OLEDB.4.0;” & _
“Data Source=C:\FundVB\Data\CursosLibres.MDB;” & _
“Persist Security Info=False”
RsProfe.ActiveConnection = Cn
RsProfe.CursorType = adOpenStatic
RsProfe.LockType = adLockOptimistic
RsProfe.CursorLocation = adUseClient
RsProfe.Open “Select Distinct CurProfe From Curso”
Do While Not RsProfe.EOF()
Set SelElement = Document.createElement(“OPTION”)
SelElement.Text = RsProfe!CurProfe
SelProfe.Options.Add SelElement
RsProfe.MoveNext
Loop
End Sub
Al ejecutar su aplicación debe ser similar a la figura
mostrada:
Pág. 395
Finalmente a manera de ejercicio para el estudiante,
proceda a escribir el código necesario para mostrar la
información relacionada con cada profesor.
Pág. 396
Microsoft Visual Basic
GUÍA DE LABORATORIO Nº 12
Objetivos
Luego de completar este laboratorio, el estudiante será
capaz de:
• Utilizar funciones API de Windows desde Microsoft Visual
Basic.
• Convertir declaraciones de C a Visual Basic.
• Añadir un sistema de ayuda a una aplicación.
• Usar el asistente para empaquetado y distribución.
• Generar programas de instalación mediante disquetes, carpetas
en una unidad local de red o en una publicación Web.
Consideraciones
Para el desarrollo del presente laboratorio Ud. deberá
crear una carpeta C:\FundVB\Lab12, para guardar sus trabajos
correspondientes a este laboratorio.
Aplicación Nº 1
Un programador de aplicaciones Visual Basic, además de
conocer su entorno de trabajo, debe conocer su entorno de
programación, conocido generalmente como Interfaz de
Programación de Aplicaciones para Windows (Windows Application
Programming Interface, Windows API).
La API de Windows viene a ser un conjunto de funciones
desarrolladas en lenguaje C. Sin embargo, muchos programadores
de Visual Basic recurren a estas funciones para conseguir hacer
lo que es imposible (o muy complicado) desde Visual Basic.
Pág. 397
Las funciones API de Windows no son nada complicadas como
pueden pensar algunos programadores de Visual Basic.
Como primer ejercicio vamos a escribir una aplicación que
permita modificar el título de un formulario. En la práctica,
siempre se modifican los títulos del formulario con la
propiedad Caption de Visual Basic, pero este ejercicio ofrece
una manera sencilla de declarar y llamar a una API de Windows.
El primer paso consiste en añadir un módulo de código al
proyecto. En seguida proceda a declarar la función en la
sección de declaraciones del módulo:
Public Declare Function SetWindowText Lib “user32” _
Alias “SetWindowTextA” (ByVal hWnd As Long, _
ByVal lpString As String) As Long
Luego, en el formulario ingrese el código que se muestra a
continuación:
Private Sub Form_Load()
SetWindowText Form1.hWnd, “Bienvenidos a la API de Windows”
End Sub
Al ejecutar su aplicación, su resultado debe ser similar a
la siguiente figura:
Pág. 398
Aplicación Nº 2
Desarrollar una aplicación que permita reproducir un
archivo Wav o Midi. Utilizar la función API de Windows
mciExecute para lograr el objetivo deseado.
Como se sabe, el lenguaje C diferencia las letras
mayúsculas de las minúsculas. Por ello, si Ud. comete un error,
por ejemplo utiliza una letra mayúscula en lugar de una
minúscula (o viceversa), la función declarada no será
reconocida y obtendrá un mensaje de error.
Para evitar este tipo de problemas, vamos a utilizar el
Visor API de Windows. En seguida, del menú Complementos elija
la opción Administrador de Complementos. Del cuadro de diálogo
que se presenta cargar la opción Visor de API de VB 6. Al dar
un click en el botón Aceptar, se añadirá en el menú
Complementos la opción Visor de API.
En seguida ingrese al Visor de API. Se debe presentar una
pantalla similar a la siguiente:
Pág. 399
En la pantalla anterior, seleccione el menú Archivo y
elija la opción Cargar archivo de texto. En el cuadro de
diálogo que se presenta elegir el archivo Win32api.Txt y dar un
click en el botón Abrir.
Pág. 400
De la siguiente pantalla Ud. podrá seleccionar la función
que desea, luego active la opción público y dar un click en el
botón Agregar para visualizar el código de declaración de dicha
función.
En seguida haga click en el botón Copiar y pegue dicho
código a su aplicación. Recordar que la declaración de la
función API se debe realizar en un módulo, por lo tanto debe
agregar un nuevo módulo y pegar el siguiente código:
Public Declare Function mciExecute Lib “winmm.dll” _
(ByVal lpstrCommand As String) As Long
Luego proceda a diseñar la interfaz de la aplicación. Para
ello ubique los siguientes controles:
1 control Image
Pág. 401
2 botones de comando
En seguida establezca las propiedades según se indica a
continuación:
Form1
Nombre FrmMultimedia
Caption Hacer sonar un fichero Wav o Midi
BorderStyle 3-Fixed Dialog
Image1
Picture C:\Archivos de programa\Microsoft Visual
Studio\Common\Graphics\Icons\Misc\Mike.ico
Stretch True
Command1
Nombre CmdEjecutar
Caption &Ejecutar
Command2
Nombre CmdSalir
Caption &Salir
Una vez establecidas las propiedades, proceda a ingresar
el siguiente código:
Private Sub CmdEjecutar_Click()
iResult = mciExecute(“Play c:\vbN2\bmp\34.wav”)
End Sub
Private Sub CmdSalir_Click()
Unload Me
End Sub Aplicación Nº 3
Pág. 402
Uno de los temas en los que Windows ha creado un estándar
es el sistema de ayuda de las aplicaciones. Para ello incluye
una aplicación denominada WinHelp como motor de ayuda de
Windows.
Los pasos necesarios para crear un sistema de ayuda son
los siguientes:
• Crear un archivo de texto RTF.
• Compilar el archivo RTF mediante el compilador de ayudas Help
Workshop, para obtener el archivo HLP.
• Utilizar el motor de ayuda WinHelp.
En vista de lo anterior, lo primero que necesitamos para
crear nuestro sistema de ayuda, es un archivo con formato RTF
donde se incluirá el texto de la ayuda. Para ello ingrese a
Microsoft Word 2000 y digite lo siguiente:
Microsoft Visual Basic 6.0
Curso de programación
Profesor Carlos Castillo Peralta Contenido
• Microsoft Visual Basic Nivel I • Microsoft Visual Basic Nivel II • Microsoft Visual Basic Nivel III
En seguida ubique el cursor en la última línea de texto y
presione la combinación de teclas Ctrl + Enter, para comenzar
en una nueva página. A continuación digite lo siguiente:
Pág. 403
Microsoft Visual Basic 6.0
Curso de programación
Profesor Carlos Castillo Peralta Nivel I
• Conceptos básicos • Elementos del lenguaje • Entrada y salida de datos • Sentencias de control • Arreglos • Estructuras • Archivos de datos
Volver
En seguida ubique el cursor en la última línea de texto
que acaba de ingresar y pulse Ctrl + Enter para comenzar a
digitar el siguiente texto en una página diferente:
Microsoft Visual Basic 6.0
Curso de programación
Profesor Carlos Castillo Peralta Nivel II
• Creación de bases de datos • Aplicaciones Cliente Servidor • Sentencias SQL • Entorno de datos • Objetos de Datos ActiveX (ADO) • Reportes
Volver
Pág. 404
De manera análoga a los demás casos, ubique el cursor en
la última línea de texto y presione Ctrl + Enter. En seguida
ingrese el siguiente texto:
Microsoft Visual Basic 6.0
Curso de programación
Profesor Carlos Castillo Peralta Nivel III
• Creación componentes • Lenguaje HTML • Visual Basic Script • Aplicaciones DHTML • API de Windows • Creación de archivos de ayuda • Empaquetado y distribución
Volver
Finalmente, debe obtener un archivo de cuatro páginas.
Guarde su archivo como MiAyuda.RTF.
El archivo de ayuda que vamos a construir va a utilizar
más de una página, y en ese caso se requiere especificar un
identificador para cada página.
Ahora procederemos a crear los identificadores de páginas.
Para ello ubicar el cursor en la primera página antes del
encabezado Microsoft Visual Basic 6.0 y seleccione del menú
Insertar la opción Nota al pie. Luego, ingresar como marca
personal el símbolo # tal como se muestra en la siguiente
figura:
Pág. 405
Al dar click en el botón Aceptar, el cursor se ubicará
automáticamente en el pie de página donde debe digitar VBMain
delante del símbolo #.
En la misma página, ubicar el cursor delante de la palabra
Microsoft Visual Basic Nivel I y darle el atributo de subrayado
doble. Luego, escribir VB1 inmediatamente después del texto
subrayado y a este identificador darle el atributo de oculto.
Realizar acciones similares para las dos siguientes
líneas, después del texto Microsoft Visual Basic Nivel II
escribir VB2 y para Microsoft Visual Basic Nivel III escribir
VB3. No olvidar que estos identificadores deben tener atributo
de oculto.
En la segunda página ubicar el cursor antes del encabezado
Microsoft Visual Basic 6.0 y seleccione del menú Insertar la
opción Nota al pie. Luego, ingresar como marca personal el
símbolo # y luego digitar en el pie de página VB1. Luego en la
misma página, posicionar el cursor delante de la palabra Volver
y darle el atributo de subrayado doble. Escribir VBMain
inmediatamente después del texto subrayado y a este
identificador darle el atributo de oculto.
Pág. 406
Continuar de manera similar con las siguientes páginas. Al
concluir vuelva a guardar su archivo. La primera página debe
presentar una apariencia similar a la siguiente figura:
Continuando con nuestro esquema, ahora debemos generar el
archivo HLP a partir del archivo RTF que acabamos de crear.
Para ello debemos ejecutar la aplicación Microsoft Help
Workshop. Desde el menú Inicio, elija la carpeta Programas,
luego elija la carpeta Microsoft Visual Studio 6.0, en seguida
seleccione la carpeta Herramientas de Microsoft Visual Studio
6.0, y luego haga clic sobre la aplicación Help Workshop. A
continuación se presentará una ventana similar a la mostrada en
la siguiente figura:
Pág. 407
Seleccione el menú File y elija la opción New. A
continuación se mostrará un cuadro de diálogo similar al
siguiente:
Seleccione la opción Help Project y dar un click en el
botón OK. En seguida se presentará una ventana en la cual debe
indicar el nombre y la ruta del archivo HLP que desea generar.
Para nuestro caso digite MiAyuda y haga click sobre el botón
Guardar, tal como se indica en la figura que se muestra a
continuación:
Pág. 408
Al hacer click en el botón Guardar, en seguida se
presentará la siguiente pantalla:
Ahora que Ud. ha creado un proyecto de ayuda, necesita
agregar la información sobre su archivo o archivos de ayuda.
Pág. 409
¿Ha creado su archivo de ayuda MiAyuda.RTF? Si Ud. ya lo
ha creado haga click en el botón Files y en seguida aparecerá
la siguiente pantalla:
Luego dar un click en el botón Add. En seguida se
presentará la siguiente ventana en la cual debe especificar el
nombre y la ruta de su archivo de ayuda RTF. Para nuestro
seleccione MiAyuda y haga click en el botón Abrir.
Pág. 410
En seguida se mostrará la siguiente pantalla. Ud. haga
click sobre el botón OK.
A continuación se presentará una pantalla similar a la
figura mostrada:
Pág. 411
A continuación vamos a definir una ventana. Para ello haga
click sobre el botón Windows. En seguida aparecerá un cuadro de
diálogo en el cual debe ingresar el nombre de la ventana. Para
nuestro caso digite Main. Luego haga click en el botón OK.
En seguida se presentará el siguiente cuadro de diálogo.
En la ficha General ingrese el texto que se indica para la
barra de título de la ventana.
Pág. 412
En la ficha Position defina el tamaño inicial de la
ventana de ayuda, para ello haga click en el botón Auto-Sizer.
En seguida se presentará una ventana de prueba similar a
la que se muestra en la figura siguiente. Cambie las
dimensiones de esta ventana según su parecer y haga click en el
botón OK.
Pág. 413
A continuación seleccione la ficha Buttons y active los
botones que Ud. quiere agregar para su ventana.
Luego seleccione la ficha Color. En seguida se presentará
una pantalla similar a la siguiente:
Pág. 414
Para cambiar el color de la zona de no desplazamiento o la
zona de desplazamiento pulse el botón Change al lado de la
ventana de muestra. Escoja el color que Ud. desee y entonces
haga click en el botón Aceptar.
El archivo de proyecto debe presentar una apariencia
similar a la figura mostrada:
Bueno, Ud. acaba de crear su primer proyecto de ayuda
básico. Más adelante si así lo necesitará puede cambiar
cualquiera de estas opciones. Para ello simplemente debe abrir
su archivo de proyecto de ayuda y realizar los cambios que
considere pertinente.
Finalmente guarde y pruebe su proyecto. Para lo cual debe
dar click en el botón Save and Compile. En seguida se
presentará una pantalla similar a la siguiente:
Pág. 415
En seguida ingrese al menú File y elija la opción Run
WinHelp. Luego, se presentará una pantalla similar a la
mostrada:
Pág. 416
En seguida dar click en el botón View Help. A continuación
se presentará una pantalla similar a la figura siguiente.
Pruebe ingresando a las otras páginas, para ello simplemente
haga click en cualquiera de los tres ítems que se muestran en
la sección Contenido.
¿Sabe Ud. como añadir una imagen de mapa de bits a nuestro
archivo de ayuda? La respuesta es bastante sencilla. Para ello
realice los siguientes pasos:
Ingrese a Microsoft Word 2000 y proceda a abrir el archivo
MiAyuda.RTF. Ubiquese en la primera página y añada el siguiente
texto {BMC CCP.BMP} antes del nombre del profesor. Luego guarde
su archivo.
A continuación cargue el Help Workshop. Luego dar click
sobre el botón Bitmaps. Se presentará una pantalla similar a la
figura siguiente:
Pág. 417
En seguida haga click en el botón Add. A continuación se
presentará una ventana similar a la siguiente figura:
En el cuadro de diálogo anterior seleccione la ruta que se
indica. Luego haga click en el botón OK.
Finalmente, grabe y compile su proyecto de ayuda. Para
ello dar click en el botón View Help.
Pág. 418
A continuación se presentará una ventana similar a la
siguiente figura:
Por último, veremos como utilizar nuestros archivos de
ayuda desde una aplicación Visual Basic. Para tal fin abra un
nuevo proyecto y añada un botón de comandos al formulario.
Cambie el nombre del botón por CmdAyuda y proceda a ingresar el
siguiente código:
Private Sub CmdAyuda_Click()
Dim Ayuda
Ayuda = Shell(“C:\Windows\WinHelp.exe ” & _
“C:\FundVB\Lab12\MiAyuda.HLP”, 1)
End Sub
Aplicación Nº 4
Pág. 419
Después de crear una aplicación Visual Basic, por lo
general debemos proporcionársela al usuario final, ya sea en
disquetes, CD, a través de una red local, o bien a través de
una Intranet o Internet. Esto requiere primero empaquetar la
aplicación y después distribuirla.
Como ejemplo, vamos a generar el programa de instalación
para la aplicación creada en el ejercicio anterior. Para ello
es necesario que tenga abierta dicha aplicación.
Primero debemos iniciar el Asistente de empaquetado y
distribución. Para tal fin, del Menú Complementos seleccione la
opción Administrador de complementos y añada la utilidad
Package and Deployment Wizard. Al momento de iniciar el
Asistente se visualizará una ventana similar a la siguiente
figura:
Pág. 420
En seguida haga click en el botón Empaquetar. Esto hará
que el Asistente le presente varios cuadros de diálogo que le
pedirán información referente al proyecto que vamos a
empaquetar y le permitirá elegir qué opciones quiere incorporar
al programa de instalación, el tipo de empaquetado, la carpeta
donde se almacenará el paquete de instalación, qué archivos
desea incluir adicionalmente en el paquete, qué grupos y
elementos de grupo del menú Inicio se deberán crear en el
equipo del usuario final durante la instalación de la
aplicación, etc. A medida que avanza, si necesita más
información consulte al Jefe de Práctica.
Una vez concluido el proceso de empaquetado cierre
Microsoft Visual Basic. Luego haga click en el menú Inicio y
seleccione la opción Ejecutar. Seguidamente ingrese la ruta de
nuestro programa de instalación y dar click en Aceptar, tal
como se indica en la figura:
En esos instantes se dará inicio a la instalación de
nuestra aplicación. Concluido este proceso, seleccione el menú
Inicio, carpeta Programas y ubique la carpeta que contiene la
aplicación. Finalmente proceda a ejecutar su aplicación.
Fin de las prácticas de laboratorio.
Suerte.
Pág. 421
Recommended