borland c++ 5

Anuncio
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
Pág. 1
otras
aplicaciones Windows. El lenguaje de programación Visual Basic
Script
para
programar
en
Internet
es
un
subconjunto
del
lenguaje Visual Basic. De tal forma, que la inversión realizada
en el aprendizaje de Visual Basic le ayudará a abarcar estas
otras áreas.
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
diseñar la interfaz gráfica de usuario.
Pág. 4
permiten
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
aplicación o proyecto.
Pág. 6
la
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
relativas
menú
a
un
emergente
que
determinado
presenta
objeto.
órdenes
Para
específicas
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
siguiente
ver
como
ejemplo
se
para
realiza
crear
esto,
una
siga
aplicación
los
pasos
del
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
siguiente
y
pulsar
muestra
las
la
tecla
F4.
propiedades
Por
del
ejemplo
botón
de
la
figura
comando
y
podemos ver que la propiedad Caption tiene el valor “Command1”.
Pág. 10
Puede
cambiar
seleccionándolo
modificando
su
de
el
la
valor,
valor
de
ventana
por
ejemplo
cualquier
anterior
para
y
el
propiedad
simplemente
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
interfaz debe ser similar a la figura mostrada:
Pág. 11
de
la
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
objetos son:
• Objetos
• Propiedades
• Métodos
• Eventos
• Mensajes
• Clases
Pág. 13
a
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
objeto.
propiedades
Hay
representan
propiedades
las
particulares,
características
como
Caption
que
del
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
de
reaccionar
explícitamente en el programa.
Eventos
Un
evento
es
la
capacidad
de
un
objeto
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
manipular
los
que
objetos
maneja
como
dicho
unidades
objeto.
básicas,
Esto
permite
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
Pág. 16
añadir
aquellas características que son específicas suyas. El usuario
de Visual Basic no dispone de esta característica.
Polimorfismo
Polimorfismo,
del
griego
cuyo
significado
es
“muchas
formas”, es la característica que permite implementar múltiples
formas de un mismo método, dependiendo cada una de ellas de la
clase sobre la que se realiza la implementación. Esto hace
posible
que
se
puede
acceder
a
una
variedad
de
métodos
distintos (todos con el mismo nombre) utilizando exactamente el
mismo medio de acceso.
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
Los datos con los que trabajaremos probablemente incluyan
información
relacionada
con
números,
dinero,
nombres,
Pág. 21
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 -3.40E+38 a
precisión (4 bytes)
Double
Punto
flotante
de
3.40E+38
doble -1.79D+308 a
precisión (8 bytes)
Currency
Monetario (8 bytes)
1.79D+308
+/922337203685477.5807
Byte
Carácter (1 byte)
String
Cadena
de
caracteres
byte por carácter)
0 a 255
(1 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
Pág. 22
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
caracteres.
de
Para
caracteres
la
que
construcción
puede
de
ser
de
hasta
identificadores
255
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
identificador.
utilizar
Una
una
palabra
palabra
reservada
reservada
tiene
un
como
significado
especial para Visual Basic.
CONSTANTES
Una
durante
constante
la
almacena
ejecución
de
un
un
dato
cuyo
programa.
valor
Para
no
cambia
declarar
constante utilice la siguiente sintaxis:
Const NOMBRE_CONSTANTE [As TIPO] = VALOR
Pág. 23
una
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
manipulados
los
son
símbolos
operandos.
Los
que
indican
operandos
son
cómo
serán
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
*
/
\
División entera
Mod
+
Multiplicación y división
-
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.
sentencias,
separadas
Una
unas
de
línea
puede
otras
por
incluir
dos
varias
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
presenta en la figura siguiente:
Pág. 29
que
se
Salida de datos
La salida de datos generalmente
información
de
realizar
operación
la
la
memoria
de
y
consiste
mostrarla
salida
de
datos
en
en
en
tomar
pantalla.
Visual
la
Para
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
crear
que
una
pueda
nueva
ejecutar
aplicación
el
y
código
haga
anterior,
doble
click
proceda
sobre
a
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
SENTENCIAS_VERDADERAS.
grupo de
verdadera
Si
se
CONDICIÓN
ejecuta
es
falsa
el
se
grupo
de
ejecuta
el
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
Esta estructura es utilizada para ejecutar un bucle un
número determinado de veces. El número de iteraciones deberá
Pág. 36
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
La estructura While . . . Wend es aquella en la que el
número de iteraciones no se conoce por anticipado y el cuerpo
Pág. 37
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
N
primeros números
naturales, es decir S = 1 + 2 + 3 + 4 + . . . + N
Dim N As Integer, S As Integer
S = 0
N = InputBox(“Ingrese N?”)
While N <> 0
S = S + N
N = N - 1
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 N ingresado por teclado:
Dim N As Integer, FACT As Integer, C As Integer
FACT = 1
C = 1
N = InputBox(“Ingrese N?”)
Do
FACT = FACT * C
C = C + 1
Loop While C <= N
Pág. 39
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
cualquiera
de
una
sentencia
las
GoTo
estructuras
puede
de
suplirse
control
utilizando
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
arreglo
se
por
observa
la
numeración
defecto
comienza
en
de
cero,
los
elementos
para
hacer
Pág. 42
de
un
que
la
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
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
que
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
programación. A continuación serán estudiadas detalladamente.
Declaración de una función
Pág. 46
en
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
separadas
LISTA_PARÁMETROS
por
comas
que
se
es
una
secuencia
corresponden
con
de
los
variables
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
propio
nombre,
es
decir
en
NOMBRE_FUNCIÓN,
que
actúa
su
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
variables
LISTA_ARGUMENTOS
o
argumentos
expresiones
debe
ser
es
una
separadas
igual
al
secuencia
por
número
comas.
de
de
El
constantes,
número
parámetros
de
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:
f ( x) = x 2 + 2 x + 3
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 2 + Bx + C = 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
RAIZ = False
' Falso si no hay raíces reales
Else
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
Pág. 50
la
palabra reservada ByVal a la declaración del parámetro en la
cabecera de la función. Por ejemplo:
Function F(ByVal X As Double) As Double
F = X ^ 2 + 2 * X + 3
End Function
La cabecera de la función F especifica que X será pasado
por valor y no por referencia.
Funciones recursivas
Se dice que una función es recursiva si se llama a sí
misma. Por ejemplo la función FACTORIAL cuyo código se presenta
a continuación es recursiva:
Function FACTORIAL(N As Integer) As Long
If N <> 0 Then
FACTORIAL = FACTORIAL(N - 1) * N
Else
FACTORIAL = 1
End If
End Function
PROCEDIMIENTOS
La
sintaxis
para
definir
un
procedimiento
es
siguiente:
Private Sub NOMBRE_PROCEDIMIENTO([LISTA_PARÁMETROS])
Pág. 51
la
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 N primeros
números naturales impares, es decir: S = 1 + 3 + 5 + . . . + N
Private Sub SUMA_IMPAR(N As Integer)
Dim S As Integer, I As Integer
S = 0
For I = 1 To N
If I Mod 2 <> 0 Then
S = S + I
End If
Pág. 52
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
Alignment
Descripción
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
BackStyle
Especifica
el
color
de
fondo
y
de
primer
plano empleado para mostrar el texto.
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
Enabled
Descripción
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
contenido
del
siguientes:
Evento
Change
Descripción
Ocurre
cuando
se
cambia
el
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
Cancel
Descripción
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)
gráfica (con una imagen personalizada).
Pág. 57
o
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
aplicación.
de
Esta
consiste
permite
manipular
dispone
de
los
ejemplo
cierta
siguientes
vamos
en
a
un
cantidad
desarrollar
cajero
de
billetes:
siguiente
automático
dinero
S/.
la
para
10.00;
el
cual
lo
cual
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
Nombre
TxtCantidad
Text1
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
Caption
Descripción
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
Nombre
TxtMensaje
ForeColor
&H000000FF&
Text1
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
End Sub
Pág. 67
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
List
Descripción
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
propiedades,
eventos
de
y
la
métodos
lista.
que
Presenta
el
cuadro
las
de
mismas
lista
a
excepción de lo siguiente:
Propiedad
Style
Descripción
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:
Nombre
TxtCurso
Text1
Text
List1
Nombre
LstSeleccionar
Nombre
LstProgramado
List2
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:
Private Sub CmdAnnadir_Click()
Pág. 74
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:
Nombre
TxtCurso
MultiLine
True
ScrollBars
2-Vertical
Text1
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
información
en
ejemplo
en
memoria
RAM
particular
mediante
el
hemos
uso
almacenado
de
un
bidimensional (Matriz).
Pág. 80
la
arreglo
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
especificado
el
en
número
la
de
milisegundos
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
Nombre
TxtHora
Text1
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
AutoSize
Descripción
Especifica
si
automáticamente
el
su
control
tamaño
para
ajusta
mostrar
un
gráfico completo.
Picture
Especifica
el
archivo
de
imagen
para
control.
Pág. 83
el
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
Picture
Descripción
Especifica
el
archivo
de
imagen
para
el
control.
Stretch
Especifica
archivo
como
gráfico
se
ajusta
para
que
el
quepa
tamaño
del
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
Max
Descripción
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
Change
Descripción
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
Drive
Descripción
Especifica la unidad seleccionada en tiempo
de ejecución.
Este control responde al evento Change, cuya descripción
es la siguiente:
Evento
Change
Descripción
Ocurre cuando el usuario hace click sobre la
unidad
Change
que
desea
también
seleccionar.
ocurre
si
se
El
evento
selecciona
unidad mediante el teclado.
Cuadro de lista de directorios
Pág. 89
la
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
Nombre
Dir1
Nombre
File1
Pattern
*.JPG
Dir1
File1
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
0
Botón
Aceptar
Nombre
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
Nombre
LstBoton
Nombre
LstIcono
List1
List2
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
métodos
con
los
que
se
puede
controlar
su
apariencia
y
y
comportamiento, muchos de los cuales ya han sido utilizados en
las
aplicaciones
de
los
capítulos
anteriores
y
continuación pasamos a describir.
Pág. 99
que
a
Propiedad
AutoRedraw
Descripción
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
Activate
Descripción
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
descarga
antes
del
de
iniciarse
formulario
el
(antes
proceso
del
de
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
Maximizar
Sólo
de
y
un
puede
mediante
título
botón
cambiar
los
botones
,
un
botón
Minimizar.
de
tamaño
Maximizar
y
Minimizar.
2
Sizable
(Predeterminado). Puede cambiar de
tamaño mediante cualquiera de los
elementos
opcionales
de
indicados para Fixed Single.
Pág. 105
borde
Valor
3
Estilo
Fixed Dialog
Descripción
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
Nombre
LstTipoForm
List
0-None
List1
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
mediante
habrá
el
podido
método
observar,
Show
podemos
al
mostrar
hacerlo
de
un
formulario
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
ventana
una
actúe
ventana
como
padre
hija
debe
por
aplicación.
tener
su
Para
propiedad
que
una
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
opción Editor de menús.
Pág. 117
la
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
finalizado su diseño pulse el botón “Aceptar”.
Pág. 119
haya
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
Ninguno
. . . Catálogo de &artículos
. . . -
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
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
el
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
referirse
palabra
al
reservada
formulario
“Me”
desde
proporciona
donde
se
está
una
forma
de
ejecutando
el
código.
Recordar
desencadena
que
cuando
el
el
evento
Unload
usuario
intenta
del
formulario
cerrar
el
se
formulario
mediante cualquiera de las formas descritas anteriormente.
Para
utilice
el
determinar
parámetro
si
ocurre
Cancel.
Si
la
descarga
Cancel
es
del
False
formulario
ocurre
la
descarga, si Cancel es True impide que el formulario se quite.
CREACIÓN DE UNA BARRA DE HERRAMIENTAS
Pág. 122
Una
opciones
barra
más
de
herramientas
utilizadas
de
un
contiene
menú,
de
botones
tal
manera
con
que
las
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
corresponden
ejemplo,
a
cada
uno
debe
de
incluir
los
ocho
botones
de
imágenes
la
barra
que
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
End Sub
Pág. 132
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
contrario devuelve cero.
Pág. 133
caso
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
Componentes.
Pág. 134
opción
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
AutoPlay
Descripción
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
FileName
Descripción
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
columna.
Pág. 141
y
una
Para agregar este control debe seleccionar el componente
Microsoft Hierarchical FlexGrid Control 6.0 (OLEDB).
Propiedad
Col
Descripción
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
visualice un cuadrado mágico de orden impar
aplicación
que
N . Un cuadrado
mágico se compone de números enteros comprendidos entre 1 y
N 2 . La suma de los números que figuran en cada fila, cada
columna y cada diagonal son idénticos.
Pág. 142
N = 5 tenemos el siguiente arreglo de
Por ejemplo para
números:
Un método de construcción del cuadrado consiste en situar
el
número
1
en
el
centro
de
la
primera
fila,
el
número
siguiente en la casilla situada encima y a la derecha, y así
sucesivamente. Es preciso considerar que el cuadrado se cierra
sobre sí mismo, la fila encima de la primera es de hecho la
última y la columna a la derecha de la última es la primera.
Sin embargo, cuando la posición del número caiga en una celda
ocupada, se elige la casilla situada por debajo del número que
acaba de ser situado.
Para el desarrollo de la presente aplicación proceda a
crear un nuevo formulario y ubicar una etiqueta (N?), un cuadro
de
texto
(TxtN)
y
un
control
Hierarchical
FlexGrid.
Seguidamente debe ingresar el código que se indica:
Private Sub TxtN_Change()
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
seleccionar
el
denomina control Spinner.
Para
agregar
un
control
UpDown
debe
componente Microsoft Windows Common Controls-2 6.0.
Propiedad
BuddyControl
Descripción
Especifica
el
control
utilizado
como
la
propiedad
utilizada
para
auxiliar.
BuddyProperty
Especifica
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
permita mostrar el código ANSI de un carácter especificado.
Pág. 145
que
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
pueden
el
número
seleccionarse
máximo
de
días
que
mediante
la
propiedad
MultiSelect.
SelStart
SelEnd
Especifica
los
respectivamente
límite
del
inferior
intervalo
y
superior
de
fechas
seleccionado.
MonthColumns
MonthRows
Permiten
mostrar
simultáneamente.
más
MonthColumns
de
un
mes
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
control Calendar.
Pág. 151
el
CAPÍTULO 7
ARCHIVOS
Un
archivo
(fichero)
relacionada
entre
dispositivo
de
duro).
Los
permanente
modo
un
conjunto
almacenada
almacenamiento
datos
de
sí,
es
almacenados
que
pueden
como
una
secundario
en
un
ser
de
información
unidad
(disquete,
archivo
son
manipulados
en
de
en
un
disco
manera
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.
OPERACIONES SOBRE EL SISTEMA DE ARCHIVOS
Pág. 153
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
identifica
NOMBRE_ARCHIVO
al
archivo
es
que
una
se
cadena
desea
de
caracteres
borrar.
Se
que
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
Donde
NOMBRE_ACTUAL
es
una
cadena
de
caracteres
que
especifica el nombre actual del archivo y NOMBRE_NUEVO es otra
Pág. 154
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
identifica la carpeta que se desea eliminar. Por ejemplo:
Pág. 155
que
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
referenciarlo
alguna
mediante
su
operación
nombre
sobre
completo.
un
archivo
Las
hay
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
Output
Descripción
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
archivo
fue
nombres
de
abierto.
las
es
el
VARIABLE1,
variables
número
utilizado
VARIABLE2,
que
han
.
de
.
cuando
.
son
recibir
correspondientes datos del archivo.
Pág. 162
el
los
los
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
N
caracteres
de
un
archivo
secuencial y los asigna a una variable de cadena. Su sintaxis
es de la forma:
VARIABLE = Input( N , # NÚMERO_ARCHIVO)
A diferencia de la sentencia Input, la función Input()
retorna
todos
los
caracteres
que
lee,
incluyendo
comas,
retornos de carro, continuaciones de línea, etc. Por ejemplo:
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.
Como ejemplo final del uso de archivos secuenciales vamos
a desarrollar un sencillo editor de texto. Este editor aunque
Pág. 166
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
Nombre
TxtEditor
MultiLine
True
ScrollBars
3-Both
Text1
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
contiene
sentencia
la
Err.Description
descripción
asociada
retorna
a
un
una
error
cadena
en
que
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
Pág. 170
misma
longitud), lo cuales son identificados mediante un único número
denominado índice. El primer registro de un archivo tiene como
índice 1, el segundo tiene índice 2 y así sucesivamente. La
información contenida en un archivo de este tipo puede ser
accedida
en
individual
cualquier
se
asocia
secuencia,
con
su
ya
que
respectivo
cada
índice
y
registro
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
acceso aleatorio. Su sintaxis es:
Pág. 171
para
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
acceso
leer
aleatorio,
un
registro
almacenando
procedente
los
datos
de
en
un
archivo
una
de
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
determinado
el
número
archivo
de
abierto
bytes
(caracteres)
mediante
la
que
ocupa
un
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
fichero. Su sintaxis es:
VARIABLE = Loc(# NÚMERO_ARCHIVO)
Pág. 174
de
un
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
cualquier
binario
archivo
como
permite
una
la
posibilidad
secuencia
numerada
de
tratar
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:
= &HFF0000&
AZUL
VERDE = &H00FF00&
= &H0000FF&
ROJO
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
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
siguiente figura:
Pág. 193
en
la
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
ubicaciones
de
a
colectivamente
medida
lo
utilizadas
largo
“escala”.
de
En
para
los
Visual
ejes
Basic,
definir
se
las
denominan
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
contenedor.
Pág. 194
dicho
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
Descripción
ScaleMode
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
coordenadas
evidente
“X”
y
las
que
las
diferencias
dos
coordenadas
“Y”
entre
las
dos
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á.
Puntos
Pág. 198
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
Picture1 . . . Picture32
PicColor
Descripción
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
método Circle, cuya sintaxis es:
OBJETO.Circle (X, Y), RADIO, COLOR, INICIO, FIN, ASPECTO
Pág. 203
el
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.
Funciones algebraicas
Pág. 208
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:
f ( x) = Ax 2 + 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
tangente,
funciones
cotangente,
trigonométricas
secante,
cosecante)
(seno,
no
coseno,
es
complicado, sino analice el siguiente ejemplo.
Pág. 210
nada
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
Para el caso de las gráficas de ecuaciones polares tampoco
es
complicado,
sólo
hay
que
tener
presente
las
siguientes
consideraciones.
Dado un punto P( x, y ) del plano, tal punto se encuentra a
una distancia
r
del origen, y a un ángulo
θ
respecto del
semieje horizontal positivo.
De la gráfica se tiene que el punto P tiene coordenadas
rectangulares
( x, y )
y
coordenadas
polares
(r , θ )
entonces
cumplen las siguientes relaciones de transformación:
x = r cos θ
y = r senθ
De donde: r 2 = x 2 + y 2 ; tan θ =
y
x
Pág. 213
se
A
continuación
presentamos
algunas
ecuaciones
polares
características:
Nombre
Ecuación
r= n
Circunferencia de radio n
Trébol de cuatro hojas
r = 2 cos 2θ
Cardioide
r = 1 + cos θ
r = 1 + 2 cos θ
Limazón
r 2 = cos 2θ
Lemniscata
r = sen 4θ
Pétalo de rosa
Espiral
r=
Espiral logarítmica
θ
2n
r = enθ
Astroide
r = (cos 2θ )3
Nefroide
r = 3 cos 2θ − cos 6θ
Concoide
r=
Estrofoide
Para
ecuaciones
r=
realizar
una
polares
crear
1
+ 1
cos 2θ
1
cos 2θ + tan 2θ
aplicación
un
nuevo
que
permita
proyecto
y
dibujar
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:
Pág. 214
Luego
proceda
a
ingresar
el
código
que
se
presenta
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
a
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
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
generadas
fractal
no
tienen
trabaja
con
fracciones,
una
relación
de
las
enteros
figuras
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:
Z n +1 = Z n2 + C
Donde C es un número complejo constante y Z es un número
complejo
variable
que
permite
obtener
las
respectivas
iteraciones (los valores de cada punto del paisaje fractal,
latitud y longitud).
Pág. 217
Como
ejemplo
iteraciones.
Para
vamos
ello
a
obtener
asignamos
las
valores
a
tres
C
de
primeras
cualquier
posición arbitraria dentro del conjunto, digamos C = 1 + i y para
arrancar las iteraciones podemos comenzar con Z 0 = 0 , luego:
Z1 = (0) 2 + (1 + i ) = 1 + i
Z 2 = (1 + i ) 2 + (1 + i ) = 1 + 3i
Z 3 = (1 + 3i )2 + (1 + i ) = − 7 + 7i
Cuando se continua desarrollando el Conjunto de Mandelbrot
se obtiene una figura similar a la mostrada:
Pág. 218
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
[email protected]
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
experiencia.
recopilados
Espero
que
a
lo
largo
satisfaga
las
de
varios
necesidades
años
de
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/.
Nombre
TxtApellidosNombres
Text1
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Ú
Se desea construir una
PRECIO (S/.)
Hamburguesa
2.50
aplicación que calcule las
Cerveza
4.00
ventas totales al final del
Gaseosa
3.00
día, así como los impuestos
Ensalada
1.50
Salchichas
2.00
La interfaz de entrada
Refresco
1.00
y salida deberá ser similar
Sopa
1.50
a
Postre
1.50
continuación:
a pagar (18 por 100).
la
figura
mostrada
Pág. 229
a
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)
Nombre
TxtHamburguesa
Text1
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
indica a continuación:
Form1
Nombre
FrmEdad
BorderStyle
3-Fixed Dialog
Caption
Calcula la edad de una persona
Pág. 237
se
Label1
Nombre
LblFecNac
AutoSize
True
Caption
Fecha de nacimiento:
Label2
Nombre
LblEdad
AutoSize
True
Caption
Su edad es:
Nombre
TxtFecNac
Text1
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
En seguida proceda a ingresar el siguiente código:
Pág. 238
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
siguientes
de
billetes:
dinero
para
S/.
10.00,
lo
cual
S/.
dispone
20.00,
de
S/.
los
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
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
se
Label4
Nombre
LblPagoHoraExtra
AutoSize
True
Caption
Pago hora extra S/.
Label5
Nombre
LblSueldoNeto
AutoSize
True
Caption
Sueldo neto S/.
Nombre
TxtTrabajador
Text1
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
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
se
Label6
Nombre
LblPromedio
AutoSize
True
Caption
Promedio:
Label7
Nombre
LblPuntuacion
AutoSize
True
Caption
Puntuación:
Nombre
TxtAlumno
Text1
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
N1 = Val(TxtN1) : N2 = Val(TxtN2)
Pág. 250
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:
Nombre
TxtNumero
Text1
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
Nombre
TxtPerfecto
MultiLine
True
Text1
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:
Label4
Pág. 262
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:
Nombre
TxtNumero
Text1
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
ascendente o descendente.
Pág. 268
forma
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:
Nombre
TxtNumero
Text1
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
Elaborar
artículo
de
una
un
aplicación
cuadro
que
combinado
permita
(Combo).
seleccionar
Apenas
el
un
usuario
seleccione un artículo se debe mostrar el precio del mismo, el
interés es fijo para esta ocasión.
Pág. 272
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
Pág. 277
se
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:
Nombre
TxtCadena
Text1
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
Nombre
LstCursos
List1
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
formularios según se indica:
Formulario
Nombre
Form1
FrmNone
Form2
FrmFixedSingle
Form3
FrmSizable
Form4
FrmFixedDialog
Form5
FrmFixedToolWindow
Form6
FrmSizableToolWindow
Form7
FrmAcercaDe
Pág. 297
los
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
&1-Fixed Single
MnuFixedSingle
Ninguno
&2-Sizable
MnuSizable
Ninguno
&3-Fixed Dialog
MnuFixedDialog
Ninguno
&4-Fixed ToolWindow
MnuFixedToolWindow
Ninguno
&5-Sizable ToolWindow
MnuSizableToolWindow
Ninguno
-
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
[email protected]
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
experiencia.
recopilados
Espero
que
a
lo
largo
satisfaga
las
de
varios
necesidades
años
de
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
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
Campo
• 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
según se indica a continuación:
Tabla Laboratorio
Nombre del
Tipo
Ancho
Descripción
Campo
LabCodigo
T
03
Código del curso
Pág. 305
tabla
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
debemos
desarrollar
hacer
es
nuestra
aplicación,
conectarnos
a
la
lo
primero
base
de
que
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
DataEnvironment
por
CnCursosLibres.
El
cambie
DeCursosLibres
aspecto
de
la
y
el
el
nombre
de
ventana
la
del
objeto
conexión
Data
por
Environment
deberá ser similar a la siguiente figura:
Pág. 307
Luego
haga
CnCursosLibres
click
y
con
seleccione
el
la
botón
derecho
opción
del
ratón
Propiedades.
en
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
CursosLibres.MDB
y
el
haga
nombre
click
en
de
el
la
botón
base
Probar
de
datos
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
CnCursosLibres,
que
este
luego
comando
establezca
el
utiliza
nombre
la
de
conexión
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
Command4
Pág. 312
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
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
a
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
siguiente:
Aplicación Nº 2
Pág. 316
figura
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
Luego,
es
conectarnos
añada
un
a
Comando
la
y
base
de
datos
denomínelo
CursosLibres.MDB.
CmConsultaCurso.
Haga
click derecho sobre el comando y seleccione Propiedades:
Compruebe
CnCursosLibres.
que
Luego
este
comando
seleccione
la
utiliza
opción
la
conexión
Instrucción
Pág. 317
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
pruebe su aplicación.
Aplicación Nº 3
Pág. 318
y
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
End Sub
Pág. 320
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
GUÍA DE LABORATORIO Nº 7
Pág. 321
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:
Nombre
TxtCurCodigo
Locked
True
Text1
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
aplicación
para
Visual
poder
utilizar
Basic
es
los
objetos
necesario
ADO
cargar
la
es
una
librería
correspondiente. Para ello selecciones el menú Proyecto y elija
la
opción
seleccione
Referencias.
la
opción
En
el
cuadro
Microsoft
de
ActiveX
diálogo
Data
Referencias
Objects
2.1
Library, tal como se indica en la figura siguiente:
Luego
de
hacer
click
en
el
botón
Aceptar
estará
condiciones de utilizar los objetos ADO en su aplicación.
Pág. 325
en
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
consulta
a
la
una
tabla
aplicación
Curso.
que
Para
permita
ello
el
realizar
usuario
una
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, ” & _
Nombre, CurProfe As Profesor ” & _
“CurNombre As
“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
mantenimiento
CursosLibres.MDB
una
de
aplicación
las
(estas
tablas
tablas
le
que
permita
de
la
serán
realizar
base
de
el
datos
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
&Mantenimiento MnuManten
ShortCut
Ninguno
&Alumnos
MnuMantenAlumno
Ninguno
&Nuevo
MnuMantenAlumnoNuevo
Ninguno
&Editar
MnuMantenAlumnoEditar
Ninguno
&Eliminar
MnuMantenAlumnoEliminar
Ninguno
&Cursos
MnuMantenCurso
Ninguno
&Nuevo
MnuMantenCursoNuevo
Ninguno
&Editar
MnuMantenCursoEditar
Ninguno
&Eliminar
MnuMantenCursoEliminar
Ninguno
&Laboratorio
MnuMantenLaboratorio
Ninguno
&Nuevo
MnuMantenLaboratorioNuevo
Ninguno
&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
indica:
Pág. 334
se
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:
Nombre
TxtCurCodigo
Text1
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:
Nombre
TxtCurCodigo
Text1
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:
Nombre
TxtCurCodigo
Text1
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
(formato
la
opción
corto).
Insertar
En
control,
seguida,
luego
cambiar
Fecha
las
actual
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
En
datos.
esta
Para
aplicación
ello
explicaremos
iniciar
un
nuevo
como
crear
proyecto.
En
grupos
de
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:
Pág. 350
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
campos
pero
a
la
arrastrarlos
sección
de
la
Encabezado
sección
de
grupo.
Campos
de
Los
demás
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
[email protected]
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
experiencia.
recopilados
Espero
que
a
lo
largo
satisfaga
las
de
varios
necesidades
años
de
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:
Nombre
TxtRadio
Text1
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
“Bienvenido
un
al
Adicionalmente,
control
Mundo
el
ActiveX
de
control
la
que
muestre
Programación
debe
permitir
con
al
el
mensaje
ActiveX”.
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
Declaraciones
seleccione
seleccione
UserControl
Paint.
Ahora
y
en
ingrese
el
el
ComboBox
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.
seguida se mostrará la ventana Propiedades del proyecto:
Pág. 363
En
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
ActiveXMiControl.ocx,
y
seleccione
guarde
el
la
archivo
opción
con
su
Generar
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,
forma
que
nos
debemos modificar nuestro control, de tal
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
Administrador
Complementos
de
y
complementos,
seleccionar
tal
como
la
se
opción
indica
a
casillas
de
continuación:
En
la
ventana
anterior
debe
activar
las
verificación Cargado/Descargado y Cargar al iniciar. Luego haga
click en el botón Aceptar.
En
seguida
el
menú
Complementos
deberá
presentar
siguiente apariencia:
Pág. 366
la
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
Finalizar.
y
en
Aparecerá
detenidamente
su
la
siguiente
luego
una
contenido
y
ventana
ventana
luego
de
haga
pulse
el
botón
información,
click
en
el
lea
botón
Cerrar. A continuación guarde su aplicación y genere nuevamente
el control.
Para
probar
FrmPruebaMiControl
el
control
y
añada
componente
Microsoft
Common
añada
formulario
al
CommandButton.
Cambie
un
al
abra
Cuadro
Dialog
nombre
de
Control
MiControl,
el
el
un
del
formulario
herramientas
6.0.
En
seguida
CommonDialog
botón
el
Command1
y
un
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
Nombre
FrmPruebaNumBox
Caption
Prueba de Control ActiveX
BorderStyle
3-Fixed Dialog
Form1
Para
TextBox
diseñar
el
cual
nuestro
debe
control
insertar
utilizaremos
en
el
un
control
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
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
es
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
existieron.
Pág. 373
nunca
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:
Para tal efecto, proceda a ubicar los siguientes controles
en el formulario:
3 etiquetas
Pág. 375
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
resultado
debe
guarde
ser
y
pruebe
la
su
documento
similar
a
figura
ActiveX
desarrollado
ActiveX.
que
se
en
el
muestra
El
a
continuación:
Aplicación Nº 2
Al
anterior,
documento
añadirle
un
botón
Acerca
de,
que
ejercicio
presente
Pág. 379
la
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
contenido
de
un
la
documento
tabla
ActiveX
Curso
que
de
permita
la
base
mostrar
de
Pág. 381
el
datos
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
matrícula.
Microsoft
Visual Basic
GUÍA DE LABORATORIO Nº 11
Pág. 382
de
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
DHTML
este
que
ejercicio,
lea
un
vamos
número
a
desarrollar
entero
y
muestre
una
su
aplicación
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
indican:
DHTMLPage1
Nombre
DHTMLTablaMultiplicar
Id
DHTMLTablaMultiplicar
Pág. 384
se
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:
Select CurCodigo, CurNombre, CurVacantes, CurProfe From Curso
Pág. 388
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
siguientes controles HTML al diseñador de páginas DHTML:
4 cajas de texto
4 botones de comandos
Pág. 389
los
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
Binding
poder
utilizar
Collection
es
los
objetos
necesario
de
la
cargar
Microsoft
la
Data
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
BindingCollection en la sección de Declaraciones de la
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
Private Function CmdPrimero_onclick() As Boolean
Pág. 392
tipo
página
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
proceda
a
a
manera
escribir
el
de
ejercicio
código
para
necesario
el
para
estudiante,
mostrar
información relacionada con cada profesor.
Pág. 396
la
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
programación,
de
conocido
trabajo,
debe
generalmente
conocer
como
su
entorno
Interfaz
de
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
archivo
Wav
o
una
aplicación
Midi.
Utilizar
que
la
permita
función
reproducir
API
de
un
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
minúscula
(o
utiliza
una
viceversa),
letra
la
mayúscula
función
en
lugar
declarada
de
no
una
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
elija
la
la
pantalla
opción
anterior,
Cargar
seleccione
archivo
de
el
texto.
menú
En
el
Archivo
cuadro
y
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
líneas,
acciones
después
del
similares
texto
para
Microsoft
las
Visual
dos
siguientes
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
inmediatamente
atributo
después
de
subrayado
del
texto
doble.
Escribir
subrayado
y
VBMain
a
identificador darle el atributo de oculto.
Pág. 406
este
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
continuación
se
el
menú
mostrará
File
un
y
elija
cuadro
de
la
opción
diálogo
New.
similar
A
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
presentará una pantalla similar a la siguiente:
Pág. 415
se
En seguida ingrese al menú File y elija la opción Run
WinHelp.
Luego,
se
presentará
una
pantalla
similar
mostrada:
Pág. 416
a
la
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
Package
Administrador
and
de
Deployment
complementos
Wizard.
Al
y
añada
momento
de
la
utilidad
iniciar
el
Asistente se visualizará una ventana similar a la siguiente
figura:
En seguida haga click en el botón Empaquetar. Esto hará
que el Asistente le presente varios cuadros de diálogo que le
Pág. 420
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
aplicación,
usuario
final
etc.
medida
A
durante
que
la
instalación
avanza,
si
de
necesita
la
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
Descargar