Está en la página 1de 372

1

2
P Pr ro og gr ra am ma ac ci i n n O Or ri ie en nt ta a a a O Ob bj je et to os s



Primera edicin


JOSE ALEJANDRO PORRAS RIVERA
Autor de este libro
Maestro actual del COBACH PLANTEL No13 XALTIANGUIS
CONALEP ACAPULCO II






















1998-2004


3

CAPTULO 1

FUNDAMENTOS

Microsoft Visual Basic es un conjunto de herramientas que
posibilitan el desarrollo de aplicaciones para Windows de una
manera rpida y sencilla, basado en el lenguaje BASIC y en la
programacin orientada a objetos.
La palabra Visual hace referencia al mtodo que se utiliza
para crear la interfaz grfica de usuario. En lugar de escribir
numerosas lneas de cdigo para implementar la interfaz,
simplemente se utiliza el ratn 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 ms programadores que ningn otro lenguaje en la
historia de la informtica. Visual Basic ha evolucionado a partir
del lenguaje BASIC original y ahora contiene centenares de
instrucciones, funciones y palabras clave, muchas de las cuales
estn directamente relacionadas con la interfaz grfica de
Windows.
El lenguaje de programacin Visual Basic no es exclusivo de
Microsoft Visual Basic. Este lenguaje es utilizado tambin por
Microsoft Excel, Microsoft Access y muchas otras aplicaciones

4
Windows. El lenguaje de programacin Visual Basic Script para
programar en Internet es un subconjunto del lenguaje Visual
Basic. De tal forma, que la inversin 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 aplicacin Windows: hacer click en
el icono correspondiente.
En seguida se presentar una ventana similar a la figura
siguiente:



5
En la ventana anterior indicar el tipo de proyecto que desea
crear (para nuestro caso seleccionar EXE estndar) y dar click
sobre el botn 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 mens - Barra de herramientas
- Cuadro de herramientas - Diseador de formularios
- Explorador de proyectos - Ventana de propiedades
- Posicin del formulario - Mens contextuales
Barra de mens

6
Presenta las rdenes que se utilizan para desarrollar una
aplicacin. Las opciones ms utilizadas son: Archivo, Edicin,
Ver, Ventana y Ayuda. Se proporcionan otros mens para tener
acceso a funciones especficas de programacin como Proyecto,
Formato o Depuracin.

Barra de herramientas
Facilita el acceso rpido a las rdenes ms comnmente
utilizadas. Omitimos el significado de cada botn porque le ser
mostrado al pasar el puntero del ratn sobre cada uno de ellos.



Puede visualizar otras barras de herramientas ejecutando la
opcin Barra de herramientas del Men Ver.

Cuadro de herramientas
Proporciona un conjunto de herramientas que permiten disear
la interfaz grfica de usuario.




7
Icono Descripcin

Puntero

Cuadro de imagen

Etiqueta

Cuadro de texto

Marco

Botn de comando

Casilla de verificacin

Botn de opcin

Cuadro combinado

Cuadro de lista

Barra de desplazamiento horizontal

Barra de desplazamiento vertical

Cronmetro

Cuadro de lista de unidades

Cuadro de lista de directorios

Cuadro de lista de archivos

Formas

Lneas

Imagen

Contenedor OLE

8
Para utilizar algn objeto simplemente debe hacer doble
click sobre el icono correspondiente, luego puede cambiar su
posicin y sus dimensiones.

Diseador de formularios
Es la ventana sobre la que colocaremos los objetos
(controles) de la interfaz de usuario.



Explorador de proyectos
Contiene el conjunto de archivos que constituyen la
aplicacin o proyecto.




9
Ventana de propiedades
Como veremos ms 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.



Posicin del formulario
Esta ventana le permite especificar la posicin de los
formularios de la aplicacin.


Mens contextuales

10
Es un men emergente que presenta rdenes especficas
relativas a un determinado objeto. Para abrir un men contextual,
dar click derecho sobre el objeto. Por ejemplo, al dar click
derecho sobre el formulario se presenta el siguiente men
contextual.



Ventana de cdigo
Se presenta cuando se hace doble click sobre un objeto que
se encuentra en el Diseador 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).





11
MI PRIMERA APLICACIN
Hay tres pasos principales para crear una aplicacin en
Visual Basic:

- Crear la interfaz.
- Establecer propiedades.
- Escribir el cdigo.

Para ver como se realiza esto, siga los pasos del siguiente
ejemplo para crear una aplicacin sencilla que consiste en un
formulario y un botn de comando. Cuando haga click en el botn
de comando aparecer el mensaje Visual Basic es fcil en un
cuadro de dilogo predefinido.

Creacin de la interfaz
Para el desarrollo del presente ejemplo proceda a crear una
nueva aplicacin. En seguida aadir un botn 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:




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



Estableciendo las propiedades
Para ver las propiedades de un objeto, simplemente debe
seleccionarlo y pulsar la tecla F4. Por ejemplo la figura
siguiente muestra las propiedades del botn de comando y podemos
ver que la propiedad Caption tiene el valor Command1.



13
Puede cambiar el valor de cualquier propiedad
seleccionndolo de la ventana anterior y simplemente modificando
su valor, por ejemplo para el caso anterior establezca el valor
de la propiedad Caption de Command1 a Haga click aqu.



De manera similar proceda cambiar la propiedad Caption del
formulario a Mi primera aplicacin. La apariencia de la
interfaz debe ser similar a la figura mostrada:


Escribiendo el cdigo

14
Para ingresar el cdigo a la aplicacin debe dar doble click
sobre el control al cual asociaremos dicho cdigo. Para nuestro
caso dar doble click sobre el botn de comando e ingresar el
cdigo que se indica a continuacin:



Para guardar la aplicacin que acaba de crear, seleccione la
opcin Guardar Proyecto del Men Archivo.
Bueno, ahora slo falta que ejecute su aplicacin. Para ello
simplemente debe pulsar la tecla F5. El resultado debe ser
similar al siguiente:







15
CAPTULO 2

LOS OBJETOS

Visual Basic se basa en la programacin orientada a objetos
(POO), la cual es una forma de programacin que utiliza objetos
(similares a los objetos del mundo real) para la solucin 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 ms largos
de una manera sencilla.

MECANISMOS BSICOS DE LA POO
Los mecanismos bsicos de la programacin orientada a
objetos son:

- Objetos
- Propiedades
- Mtodos
- Eventos
- Mensajes
- Clases
-

16

Objetos
Un objeto es una entidad que tiene atributos particulares
(propiedades) y unas formas de operar sobre ellos (mtodos). Por
tanto, un objeto contiene variables que especifican su estado y
operaciones que definen su comportamiento.
Son ejemplos de objetos: formularios, botones de comando,
cuadros de texto, etiquetas, etc.

Propiedades
Las propiedades representan las caractersticas del objeto.
Hay propiedades particulares, como Caption que la poseen los
botones de comando por ejemplo, y genricas como Name que la
poseen todos lo objetos.

Mtodos
Los mtodos son procedimientos asociados a un objeto. Se
ejecutan como respuesta a un evento, por ejemplo al dar click en
un botn de comando. Tambin pueden ser invocados explcitamente
en el programa.

Eventos
Un evento es la capacidad de un objeto de reaccionar cuando
ocurre una determinada accin (accin y reaccin). Como respuesta
a un evento se enva un mensaje y se ejecuta un determinado
mtodo (procedimiento).

17
Mensajes
Un mensaje es una llamada a un mtodo (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 estn constantemente recibiendo, interpretando y
respondiendo a mensajes de otros objetos.

Clases
Una clase es una descripcin para producir objetos de esa
clase o tipo. Es decir se trata de una generalizacin de un tipo
especfico 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.

CARACTERSTICAS DE LA POO
Las caractersticas fundamentales de la programacin
orientada a objetos son:

- Abstraccin
- Encapsulamiento
- Herencia
- Polimorfismo


18
Abstraccin
La abstraccin 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 podra decir que es
sese el objeto y olvdese de como funciona en forma interna.
Por ejemplo, para manejar una computadora no necesitamos
saber como funcionan sus circuitos electrnicos, en trminos de
corriente, tensin, etc.

Encapsulamiento
Esta caracterstica permite ver un objeto como una caja
negra autocontenida en la que se ha metido de alguna manera toda
la informacin que maneja dicho objeto. Esto permite manipular
los objetos como unidades bsicas, permaneciendo oculta su
estructura interna.

Herencia
La herencia es la caracterstica que permite compartir
automticamente propiedades y mtodos entre objetos. Es decir, se
pueden crear nuevas clases de objetos en base a clases
existentes. Ms concreto, un objeto puede heredar un conjunto
general de propiedades y mtodos a las que puede aadir aquellas
caractersticas que son especficas suyas. El usuario de Visual
Basic no dispone de esta caracterstica.

19
Polimorfismo
Polimorfismo, del griego cuyo significado es muchas
formas, es la caracterstica que permite implementar mltiples
formas de un mismo mtodo, dependiendo cada una de ellas de la
clase sobre la que se realiza la implementacin. Esto hace
posible que se puede acceder a una variedad de mtodos distintos
(todos con el mismo nombre) utilizando exactamente el mismo medio
de acceso.

LOS OBJETOS DE VISUAL BASIC
Visual Basic soporta la abstraccin, la encapsulacin, el
polimorfismo y la reutilizacin de cdigo.
La reutilizacin de cdigo es la capacidad de trasladar
caractersticas de un objeto a otro, lo que se logra con alguna
forma de herencia. Esto se consigue mediante la creacin y uso
del objeto.
Los objetos de Visual Basic estn divididos en dos tipos:
controles y contenedores.
Los controles son un medio grfico que permiten a los
usuarios interactuar con la aplicacin para la manipulacin de
datos y ejecucin de tareas. Son ejemplo de controles: etiquetas,
cuadros de texto, botones de comando, casillas de verificacin,
botones de opcin, cuadros de lista, cuadros combinados, etc.

20
Los contenedores son objetos que pueden incluir otros
objetos y permiten el acceso a los objetos que contienen. Entre
los ms utilizados tenemos a los formularios, marcos y
cuadrculas.
El formulario ms los controles constituyen la interfaz de
la aplicacin.

REFERENCIANDO OBJETOS
La sintaxis para referenciar objetos es la siguiente:

OBJETO.PROPIEDAD = VALOR

Por ejemplo, para establecer el ttulo de un formulario a
Visual Basic es fcil, la orden sera:

Form1.Caption = Visual Basic es fcil

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


21
Para aclarar este concepto desarrollaremos la siguiente
aplicacin, la cual consiste en un formulario, un cuadro de texto
y un botn de comando. El usuario debe ingresar un mensaje en el
cuadro de texto y al pulsar el botn de comando, el mensaje
recientemente ingresado, se coloca como ttulo del formulario.



Para ello proceda a construir la interfaz mostrada en la
figura anterior. Luego, dar doble click sobre el botn de comando
e ingrese el siguiente cdigo:

Private Sub Command1_Click()
Form1.Caption = Text1.Text
End Sub

Seguidamente guarde y proceda ejecutar su aplicacin. Como
puede verificar, el evento Click se dispara cada vez que el
usuario pulsa (hace click) sobre un control.





22
CONVENCIN DE NOMBRES PARA LOS OBJETOS
La convencin a seguir en la presente gua - 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 Botn de comando
Chk Casilla de verificacin
Opt Botn de opcin
Lst Cuadro de lista
Cbo Cuadro combinado
Tim Cronmetro
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

23
Grd Cuadrcula
Gra Grfico
Ctr Control (se utiliza en procedimientos cuando
el tipo de control es desconocido)







































24
CAPTULO 3

EL LENGUAJE

Visual Basic es un lenguaje de programacin basado en el
lenguaje BASIC, al cual incorpora la funcionalidad de la
programacin orientada a objetos.
El cdigo de Visual Basic se almacena en mdulos, donde cada
mdulo est subdividido en distintas secciones, una para cada
objeto del mdulo. Cada seccin de cdigo puede contener uno o
ms procedimientos, formados por declaraciones de constantes y
variables, expresiones, sentencias de control y llamadas a
procedimientos y/o funciones.
En este captulo vamos a analizar los diferentes elementos
que intervienen al momento de realizar el cdigo para una
aplicacin.

TIPOS DE DATOS
Los datos con los que trabajaremos probablemente incluyan
informacin relacionada con nmeros, dinero, nombres,
descripciones, fechas, etc. Cada dato corresponde a un
determinado tipo, es decir, pertenece a una categora de datos
que se manipulan de maneras similares.

25
Tipo Descripcin Rango
Integer Entero (2 bytes) -32768 a 32767
Long Entero largo (4 bytes) -2147483648 a
2147483647
Single Punto flotante de simple
precisin (4 bytes)
-3.40E+38 a
3.40E+38
Double Punto flotante de doble
precisin (8 bytes)
-1.79D+308 a
1.79D+308
Currency Monetario (8 bytes) +/-
922337203685477.5807
Byte Carcter (1 byte) 0 a 255
String Cadena de caracteres (1
byte por carcter)
Aproximadamente
hasta 64K (65400
caracteres)
Boolean Lgico (2 bytes) True o False
Date Fecha/Hora (8 bytes) 01/ENERO/100 a
31/DICIEMBRE/9999
Variant
(por omisin)
Cualquier tipo de dato Con nmeros hasta el
intervalo de un tipo
Double.
Con caracteres 22
bytes + 1 byte por
carcter

26
IDENTIFICADORES
Los identificadores son nombres dados a los elementos de una
aplicacin, tales como constantes, variables, procedimientos,
funciones, objetos, etc. Un identificador es una secuencia de
caracteres que puede ser de hasta 255 caracteres. Para la
construccin de identificadores debemos tener presente las
siguientes reglas:

- Deben comenzar con una letra y no puede contener espacios en
blanco.
- Letras, dgitos y caracteres subrayados estn permitidos
despus del primer carcter.
- No se puede utilizar una palabra reservada como identificador.
Una palabra reservada tiene un significado especial para Visual
Basic.

CONSTANTES
Una constante almacena un dato cuyo valor no cambia durante
la ejecucin de un programa. Para declarar una constante utilice
la siguiente sintaxis:

Const NOMBRE_CONSTANTE [As TIPO] = VALOR

Si no se declara el tipo de constante (utilizando As TIPO)
se asigna a la constante el tipo de dato ms apropiado a su
valor.

27
El valor de una constante puede ser numrico, alfanumrico,
carcter o de tipo fecha y hora. Por ejemplo:

Const MAXIT = 25
Const PI As Double = 3.141592
Const CADENA As String = Visual Basic es fcil
Const FECHA_POR_DEFECTO = #01/01/99#

VARIABLES
Una variable almacena un dato cuyo valor puede cambiar
durante la ejecucin 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 instruccin Dim puede realizar ms de una declaracin,
teniendo en cuenta que la clusula opcional As TIPO le permite
definir el tipo de dato de cada variable que vaya a declarar. Por
ejemplo:

Dim X, Y As Integer

La sentencia anterior le puede inducir a pensar que X e Y
son de tipo Integer, lo cual no es cierto, pues X es de tipo
Variant (por omisin) e Y es de tipo Integer.

28
Para asignar valores a una variable, utilizar la siguiente
sintaxis:

NOMBRE_VARIABLE = VALOR

A manera de ejemplo considere lo siguiente:

Dim CANTIDAD As Integer, PRECIO As Double, TOTAL As Double
CANTIDAD = 30
PRECIO = 1.5
TOTAL = CANTIDAD * PRECIO

OPERADORES
Los operadores son smbolos que indican cmo sern
manipulados los operandos. Los operandos son los datos
(constantes y/o variables) sobre los que acta los operadores
para producir un determinado resultado.

Operadores aritmticos
Operador Significado
^ Exponenciacin
- Menos unario
* / Multiplicacin y divisin
\ Divisin entera
Mod Resto de una divisin entera

29
+ - Suma y resta
Operadores relacionales
Operador Significado
= Igual que
<>
Diferente que
<
Menor que
>
Mayor que
<=
Menor o igual que
=>
Mayor o igual que

Operadores lgicos
Operador Significado
Not Negacin
And Conjuncin
Or Disyuncin inclusiva
Xor Disyuncin exclusiva
Eqv Equivalencia (opuesto a Xor)
Imp Implicacin (falso si primer operando
verdadero y segundo operando falso)

Operadores de cadenas de caracteres
Operador Significado

30
& Concatenacin
Like Compara dos cadenas de caracteres
SENTENCIAS
Una sentencia es una lnea de cdigo que indica una o ms
operaciones a realizar. Una lnea puede incluir varias
sentencias, separadas unas de otras por dos puntos. Por ejemplo:

Dim CANTIDAD As Integer, PRECIO As Double, TOTAL As Double
CANTIDAD = 30 : PRECIO = 1.5 : TOTAL = CANTIDAD * PRECIO

Una sentencia Visual Basic puede escribirse en ms de una
lnea fsica utilizando el carcter de continuacin de lnea (un
espacio en blanco seguido del carcter 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 sern estudiados en captulos
posteriores.
Otra posibilidad de proporcionar datos o de visualizarlos
durante la ejecucin de una aplicacin es utilizando cajas de

31
dilogos predefinidas. Debido a que esta es la forma ms simple
de realizar la E/S de datos nos ocuparemos de ella.
Entrada de datos
La entrada de datos permite proporcionar valores durante la
ejecucin de una aplicacin. Estos valores son ingresados
generalmente mediante el teclado y asignados a variables del
programa. En Visual Basic una forma de ingresar datos a la
aplicacin es utilizando la caja de dilogo predefinida provista
por la funcin InputBox. Su sintaxis es la siguiente:

VARIABLE = InputBox(MENSAJE [, TTULO] [, PREDETERMINADO])

Donde MENSAJE es el mensaje que indica al usuario el tipo de
informacin 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
dilogo solicitando la informacin requerida:




32
Como puede observar, el resto de los parmetros son
opcionales. TTULO es el texto que se muestra en la barra de
ttulo del cuadro de dilogo, si se omite TTULO, el nombre de la
aplicacin es la que se muestra en la barra de ttulo.
PREDETERMINADO es una expresin de cadena que aparece en el
cuadro de texto como respuesta predeterminada si no se
proporciona ningn otro texto. Si se omite PREDETERMINADO el
cuadro de texto se muestra vaco. 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 dilogo que se presenta
en la figura siguiente:



Salida de datos
La salida de datos generalmente consiste en tomar la
informacin de la memoria y mostrarla en pantalla. Para realizar

33
la operacin de salida de datos en Visual Basic, podemos utilizar
el procedimiento MsgBox, cuya sintaxis es como sigue:

MsgBox MENSAJE [, ICONO, TTULO]
MENSAJE es La cadena que se muestra como salida en la caja
de dilogo. ICONO es se refiere al estilo de icono que se va ha
utilizar y TTULO es una texto que se mostrar en la barra de
ttulo de la caja de dilogo. Por ejemplo:

Dim EDAD As Integer
EDAD = InputBox(Ingrese su edad?)
EDAD = EDAD + 10
MsgBox Dentro de 10 aos su edad ser: & Str(EDAD)

Si ejecuta el cdigo anterior e ingresa su edad (en mi caso
29 aos) la salida debe ser similar a la figura siguiente:



Para que pueda ejecutar el cdigo anterior, proceda a crear
una nueva aplicacin y haga doble click sobre el formulario,
luego ingrese el cdigo anterior:

Private Sub Form_Load()
Dim EDAD As Integer

34
EDAD = InputBox(Ingrese su edad?)
EDAD = EDAD + 10
MsgBox Dentro de 10 aos su edad ser: & Str(EDAD)
End Sub
A manera de observacin cabe sealar que la funcin Str() se
utiliza para convertir una expresin numrica 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 evala una determinada condicin y
en funcin a ello ejecuta uno de entre dos posibles grupos de
sentencias. Su sintaxis es la siguiente:

If CONDICIN Then
SENTENCIAS_VERDADERAS
Else
SENTENCIAS_FALSAS

35
End If

Si CONDICIN es verdadera se ejecuta el grupo de
SENTENCIAS_VERDADERAS. Si CONDICIN es falsa se ejecuta el grupo
de SENTENCIAS_FALSAS.
Por ejemplo, el siguiente cdigo 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
mltiples alternativas. Su sintaxis es como sigue:

If CONDICIN_1 Then
SENTENCIAS_1
ElseIf CONDICIN_2 Then
SENTENCIAS_2
.

36
.
.
Else
SENTENCIAS_FALSAS
End If
Si CONDICIN_1 es verdadera se ejecuta el grupo de
SENTENCIAS_1, y si es no se cumple, se evalan secuencialmente
las condiciones siguientes hasta Else, ejecutndose las
sentencias correspondientes al primer ElseIf cuya condicin sea
verdadera. Si todas las condiciones son falsas, se ejecutan las
SENTENCIAS_FALSAS correspondientes a Else.
Por ejemplo considere el siguiente cdigo, el cual imprime
el nombre del mes correspondiente a los nmeros 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
ElseIf N = 6 Then : MsgBox Junio
ElseIf N = 7 Then : MsgBox Julio
ElseIf N = 8 Then : MsgBox Agosto

37
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 expresin con diferentes valores. Su sintaxis es la
siguiente:

Select Case EXPRESIN_TEST
Case EXPRESIN_1
SENTENCIAS_1
Case EXPRESIN_2
SENTENCIAS_2
.
.
.
Case Else
SENTENCIAS_FALSAS
End Select


38
En este caso se comprueba el valor de EXPRESIN_TEST frente
a la lista expresiones EXPRESIN_1, EXPRESIN_2, . . . y as
sucesivamente, y busca el primer Case que incluya el valor
evaluado en EXPRESIN_TEST, ejecutando a continuacin el bloque
de sentencias correspondiente. Si no existe un valor igual a
EXPRESIN_TEST, entonces se ejecuta las SENTENCIAS_FALSAS
correspondientes al Case Else.
A manera de ejemplo vamos a codificar el programa de la
seccin anterior el cual imprime el nombre del mes
correspondiente a los nmeros del 1 al 12. Pero en esta vez
utilizaremos la estructura Select Case (compare con cual de ambas
estructuras es ms cmodo 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

39
Case 9 : MsgBox Setiembre
Case 10 : MsgBox Octubre
Case 11 : MsgBox Noviembre
Case 12 : MsgBox Diciembre
Case Else
MsgBox Error de datos
End Select

Cabe destacar que Select Case tambin 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

40
Esta estructura es utilizada para ejecutar un bucle un
nmero determinado de veces. El nmero de iteraciones deber ser
conocido de antemano. Su sintaxis es la que se presenta a
continuacin:

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 iteracin.
La sentencia Exit For permite salir del bucle For . . . Next
antes de que este finalice.
Por ejemplo, el siguiente cdigo imprime los cuadrados de
los nmeros enteros del 1 al 25.

Dim C As Integer
For C = 1 To 25
Print C
Next

Para que este cdigo funcione correctamente debe establecer
la propiedad AutoRedraw del formulario a True.

41

Estructura While . . . Wend
La estructura While . . . Wend es aquella en la que el
nmero de iteraciones no se conoce por anticipado y el cuerpo del
bucle se repite mientras se cumple una determinada condicin. Su
sintaxis es la siguiente:

While CONDICIN
SENTENCIAS_REPETITIVAS
Wend
La estructura While . . . Wend evala la CONDICIN en cada
iteracin y si el resultado es verdadero contina su ejecucin.
El bucle termina cuando CONDICIN es falsa.
A manera de ejemplo, considere el siguiente cdigo, el cual
imprime en pantalla la suma de los N primeros nmeros 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)

42

Estructura Do . . . Loop
Esta estructura ejecuta un bucle mientras una condicin dada
sea cierta, o hasta que una condicin dada sea cierta. La
condicin puede ser verificada antes o despus de ejecutarse el
cuerpo del bucle. Su sintaxis es:

Formato 1: Do [While/Until] CONDICIN
SENTENCIAS_REPETITIVAS
[Exit Do]
Loop
Formato 2: Do
SENTENCIAS_REPETITIVAS
[Exit Do]
Loop [While/Until] CONDICIN

Esta estructura (como se puede observar en ambos formatos)
permite realizar varias estructuras diferentes dependiendo si la
condicin de terminacin 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

43
N = InputBox(Ingrese N?)
Do
FACT = FACT * C
C = C + 1
Loop While C <= N
MsgBox El factorial de & Str(N) & es= & Str(FACT)

Sentencia GoTo
Transfiere el control a una lnea especfica de cdigo,
identificada por una etiqueta o por un nmero de lnea. Su
sintaxis es:
GoTo ETIQUETA/NUMERO_LNEA

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 programacin 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
programacin.
Por ejemplo podra escribir un bucle para imprimir los
cuadrados de los nmeros enteros del 1 al 25.

Dim X As Integer

44
X = 0
LABEL1:
X = X + 1
Print X ^ 2
If X < 25 Then GoTo LABEL1

Un uso abusivo de la sentencia GoTo da lugar a cdigos
difciles de interpretar y de mantener. Por ello, se recomienda
su uso solamente en ocasiones excepcionales. La tarea que vaya a
desempear una sentencia GoTo puede suplirse utilizando
cualquiera de las estructuras de control vistas en las secciones
anteriores.
ARREGLOS
Un arreglo o matriz es una estructura de datos en la que se
almacena una coleccin finita de datos del mismo tipo, que
comparten un nombre comn, a los que se puede acceder por la
posicin (ndice) que ocupa cada uno de ellos dentro del arreglo.
Cada elemento del arreglo es una variable que puede contener un
nmero o una cadena de caracteres, dependiendo del tipo de
arreglo que se declare.
Los arreglos en Visual Basic se clasifican en estticos y
dinmicos.

Arreglos estticos

45
Son aquellos arreglos cuyo tamao no puede cambiar en tiempo
de ejecucin. La declaracin de un arreglo esttico se puede
realizar mediante la siguiente sintaxis:

Dim NOMBRE_ARREGLO(DIMENSONES) As TIPO

Donde DIMENSIONES es una lista de nmeros, separados por
comas y que definen las dimensiones del arreglo. Esta lista puede
ser de la siguiente forma:

DIMENSIN_1, DIMENSIN_2, DIMENSIN_3, . . ., DIMENSIN_ 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 precisin.

46
En el tercer caso se define una arreglo unidimensional de 20
elementos de tipo cadena de caracteres (cada elemento tiene una
longitud fija de 30 caracteres).
Como se observa la numeracin de los elementos de un arreglo
por defecto comienza en cero, para hacer que la numeracin
comience en 1, debe ingresar la siguiente orden en la seccin de
Declaraciones del mdulo de formulario:


Luego, para declarar los mismos arreglos de los casos
anteriores, las sentencias seran 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 consideracin del lector.

Arreglos dinmicos

47
Son aquellos arreglos en los que su tamao puede definirse o
modificarse en tiempo de ejecucin. Para declara una arreglo
dinmico utilice la siguiente sintaxis:

Dim NOMBRE_ARREGLO() As TIPO

Para definir el tamao del arreglo utilizar la siguiente
sintaxis:

ReDim NOMBRE_ARREGLO(NMERO_ELEMENTOS)

Cada vez que se ejecuta la sentencia ReDim, todos los
valores almacenados en el arreglo se pierden. Para definir o
cambiar el tamao del arreglo conservando los valores del mismo
use la siguiente sintaxis:

ReDim Preserve NOMBRE_ARREGLO(NMERO_ELEMENTOS)
Para liberar el espacio de memoria utilizado por arreglos
dinmicos que ya no son tiles, utilizar la sintaxis:

Erase NOMBRE_ARREGLO

La orden Erase asigna cero a cada elemento de los arreglos
numricos y nulo () a cada elemento de los arreglos de cadena
de caracteres.
A manera de ejemplo considere el siguiente cdigo que
declara y hace uso de un arreglo dinmico:

48

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

REGISTROS
Un registro es un nuevo tipo de dato, que se define como una
coleccin de datos de diferentes tipos, conocidos como campos,
los cuales se encuentran evidentemente relacionados. Un registro
slo se puede ser creado en la seccin de declaraciones de un
mdulo. La sintaxis correspondiente es:
Private Type NOMBRE_REGISTRO
DECLARACIONES_DE_LOS_MIEMBROS
End Type

Por ejemplo considere el siguiente cdigo que define la
estructura ALUMNO:

Private Type ALUMNO
ID_ALUMNO As String * 7
NOMBRE As String * 25

49
DIRECCION As String * 35
TELEFONO As String * 7
ESTADO As Boolean
End Type

Luego, podemos declarar una variable tipo ALUMNO de la
siguiente forma:

Dim X As ALUMNO

Para referirse a un determinado miembro del registro se
utiliza el operador selector de campos ( . ), veamos:

X.ID_ALUMNO = 980976G
X.NOMBRE = Carlos Castillo Peralta
X.DIRECCION = Jr. C. Richardson 412 Chorrillos
X.TELEFONO = 2510850
X.ESTADO = True
Las mismas rdenes del prrafo anterior se pueden escribir
de una manera ms fcil, ms legible y ms 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

50
.ESTADO = True
End With

FUNCIONES
Las funciones son uno de los elementos bsicos en
programacin. A continuacin sern estudiadas detalladamente.

Declaracin de una funcin
Una funcin es un procedimiento que cuando se ejecuta
devuelve un nico resultado al procedimiento que la invoc. La
sintaxis correspondiente a la declaracin de una funcin es:

Function NOMBRE_FUNCIN([LISTA_PARMETROS]) [As TIPO]
SENTENCIAS
[NOMBRE_FUNCIN = VALOR_RETORNADO]
[Exit Function]
End Function

Donde LISTA_PARMETROS es una secuencia de variables
separadas por comas que se corresponden con los argumentos
pasados cuando es invocada la funcin.
Para especificar el tipo de datos que ser retornado por la
funcin utilice la clusula opcional As TIPO, el tipo es Variant
por omisin.
El valor retornado por la funcin es almacenado en su
propio nombre, es decir en NOMBRE_FUNCIN, que acta como

51
variable dentro del cuerpo de la funcin. Si no se efecta esta
asignacin el valor devuelto ser cero si la funcin es de tipo
numrica, nulo () si la funcin es de tipo cadena, o vaco
(Empty) si la funcin es de tipo Variant.
La clusula opcional Exit Function permite salir de una
funcin antes de que la funcin finalice, en caso sea esto
necesario.
La sintaxis para la llamada a una funcin es de la siguiente
forma:

VARIABLE = NOMBRE_FUNCIN([LISTA_ARGUMENTOS])

Donde LISTA_ARGUMENTOS es una secuencia de constantes,
variables o expresiones separadas por comas. El nmero de
argumentos debe ser igual al nmero de parmetros de la funcin.
Los tipos de los argumentos deben coincidir con los tipos de sus
correspondientes parmetros.
A manera de ejemplo considere la implementacin de la
siguiente funcin:

3 2 ) (
2
+ + = x x x f

En la seccin de Declaraciones del mdulo de formulario
ingrese el siguiente cdigo:

Function F(X As Double) As Double

52
F = X ^ 2 + 2 * X + 3
End Function

Para invocar la funcin creada recientemente, codifique las
siguientes lneas:

Dim A As Double, RESP As Double
A = InputBox(Ingrese A?)
RESP = F(A)
MsgBox (Str(RESP))

Paso de argumentos a una funcin
El paso de argumentos a una funcin es la forma como se
ingresan los datos y variables al interior de la funcin 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 parmetro en el cuerpo de la funcin,
tambin se produce en el argumento correspondiente de la llamada
a la funcin. Esta forma de pasar los argumentos a una funcin es
til para funciones que devuelven ms de un valor. Por ejemplo,

53
considere la siguiente funcin que calcula las races reales de
una ecuacin cuadrtica Ax Bx C
2
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)
RAIZ = True ' Verdadero si hay races reales
Else
RAIZ = False ' Falso si no hay races reales
End If
End Function

La llamada a esta funcin se puede realizar de la manera que
se presenta a continuacin:
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)

54
MsgBox X2= & Str(X2)
Else
MsgBox NO EXISTEN RACES REALES
End If

Paso de argumentos por valor
Cuando se ejecuta una funcin, se podr especificar que el
valor de un argumento no sea cambiado por esta funcin, pasando
dicho argumento por valor. Para ello se debe anteponer la palabra
reservada ByVal a la declaracin del parmetro en la cabecera de
la funcin. Por ejemplo:

Function F(ByVal X As Double) As Double
F = X ^ 2 + 2 * X + 3
End Function

La cabecera de la funcin F especifica que X ser pasado por
valor y no por referencia.
Funciones recursivas
Se dice que una funcin es recursiva si se llama a s misma.
Por ejemplo la funcin FACTORIAL cuyo cdigo se presenta a
continuacin es recursiva:

Function FACTORIAL(N As Integer) As Long
If N <> 0 Then
FACTORIAL = FACTORIAL(N - 1) * N

55
Else
FACTORIAL = 1
End If
End Function

PROCEDIMIENTOS
La sintaxis para definir un procedimiento es la siguiente:

Private Sub NOMBRE_PROCEDIMIENTO([LISTA_PARMETROS])
SENTENCIAS
[Exit Sub]
End Sub

La explicacin es anloga a la dada para las funciones. Sin
embargo, un procedimiento no puede ser utilizado en una
expresin, ya que un procedimiento no retorna ningn valor a
travs 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])


56
Por ejemplo, el siguiente cdigo corresponde a un
procedimiento que calcula e imprime la suma de los N primeros
nmeros naturales impares, es decir: S = 1 + 3 + 5 + . . . + N

Private Sub SUMA_IMPAR(N As Integer)
Dim S As Integer, I As Integer
S = 0
For I = 1 To N
If I Mod 2 <> 0 Then
S = S + I
End If
Next
MsgBox La suma es S= & Str(S)
End Sub

La llamada a este procedimiento podra ser de la forma:

Call SUMA_IMPAR(25)











57
CAPTULO 4

USO DE LOS CONTROLES

Los controles son aquellos objetos que se encuentran dentro
de un contenedor y que permiten la interaccin entre el usuario y
la aplicacin, ya sea para manipular datos y/o ejecutar tareas.
En Visual Basic, los controles suelen ser agrupados en tres
categoras:

- Controles bsicos
- Controles complementarios
- Controles externos

Los controles bsicos 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 verificacin, un cuadro combinado o un
cronmetro.
Los controles externos se refieren a aquellos controles
creados por terceros. Este tipo de controles son llamados
ActiveX.



58
CONTROLES BSICOS
Los controles bsicos lo conforman las etiquetas, cuadros de
texto y botones de comando, debido a que cualquier interfaz se
puede implementar con slo estos tres objetos.

Etiqueta
Una etiqueta es un control que permite presentar texto de
solo lectura. Se utiliza para mostrar ttulos 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 ejecucin.

Propiedad Descripcin
Alignment Especifica la forma como se alinear el
texto.
AutoSize Especifica si se cambia automticamente el
tamao del control para que quepan sus
contenidos.
BackColor,
ForeColor
Especifica el color de fondo y de primer
plano empleado para mostrar el texto.
BackStyle Especifica si el fondo del control es
transparente u opaco.
Caption Especifica el texto que se muestra en el
control.
WordWrap Especifica si la etiqueta se extiende a ms
de una lnea cuando el texto es amplio.


59
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 aplicacin. El valor de un cuadro de texto por lo
general se asocia a una variable de memoria.

Propiedad Descripcin
Enabled Habilita o deshabilita el control, es decir
si se puede o no modificar el contenido.
Locked Permite bloquear el acceso al control en
tiempo de ejecucin.
MaxLenght Especifica la longitud mxima (en caracteres)
que puede escribirse en el control.
MultiLine Especifica si el control admitir mltiples
lneas.
PasswordChar Determina si se muestran en el control los
caracteres escritos por el usuario o los
caracteres de marcador de posicin.
ScrollBars Especifica si se muestran las barras de
desplazamiento horizontales o verticales.
SelLength Especifica el nmero de caracteres
seleccionados.
SelStart Especifica el inicio del texto seleccionado.
Si su valor es 0, el texto seleccionado
comienza por el primer carcter.
SelText Contiene el texto seleccionado.
Text Contiene el texto introducido en el control.
Puede inicializar el contenido en tiempo de
diseo.

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

Evento Descripcin
Change Ocurre cuando se cambia el contenido del
control utilizando el teclado o el ratn.
KeyPress Ocurre cuando se pulsa una tecla.

Botn de comando
Un botn de comando es un control que suele emplearse para
ejecutar una accin, como cerrar un formulario, imprimir un
informe, etc.

Propiedad Descripcin
Cancel Especifica si el control responder a la
tecla ESC, por lo general para terminar la
aplicacin.
Caption Muestra un ttulo para el control.
Default Especifica si el control responder a la
tecla ENTRAR, sin importar la ubicacin 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
estndar (estilo estndar de Windows) o
grfica (con una imagen personalizada).

61
Los botones de comando suelen responder al evento Click,
cuya descripcin es:

Evento Descripcin
Click Ocurre cuando el usuario hace click sobre el
control.

A manera de ejemplo vamos a desarrollar la siguiente
aplicacin. Esta consiste en un cajero automtico el cual permite
manipular cierta cantidad de dinero para lo cual dispone de los
siguientes billetes: S/. 10.00; S/. 20.00; S/. 50.00; S/.
100.00 y S/. 200.00. Elaborar una aplicacin que permita la
lectura de la cantidad a retirar e indique el menor nmero de
billetes a utilizar.



Para el desarrollo de la presente aplicacin proceda a
ubicar los siguientes controles en el formulario:
6 etiquetas

62
6 cajas de texto
3 botones de comando

Una vez ubicados los controles, establezca las propiedades
segn se indica:

Form1
Nombre FrmCajero
BorderStyle 3-Fixed Dialog
Caption Cajero automtico

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

63
Nombre LblB100
AutoSize True
Caption Billetes de S/. 100

Label6
Nombre LblB200
AutoSize True
Caption Billetes de S/. 200

Text1
Nombre TxtCantidad
Text

Text2
Nombre TxtB10
Text

Text3
Nombre TxtB20
Text

Text4
Nombre TxtB50
Text

Text5
Nombre TxtB100
Text

Text6
Nombre TxtB200
Text


64
Command1
Nombre CmdAceptar
Caption
&Aceptar

Command2
Nombre CmdLimpiar
Caption
&Limpiar

Command3
Nombre CmdSalir
Caption
&Salir

Para aadir cdigo a la aplicacin haga doble click sobre el
botn 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)

65
Else
MsgBox Cantidad a retirar debe ser mltiplo de 10
TxtCantidad =
TxtCantidad.SetFocus
End If
End Sub

Luego, haga doble click sobre el botn Limpiar y aada el
siguiente cdigo:

Private Sub CmdLimpiar_Click()
TxtCantidad =
TxtB200 =
TxtB100 =
TxtB50 =
TxtB20 =
TxtB10 =
TxtCantidad.SetFocus
End Sub

Finalmente dar doble click sobre el botn Salir y aada el
siguiente cdigo:

Private Sub CmdSalir_Click()
End
End Sub

66
En el cdigo anterior hemos utilizado el mtodo 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 bsicos en aplicaciones en las cuales su uso
facilita o mejora el diseo de la interfaz. Como el lector podr
verificar, algunos controles son ms adecuados que otros
dependiendo del tipo de aplicacin que se pretenda desarrollar.

Marco
Un marco es un objeto contenedor que puede utilizarse para
agrupar casillas de verificacin, botones de opcin, botones de
comando, etc.

Propiedad Descripcin
Caption Muestra un ttulo para el control.

Casilla de verificacin
Una casilla de verificacin se utiliza para alternar entre
dos posibles valores (Activado/Desactivado). Cada casilla de
verificacin es independiente de las dems ya que cada una tiene
su propio nombre (Name). Puede utilizar casillas de verificacin

67
en grupos para mostrar mltiples opciones entre las cuales el
usuario puede seleccionar todas las que desee a la vez.

Propiedad Descripcin
Caption Muestra un ttulo para el control.
Value Devuelve o establece el estado del control,
puede ser: Desactivado (0), Activado (1).

Las casillas de verificacin suelen responder al evento
Click.

Botn de opcin
Un botn de opcin se utiliza para alternar entre dos
posibles valores (Activado/Desactivado), de manera similar a las
casillas de verificacin, la diferencia radica en que de un grupo
de botones de opcin el usuario slo puede seleccionar un nico
botn a la vez.

Propiedad Descripcin
Caption Muestra un ttulo para el control.
Value Devuelve o establece el estado del control,
puede ser: Desactivado (Falso), Activado
(True).

Los botones de opcin tambin suelen responder al evento
Click.

68
A manera de ejemplo vamos a desarrollar la siguiente
aplicacin, 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
verificacin Convertir a maysculas, todo el texto que haya
escrito en el cuadro de texto se presentar en maysculas y todo
texto que escriba a continuacin (mientras la opcin est
activada) tambin deber aparecer en maysculas.



Para el desarrollo de la presente aplicacin proceda a
ubicar los siguientes controles en el formulario:

1 cuadro de texto
2 marcos
3 botones de opcin
4 casillas de verificacin

69
Una vez ubicados los controles, establezca las propiedades
segn se indica:

Form1
Nombre FrmEditor
BorderStyle 3-Fixed Dialog
Caption Editor

Text1
Nombre TxtMensaje
ForeColor
&H000000FF&
Text

Frame1
Nombre FraColor
Caption Color

Frame2
Nombre FraEstilo
Caption Estilo

Option1
Nombre OptRojo
Caption Rojo
ForeColor
&H000000FF&
Value True

Option2
Nombre OptVerde
Caption Verde
ForeColor
&H00008000&


70
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 maysculas

Una vez establecidas las propiedades, proceda a ingresar el
cdigo que se indica a continuacin:

Private Sub OptRojo_Click()
If OptRojo.Value Then
TxtMensaje.ForeColor = RGB(255, 0, 0)
End If

71
End Sub
Private Sub OptVerde_Click()
If OptVerde.Value Then
TxtMensaje.ForeColor = RGB(0, 255, 0)
End If
End Sub

Private Sub OptAzul_Click()
If OptAzul.Value Then
TxtMensaje.ForeColor = RGB(0, 0, 255)
End If
End Sub

Private Sub ChkNegrita_Click()
If ChkNegrita.Value Then
TxtMensaje.Font.Bold = True
Else
TxtMensaje.Font.Bold = False
End If
End Sub

Private Sub ChkCursiva_Click()
If ChkCursiva.Value Then
TxtMensaje.Font.Italic = True
Else
TxtMensaje.Font.Italic = False

72
End If
End Sub
Private Sub ChkSubrayado_Click()
If ChkSubrayado.Value Then
TxtMensaje.Font.Underline = True
Else
TxtMensaje.Font.Underline = False
End If
End Sub

Private Sub ChkMayuscula_Click()
If ChkMayuscula.Value Then
TxtMensaje = UCase(TxtMensaje)
End If
End Sub

Private Sub TxtMensaje_KeyPress(KeyAscii As Integer)
Dim CAR As String * 1
If ChkMayuscula.Value Then
CAR = UCase(Chr(KeyAscii))
KeyAscii = Asc(CAR)
End If
End Sub

La funcin RGB() especifica el color que se asigna a la
propiedad ForeColor.

73
La funcin UCase() retorna una cadena de caracteres en
maysculas.
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 ms de
dichos elementos. Si el nmero de elementos supera el nmero que
puede mostrarse, se agregar automticamente una barra de
desplazamiento al control.

Propiedad Descripcin
List Contiene los elementos de la lista. Puede
definirlos en tiempo de diseo.
ListCount Especifica el nmero de elementos de la
lista. Su valor siempre es uno ms que el
mayor valor de ListIndex.
ListIndex Especifica el nmero 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 nmero de elementos
seleccionados.
Selected Especifica si un elemento de la lista est
seleccionado.
Sorted Especifica si los elementos de la lista se
ordenan alfabticamente.
Text Especifica el valor del elemento seleccionado

74
en ese instante. El valor es tratado como una
cadena de caracteres.

Los mtodos que se pueden utilizar para un cuadro de lista
son los siguientes:

Mtodo Descripcin
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 slo se podr ingresar un dato sino tambin
seleccionarlo de la lista. Presenta las mismas propiedades,
eventos y mtodos que el cuadro de lista a excepcin de lo
siguiente:

Propiedad Descripcin
Style Especifica si el control se comporta como un
cuadro de texto o como una lista desplegable.
Un cuadro de texto permite ingresar valores.
Una lista desplegable slo permite
seleccionar valores. El valor predeterminado
es 0-vbComboDropDown, e incluye una lista

75
desplegable y un cuadro de texto. El valor
1-vbComboSimple incluye tan solo cuadro de
texto. El valor 2-Dropdown List incluye slo
una lista desplegable.
Como ejemplo del uso de listas vamos a desarrollar una
aplicacin 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 aplicacin proceda a
ubicar los siguientes controles en el formulario:

3 etiquetas
1 cuadro de texto

76
2 listas
5 botones de comando

En seguida proceda a establecer las propiedades segn se
indica:

Form1
Nombre FrmCursos
BorderStyle 3-Fixed Dialog
Caption Cursos

Label1
Nombre LblCurso
AutoSize True
Caption Ingrese nuevo curso:

Label2
Nombre LblSeleccionar
AutoSize True
Caption Seleccione un curso:

Label3
Nombre LblProgramado
AutoSize True
Caption Curso programado:

Text1
Nombre TxtCurso
Text

List1

77
Nombre LstSeleccionar

List2
Nombre LstProgramado

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
&Aadir

78
Default True

Seguidamente proceda a ingresar el cdigo que se indica a
continuacin:
Private Sub CmdAnnadir_Click()
LstSeleccionar.AddItem TxtCurso
TxtCurso =
TxtCurso.SetFocus
End Sub

Private Sub CmdAgregar_Click()
Dim CURSO As String, I As Integer
CURSO = LstSeleccionar.Text
I = LstSeleccionar.ListIndex
If LstSeleccionar.ListIndex >= 0 Then
LstProgramado.AddItem CURSO
LstSeleccionar.RemoveItem I
End If
End Sub

Private Sub CmdQuitar_Click()
Dim CURSO As String, I As Integer
CURSO = LstProgramado.Text
I = LstProgramado.ListIndex
If LstProgramado.ListIndex >= 0 Then

79
LstSeleccionar.AddItem CURSO
LstProgramado.RemoveItem I
End If
End Sub
Private Sub CmdAgregarTodo_Click()
Dim I As Integer
For I = 0 To LstSeleccionar.ListCount - 1
LstProgramado.AddItem LstSeleccionar.List(I)
Next
LstSeleccionar.Clear
End Sub

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 aplicacin que
permita realizar consultas acerca de un determinado curso. La
relacin de cursos se presentar mediante un cuadro combinado,
del cual el usuario debe seleccionar el curso de su inters y en

80
seguida se presentar el nombre del profesor encargado del curso
(teora), el nombre del jefe de prctica (laboratorio), as como
los horarios de teora y de laboratorio, respectivamente.


Para el desarrollo de la presente aplicacin proceda a
ubicar los siguientes controles en el formulario:

1 etiqueta
1 cuadro de texto
1 cuadro combinado
1 botn de comando

En seguida proceda a establecer las propiedades segn se
indica:

Form1

81
Nombre FrmConsultaCursos
BorderStyle 3-Fixed Dialog
Caption Consulta de cursos

Label1
Nombre LblCursos
Caption Cursos:

Text1
Nombre TxtCurso
MultiLine True
ScrollBars 2-Vertical
Text

Combo1
Nombre CboCursos
Text
Style 2-Dropdown List

Command1
Nombre CmdSalir
Caption
&Salir

Seguidamente proceda a ingresar el cdigo que se indica a
continuacin:

Dim Matriz(5, 3) As String
Private Sub Form_Load()
CboCursos.AddItem Microsoft Visual Basic Nivel I
CboCursos.AddItem Microsoft Visual Basic Nivel II

82
CboCursos.AddItem Microsoft Visual FoxPro Nivel I
CboCursos.AddItem Microsoft Visual FoxPro Nivel II
CboCursos.AddItem Microsoft Visual C++ Nivel I
CboCursos.AddItem Microsoft Visual C++ Nivel II
Matriz(0, 0) = Castillo Peralta, Carlos
Matriz(1, 0) = Castillo Peralta, Carlos
Matriz(2, 0) = Linares Alarcon, Adams
Matriz(3, 0) = Castillo Peralta, Carlos
Matriz(4, 0) = Crdoba 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) = Crdoba Saavedra, Javier
Matriz(5, 2) = Crdoba Saavedra, Javier
Matriz(0, 3) = Sa 11-13
Matriz(1, 3) = Do 08-10

83
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
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 teora: & _
Matriz(CboCursos.ListIndex, 0)
H_TEORIA = Horario de teora: & _
Matriz(CboCursos.ListIndex, 1)
P_LAB = Jefe de prctica: & _
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


84
La constante vbCrLf es una combinacin de retorno de carro y
avance de lnea, es equivalente a Chr(13) + Chr(10).
Para este ejemplo en particular hemos almacenado la
informacin en memoria RAM mediante el uso de un arreglo
bidimensional (Matriz).

Cronmetro
Un cronmetro sirve para controlar el tiempo transcurrido
desde el inicio de una accin.

Propiedad Descripcin
Interval Especifica el nmero de milisegundos que se
esperar para disparar el evento Timer.

El control Cronmetro responde al evento Timer, cuya
descripcin es:

Evento Descripcin
Timer Ocurre cuando el nmero de milisegundos
especificado en la propiedad Interval ha
transcurrido.

A manera de ejemplo vamos a desarrollar la siguiente
aplicacin que simula el funcionamiento de un reloj digital.


85

Para el desarrollo de la presente aplicacin proceda a
ubicar los siguientes controles sobre el formulario:

1 etiqueta
1 cuadro de texto
1 cronmetro
1 botn de comando

En seguida proceda a establecer las propiedades segn se
indica:

Form1
Nombre FrmReloj
BorderStyle 3-Fixed Dialog
Caption Reloj digital

Label1
Nombre LblHora
Caption Hora

Text1

86
Nombre TxtHora
Text

Timer1
Nombre Timer1
Interval 500

Command1
Nombre CmdTerminar
Caption
&Terminar
Seguidamente proceda a ingresar el cdigo que se indica a
continuacin:

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

87
Un cuadro de imagen se utiliza para mostrar un archivo de
imagen (BMP, GIF o JPG). Recorta el grfico si el control no es
lo bastante grande para mostrar la imagen completa.

Propiedad Descripcin
AutoSize Especifica si el control ajusta
automticamente su tamao para mostrar un
grfico completo.
Picture Especifica el archivo de imagen para el
control.
El evento que suele manejarse para este control es
MouseMove, cuya descripcin es:

Evento Descripcin
MouseMove Ocurre cuando el usuario mueve el ratn 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 ms rapidez que un cuadro de imagen.

Propiedad Descripcin
Picture Especifica el archivo de imagen para el
control.

88
Stretch Especifica como se ajusta el tamao del
archivo grfico para que quepa dentro del
control imagen.

Para este control tambin se suele manejar el evento
MouseMove.

Barras de desplazamiento horizontal
Una barra de desplazamiento horizontal representa un valor
entero, la cual tiene un cuadrado que se desplaza a lo largo de
la misma para fijar un valor.
La posicin ms a la izquierda se corresponde con el valor
mnimo, la posicin ms a la derecha con el valor mximo, y
cualquier otra posicin es un valor entre ellos dos.

Propiedad Descripcin
Max Especifica el valor mximo que puede tomar la
propiedad Value.
Min Especifica el valor mnimo que puede tomar la
propiedad Value.
LargeChange Especifica en cuanto cambiar el valor de la
propiedad Value cuando el usuario haga click
antes o despus 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.

89
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 Descripcin
Change Ocurre inmediatamente despus que el cuadrado
de desplazamiento ha sido movido.
Scroll Ocurre mientras el cuadrado de desplazamiento
est siendo movido (este evento slo ocurre
cuando el cuadrado es arrastrado).
Barras de desplazamiento vertical


Una barra de desplazamiento vertical representa un valor
entero, la cual tiene un cuadrado que se desplaza a lo largo de
la misma para fijar un valor.
La posicin ms hacia arriba se corresponde con el valor
mnimo, la posicin ms hacia abajo se corresponde con el valor
mximo, y cualquier otra posicin es un valor entre ellos dos.
Las propiedades y eventos de las barras de desplazamiento
horizontal y vertical son anlogas.
Como ejemplo, vamos a construir una aplicacin que permita
cambiar el color de fondo de un cuadro de imagen, mediante tres
barras de desplazamiento (rojo, verde y azul).


90


Para el desarrollo de la presente aplicacin proceda a
ubicar los siguientes controles en el formulario:
3 etiquetas
3 barras de desplazamiento horizontal
1 cuadro de imagen

En seguida proceda a establecer las propiedades segn se
indica:

Form1
Nombre FrmColores
BorderStyle 3-Fixed Dialog
Caption Colores

Label1
Nombre LblRojo
Caption Rojo


91
Label2
Nombre LblVerde
Caption Verde

Label3
Nombre LblAzul
Caption Azul

HScroll1
Nombre HSRojo
LargeChange 10
Max 255
Min 0
SmallChange 1
Value 255

HScroll2
Nombre HSVerde
LargeChange 10
Max 255
Min 0
SmallChange 1
Value 0

HScroll3
Nombre HSAzul
LargeChange 10
Max 255
Min 0
SmallChange 1
Value 0


92
Picture1
Nombre PicFondo
BackColor
&H000000FF&

Seguidamente proceda a ingresar el cdigo que se indica a
continuacin:

Private Sub HSRojo_Change()
PicFondo.BackColor = RGB(HSRojo, HSVerde, HSAzul)
End Sub

Private Sub HSVerde_Change()
PicFondo.BackColor = RGB(HSRojo, HSVerde, HSAzul)
End Sub
Private Sub HSAzul_Change()
PicFondo.BackColor = RGB(HSRojo, HSVerde, HSAzul)
End Sub

En el cdigo 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 vlida en tiempo de ejecucin.

93
Utilice este control para presentar una lista de todas las
unidades vlidas del sistema.

Propiedad Descripcin
Drive Especifica la unidad seleccionada en tiempo
de ejecucin.

Este control responde al evento Change, cuya descripcin es
la siguiente:

Evento Descripcin
Change Ocurre cuando el usuario hace click sobre la
unidad que desea seleccionar. El evento
Change tambin ocurre si se selecciona la
unidad mediante el teclado.

Cuadro de lista de directorios
Un cuadro de lista de directorios muestra directorios y
rutas de acceso en tiempo de ejecucin. Utilice este control para
mostrar una lista jerrquica de directorios.

Propiedad Descripcin
Path Especifica la ruta de acceso actual.

Un cuadro de lista de directorios tambin responde al evento
Change.

94

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 ejecucin. Utilice este control para mostrar una lista
de los archivos seleccionados por tipo.

Propiedad Descripcin
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 aplicacin que permita
el manejo de unidades, carpetas y archivos. El usuario puede
seleccionar la unidad actual de trabajo, la carpeta y el archivo
y poder visualizar su contenido (en este caso archivos grficos
*.JPG).


95


Para el desarrollo de la presente aplicacin 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 segn se
indica:

Form1
Nombre FrmVisor
Caption Visor

Label1
Nombre LblUnidad
Caption Unidad

96

Label2
Nombre LblCarpeta
Caption Carpeta

Label3
Nombre LblArchivo
Caption Archivo

Label4
Nombre LblVista
Caption Vista previa

Drive1
Nombre Drive1

Dir1
Nombre Dir1

File1
Nombre File1
Pattern *.JPG

Image1
Nombre ImgVista
Stretch True
Seguidamente proceda a ingresar el cdigo que se indica a
continuacin:

Private Sub Drive1_Change()
On Error GoTo DRIVE_ERROR
Dir1.Path = Drive1.Drive

97
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 instruccin On Error activa una rutina de control de
errores y especifica la ubicacin de la misma en un
procedimiento.
LA FUNCIN MSGBOX
A menudo habr situaciones en las cuales tendr que
presentar algn mensaje (por ejemplo una pregunta) y en funcin
de la respuesta del usuario se ejecutar una determinada accin.


98


La funcin MsgBox() muestra un cuadro de dilogo predefinido
y retorna un valor de tipo entero dependiendo del botn
seleccionado por el usuario. Su sintaxis es de la siguiente
forma:

VALOR = MsgBox(MENSAJE [, BOTN + ICONO, TTULO])

Donde MENSAJE se refiere a una expresin de cadena que se
muestra como mensaje en el cuadro de dilogo.
BOTN es una expresin numrica que se refiere al tipo y
cantidad de botones a utilizar.
ICONO es una expresin numrica que se refiere al estilo de
icono que se va ha utilizar.
TTULO es una texto que se mostrar en la barra de ttulo de
la caja de dilogo.
Tipo de botn
Valor Botn Nombre
0 Aceptar vbOKOnly
1 Aceptar y Cancelar vbOKCancel
2 Anular, Reintentar, Ignorar vbAbortRetryIgnore

99
3 S, No y Cancelar vbYesNoCancel
4 S y No vbYesNo
5 Reintentar y Cancelar vbRetryCancel

Tipo de icono
Valor Icono Nombre
16 Mensaje crtico vbCritical
32 Signo de interrogacin vbQuestion
48 Signo de exclamacin vbExclamation
64 Signo de informacin vbInformation

Valores retornados
Valor Botn 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
botn Salir, de tal forma que cuando el usuario pulse dicho
botn se presente el siguiente mensaje:


100


En caso de que el usuario elija la opcin S, la
aplicacin debe terminar. En caso contrario, es decir si el
usuario elige la opcin No, se debe proseguir con la
aplicacin.
Para el desarrollo del presente ejemplo, proceda a ubicar
sobre el formulario un botn de comando (CmdSalir), a
continuacin ingresar el siguiente cdigo:

Private Sub CmdSalir_Click()
Dim RESP As Integer
RESP = MsgBox(Desea terminar la aplicacin?, _
vbQuestion + vbYesNo, Pregunta)
If RESP = vbYes Then
End
End If
End Sub
Para ilustrar mejor el uso de la funcin MsgBox() vamos a
desarrollar la siguiente aplicacin que permite mostrar los
diferentes tipos de botones e iconos generados por la funcin.


101


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

2 cuadros de lista
1 botn de comando

En seguida proceda a establecer las propiedades segn se
indica:

Form1
Nombre FrmFuncionMsgBox
BorderStyle 3-Fixed Dialog
Caption Funcin MsgBox

List1
Nombre LstBoton

List2
Nombre LstIcono

Command1

102
Nombre CmdMensaje
Caption
&Mensaje

Seguidamente proceda a ingresar el cdigo que se indica a
continuacin:

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 crtico
LstIcono.AddItem Signo de interrogacin
LstIcono.AddItem Signo de exclamacin
LstIcono.AddItem Signo de informacin
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



103
CAPTULO 5

EL FORMULARIO

Un formulario es un objeto contenedor que sirve para disear
la interfaz de usuario. En el formulario se colocan los controles
para que el usuario pueda interactuar con la aplicacin de una
manera fcil e intuitiva.



Los formularios tienen sus propias propiedades, eventos y
mtodos con los que se puede controlar su apariencia y
comportamiento, muchos de los cuales ya han sido utilizados en
las aplicaciones de los captulos anteriores y que a continuacin
pasamos a describir.

104
Propiedad Descripcin
AutoRedraw Especifica si se activa el redibujado
automtico 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 ttulo 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 botn
Maximizar.
MinButton Especifica si el formulario tiene un botn
Minimizar.
Picture Especifica el archivo de imagen que se va ha
mostrar como fondo para el formulario.
StartUpPosition Especifica la posicin 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,

105
minimizado o maximizado).
Nota
Un twip es una unidad independiente de la pantalla utilizada
para asegurar que la colocacin y la proporcin de los elementos
de la pantalla de la aplicacin 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 centmetro.

Los eventos a los que responde un formulario son los
siguientes:

Evento Descripcin
Activate Ocurre cuando el formulario se convierte en
ventana activa.
Deactivate Ocurre cuando el formulario deja de ser la
ventana activa.
Load Ocurre cuando el formulario se carga en la
memoria.
MouseDown Ocurre cuando el usuario pulsa el botn
derecho del ratn sobre el formulario.
QueryUnload Ocurre antes de iniciarse el proceso de
descarga del formulario (antes del evento
Unload).
Resize Ocurre cuando se muestra primero el
formulario o se cambian sus dimensiones.
Unload Ocurre cuando el formulario se descarga de la

106
memoria.

Los mtodos que se pueden utilizar con un formulario son los
siguientes:

Mtodo Descripcin
Hide Oculta un formulario.
PopupMenu Presenta un men popup en la posicin actual
del ratn.
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
automticamente.

Como ejemplo vamos a desarrollar una aplicacin que utilice
dos formularios. Desde el primer formulario el usuario podr ir
al segundo formulario y viceversa.


107

Para el desarrollo de la presente aplicacin 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 cdigo que se muestra a
continuacin:


108
Private Sub CmdIr_Click()
Form2.Show
Form1.Hide
End Sub

Private Sub CmdSalir_Click()
End
End Sub
Luego debe aadir un formulario adicional al proyecto. Para
tal fin, seleccione el men Proyecto y elija la opcin Agregar
formulario.



Del cuadro de dilogo que se presenta elija el icono
Formulario y haga click en el botn Abrir, tal como se indica
en la figura. En ese instante se aadir un nuevo formulario al

109
proyecto. Luego, proceda a ubicar un botn de comandos en el
formulario que acaba de aadir y establezca las siguientes
propiedades:

Form2
Nombre Form2
Caption Segundo formulario
ControlBox False

Command2
Nombre CmdVolver
Caption
&Volver

En seguida proceda a ingresar el cdigo que se indica a
continuacin:

Private Sub CmdVolver_Click()
Form1.Show
Form2.Hide
End Sub

ESTILOS DE FORMULARIO
Visual Basic cuenta con seis diferentes estilos de
formulario, cuya descripcin es la siguiente:

Valor Estilo Descripcin
0 None No presenta ningn borde.

110
1 Fixed Single Puede incluir un Men de control,
una Barra de ttulo , un botn
Maximizar y un botn Minimizar.
Slo puede cambiar de tamao
mediante los botones Maximizar y
Minimizar.
2 Sizable (Predeterminado). Puede cambiar de
tamao mediante cualquiera de los
elementos opcionales de borde
indicados para Fixed Single.
Valor Estilo Descripcin
3 Fixed Dialog Puede incluir un Men de control y
una Barra de ttulo, pero no los
botones Maximizar ni Minimizar. No
puede cambiar de tamao.
4 Fixed ToolWindow Slo muestra el botn Cerrar y el
texto de la barra de ttulo aparece
con un tamao de fuente reducido.
No puede cambiar su tamao.
5 Sizable ToolWindow Slo muestra el botn Cerrar y el
texto de la barra de ttulo aparece
con un tamao de fuente reducido.
Puede cambiar de tamao.

Como ejemplo vamos a desarrollar una aplicacin que permita
representar los diferentes estilos de formulario de Visual Basic.


111

Para el desarrollo de la presente aplicacin 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
continuacin:

Form1
Nombre FrmPrincipal
Caption Estilos de formulario
BorderStyle 3-Fixed Dialog

List1
Nombre LstTipoForm
List 0-None

112
1-Fixed Single
2-Sizable
3-Fixed Dialog
4-Fixed ToolWindow
5-Sizable ToolWindow

Command1
Nombre CmdMostrar
Caption
&Mostrar

Command2
Nombre CmdSalir
Caption
&Salir
Seguidamente procede a ingresar el cdigo que se muestra a
continuacin:

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

113
Case 0 : FrmNone.Show vbModal
Case 1 : FrmFixedSingle.Show vbModal
Case 2 : FrmSizable.Show vbModal
Case 3 : FrmFixedDialog.Show vbModal
Case 4 : FrmFixedToolWindow.Show vbModal
Case 5 : FrmSizableToolWindow.Show vbModal
Case Else
MsgBox Debe seleccionar estilo de formulario
End Select
End Sub
Private Sub LstTipoForm_DblClick()
Call CmdMostrar_Click
End Sub

Private Sub CmdSalir_Click()
End
End Sub

Seguidamente proceda a aadir los formularios para las
diferentes opciones del cuadro de lista. Cambie los nombres de
los formularios segn se indica:

Formulario Nombre
Form2 FrmNone
Form3 FrmFixedSingle
Form4 FrmSizable

114
Form5 FrmFixedDialog
Form6 FrmFixedToolWindow
Form7 FrmSizableToolWindow

Luego debe activar el formulario FrmNone, ubicar un botn de
comandos sobre el mismo y establecer las siguientes propiedades:

Form2
Nombre FrmNone
BorderStyle 0-None
Caption None
Command1
Nombre CmdVolver
Caption
&Volver

Una vez establecidas las propiedades, proceda a ingresar el
cdigo que se muestra a continuacin:

Private Sub CmdVolver_Click()
Unload Me
End Sub

Para concluir con el diseo de la aplicacin, simplemente
repita el procedimiento anterior para los dems tipos de
formularios.
Como habr podido observar, al mostrar un formulario
mediante el mtodo Show podemos hacerlo de forma modal (vbModal)

115
o no modal (opcin 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 mdulos estndar,
los cuales son contenedores de procedimientos y declaraciones a
los que tienen acceso otros mdulos de la aplicacin.
Como ejemplo vamos a construir la siguiente aplicacin, la
cual enva un mensaje de texto del primer formulario hacia el
segundo formulario.



Para el desarrollo de la presente aplicacin proceda a crear
un nuevo proyecto y aada un formulario adicional, de tal forma

116
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 continuacin proceda a ingresar el cdigo que se indica
para el primer formulario (Form1):

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
cdigo siguiente:

Private Sub CmdRecibir_Click()
TxtMensaje2 = Mensaje

117
End Sub

Private Sub CmdVolver_Click()
Form2.Hide
Form1.Show
End Sub

Seguidamente debe aadir un mdulo estndar al proyecto,
para ello, seleccione el Men Proyecto y elija la opcin Agregar
mdulo, se debe presentar un cuadro de dilogo similar a la
figura mostrada, en el cual debe dar click en el botn Abrir.


Seguidamente proceda a declarar la variable Mensaje como
pblica en la seccin de declaraciones del mdulo que acaba de
aadir:


118


Una variable pblica (Public) es una variable que se declara
a nivel de mdulo y se le puede acceder desde cualquier otro
mdulo.

FORMULARIOS MDI
Un formulario MDI (Interfaz de Documentos Mltiples) es una
ventana que acta como fondo de una aplicacin y es el contenedor
(ventana padre) de otros formularios (ventanas hijas).



119
En una aplicacin MDI pueden haber varias ventanas hijas,
pero slo una ventana padre por aplicacin. Para que una ventana
acte como hija debe tener su propiedad MDIChild establecida a
True.
Como ejemplo vamos a desarrollar una aplicacin MDI que
incluya tres ventanas hijas. Para tal fin proceda a crear un
nuevo proyecto y seguidamente agregar dos formularios (simples)
al mismo.

No olvide establecer la propiedad MDIChild de los
formularios Form1, Form2 y Form3 a True.
Luego, debemos agregar el formulario MDI, para ello acceder
al Men Proyecto y elegir la opcin Agregar formulario MDI, del
cuadro de dilogo que se presenta hacer click en el botn
Abrir.


120


A continuacin dar doble click sobre el formulario MDI e
ingresar el siguiente cdigo:

Private Sub MDIForm_Load()
Form1.Show
Form2.Show
Form3.Show
End Sub
Ahora slo 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 opcin Propiedades de
Proyecto. En el cuadro combinado Objeto inicial seleccionar
MDIForm1, tal como se indica en la figura:


121


Eso es todo, ahora simplemente tiene que ejecutar su
aplicacin.
Cabe destacar que en los formularios MDI por lo general no
se pueden incluir controles, debido a ello se suele trabajar con
mens de opciones o barras de herramientas para indicar alguna
accin a realizar.

CREACIN DE MENS
Un men es un conjunto de opciones que se presentan al
usuario, entre las cuales debe elegir una de ellas. Dependiendo
de la decisin se realizarn una serie de acciones.


122


Para disear un men cualquiera dar click derecho sobre el
formulario y del men emergente que se presenta elegir la opcin
Editor de mens.


En seguida se ha de presentar el Editor de mens de Visual
Basic.


123


Para crear un men, tener en cuenta los siguiente
procedimientos:

- Ingresar el Editor de mens.
- Introducir el ttulo del men en el cuadro de texto Caption, el
cual aparecer en la barra de mens.
- Introducir un nombre para el men en el cuadro de texto Name,
el cual ser utilizado en el cdigo para referirse al men.
- Introducir los elementos que componen el men, para ello
escriba en los cuadros de texto Caption y Name el ttulo y el
nombre del correspondiente elemento del men.

124
- Para diferenciar un elemento del men del propio men, hay que
sangrar el ttulo del elemento, para tal fin, seleccinelo y
haga click en el botn 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 ms).
- Utilizando separadores puede agrupar las rdenes en funcin de
lo que realizan. Para insertar un separador, escriba un nico
guin (-) en el cuadro Caption del Editor de mens. Tiene que
especificar tambin un nombre para el separador.
- Para aadir un acelerador (una tecla o combinacin 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 ejecucin se
desea ocultar un elemento de men.
- Cerrar el Editor de mens, para ello una vez que haya
finalizado su diseo pulse el botn Aceptar.

Como ejercicio intente construir el men mostrado en la
figura anterior.

125

Caption Name ShortCut
&Archivo
MnuArchivo Ninguno
. . . &Artculo
MnuArchivoArticulo Ninguno
. . . &Cliente
MnuArchivoCliente Ninguno
. . . &Vendedor
MnuArchivoVendedor Ninguno
. . . - MnuArchivoLinea Ninguno
. . . &Salir
MnuArchivoSalir Ctrl + X
&Proceso
MnuProceso Ninguno
. . . &Pedido
MnuProcesoPedido Ninguno
. . . &Facturacin
MnuProcesoFacturacion Ninguno
&Reporte
MnuReporte Ninguno
. . . &Registro de ventas
MnuReporteRegVentas Ninguno
. . . Catlogo de &artculos
Ninguno
. . . - MnuReporteLinea Ninguno
. . . &Cliente del mes
MnuReporteClienteMes Ninguno
. . . &Vendedor del mes
MnuReporteVendMes Ninguno
Ay&uda
MnuAyuda Ninguno
. . . &Contenido
MnuAyudaContenido Ninguno
. . . &Indice
MnuAyudaIndice Ninguno
. . . &Bsqueda
MnuAyudaBusqueda Ninguno
. . . - MnuAyudaLinea Ninguno
. . . &Acerca de
MnuAyudaAbout Ninguno
Para probar el men que acaba de crear, ingrese el siguiente
cdigo:

Private Sub MnuArchivoArticulo_Click()

126
MsgBox Seleccion la opcin Artculo
End Sub

Private Sub MnuArchivoCliente_Click()
MsgBox Seleccion la opcin Cliente
End Sub

Private Sub MnuArchivoVendedor_Click()
MsgBox Seleccion la opcin 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 aplicacin?, _
vbQuestion + vbYesNo, Pregunta)
If RESP = vbYes Then
End
Else: Cancel = True
End If
End Sub
Luego al ejecutar su aplicacin y seleccionar el men
Archivo, opcin Artculo, el resultado ser similar a la figura
mostrada:

127



Hasta ahora hemos programado la salida de una aplicacin,
asociando el cdigo al botn Salir. Sin embargo, cuando el
usuario hace click en el botn Cerrar de la barra de ttulo o
en la opcin Salir del Men de control del formulario, el
cdigo escrito para el botn Salir es ignorado.
Para remediar esta situacin, en el ejemplo anterior cuando
el usuario pulsa el botn Salir, se invoca al evento Unload. La
palabra reservada Me proporciona una forma de referirse al
formulario desde donde se est ejecutando el cdigo.
Recordar que el evento Unload del formulario se desencadena
cuando el usuario intenta cerrar el formulario mediante
cualquiera de las formas descritas anteriormente.
Para determinar si ocurre la descarga del formulario utilice
el parmetro Cancel. Si Cancel es False ocurre la descarga, si
Cancel es True impide que el formulario se quite.
CREACIN DE UNA BARRA DE HERRAMIENTAS
Una barra de herramientas contiene botones con las opciones
ms utilizadas de un men, de tal manera que el usuario haciendo

128
click en dicho control activara la opcin indicada de una manera
ms rpida.
Para crear una barra de herramientas debemos utilizar dos
controles que no estn en la lista de controles estndar, por
tanto debemos agregar dichos controles que se encuentran en el
componente Microsoft Windows Common Controls 6.0, tal como se
indica a continuacin:



Como ejemplo, vamos a crear la barra de herramientas de la
figura mostrada:


129


Para ello, ubicar un control ImageList sobre el formulario,
para establecer sus propiedades dar click derecho sobre el
control y elija la opcin Propiedades.


Se ha de presentar un cuadro de dilogo similar a la figura
mostrada:


130


Activar la ficha Imgenes y pulsar el botn Insertar
imagen para seleccionar las imgenes que se incluirn en el
control ImageList.
Para el ejemplo, debe incluir ocho imgenes que corresponden
a cada uno de los botones de la barra de herramientas.
Concluido el proceso anterior, proceda a ubicar un control
Toolbar sobre el formulario. Luego hacer click derecho sobre
dicho control y del men emergente que se presenta seleccionar la
opcin Propiedades. Del cuadro de dilogo que se presenta en la
ficha General establecer las siguientes propiedades:

131


Luego, en la ficha Botones pulse el botn Insertar botn.
En el cuadro de texto Image se debe indicar un nmero que
corresponde al orden de imagen a mostrar.



132
El lector debe continuar con este proceso hasta completar
los botones restantes, segn:

Index ToolTipText Image
1 Artculo 1
2 Cliente 2
3 Vendedor 3
4 Pedido 4
5 Facturacin 5
6 Registro de ventas 6
7 Catlogo de artculos 7
8 Ayuda 8

Como el cdigo a ejecutar tiene que ser el mismo cuando el
usuario elija una opcin del men o de un click sobre un botn 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 cdigo es muy sencillo, ya
que slo muestra un mensaje con la opcin seleccionada (esto por
razones de simplicidad). Para probar la funcionalidad de la barra
de herramientas que acaba de crear ingrese el siguiente cdigo:
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)

133
Select Case Button.Index
Case 1: MsgBox Seleccion la opcin Artculo
Case 2: MsgBox Seleccion la opcin Cliente
Case 3: MsgBox Seleccion la opcin Vendedor
Case 4: MsgBox Seleccion la opcin Pedido
Case 5: MsgBox Seleccion la opcin Facturacin
Case 6: MsgBox Seleccion la opcin Registro de ventas
Case 7: MsgBox Seleccion opcin Catlogo de artculos
Case 8: MsgBox Seleccion la opcin Ayuda
End Select
End Sub

El evento ButtonClick se dispara cuando el usuario hace
click sobre un botn de la barra de herramientas. La propiedad
Index permite identificar el nmero de botn pulsado.

CREACIN 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 aplicacin. 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:

134


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.



135
El resto de propiedades se establecern mediante cdigo 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 ms
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 mnimo de cdigo.

Constante Valor Descripcin
sbrText 0 (Predeterminado). Texto o mapa de bits.
sbrCaps 1 Tecla BLOQ MAYS.
sbrNum 2 Tecla BLOQ NM.
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

136
del sistema.
CREACIN DE UN MEN CONTEXTUAL
Un men contextual es un men emergente (flotante) que se
muestra sobre un formulario, independiente de la barra de mens.
Para mostrar un men contextual el usuario debe pulsar el botn
derecho del ratn sobre el formulario.
A menudo querr usar un men contextual para tener acceso a
opciones que no se encuentran disponibles en la barra de mens.
Para crear un men que no se presente en la barra de mens, haga
invisible un elemento de men de nivel superior en tiempo de
diseo (asegrese de que la casilla de verificacin Visible del
Editor de mens no est activada). Cuando Visual Basic presenta
un men emergente, pasa por alto la propiedad Visible del men de
nivel superior especificado.



137
Para crear el men contextual de la figura, debe ingresar al
Editor de mens y aadir lo siguiente:

Caption Name Visible
&Herramientas
MnuTools
. . . Calculadora MnuToolsCalc
3
. . . Calendario MnuToolsCalen
3
. . . Solitario MnuToolsSol
3

Seguidamente proceda a ingresar el cdigo que se indica a
continuacin:

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

138
End Sub
Private Sub MnuToolsSol_Click()
Dim I
I = Shell(C:\WINDOWS\SOL.EXE, 1)
End Sub

En el ejemplo anterior se asume que existe otro formulario
de nombre FrmCalendario. Este puede ser construido usando el
control MonthView.
La funcin Shell ejecuta un programa ejecutable y devuelve
un tipo Variant (Double) que representa la identificacin de la
tarea del programa si se ha ejecutado con xito, en caso
contrario devuelve cero.














139
CAPTULO 6

CONTROLES ACTIVEX

Los controles ActiveX son objetos que no forman parte del
conjunto de controles estndar de Visual Basic, sino ms bien han
sido desarrollados por terceras personas.
Los controles ActiveX existen como archivos independientes
con extensin .OCX y deben ser cargados antes de utilizarse. Para
ello ingresar al Men Proyecto y elija la opcin Componentes.


CONTROL ANIMATION

140
El control Animation permite reproducir archivos de
extensin .AVI que no tengan sonido para crear animaciones. Para
agregar este control debe seleccionar el componente Microsoft
Windows Common Controls-2 6.0.

Propiedad Descripcin
AutoPlay Especifica si el archivo AVI se reproducir
automticamente al cargarse el control.

Mtodo Descripcin
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 reproduccin del archivo AVI.

Como ejemplo vamos a desarrollar un formulario que permita
reproducir un archivo AVI, tal como se muestra en la figura:



141
Para ello crear un nuevo formulario y agregar un control
Animation (Animation1) y dos botones de comando (CmdIniciar y
CmdTerminar, respectivamente). Luego ingrese el cdigo 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 dilogo estndar que permiten realizar las operaciones ms
comnmente empleadas en el diseo 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.

142
Propiedad Descripcin
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 dilogo Abrir o
Guardar como.
FilterIndex Especifica el filtro predeterminado para un
cuadro de dilogo Abrir o Guardar como, en
caso se est utilizando varios filtros.

Mtodo Descripcin
ShowColor Presenta la paleta de colores.
ShowFont Presenta el cuadro de dilogo Fuentes.
ShowHelp Presenta la ayuda de Windows.
ShowOpen Presenta el cuadro de dilogo Abrir.
ShowPrinter Presenta el cuadro de dilogo Imprimir.
ShowSave Presenta el cuadro de dilogo Guardar como.

Como ejemplo vamos a desarrollar una aplicacin que permite
cambiar el color de fondo de un formulario en tiempo de
ejecucin. Para ello el usuario debe dar click en el botn
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:

143


Para ello crear un nuevo formulario, agregarle un botn de
comando (CmdCambiarColor) y un control CommonDialog. Luego
ingresar el siguiente cdigo:

Private Sub CmdCambiarColor_Click()
CommonDialog1.ShowColor
Form1.BackColor = CommonDialog1.Color
End Sub

Como siguiente ejemplo vamos a desarrollar una aplicacin
que permita mostrar el contenido de un archivo JPG. Este deber
ser seleccionado por el usuario de un cuadro de dilogo Abrir,
tal como se indica en la figura:

144


Al hacer click en el botn Abrir, el archivo seleccionado
debe ser mostrado en el formulario:



Para el diseo de esta aplicacin crear un nuevo formulario
y ubicar un botn de comando (CmdAbrirArchivo), un control imagen
y un control CommonDialog.

145
Seguidamente ingrese el cdigo que se indica a continuacin:

Private Sub CmdAbrirArchivo_Click()
Dim FILTRO As String, FILE As String
FILTRO = Imgenes JPEG (*.JPG)|*.JPG
CommonDialog1.Filter = FILTRO
CommonDialog1.ShowOpen
FILE = CommonDialog1.FileName
Image1.Picture = LoadPicture(FILE)
End Sub

CONTROL MARCHOSO
El control Marchoso tiene como funcin 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 Descripcin
FileName Especifica la ruta y nombre del archivo GIF
animado.

A manera de ejemplo vamos a disear un formulario que
permita mostrar archivos GIF animados.

146


Para ello proceda a crear un nuevo formulario y ubicar un
botn de comando (CmdVerGIFAnimado), un control Marchoso y un
control CommonDialog. Luego, ingresar el siguiente cdigo:

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 cuadrcula la
cual permite mostrar datos en forma de celdas. Una celda es la
regin formada por la interseccin de una fila y una columna.

147
Para agregar este control debe seleccionar el componente
Microsoft Hierarchical FlexGrid Control 6.0 (OLEDB).

Propiedad Descripcin
Col Especifica el nmero de columna de la celda
actual.
Cols Especifica el nmero total de columnas, fijas
y no fijas.
FixedCols Especifica el nmero de columnas fijas. El
valor por defecto es 1.
FixedRows Especifica el nmero de filas fijas. El valor
por defecto es 1.
Row Especifica el nmero de fila de la celda
actual.
Rows Especifica el nmero 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 cuadrcula presenta barras
de desplazamiento horizontales, verticales o
ambas a la vez.

Como ejemplo vamos a desarrollar una aplicacin que
visualice un cuadrado mgico de orden impar N . Un cuadrado
mgico se compone de nmeros enteros comprendidos entre 1 y
2
N .
La suma de los nmeros que figuran en cada fila, cada columna y
cada diagonal son idnticos.

148
Por ejemplo para N = 5 tenemos el siguiente arreglo de
nmeros:



Un mtodo de construccin del cuadrado consiste en situar el
nmero 1 en el centro de la primera fila, el nmero 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
posicin del nmero caiga en una celda ocupada, se elige la
casilla situada por debajo del nmero que acaba de ser situado.
Para el desarrollo de la presente aplicacin 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 cdigo que se indica:
Private Sub TxtN_Change()
Dim N As Integer, I As Integer

149
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

150
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
numrica, una combinacin que en ocasiones se denomina control
Spinner.
Para agregar un control UpDown debe seleccionar el
componente Microsoft Windows Common Controls-2 6.0.

Propiedad Descripcin
BuddyControl Especifica el control utilizado como
auxiliar.
BuddyProperty Especifica la propiedad utilizada para
sincronizar el control UpDown con su
auxiliar.
Increment Especifica un valor que determina la cantidad
en que vara la propiedad Value cuando se
hace click en los botones del control UpDown.
Max Especifica el valor mximo del intervalo de
desplazamiento del control UpDown.
Min Especifica el valor mnimo del intervalo de
desplazamiento del control UpDown.
SyncBuddy Especifica si el control UpDown sincroniza la
propiedad Value con una propiedad del control
auxiliar.

151
Como ejemplo vamos a desarrollar una aplicacin que permita
mostrar el cdigo ANSI de un carcter especificado.



Para tal fin crear un nuevo formulario y ubicar los
siguientes controles: 2 etiquetas (Cdigo ANSI, Carcter), 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 cdigo:

Private Sub TxtANSI_Change()
TxtCaracter = Chr(TxtANSI)
End Sub

152
CONTROL MONTHVIEW
El control MonthView permite al usuario la posibilidad de
ver y establecer informacin de fechas mediante una interfaz
similar a un calendario. Para agregar este control seleccionar el
componente Microsoft Windows Common Controls-2 6.0.

Propiedad Descripcin
Day Especifica el nmero de da mostrado.
Month Especifica el nmero de mes mostrado.
Year Especifica el nmero de ao mostrado.
Value Especifica la fecha mostrada.
DayOfWeek Especifica el da de la semana
correspondiente a la fecha mostrada.
Week Especifica el nmero de la semana en que cae
la fecha mostrada.
MultiSelect Especifica si se puede seleccionar un
intervalo contiguo de fechas.
MaxSelCount Especifica el nmero mximo de das que
pueden seleccionarse mediante la propiedad
MultiSelect.
SelStart
SelEnd
Especifica los lmite inferior y superior
respectivamente del intervalo de fechas
seleccionado.
MonthColumns
MonthRows
Permiten mostrar ms de un mes
simultneamente. MonthColumns especifica el
nmero de meses que se mostrarn en sentido
horizontal. MonthRows especifica el nmero de
meses que se mostrarn en sentido vertical.

153
Evento Descripcin
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 aplicacin.



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 cdigo:

154

Private Sub MonthView1_DateClick(ByVal DateClicked As Date)
TxtFecha = WeekdayName(MonthView1.DayOfWeek) & , _
& Str(MonthView1.Day) & de _
& MonthName(MonthView1.Month) & de _
& Str(MonthView1.Year)
End Sub

Private Sub MonthView1_Click()
Call MonthView1_DateClick(MonthView1.Value)
End Sub

Private Sub Form_Load()
Call MonthView1_DateClick(MonthView1.Value)
End Sub

La funcin WeekdayName retorna una cadena con el nombre del
da de la semana especificado. Requiere como argumento el nmero
de da de la semana.
La funcin MonthName retorna una cadena con el nombre del
mes especificado. Requiere como argumento el nmero de mes.
El evento DateClick tiene un parmetro DateClicked que
especifica la fecha seleccionada. Puede utilizar este valor
(DateClicked) para obtener la fecha en la que el usuario hizo
click.

155

CONTROL CALENDAR
El control Calendar es similar en funcionalidad al control
MonthView, pues tambin presenta un calendario. Para agregar este
control seleccionar el componente Control Calendar de Microsoft
9.0.

Propiedad Descripcin
Day Especifica el nmero de da mostrado.
Month Especifica el nmero de mes mostrado.
Year Especifica el nmero de ao mostrado.
Value Especifica la fecha mostrada.

Como ejemplo vamos a desarrollar la aplicacin anterior,
pero esta vez haciendo uso de un control Calendar.


156

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 cdigo:

Private Sub Calendar1_Click()
TxtFecha = WeekdayName(Weekday(Calendar1.Value)) & , _
& Str(Calendar1.Day) & de _
& MonthName(Calendar1.Month) & de _
& Str(Calendar1.Year)
End Sub

La funcin Weekday retorna un nmero entero que representa
el da de la semana de una fecha dada. Se utiliza para suplir a

157
la propiedad DayOfWeek la cual no est permitida para el control
Calendar.







































158
CAPTULO 7

ARCHIVOS

Un archivo (fichero) es un conjunto de informacin
relacionada entre s, almacenada como una unidad en un
dispositivo de almacenamiento secundario (disquete, disco duro).
Los datos almacenados en un archivo son de manera permanente de
modo que pueden ser manipulados en cualquier momento. Cada
archivo est referenciado por un identificador, su nombre.

CONCEPTO DE ARCHIVO BAJO WINDOWS/VISUAL BASIC
Un archivo tiene un nombre almacenado en una carpeta junto
con otros archivos de disco. Los nombres de los archivos en
Windows y Visual Basic requieren de 1 a 215 caracteres (incluidos
espacios en blanco), y pueden incluir tambin una extensin de 1
a 3 letras, normalmente son significativas y relativas al
contenido del mismo. Por ejemplo:

LEAME.TXT Archivo de texto
MISDATOS.DAT Archivo de datos
PLANILLA.XLS Archivo de MS-Excel
SHAKIRA.BMP Archivo de mapa de bits
El nombre de un archivo para ser referenciado correctamente
consta de:

159

- 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 descripcin 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 descripcin 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 informacin ms simple estara formado por un
carcter.
OPERACIONES SOBRE EL SISTEMA DE ARCHIVOS

160
Para manipular el sistema de archivos de un disco, Visual
Basic proporciona las sentencias que a continuacin se describen.

Sentencia Kill
Permite eliminar un archivo almacenado en un disco. Su
sintaxis es de la forma:

Kill NOMBRE_ARCHIVO

Donde NOMBRE_ARCHIVO es una cadena de caracteres que
identifica al archivo que se desea borrar. Se permiten caracteres
comodn (* y ?). Si el archivo no existe se produce un error. Por
ejemplo:

Kill C:\TEMP\TEMPO.DAT

La instruccin 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

161
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 instruccin anterior cambia el nombre del archivo
TEMPO.DAT por el nombre CURSO.DAT. El contenido del archivo
permanece inalterado y su localizacin fsica 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 vaca existente en el disco. Su sintaxis
es de la forma:

RmDir NOMBRE_CARPETA


162
Donde NOMBRE_CARPETA es una cadena de caracteres que
identifica la carpeta que se desea eliminar. Por ejemplo:

RmDir C:\DATA\TEMP

Sentencia ChDir
Permite cambiar la carpeta actual. Su sintaxis es:

ChDir NOMBRE_CARPETA

Donde NOMBRE_CARPETA es una cadena de caracteres que
identifica la nueva ruta de acceso predeterminada. Por ejemplo:

ChDir C:\DATA\GRAFICOS
MsgBox App.Path

La propiedad Path del objeto App especifica la ruta de
acceso actual.

Sentencia ChDrive
Permite cambiar la unidad de disco actual. Su sintaxis es:

ChDrive UNIDAD

Donde UNIDAD es un carcter que especifica la nueva unidad
de disco. Si el parmetro UNIDAD es una cadena de mltiples
caracteres slo se lee la primera letra. Por ejemplo:

ChDrive A

163
OPERACIONES CON ARCHIVOS
Para realizar alguna operacin sobre un archivo hay
referenciarlo mediante su nombre completo. Las operaciones
bsicas que se pueden realizar con los archivos son:

- Abrir, preparar un archivo para hacer referencia a l.
- Escribir, introducir un elemento de informacin a un archivo.
- Leer, obtener un elemento de informacin de un archivo.
- Modificar, alterar un elemento de informacin 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 estn
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 continuacin pasamos a describir cada uno de ellos en
forma detallada.

164
ARCHIVOS DE ACCESO SECUENCIAL
En un archivo de acceso secuencial los registros se
almacenan siguiendo una a otro, segn el orden en que son
ingresados. Cuando se lee la informacin, 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 continuacin.

Sentencia Open
Permite abrir un archivo. La sintaxis para esta sentencia es
la siguiente:

Open NOMBRE_ARCHIVO For MODO As # NMERO_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 Descripcin
Output Escritura de datos. Si el archivo existe, su
contenido actual se destruye. Si el archivo no
existe, se crea.
Append Aadir datos. Los datos son aadidos 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.

165
El parmetro NMERO_ARCHIVO es un entero cuyo valor debe
estar comprendido entre 1 y 511. Este nmero ser asociado al
nombre del archivo mientras ste permanezca abierto. Para obtener
el nmero del siguiente archivo disponible se utiliza la funcin
FreeFile().
Como ejemplo suponga que se requiere abrir el archivo
DEMO.DAT ubicado en la carpeta C:\DATA, la instruccin sera 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 # NMERO_ARCHIVO, LISTA_DE_EXPRESIONES

Donde NMERO_ARCHIVO es el nmero utilizado cuando el
archivo fue abierto. LISTA_DE_EXPRESIONES es un conjunto de
expresiones (numricas, de cadena, de fecha, etc.) separadas por
punto y coma (;) que sern escritas en el archivo.
La sentencia Print escribe en el archivo una imagen de los
datos tal y como se habran visualizado sobre el formulario con
la sentencia Print. Por ejemplo:

166
Dim N1 As Integer
N1 = FreeFile()
Open C:\DATA\DEMO.DAT For Output As # N1
Print # N1, Visual Basic es fcil; , ; Date()

Al ejecutarse el cdigo anterior se escribira en el archivo
la siguiente informacin:

Visual Basic es fcil, 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 # NMERO_ARCHIVO, LISTA_DE_EXPRESIONES

Donde NMERO_ARCHIVO es el nmero utilizado cuando el
archivo fue abierto. LISTA_DE_EXPRESIONES es un conjunto de
expresiones (numricas, de cadena, de fecha, etc.) separadas por
punto y coma (;) que sern escritas en el archivo.
La sentencia Write inserta comas (,) entre las expresiones
de la LISTA_DE_EXPRESIONES, por tanto no es necesario poner
delimitadores explcitamente como en el caso de la sentencia
Print.

167
Cuando se utiliza la sentencia Write para escribir
informacin en un archivo, se siguen distintas convenciones
universales, de modo que los datos siempre se pueden leer e
interpretar correctamente, independientemente de la configuracin
regional, estas convenciones son:

- Los datos numricos 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
cdigo:

Dim N1 As Integer
N1 = FreeFile()
Open C:\DATA\DEMO.DAT For Output As # N1
Write # N1, Visual Basic es fcil; Date()

La ejecucin de este cdigo escribira en el archivo la
siguiente informacin:

Visual Basic es fcil", # 2002-04-11 #


168
Sentencia Close
Cierra uno archivo abierto mediante la sentencia Open. Su
sintaxis es la siguiente:

Close # NMERO_ARCHIVO [, # NMERO_ARCHIVO, . . .]

Donde NMERO_ARCHIVO es el nmero con el cual se abri el
archivo. Por ejemplo:

Close # 1, # 2

La instruccin anterior cierra los archivos asociados con
los nmeros 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 # NMERO_ARCHIVO, VARIABLE1 [, VARIABLE2, . . .]

Donde NMERO_ARCHIVO es el nmero utilizado cuando el
archivo fue abierto. VARIABLE1, VARIABLE2, . . . son los nombres
de las variables que han de recibir los correspondientes datos
del archivo.

169
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 cdigo 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 lnea de un archivo secuencial ignorando
los delimitadores (comas) y la asigna a una variable tipo cadena.
Su sintaxis es:

Line Input # NMERO_ARCHIVO, VARIABLE


170
Donde NMERO_ARCHIVO es el nmero utilizado cuando el
archivo fue abierto. VARIABLE es el nombre de una variable tipo
cadena de caracteres.
La sentencia Line Input se utiliza especialmente para leer
un archivo de texto lnea a lnea, ya que esta sentencia lee
todos los caracteres del archivo hasta que encuentra un retorno
de carro, entonces continua en la siguiente lnea 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, Lnea de prueba 1
Print # N1, Lnea 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 ejecucin del cdigo anterior produce la siguiente salida:


171

Funcin 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 , # NMERO_ARCHIVO)

A diferencia de la sentencia Input, la funcin Input()
retorna todos los caracteres que lee, incluyendo comas, retornos
de carro, continuaciones de lnea, etc. Por ejemplo:

Dim N1 As Integer, S As String
N1 = FreeFile()
Open C:\DATA\DEMO.TXT For Output As # N1
Print # N1, Lnea de prueba 1
Print # N1, Lnea de prueba 2
Close # N1
Open C:\DATA\DEMO.TXT For Input As # N1
S = Input(24, # N1)
MsgBox S


172
La ejecucin del cdigo anterior produce la siguiente salida:


Funcin EOF
Especifica si se ha llegado al final de un archivo. Su
sintaxis es de la forma:

VARIABLE = EOF(NMERO_ARCHIVO)

Se utiliza EOF() para evitar producir un error al intentar
obtener informacin ms 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


173
Este segmento de cdigo lee y visualiza cada lnea del
archivo de texto DEMO.TXT. El bucle finaliza cuando se detecta el
final del archivo. Para que el cdigo 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 sus
prestaciones son bastante limitadas va ha servir para poner en
prctica lo aprendido recientemente.



El men que se muestra en la figura obedece a la siguiente
descripcin:

Caption Name ShortCut
&Archivo
MnuArchivo Ninguno

174
. . . &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:

1 cuadro de texto
1 control CommonDialog

Seguidamente debe establecer las propiedades que se indican:

Form1
Nombre FrmEditor
Caption Editor

Text1
Nombre TxtEditor
MultiLine True
ScrollBars 3-Both
Text

CommonDialog1
Nombre CommonDialog1
CancelError True

Una vez establecidas las propiedades de la interfaz ingresar
el cdigo que se muestra:

175

Private Sub Form_Resize()
TxtEditor.Move 0, 0, ScaleWidth, ScaleHeight
End Sub
Private Sub MnuArchivoNuevo_Click()
TxtEditor =
End Sub

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:

176
Exit Sub
ERROR_ABRIR:
MsgBox Err.Description
Resume SALIR_ABRIR
End Sub
Private Sub MnuArchivoGuardar_Click()
Dim FILTRO As String, FILE As String
Dim N1 As Integer
On Error GoTo ERROR_GUARDAR
FILTRO = Archivos de texto (*.TXT)|*.TXT
CommonDialog1.Filter = FILTRO
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


177
La sentencia Err.Description retorna una cadena que contiene
la descripcin asociada a un error en tiempo de ejecucin.
La sentencia Resume continua la ejecucin en la etiqueta
especificada cuando termina una rutina de gestin de errores.
ARCHIVOS DE ACCESO ALEATORIO
En los archivo de acceso aleatorio el almacenamiento de los
datos se hace mediante registros (todos de la misma longitud), lo
cuales son identificados mediante un nico nmero denominado
ndice. El primer registro de un archivo tiene como ndice 1, el
segundo tiene ndice 2 y as sucesivamente. La informacin
contenida en un archivo de este tipo puede ser accedida en
cualquier secuencia, ya que cada registro individual se asocia
con su respectivo ndice y puede ser ledo, escrito o
actualizado.
Las sentencias y funciones necesarias para manipular
archivos de tipo aleatorio se presentan a continuacin.

Sentencia Open
Permite abrir un archivo. La sintaxis para acceder
aleatoriamente a un archivo es:

Open NOMBRE_ARCHIVO For Random As # NMERO_ARCHIVO Len = LON_REG

Donde NOMBRE_ARCHIVO es una cadena que especifica el nombre
del archivo que se debe ser abierto en modo Random.

178
El parmetro NMERO_ARCHIVO es un entero cuyo valor est
comprendido entre 1 y 511. Este nmero ser asociado con el
nombre del archivo mientras permanezca abierto.
LON_REG es un entero que establece la longitud del registro
para archivos aleatorios.
Sentencia Put
Permite grabar un registro en un archivo abierto para acceso
aleatorio. Su sintaxis es:

Put # NMERO_ARCHIVO, NMERO_REG, VARIABLE

Donde NMERO_ARCHIVO es el nmero bajo el cual se abri el
archivo, NMERO_REG es el nmero 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 cdigo anterior utiliza una variable REG de
tipo DISTRITO, cuya definicin es la siguiente:

179

Private Type DISTRITO
ID_DISTRITO As String * 3
NOMBRE As String * 30
End Type
Sentencia Get
Permite leer un registro procedente de un archivo de acceso
aleatorio, almacenando los datos en una variable especfica. Su
sintaxis es de la forma:

Get # NMERO_ARCHIVO, NMERO_REG, VARIABLE

Donde NMERO_ARCHIVO es el nmero bajo el cual se abri el
archivo, NMERO_REG es el nmero correspondiente al registro que
se va ha leer y VARIABLE almacena los datos del registro ledo.
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

180
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.
Funcin LOF
Retorna el nmero de bytes (caracteres) que ocupa un
determinado archivo abierto mediante la sentencia Open. Su
sintaxis es:

VARIABLE = LOF(# NMERO_ARCHIVO)

Donde NMERO_ARCHIVO es el nmero con el que se abri el
archivo.
Esta funcin es de utilidad, porque aplicada a un archivo de
acceso aleatorio, permite conocer el nmero 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

181
Get # N1, I, REG
MsgBox REG.ID_DISTRITO & & REG.NOMBRE
Next
Close # N1
Funcin Loc
Esta funcin retorna la posicin actual dentro de un
fichero. Su sintaxis es:

VARIABLE = Loc(# NMERO_ARCHIVO)

La funcin Loc() aplicada a un archivo de acceso aleatorio
retorna el nmero del ltimo registro ledo 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

182
Loop
Close # N1

La sentencia If finaliza el bucle si se ha alcanzado el
ltimo registro.
Como ejemplo final vamos a desarrollar una aplicacin que
permita realizar el mantenimiento de los datos almacenados en el
archivo C:\DATA\CURSO.DAT.



Los botones ubicados en el marco Navegador (Primero,
Anterior, Siguiente y Ultimo, de izquierda a derecha) permiten
desplazarse a travs 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 bsicas de mantenimiento de los registros.
Para el desarrollo de la presente aplicacin ubicar los
siguientes controles al formulario:

183

3 marcos
4 etiquetas
4 cuadros de texto
9 botones de comando
Seguidamente proceda a establecer las propiedades que se
indican:

Form1
Nombre FrmCurso
Caption Mantenimiento de cursos
BorderStyle 3-Fixed Dialog
StarUpPosition 2-CenterScreen

Frame1
Nombre FraIngreso
Caption

Frame2
Nombre FraNavegador
Caption Navegador

Frame3
Nombre FraMantenimiento
Caption Mantenimiento

Label1
Nombre LblCodigo
Caption Cdigo:

Label2

184
Nombre LblNombre
Caption Nombre:

Label3
Nombre LblVacantes
Caption Vacantes:

Label4
Nombre LblProfesor
Caption Profesor:

Text1
Nombre TxtCodigo
Locked True
Text

Text2
Nombre TxtNombre
Locked True
Text

Text3
Nombre TxtVacantes
Locked True
Text

Text4
Nombre TxtProfesor
Locked True
Text


185
Command1
Nombre CmdPrimero
Caption
Picture C:\FundVB\Bitmaps\First.bmp
Style 1-Graphical


Command2
Nombre CmdAnterior
Caption
Picture C:\FundVB\Bitmaps\Previous.bmp
Style 1-Graphical

Command3
Nombre CmdSiguiente
Caption
Picture C:\FundVB\Bitmaps\Next.bmp
Style 1-Graphical

Command4
Nombre CmdUltimo
Caption
Picture C:\FundVB\Bitmaps\Last.bmp
Style 1-Graphical

Command5
Nombre CmdNuevo
Caption
Picture C:\FundVB\Bitmaps\New.bmp
Style 1-Graphical


186
Command6
Nombre CmdEditar
Caption
Picture C:\FundVB\Bitmaps\Edit.bmp
Style 1-Graphical


Command7
Nombre CmdGuardar
Caption
Picture C:\FundVB\Bitmaps\Save.bmp
Style 1-Graphical

Command8
Nombre CmdEliminar
Caption
Picture C:\FundVB\Bitmaps\Delete.bmp
Style 1-Graphical

Command9
Nombre CmdSalir
Caption
&Salir
Picture C:\FundVB\Bitmaps\Exit.bmp
Style 1-Graphical

Luego, proceda a transcribir el cdigo mostrado a continuacin:

Private Type CURSO
ID_CURSO As String * 3
NOMBRE As String * 30

187
VACANTES As Integer
PROFESOR As String * 25
ESTADO As Boolean
End Type

Dim N1 As Integer, POSICION As Integer
Dim REG As CURSO
Private Sub MODO_EDITAR(ByVal Ok As Boolean)
TxtCodigo.Locked = Not Ok
TxtNombre.Locked = Not Ok
TxtVacantes.Locked = Not Ok
TxtProfesor.Locked = Not Ok
CmdNuevo.Enabled = Not Ok
CmdEditar.Enabled = Not Ok
CmdGuardar.Enabled = Ok
CmdEliminar.Enabled = Not Ok
CmdPrimero.SetFocus
If Ok Then TxtCodigo.SetFocus
End Sub

Private Sub ABRIR_ARCHIVO()
On Error GoTo ERROR_ABRIR:
N1 = FreeFile()
Open C:\DATA\CURSO.DAT For Random As # N1 Len = Len(REG)
SALIR_ABRIR:
Exit Sub

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

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

190
If POSICION <> 0 Then
Get #N1, POSICION, REG
TxtCodigo = REG.ID_CURSO
TxtNombre = REG.NOMBRE
TxtVacantes = Str(REG.VACANTES)
TxtProfesor = REG.PROFESOR
End If
End Sub
Private Sub CmdNuevo_Click()
POSICION = LOF(N1) / Len(REG) + 1
MODO_EDITAR True
TxtCodigo =
TxtNombre =
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

191
REG.PROFESOR = Trim(TxtProfesor)
REG.ESTADO = True
Put # N1, POSICION, REG
MODO_EDITAR False
End Sub

Private Sub CmdEliminar_Click()
Dim N2 As Integer
Dim I As Integer, J As Integer
REG.ESTADO = False
Put # N1, POSICION, REG
N2 = FreeFile()
Open C:\DATA\TEMPO.DAT For Random As # N2 Len = Len(REG)
I = 1
J = 1
While Not EOF(N1)
Get # N1, I, REG
If REG.ESTADO Then
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

192
Call ABRIR_ARCHIVO
Call CmdPrimero_Click
End Sub

Private Sub CmdSalir_Click()
Close # N1
End
End Sub
ARCHIVOS DE ACCESO BINARIO
Un archivo binario contiene ms que simplemente texto. Puede
contener imgenes, sonido, hojas de clculo, o documentos
concebidos para el procesamiento de texto.
El acceso binario permite la posibilidad de tratar cualquier
archivo como una secuencia numerada de bytes, independientemente
de la estructura del mismo. Los bytes ocupan las posiciones 1, 2,
3, etc. Por ejemplo, si se requiere recuperar un dato de tipo
entero (Integer, 2 bytes) de la posicin 3 del archivo, seran
recuperados los bytes 3 y 4 para poder formar el valor del
entero. Por tanto, antes de trabajar con archivos binarios es
necesario conocer cmo 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:

193

Open NOMBRE_ARCHIVO For Binary As # NMERO_ARCHIVO

Donde NOMBRE_ARCHIVO es una cadena que especifica el nombre
del archivo que se debe ser abierto en modo Binary.
El parmetro NMERO_ARCHIVO es un entero cuyo valor est
comprendido entre 1 y 511. Este nmero ser asociado con el
nombre del archivo mientras permanezca abierto.

Sentencia Put
Permite grabar en un archivo binario tantos bytes como haya
en una variable. Su sintaxis es:

Put # NMERO_ARCHIVO, POSICIN, VARIABLE

Donde NMERO_ARCHIVO es el nmero bajo el cual se abri el
archivo. POSICIN es el nmero 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 # NMERO_ARCHIVO, POSICIN, VARIABLE


194
Donde NMERO_ARCHIVO es el nmero bajo el cual se abri el
archivo. POSICIN es el nmero de byte a partir del cual se han
de leer los datos almacenados en VARIABLE.

Sentencia Seek
Permite situar la posicin de lectura o de escritura en una
posicin determinada dentro del archivo. Su sintaxis es:

Get # NMERO_ARCHIVO, POSICIN, VARIABLE

Donde POSICIN es el nmero de byte a partir del cual
queremos leer o escribir dentro del archivo.
Como ejemplo vamos a desarrollar una aplicacin 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 botn de comando (CmdCifrar).
Luego, ingrese el siguiente cdigo:

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)

195
Put # N1, , CAR
Next
Close # N1
End Sub

En el cdigo la funcin Mid() obtiene el carcter I de la
caja de texto, la funcin Asc() obtiene su cdigo ANSI, al que
sumamos el valor de CLAVE, para despus obtener el resto de la
divisin 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 funcin Chr() retorna el carcter correspondiente al
valor obtenido, el cual es almacenado en el archivo binario.
Por ejemplo si ingresa el mensaje HOLA se almacena en el
archivo como KROD (lo puede comprobar mediante el Bloc de
notas), ya que el valor ANSI de la H es 72, este carcter al
sumarle el valor de CLAVE sera el 75 (72 + 3), que es la K, y
as sucesivamente (ver la tabla de caracteres ANSI).
El descifrado sera el proceso inverso, para ello crear un
nuevo formulario y ubicar un botn de comando (CmdDescifrar),
luego ingresar el cdigo 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

196
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



























197
CAPTULO 8

GRFICOS

Un grfico tiene por finalidad facilitar la legibilidad de
la informacin que se presenta: un grfico vale ms que mil
palabras.

LOS COLORES
En Visual Basic se pueden manipular los colores mediante
tres formas diferentes: cdigo hexadecimal, la funcin RGB() y la
funcin QBColor().

Cdigo Hexadecimal
Un cdigo de color se compone de seis dgitos hexadecimales,
cuyos valores van desde &H000000& (cero) hasta &HFFFFFF& (16 777
215). De forma prctica podemos guiarnos mediante:

&HAAVVRR&

Donde AA representa al color azul, VV al color verde y RR al
color rojo. Todos los dems colores se obtienen mezclando estos
tres colores.
Como ejemplo considere los siguientes cdigos de colores que
se presentan a continuacin:

198

AZUL = &HFF0000&
VERDE = &H00FF00&
ROJO = &H0000FF&
NEGRO = &H000000&

La funcin RGB()
La funcin RGB() retorna un nmero 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 estndar y sus
valores de nROJO, nVERDE y nAZUL:

Color nROJO nVERDE nAZUL
Negro 0 0 0
Azul 0 0 255
Verde 0 255 0
Cin 0 255 255
Rojo 255 0 0
Magenta 255 0 255
Amarillo 255 255 0
Blanco 255 255 255
El ejemplo anterior (cdigo hexadecimal) utilizando la
funcin RGB() ser similar a:

199

AZUL = RGB(0, 0, 255)
VERDE = RGB(0, 255, 0)
ROJO = RGB(255, 0, 0)
NEGRO = RGB(0, 0, 0)

La funcin QBColor()
La funcin QBColor() retorna un nmero de tipo entero largo
(Long) que representa el cdigo de color RGB correspondiente al
nmero 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:

Nmero Color Nmero Color
0 Negro 8 Gris
1 Azul 9 Azul claro
2 Verde 10 Verde claro
3 Cin 11 Cin claro
4 Rojo 12 Rojo claro
5 Magenta 13 Magenta claro
6 Amarillo 14 Amarillo claro
7 Blanco 15 Blanco brillante
El ejemplo inicial (cdigo hexadecimal) utilizando la
funcin QBColor() se soluciona como se muestra a continuacin:

200

AZUL = QBColor(1)
VERDE = QBColor(2)
ROJO = QBColor(4)
NEGRO = QBColor(0)

EL SISTEMA DE COORDENADAS
Todas las operaciones grficas descritas en este captulo
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 cuadrcula bidimensional
que define ubicaciones del rea de dibujo. Las ubicaciones de
esta cuadrcula se definen mediante las coordenadas del rea de
dibujo:

( X ,Y )

Donde el valor de X es la ubicacin del punto sobre el eje
X, con la ubicacin predeterminada (cero) en el extremo
izquierdo. El valor de Y es la ubicacin del punto sobre el eje
Y , con la ubicacin predeterminada (cero) en el extremo
superior. Este sistema de coordenadas se ilustra en la siguiente
figura:

201


El sistema de coordenadas de Visual Basic tiene las
siguientes reglas:

- El sistema de coordenadas predeterminado de cualquier
contenedor empieza por la coordenada (0, 0) en la esquina
superior izquierda del contenedor.
- Las unidades de medida utilizadas para definir las ubicaciones
a lo largo de los ejes se denominan colectivamente escala. En
Visual Basic, cada eje del sistema de coordenadas puede tener
su propia escala.
- Todos los mtodos grficos utilizan el sistema de coordenadas
del contenedor. Por ejemplo, las instrucciones que dibujan
dentro de un cuadro de imagen utilizan el sistema de
coordenadas de dicho control.

Establecer las coordenadas de dibujo
Para establecer las coordenadas de dibujo del contenedor se
utilizan las propiedades CurrentX y CurrentY de dicho contenedor.

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

Cambiar la unidad de medida del sistema de coordenadas
Para cambiar la unidad de medida del sistema de coordenadas
su establece la propiedad ScaleMode a uno de los valores
enumerados en la tabla siguiente:

Valor de
ScaleMode
Descripcin
1 Twips
2 Puntos
3 Pixeles
4 Caracteres
5 Pulgadas
6 Milmetros

203
7 Centmetros
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
numricos 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 segn el ancho y el alto real del rea de dibujo (si el
objeto cambia de tamao 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:


204
Picture1.ScaleWidth = 1000
Picture1.ScaleHeight = 500
A manera de ejemplo considere la escala mostrada en la
siguiente figura, la cual tiene ScaleLeft, ScaleTop, ScaleWidth y
ScaleHeight establecidas todas a 100.



Una forma ms eficiente de personalizar la escala de un
sistema de coordenadas es utilizando el mtodo 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 sera la siguiente:

205

Scale (100, 100)-(200, 200)
Donde es evidente que las diferencias entre las dos
coordenadas X y las dos coordenadas Y determinan los valores
de ScaleWidth y ScaleHeight, respectivamente.

MTODOS GRFICOS
Visual Basic proporciona varios mtodos para la creacin de
grficos. Los mtodos grficos, resumidos en la tabla siguiente,
son aplicables a los formularios y a los cuadros de imagen.

Mtodo Descripcin
Cls Borra todos los grficos y el resultado del
mtodo Print.
Pset Dibuja un punto individual.
Point Devuelve el color de un punto especificado.
Line Dibuja una lnea, un rectngulo o un cuadro
relleno.
Circle Dibuja una crculo, una elipse o un arco.
PaintPicture Dibuja grficos en ubicaciones arbitrarias.
Print Imprime texto en formularios y cuadros de
imagen.

Para que la mayora de los mtodos grficos funcionen
correctamente la propiedad AutoRedraw del formulario debe est
activada, caso contrario el dibujo no se visualizar.

206
Puntos
Para el dibujo de puntos se usar el mtodo 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 aplicacin que
permita dibujar puntos en la posicin especificada mediante el
ratn, con la posibilidad de poder seleccionar colores (tipo
Paint).



207
Para el desarrollo de la presente aplicacin proceda a crear
un nuevo proyecto y agregar al formulario 34 cuadros de imagen.
Luego ingresar el cdigo mostrado.

Objeto Nombre Descripcin
Picture1 . . . Picture32 PicColor Opciones de color
Picture33 PicMuestra Color actual utilizado
Picture34 PicLienzo Area de dibujo

Dim COLOR As Single
Private Sub Form_Load()
PicLienzo.ScaleMode = 3
PicLienzo.DrawWidth = 5
COLOR = RGB(0, 0, 0)
End Sub

Private Sub PicColor_Click(Index As Integer)
COLOR = PicColor(Index).BackColor
PicMuestra.BackColor = COLOR
End Sub

Private Sub PicLienzo_MouseDown(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
PicLienzo.PSet (X, Y), COLOR
End If

208
End Sub
En el ejemplo anterior se utiliza la propiedad DrawWidth, la
cual sirve para fijar el tamao del punto dibujado.
Para que el mtodo Pset funcione correctamente la propiedad
ScaleMode debe estar establecida a pixeles.

Lneas, rectngulos y cuadros rellenos
Para dibujar lneas, rectngulos o cuadros rellenos utilice
el mtodo 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 lnea o el rectngulo. X2,
Y2 son valores de tipo Single que indican las coordenadas del
punto final para la lnea o el rectngulo que se est dibujando.
COLOR es un entero largo (Long) que indica el color RGB
especificado para dibujar la lnea, si se omite se usar el valor
actual de la propiedad ForeColor de OBJETO. Los parmetros B y BF
son opcionales: B hace que se dibuje un rectngulo usando las
coordenadas para especificar las esquinas opuestas del mismo. BF
especifica que el cuadro se rellena con el mismo color
especificado mediante el parmetro COLOR.
A manera de ejemplo vamos a mejorar nuestro sencillo Editor
grfico, de tal forma que adems de dibujar puntos permita

209
tambin dibujar lneas cuando se mantenga pulsado el botn
izquierdo del ratn.


Para lograr nuestro cometido aadir el siguiente cdigo a la
aplicacin 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 mtodo
Line para dibujar rectngulos y cuadros rellenos se presenta a

210
continuacin, consiste en dibujar una bandera directamente sobre
el formulario, en este caso ser la bandera de mi pas: Per.


Para este ejemplo crear una nueva aplicacin e ingresar el
cdigo 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

Crculos, elipses y arcos
Para dibujar crculos, elipses o arcos se utiliza el mtodo
Circle, cuya sintaxis es:

211

OBJETO.Circle (X, Y), RADIO, COLOR, INICIO, FIN, ASPECTO
Donde X, Y son valores de tipo Single que indican las
coordenadas para el punto central del crculo, elipse o arco.
RADIO es un valor de tipo Single que indica el radio del crculo,
elipse o arco. COLOR es un valor entero de tipo Long que indica
el color RGB del contorno del crculo, 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 relacin de aspecto del crculo, el valor
predeterminado es 1.0, lo que produce un crculo perfecto (no
elptico) en cualquier pantalla (opcional).
A manera de ejemplo vamos a mejor an ms nuestro Editor
grfico de tal manera que se podr dibujar puntos, lneas,
rectngulos, crculos y elipses.


212


Para el desarrollo de la presente aplicacin se debe aadir
al ejemplo anterior 5 botones de comandos y formar una matriz de
controles (CmdForma). Luego ingresar el siguiente cdigo:

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


213
Private Sub PicColor_Click(Index As Integer)
COLOR = PicColor(Index).BackColor
PicMuestra.BackColor = COLOR
End Sub

Private Sub PicLienzo_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
If Button = vbLeftButton Then
X1 = X
Y1 = Y
End If
End Sub
Private Sub PicLienzo_MouseUp(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
If Button = vbLeftButton Then
X2 = X
Y2 = Y
RADIO = Sqr((X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2)) / 2
Select Case FORMA
Case 1
PicLienzo.PSet (X, Y), COLOR
Case 2
PicLienzo.Line -(X, Y), COLOR
Case 3
PicLienzo.Line (X1, Y1)-(X2, Y2), COLOR, B
Case 4
PicLienzo.Circle (X, Y), RADIO, COLOR
Case 5
PicLienzo.Circle (X, Y), RADIO, COLOR, , , 0.5
End Select

214
End If
End Sub

CONTROLES GRFICOS
Visual Basic proporciona tres controles grficos diseados
para crear efectos grficos en las aplicaciones:

- Control Image (estudiado en el Captulo 4)
- Control Line
- Control Shape
Control Line
Line es un control grfico que se muestra como una lnea
horizontal, vertical o diagonal.
El control Line tiene una funcionalidad limitada y est
pensado para usos sencillos. Para usos ms avanzados debe usar el
mtodo Line.

Propiedad Descripcin
BorderColor Devuelve o establece el color de la lnea.
BorderStyle Devuelve o establece el estilo de la lnea.
BorderWidth Devuelve o establece el ancho de la lnea.
X1, Y1, X2, Y2 Devuelven o establecen las coordenadas del
punto inicial (X1, Y1) y del punto final
(X2, Y2) de la lnea.


215
Control Shape
Shape es un control grfico que se muestra como un
rectngulo, un cuadrado, una elipse, un crculo, un rectngulo
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:
Forma Estilo Constante
Rectngulo 0 vbShapeRectangle
Cuadrado 1 vbShapeSquare
Elipse 2 vbShapeOval
Crculo 3 vbShapeCircle
Rectngulo redondeado 4 vbShapeRoundedRectangle
Cuadrado redondeado 5 vbShapeRoundedSquare

Las seis formas predefinidas que presenta el control Shape
se muestran en el siguiente formulario:


216


GRAFICACIN MATEMTICA
Como la mayor parte de las ecuaciones matemticas expresa
relaciones complicadas en una, dos tres o ms dimensiones, tratar
de entenderlas sin grficas es casi lo mismo que tratar de
caminar con los ojos vendados.
Funciones algebraicas
Como ejemplo de este tipo de grficas vamos a dibujar una
parbola, cuya ecuacin matemtica (ecuacin general de segundo
grado) es de la forma:

2
( ) f x Ax Bx C = + +


217


Para realizar la presente aplicacin crear un nuevo proyecto
y aadir al formulario un cuadro de imagen (PicPlano), tres
cuadros de texto (TxtA, TxtB, TxtC) y un botn de comandos
(CmdVisualizar). Los aspectos decorativos (etiquetas, marcos,
etc.) quedan a criterio del lector. Luego ingresar el siguiente
cdigo:
Dim A As Double, B As Double, C As Double
Function F(ByVal X As Single) As Single
F = A * (X * X) + B * X + C
End Function

Private Sub CmdVisualizar_Click()
Dim X As Single

218
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 trigonomtricas
Graficar funciones trigonomtricas (seno, coseno, tangente,
cotangente, secante, cosecante) no es nada complicado, sino
analice el siguiente ejemplo.

219


Para realizar nuestra aplicacin de ejemplo crear un nuevo
proyecto y aadir 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 cdigo 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)

220
DosPi = 8 * Atn(1)
Dim X As Single
For X = -DosPi To DosPi Step 0.025
Select Case OP
Case 0
Y = Sin(X)
Case 1
Y = Cos(X)
Case 2
Y = Sin(X) / Cos(X)
Case 3
If X < -0.001 Or X > 0.001 Then
Y = Cos(X) / Sin(X)
End If
Case 4
Y = 1 / Cos(X)
Case 5
If X < -0.001 Or X > 0.001 Then
Y = 1 / Sin(X)
End If
End Select
PicPlano.PSet (X, Y)
Next
End Sub

221

Grficas en coordenadas polares
Para el caso de las grficas de ecuaciones polares tampoco
es complicado, slo 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 u respecto del semieje
horizontal positivo.



De la grfica se tiene que el punto P tiene coordenadas
rectangulares ( , ) x y y coordenadas polares ( , ) r u entonces se
cumplen las siguientes relaciones de transformacin:

cos x r u =
sen y r u =


222
De donde:
2 2 2
r x y = + ; tan
y
x
u =
A continuacin presentamos algunas ecuaciones polares
caractersticas:

Nombre Ecuacin
Circunferencia de radio n
r n =

Trbol de cuatro hojas
2 cos 2 r u =

Cardioide
1 cos r u = +

Limazn
1 2 cos r u = +

Lemniscata

2
cos 2 r u =

Ptalo de rosa
sen4 r u =

Espiral

2
r
n
u
=

Espiral logartmica

n
r e
u
=

Astroide

3
(cos 2 ) r u =

Nefroide
3 cos 2 cos 6 r u u =

Concoide

1
1
cos 2
r
u
= +

Estrofoide

1

cos 2 tan 2
r
u u
=
+


Para realizar una aplicacin que permita dibujar ecuaciones
polares crear un nuevo proyecto y aadir al formulario 1 cuadro
de imagen (PicPlano), un cuadro de lista (LstEcuacion) y un botn

223
de comandos (CmdVisualizar). La apariencia de la interfaz debe
ser similar a la de la figura mostrada:


Luego proceda a ingresar el cdigo que se presenta a
continuacin:

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

224
Case 7 : F = Exp(THETA / 8)
Case 8 : F = Cos(2 * THETA) * Cos(2 * THETA) * Cos(2 * THETA)
Case 9 : F = 3 * Cos(2 * THETA) - Cos(6 * THETA)
Case 10: F = 1 / Cos(2 * THETA) + 1
Case 11: If Int(THETA / 45) <> THETA / 45 Or THETA <> 0 _
Then F = 1 / (Cos(2 * THETA) + Tan(2 * THETA))
End Select
End Function

Private Sub LstEcuacion_Click()
OP = LstEcuacion.ListIndex
End Sub

Private Sub CmdVisualizar_Click()
Dim X As Single, Y As Single
Dim I As Single, R As Single
DosPi = 8 * Atn(1)
PicPlano.Cls
PicPlano.ScaleMode = 3
PicPlano.Scale (-3.25, 3.25)-(3.25, -3.25)
PicPlano.Line (-3.25, 0)-(3.25, 0)
PicPlano.Line (0, -3.25)-(0, 3.25)
For I = 0 To DosPi Step 0.01
R = F(I)
X = R * Cos(I)
Y = R * Sin(I)
PicPlano.PSet (X, Y), QBColor(1)

225
Next
End Sub
Fractales
La matemtica fractal es producto de la interaccin de un
matemtico genial (Benoit B. Mandelbrot) y la computadora.
El ahora ubicuo trmino fractal se debe al hecho de que la
matemtica fractal trabaja con fracciones, las figuras generadas
no tienen una relacin de enteros entre sus componentes, de modo
que ninguna dimensin es producto de otra multiplicada por un
entero. Es decir, al dividir una dimensin entre otra nunca se
obtiene un resultado exacto. Los fractales generan figuras y
estas figuras resultan tener una extraa 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 ecuacin se resuelve en el campo
de los nmeros 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 bahas y entrantes. La expresin matemtica del
Conjunto de Mandelbrot es:

2
1

n n
Z Z C
+
= +

Donde C es un nmero complejo constante y Z es un nmero
complejo variable que permite obtener las respectivas iteraciones

226
(los valores de cada punto del paisaje fractal, latitud y
longitud).
Como ejemplo vamos a obtener las tres primeras iteraciones.
Para ello asignamos valores a C de cualquier posicin arbitraria
dentro del conjunto, digamos 1 C i = + y para arrancar las
iteraciones podemos comenzar con
0
0 Z = , luego:

2
1
(0) (1 ) 1 Z i i = + + = +
2
2
(1 ) (1 ) 1 3 Z i i i = + + + = +
2
3
(1 3 ) (1 ) 7 7 Z i i i = + + + = +

Cuando se continua desarrollando el Conjunto de Mandelbrot
se obtiene una figura similar a la mostrada:


227


Para el desarrollo de la presente aplicacin crear un nuevo
proyecto y aadir sobre el formulario un cuadro de imagen
(PicPlano) y un botn de comandos (CmdVisualizar), luego ingresar
el cdigo 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

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

229
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
En este captulo, debido a las limitaciones de espacio y
materia, tan slo se ofrece el camino de acceso a unos pocos de
los diversos temas que abarca el fascinante mundo de la
programacin de grficos por computadora.
Muchos de estos temas siguen siendo materia de investigacin
(como el caso de los fractales), por lo que si Ud. desea
profundizar en este laberinto de fascinacin, no hay la garanta
de un retorno sano y salvo a nuestro universo mundano.



230

















GUA DE LABORATORIO
Parte I


















ELABORADO POR
Porras Rivera J Alejandro



231




INTRODUCCIN

La presente Gua de Laboratorio de Microsoft Visual Basic, se elabor
con la finalidad de complementar la parte terica con la parte prctica del
curso. Los problemas presentan un grado de dificultad gradual, es decir, en
cada prctica 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 teora, y luego en los problemas posteriores se va
incrementando el nivel de dificultad.
Esta gua explora una gran variedad de materias y contiene muchos
problemas recopilados a lo largo de varios aos de experiencia. Espero que
satisfaga las necesidades de los estudiantes, ya que ha sido elaborada
teniendo en cuenta los objetivos de aprendizaje del curso.





































Diciembre del 2000

Porras Rivera J Alejandro

232
Microsoft Visual Basic
GUA 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.
- - Aadir controles a un formulario.
- - Establecer las propiedades de los controles.
- - Trabajar con procedimientos de eventos.
- - Crear una aplicacin 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.

Aplicacin N 1
Elaborar una aplicacin que permita calcular el salario neto de un
trabajador en funcin del nmero de horas trabajadas, pago por hora de trabajo
y un descuento fijo al sueldo bruto del 20 por 100. Los clculos a efectuar
para obtener el salario neto de un trabajador se muestran a continuacin:

SalarioBruto = HorasTrabajadas * PagoPorHora

Descuento = 0.2 * SalarioBruto

SalarioNeto = SalarioBruto - Descuento

El diseo de la interfaz debe ser similar a la figura mostrada:



Para el desarrollo de esta aplicacin, proceda a ubicar los siguientes
controles en el formulario:

2 marcos

233
6 etiquetas
6 cajas de texto
3 botones de comando

Una vez ubicados los controles, establezca las propiedades segn se
indica:

Form1
Nombre FrmSalarioNeto
BorderStyle 3-Fixed Dialog
Caption Clculo del salario neto
Moveable False
StartUpPosition 2-CenterScreen

Frame1
Nombre FraIngreso
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
AutoSize True
Caption Salario neto S/.

Text1
Nombre TxtApellidosNombres

234
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
Caption &Limpiar

Command3
Nombre CmdSalir
Caption &Salir

Luego de establecer las propiedades para los controles, debe aadir
cdigo a la aplicacin. Para ello haga doble click sobre el botn Aceptar e
ingrese el siguiente cdigo:

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 continuacin haga doble click sobre el botn Salir y aada el
siguiente cdigo:

235

Private Sub CmdSalir_Click()
End
End Sub
Guarde y luego ejecute la aplicacin que acaba de crear. Pruebe
ingresando diferentes valores.

Luego, haga doble click sobre el botn Limpiar y aada el siguiente
cdigo:

Private Sub CmdLimpiar_Click()
TxtApellidosNombres =
TxtHorasTrabajadas =
TxtPagoPorHora =
TxtSalarioBruto =
TxtDescuento =
TxtSalarioNeto =
TxtApellidosNombres.SetFocus
End Sub

Guarde y ejecute su aplicacin. Cmo afecta el cdigo aadido en el
botn Limpiar a la aplicacin?. Anote sus observaciones.

































Aplicacin N 2
El men de un restaurante rpido se muestra a continuacin:

236












Se desea construir una aplicacin que calcule las ventas totales al
final del da, as como los impuestos a pagar (18 por 100).

La interfaz de entrada y salida deber ser similar a la figura mostrada
a continuacin:


Para el diseo del cuadro de men utilizaremos el control Microsoft
Hierarchical FlexGrid. Para tal fin, seleccione el Men Proyecto y elija la
opcin Componentes:


MEN PRECIO (S/.)
Hamburguesa 2.50
Cerveza 4.00
Gaseosa 3.00
Ensalada 1.50
Salchichas 2.00
Refresco 1.00
Sopa 1.50
Postre 1.50

237
A continuacin active la casilla de verificacin Microsoft Hierarchical
FlexGrid Control 6.0 OLEDB y haga click sobre el botn Aceptar. En seguida
este control se aadir al Cuadro de Herramientas.

Para el desarrollo de esta aplicacin, 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 diseo de entrada y salida. Para ello proceda a
establecer las propiedades segn se indica a continuacin:

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


238
Label9
Nombre LblVentaTotal
Caption Venta total S/.
Label10
Nombre LblImpuesto
Caption Impuesto S/.
MSHFlexGrid1
Nombre GrdMenu
Font Arial (Negrita 10)
FontFixed Arial (Negrita 10)
Text1
Nombre TxtHamburguesa
Text
Text2
Nombre TxtCerveza
Text
Text3
Nombre TxtGaseosa
Text
Text4
Nombre TxtEnsalada
Text
Text5
Nombre TxtSalchichas
Text
Text6
Nombre TxtRefresco
Text
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






239
Command3
Nombre CmdSalir
Caption &Salir
Picture C:\Archivos de programa\Microsoft Visual
Studio\Common\Graphics\Icons\Arrows\Point04.ico
Style 1-Graphical

En primer lugar debemos cargar los datos a la cuadrcula. Esto lo vamos
a realizar en tiempo de ejecucin al momento de cargarse en memoria el
formulario. Para ello, haga doble click sobre el formulario y aada el
siguiente cdigo:

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 aadir el cdigo que se encargar de realizar los
clculos. Para tal fin haga doble click sobre el botn Aceptar y proceda a
ingresar lo siguiente:
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 _

240
+ 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 botn Limpiar y aada el siguiente
cdigo:

Private Sub CmdLimpiar_Click()
TxtHamburguesa = : TxtCerveza =
TxtGaseosa = : TxtEnsalada =
TxtSalchichas = : TxtRefresco =
TxtSopa = : TxtPostre =
TxtVentaTotal = : TxtImpuesto =
TxtHamburguesa.SetFocus
End Sub
A continuacin haga doble click sobre el botn Salir y aada el
siguiente cdigo:

Private Sub CmdSalir_Click()
End
End Sub



































241
Aplicacin N 3
Elaborar una aplicacin que permita calcular la edad de una persona a
partir de su fecha de nacimiento. El diseo de la interfaz debe ser similar a
la figura mostrada:



Para el desarrollo de esta aplicacin, 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 segn se indica a
continuacin:

Form1
Nombre FrmEdad
BorderStyle 3-Fixed Dialog
Caption Calcula la edad de una persona
Label1
Nombre LblFecNac
AutoSize True
Caption Fecha de nacimiento:
Label2
Nombre LblEdad
AutoSize True
Caption Su edad es:
Text1
Nombre TxtFecNac
Text
Text2
Nombre TxtEdad
Locked True
Text
Command1
Nombre CmdAceptar
Caption &Aceptar
Default True
Command2
Nombre CmdLimpiar
Caption &Limpiar


242
Command3
Nombre CmdSalir
Cancel True
Caption &Salir
En seguida proceda a ingresar el siguiente cdigo:

Private Sub CmdAceptar_Click()
Dim FecNac As Date, Edad As Integer
FecNac = CDate(TxtFecNac)
Edad = CInt((Date - FecNac) / 365)
TxtEdad = Str(Edad) & aos
End Sub

Se deja como ejercicio para el estudiante el cdigo asociado con los
botones Limpiar y Salir, respectivamente.










































243
Aplicacin N 4
Se tiene un cajero automtico el cual permite manipular cierta cantidad
de dinero para lo cual dispone de los siguientes billetes: S/. 10.00, S/.
20.00, S/. 50.00, S/. 100.00 y S/. 200.00. Elaborar una aplicacin que
permita la lectura de la cantidad a retirar e indique el menor nmero de
billetes a utilizar.



Creo que a estas alturas Ud. ya entendi como funciona esto. Por ello,
esta aplicacin se deja como ejercicio para el estudiante.































244
GUA 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 verificacin y botones de opcin para alternar entre
uno o ms valores.
- - Utilizar cajas de dilogo 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.

Aplicacin N 1
Se desea elaborar la boleta de pago de los trabajadores de una fbrica.
Para ello se cuenta con los siguientes datos de entrada:
Apellidos y nombres del trabajador
Sueldo bsico
Horas extras trabajadas
Adems, 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.
Los descuentos a aplicar son sobre el sueldo bsico 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 diseo de la interfaz deber ser similar a la figura mostrada:


Para el desarrollo de esta aplicacin, proceda a ubicar los siguientes
controles en el formulario:

245
2 marcos
5 etiquetas
8 cajas de texto
2 botones de opcin
3 casillas de verificacin
3 botones de comando
Luego, proceda a establecer las propiedades segn se indica a continuacin:
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:
Label4
Nombre LblPagoHoraExtra
AutoSize True
Caption Pago hora extra S/.
Label5
Nombre LblSueldoNeto
AutoSize True
Caption Sueldo neto S/.
Text1
Nombre TxtTrabajador
Text
Text2
Nombre TxtSueldoBasico
Text
Text3
Nombre TxtHorasExtras
Text
Text4
Nombre TxtPagoHoraExtra
BackColor &H80000004&
Text
Text5
Nombre TxtRenta
BackColor &H80000004&
Locked True
Text
Text6
Nombre TxtFonavi
BackColor &H80000004&

246
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
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 cdigo que
se indica a continuacin:

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

247
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






















Aplicacin N 2
Cuatro notas entre 0 y 20 representan las calificaciones de un
estudiante de un curso de programacin. Elaborar una aplicacin para obtener

248
el promedio de esas calificaciones y visualizar su puntuacin de acuerdo al
siguiente cuadro:

Promedio Puntuacin
19-20 A
16-18 B
11-15 C
6-10 D
0-5 E

El diseo de la interfaz deber ser similar a la figura mostrada:


Para el desarrollo de esta aplicacin, proceda a ubicar los siguientes
controles en el formulario:
7 etiquetas
7 cajas de texto
3 botones de comando
Luego, proceda a establecer las propiedades segn se indica a
continuacin:
Form1
Nombre FrmNotas
BorderStyle 3-Fixed Dialog
Caption Puntuacin 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

249
Caption Nota 3:
Label5
Nombre LblN4
AutoSize True
Caption Nota 4:
Label6
Nombre LblPromedio
AutoSize True
Caption Promedio:
Label7
Nombre LblPuntuacion
AutoSize True
Caption Puntuacin:
Text1
Nombre TxtAlumno
Text
Text2
Nombre TxtN1
Text
Text3
Nombre TxtN2
Text
Text4
Nombre TxtN3
Text
Text5
Nombre TxtN4
Text
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 cdigo que
se indica:


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


































Aplicacin N 3

251
Escribir un aplicacin que acepte fechas como tres nmeros (dd, mm,
aaaa) y las visualice del modo usual. A manera de ejemplo considere lo
siguiente:


En caso de que el usuario ingrese algn dato incorrecto (por ejemplo 13
como un nmero de mes), se debe visualizar el siguiente mensaje:



Cuando el usuario haga click en el botn Salir, se debe observar el
siguiente mensaje:



En caso de que el usuario elija la opcin Si, la aplicacin debe
terminar. En caso contrario, es decir si el usuario elige la opcin No, se
debe proseguir con la aplicacin.

Para el desarrollo de esta aplicacin, 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 segn se indica:


252
Form1
Nombre FrmFecha
BorderStyle 3-Fixed Dialog
Caption Fecha en letras

Label1
Nombre LblDia
AutoSize True
Caption Da:

Label2
Nombre LblMes
AutoSize True
Caption Mes:

Label3
Nombre LblAnno
AutoSize True
Caption Ao:

Label4
Nombre LblFecha
AutoSize True
Caption

Text1
Nombre TxtDia
Text

Text2
Nombre TxtMes
Text

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 cdigo:

Private Sub CmdAceptar_Click()

253
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
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 aplicacin?, _
vbQuestion + vbYesNo, Pregunta) = vbYes Then
End
Else: Call CmdLimpiar_Click
End If
End Sub




















Aplicacin N 4

254
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 dems casos no se aplica ningn tipo de descuento.
Elaborar una aplicacin que permita determinar el importe a pagar por el
consumidor. El diseo de la interfaz y otras consideraciones se dejan a su
criterio.

















































GUA DE LABORATORIO N 3

255

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

Consideraciones
Para el desarrollo del presente laboratorio Ud. deber crear una carpeta
C:\FundVB\Lab3, para guardar sus trabajos correspondientes a este laboratorio.

Aplicacin N 1
Escribir una aplicacin que lea un nmero entero y muestre la tabla de
multiplicar de dicho nmero. El diseo de entrada y salida debe ser similar al
siguiente:



Para el desarrollo de esta aplicacin, proceda a ubicar los siguientes
controles en el formulario:

1 etiqueta
2 cajas de texto
1 botn de comando

En seguida proceda a establecer las propiedades segn se indica:
Form1
Nombre FrmTabla
BorderStyle 3-Fixed Dialog
Caption Tabla de multiplicar
Label1
Nombre LblNumero
Caption Ingrese un nmero:
Text1
Nombre TxtNumero
Text



Text2
Nombre TxtTabla

256
MultiLine True
Locked True
ScrollBars 2-Vertical
Text

Command1
Nombre CmdLimpiar
Caption &Limpiar
Una vez diseada la interfaz, proceda a ingresar el cdigo que se indica
a continuacin:

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 nmero, vbCritical, Mensaje
TxtTabla =
End If
End Sub

Private Sub CmdLimpiar_Click()
TxtNumero = : TxtTabla =
TxtNumero.SetFocus
End Sub




















Aplicacin N 2
Un nmero perfecto es un entero positivo, que es igual a la suma de
todos los enteros positivos (excluido el mismo) que son divisores del nmero.

257
El primer nmero perfecto es 6, ya que los divisores de 6 son 1, 2, 3 y 1 + 2
+ 3 = 6. Escribir una aplicacin que encuentre los tres primeros nmeros
perfectos.
El diseo de la interfaz debe ser similar a la figura mostrada:



Para el desarrollo de esta aplicacin, proceda a ubicar los siguientes
controles en el formulario:

1 marco
1 caja de texto

En seguida proceda a establecer las propiedades segn se indica:

Form1
Nombre FrmNumeroPerfecto
BorderStyle 3-Fixed Dialog
Caption Los 3 primeros nmeros perfectos

Frame1
Nombre FraPerfecto
Caption Nmero perfecto

Text1
Nombre TxtPerfecto
MultiLine True
Text
Una vez establecidas las propiedades proceda a ingresar el cdigo que se
indica a continuacin:

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

258
TxtPerfecto = Cad
Exit Sub
End If
N = N + 1
Wend
End Sub
















































Aplicacin N 3
Construya una aplicacin que permita el ingreso de un nmero entero y
muestre en pantalla la siguiente informacin: 1) Cantidad de cifras, 2) Suma

259
de cifras impares, 3) Suma de cifras pares, 4) Suma total de cifras, 5) Cifra
mayor, 6) Cifra menor y 7) Divisores de dicho nmero.

El diseo de la interfaz debe ser similar a la figura siguiente:



Para el desarrollo de esta aplicacin, proceda a ubicar los siguientes
controles en el formulario:

4 marcos
7 etiquetas
8 cajas de texto
1 botn de comando

En seguida proceda a establecer las propiedades segn se indica:

Form1
Nombre FrmNumeroPerfecto
BorderStyle 3-Fixed Dialog
Caption Los 3 primeros nmeros perfectos
Moveable False
StartUpPosition 2-CenterScreen


Frame1
Nombre FraEntrada
Caption

Frame2
Nombre FraSalida
Caption

Frame3

260
Nombre FraDivisores
Caption Divisores

Frame4
Nombre FraSalir
Caption

Label1
Nombre LblNumero
AutoSize True
Caption Ingrese un nmero:

Label2
Nombre LblCantCifras
AutoSize True
Caption Cantidad de cifras:

Label3
Nombre LblSumImpares
AutoSize True
Caption Suma de cifras impares:

Label4
Nombre LblSumPares
AutoSize True
Caption Suma de cifras pares:

Label5
Nombre LblSumTotal
AutoSize True
Caption Suma total de cifras:

Label6
Nombre LblCifraMayor
AutoSize True
Caption Cifra mayor:

Label7
Nombre LblCifraMenor
AutoSize True
Caption Cifra menor:

Text1
Nombre TxtNumero
Text

Text2
Nombre TxtCantCifras
Locked True
Text


Text3
Nombre TxtSumImpares

261
Locked True
Text
Text4
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

Una vez establecidas las propiedades proceda ha ingresar el cdigo que
se indica a continuacin:

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

262
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)
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 nmero, vbCritical, Mensaje
TxtNumero.SetFocus
End If
End Sub

Private Sub CmdSalir_Click()
If MsgBox(Desea terminar la aplicacin?, _
vbQuestion + vbYesNo, "Pregunta") = vbYes Then
End
Else
Cancel = True
TxtNumero.SetFocus
End If
End Sub











Aplicacin N 4

263
Un centro numrico es un nmero que separa una lista de nmeros enteros
(comenzando en 1) en dos grupos de nmeros, cuyas sumas son iguales. El primer
centro numrico 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
numrico 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 aplicacin
que calcule los centros numricos entre 1 y N.

El diseo de la interfaz y otras consideraciones se dejan a su criterio.













































GUA DE LABORATORIO N 4

Objetivos

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

Aplicacin N 1
Elabore una aplicacin que permita leer N nmeros de tipo entero, y a
continuacin los visualice ordenados en forma ascendente o descendente.


Para el desarrollo de esta aplicacin, proceda a ubicar los siguientes
controles en el formulario:

3 marcos
1 caja de texto
1 control lista
2 botones de opcin
3 botones de comando

En seguida proceda a establecer las propiedades segn se indica:
Form1
Nombre FrmBurbuja
BorderStyle 3-Fixed Dialog
Caption Ordenacin por burbuja
Moveable False
Frame1
Nombre FraNumero
Caption Ingrese un nuevo nmero:
Frame2
Nombre FraLista
Caption Lista de nmeros:
Frame3
Nombre FraOrden
Caption Orden:

Text1

265
Nombre TxtNumero
Text

List1
Nombre LstNumero
List

Option1
Nombre OptAscendente
Caption Ascendente
Value True

Option2
Nombre OptDescendente
Caption Descendente
Value False

Command1
Nombre CmdAnnadir
Caption &Aadir
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 cdigo que se
indica a continuacin:
Private Sub CmdAceptar_Click()
If IsNumeric(TxtNumero.Text) Then
LstNumero.AddItem TxtNumero.Text
TxtNumero.Text =
TxtNumero.SetFocus
Else
MsgBox Ingrese un nmero, 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

266
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

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 aplicacin?, _
vbQuestion + vbYesNo, Pregunta) = vbYes Then
End
Else: Cancel = True : TxtNumero.SetFocus
End If
End Sub

Private Sub CmdSalir_Click()
Unload Me
End Sub

Aplicacin N 2
Elaborar una aplicacin que permita seleccionar un artculo de un cuadro
combinado (Combo). Apenas el usuario seleccione un artculo se debe mostrar el
precio del mismo, el inters es fijo para esta ocasin.
El diseo de la interfaz debe ser similar a la siguiente figura:


267


La venta ha realizarse es a plazos, ello condiciona la cuota mensual a
pagarse. Cuando se haga click sobre el botn Cuota mensual debe mostrarse un
cuadro de dilogo con los datos propuestos:



De manera similar al hacer click sobre el botn Total nos debe mostrar
la cantidad total a pagar.


Para el desarrollo de esta aplicacin, proceda a ubicar los siguientes
controles en el formulario:

1 marco
3 etiquetas
1 cuadro combinado
2 cajas de texto
3 botones de opcin
2 botones de comando

En seguida proceda a establecer las propiedades segn se indica:

Form1
Nombre FrmCotizacion

268
BorderStyle 3-Fixed Dialog
Caption Pedido de cotizaciones

Frame1
Nombre FraPlazo
Caption Plazo:

Label1
Nombre LblArticulo
Caption Artculo:

Label2
Nombre LblPrecio
Caption Precio US$

Label3
Nombre LblInteres
Caption Inters:

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

Command2
Nombre CmdTotal

269
Caption &Total

Una vez establecidas las propiedades de la interfaz, haga doble click
sobre el formulario e ingrese las siguientes declaraciones en la seccin
General del mdulo 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 seccin General de un mdulo puede
ser accedido por todos los procedimientos de dicho mdulo. Luego, contine
ingresando el cdigo que se muestra a continuacin:

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

270
End Sub

Aplicacin N 3
Se desea elaborar una aplicacin que permita controlar el proceso de
matrcula en un curso de computacin. Para ello se deben recabar los
siguientes datos: 1) Curso en que se matricula el alumno, 2) Fecha de
matrcula, 3) Apellidos y nombres, 4) Sexo, 5) Direccin, y 6) Distrito de
residencia.



Para el desarrollo de esta aplicacin 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 segn se indica:
Form1
Nombre FrmFichaMatricula
BorderStyle 3-Fixed Dialog
Caption Ficha de matrcula

Frame1

271
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 matrcula:

Label3
Nombre LblAlumno
Caption Alumno:

Label4
Nombre LblSexo
Caption Sexo:

Label5
Nombre LblDireccin
Caption Direccin:

Label6
Nombre LblDistrito
Caption Distrito:

Combo1
Nombre CboSexo
Text

List1
Nombre LstCursos
Text

List2
Nombre LstDistrito
Text

Text1
Nombre TxtCurso
Text

272

Text2
Nombre TxtFechaMat
Text

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 cdigo que se indica a continuacin:

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

273
LstDistrito.AddItem Carmen de la Legua
LstDistrito.AddItem La Perla
LstDistrito.AddItem La Punta
LstDistrito.AddItem Ventanilla
LstDistrito.AddItem Cercado de Lima
LstDistrito.AddItem Ancn
LstDistrito.AddItem Ate
LstDistrito.AddItem Barranco
LstDistrito.AddItem Brea
LstDistrito.AddItem Carabayllo
LstDistrito.AddItem Comas
LstDistrito.AddItem Chaclacayo
LstDistrito.AddItem Chorrillos
LstDistrito.AddItem El Agustino
LstDistrito.AddItem Jess Mara
LstDistrito.AddItem La Molina
LstDistrito.AddItem La Victoria
LstDistrito.AddItem Lince
LstDistrito.AddItem Lurigancho
LstDistrito.AddItem Lurn
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 Martn de Porres
LstDistrito.AddItem San Miguel
LstDistrito.AddItem Santiago de Surco
LstDistrito.AddItem Villa Mara del Triunfo
LstDistrito.AddItem San Juan de Lurigancho
LstDistrito.AddItem Santa Mara 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 aplicacin?, _
vbQuestion + vbYesNo, Pregunta) = vbYes Then
End
Else
Cancel = True
Call CmdLimpiar_Click
End If
End Sub


274
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
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 algn 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



275
Aplicacin N 4
Desarrollar una aplicacin 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 (teora), el nombre del jefe de prctica (laboratorio),
as como los horarios de teora y de laboratorio. El diseo de la interfaz
deber ser similar al siguiente:










Microsoft Visual Basic
GUA DE LABORATORIO N 5

Objetivos
Luego de completar este laboratorio, el estudiante ser capaz de:

- - Crear procedimientos y funciones definidos por el usuario.
- - Aadir formularios creados anteriormente a un proyecto.
- - Cambiar el formulario de arranque de un proyecto.
- - Utilizar formularios MDI.
- - Manejar diferentes mtodos y propiedades de los formularios.
- - Crear y utilizar mens en una aplicacin.

Consideraciones

276
Para el desarrollo del presente laboratorio Ud. deber crear una carpeta
C:\FundVB\Lab5, para guardar sus trabajos correspondientes a este laboratorio.

Aplicacin N 1
Escriba una funcin 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.



Para el desarrollo de esta aplicacin, 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 segn se indica:

Form1
Nombre FrmCadInvertida
Caption Cadena invertida
BorderStyle 3-Fixed Dialog

Label1
Nombre LblCadena
Autosize True
Caption Ingresa una cadena:

Label2
Nombre LblInvertida
Autosize True
Caption Cadena invertida:

Text1
Nombre TxtCadena
Text

Text2
Nombre TxtInvertida
Locked True
Text

Command1
Nombre CmdAceptar

277
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 cdigo:

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

Private Sub CmdLimpiar_Click()
TxtCadena =
TxtInvertida =
TxtCadena.SetFocus
End Sub

Private Sub CmdSalir_Click()
End
End Sub

Aplicacin N 2
Se desea elaborar una aplicacin que permita controlar el proceso de
matrcula en un curso de computacin. Para ello se deben recabar los
siguientes datos: 1) Curso en que se matricula el alumno, 2) Fecha de
matrcula, 3) Apellidos y nombres, 4) Sexo, 5) Direccin, y 6) Distrito de
residencia. El diseo de la interfaz debe ser similar a la figura mostrada:


278


Para seleccionar un curso el usuario deber hacer click en el botn
punteado que se encuentra al lado de la caja de texto. En seguida se
presentar un men de seleccin por realce en el cual se presenta la relacin
de todos los cursos disponibles. El curso quedar seleccionado al hacer click
en el botn Aceptar.



El mismo tipo de seleccin deber realizarse al momento de ingresar el
nombre del distrito.


279


Para el desarrollo de esta aplicacin necesitamos tres formularios y un
mdulo. En primer lugar proceda a aadir un mdulo de cdigo al proyecto.
Seleccione el Men Proyecto y elija la opcin Agregar mdulo, se debe
presentar un cuadro de dilogo similar a la siguiente figura:



Del cuadro de dilogo Agregar mdulo, en la ficha Nuevo, haga click en
el botn Abrir. Luego ingrese el siguiente cdigo en la seccin de
Declaraciones del mdulo que acabamos de aadir:

Public Curso As String
Public Distrito As String

En seguida proceda a cambiar el nombre formulario principal por
FrmFichaMatricula. Luego debe aadir los dems formularios necesarios para

280
construir la aplicacin. Para tal fin, seleccione el men Proyecto y elija la
opcin Agregar formulario. Del cuadro de dilogo Agregar formulario, en la
ficha Nuevo, elija la opcin Formulario y haga click en el botn Abrir. Se
debe presentar un cuadro de dilogo similar a la siguiente figura:



En ese instante se aadir un nuevo formulario al proyecto. Cambie el
nombre del nuevo formulario por FrmCurso. Repita el procedimiento anterior
para aadir el formulario FrmDistrito.

A continuacin copie los pasos de la pg. 55 a la pg. 62 de la Gua de
Laboratorio N 4 (Aplicacin N 3) con los siguientes cambios:

En la pg. 55, aadir slo 2 marcos. No aadir ningn control de lista.
En vez de 4 botones de comando, aadir 6 botones de comando. Luego, establecer
las siguientes propiedades para los dos nuevos botones:

Command5
Nombre CmdCurso
Caption . . .

Command6
Nombre CmdDistrito
Caption . . .

En la pg. 59, reemplazar el cdigo del evento Load del formulario por
el siguiente:

Private Sub Form_Load()
CboSexo.AddItem "Masculino"
CboSexo.AddItem "Femenino"
End Sub


281
En la pg. 61, suprimir el cdigo asociado al evento Click de los
controles de lista LstCursos y LstDistrito. En su lugar aadir 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 continuacin 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
Luego proceda a establecer las propiedades segn se indica:

Form2
Nombre FrmCurso
BorderStyle 3-Fixed Dialog
Caption Cursos

List1
Nombre LstCursos
Text

Command1
Nombre CmdAceptar
Caption &Aceptar

Una vez establecidas las propiedades proceda a ingresar el cdigo que se
indica a continuacin:

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
Private Sub CmdAceptar_Click()
Curso = LstCursos.Text
FrmCurso.Hide

282
End Sub

Por ltimo, proceda Ud. a desarrollar el cdigo respectivo para el
formulario FrmDistrito.

Aplicacin N 3
Elaborar una aplicacin 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 aplicacin necesitamos utilizar un formulario
MDI (interfaz de mltiples documentos). Para ello seleccione el Men Proyecto
y elija la opcin Agregar formulario MDI, se debe presentar un cuadro de
dilogo similar a la siguiente figura:



283


Del cuadro de dilogo Agregar formulario MDI, en la ficha Nuevo, haga
click en el botn Abrir. En seguida cambie el nombre del formulario MDI por
MDIPrincipal.

A continuacin proceda a aadir los formularios para las diferentes
opciones del men. Cambie los nombres de los formularios segn se indica:

Formulario Nombre
Form1 FrmNone
Form2 FrmFixedSingle
Form3 FrmSizable
Form4 FrmFixedDialog
Form5 FrmFixedToolWindow
Form6 FrmSizableToolWindow
Form7 FrmAcercaDe


Luego proceda a disear el men de opciones. Para ello haga click
derecho sobre el formulario MDI y elija la opcin Editor de mens. Establezca
las propiedades segn:

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

284
&Salir MnuSalir Ctrl + X

A continuacin haga click en el botn Aceptar del Editor de mens. Luego
proceda a ingresar el siguiente cdigo para el formulario MDI:

Private Sub MDIForm_Unload(Cancel As Integer)
If MsgBox(Desea terminar la aplicacin?, _
vbQuestion + vbYesNo, Mensaje) = vbYes Then
End
Else: Cancel = True
End If
End Sub

Private Sub MnuNone_Click()
Load FrmNone
FrmNone.Show
End Sub
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

A continuacin proceda a activar el formulario FrmNone y ubique un
botn de comandos sobre el mismo. En seguida establezca las propiedades segn
se indica a continuacin:

Form1

285
Nombre FrmNone
BorderStyle 0-None
Caption None
MDIChild True

Command1
Nombre CmdVolver
Caption &Volver

Una vez establecidas las propiedades, proceda a ingresar el cdigo que
se muestra a continuacin:

Private Sub CmdVolver_Click()
Unload Me
End Sub

Repita el procedimiento anterior para los dems tipos de formularios.

Aplicacin N 4
Elaborar una aplicacin que acepte como entrada la reserva de agua de un
depsito y los litros que se consumen a la semana. Utilizando una funcin
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.









GUA DE LABORATORIO
Parte II






286





Microsoft Visual Basic
GUA 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.

Creacin de la base de datos con Microsoft Access 2000
Para desarrollar nuestras prcticas 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 dilogo Nueva, en la ficha General, seleccionar
Base de datos y hacer click en el botn Aceptar.
- - Ingresar un nombre para la base de datos, para nuestro caso ingrese
CursosLibres. En seguida se mostrar una ventana similar a la siguiente:


287


- - Proceda a crear una nueva tabla. Para ello seleccionar la opcin Tablas
y haga doble click en Crear una tabla en vista Diseo.
- - Introducir el nombre, el tipo y las propiedades para cada uno de los
campos. Para nuestro caso ingrese lo siguiente:

Tabla Curso
Nombre del
Campo
Tipo Ancho Descripcin
CurCodigo T 03 Cdigo del curso
CurNombre T 30 Nombre del curso
CurVacantes N 03 Nmero de vacantes disponibles
CurProfe T 50 Nombre del profesor de teora
CurSilabo M 50 Slabo de cada curso
- - Luego, debe asignar un nombre a la tabla al momento de cerrarla. Para
nuestro caso asgnele el nombre de Curso.
- - Por ltimo, proceda a abrir la tabla e introducir datos. Para nuestro
caso, ingrese la siguiente informacin:

CurCodigo CurNombre CurProfe
BC1 Borland C++ Nivel I Linares Alarcon, Adams
BC2 Borland C++ Nivel II Crdoba 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 Crdoba 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

288
PB1 Power Builder Nivel I Crdoba Saavedra, Javier
PB2 Power Builder Nivel II Crdoba Saavedra, Javier
SQ1 MS SQL Server Nivel I Crdoba Saavedra, Javier
SQ2 MS SQL Server Nivel II Crdoba Saavedra, Javier
WIN MS Windows 98 Montes Tejada, Estela

A menudo, el proceso de diseo de la base de datos es bastante complejo.
Para nosotros ha sido fcil, pues se nos brinda la estructura de las tablas.

De manera anloga, proceda a crear la siguiente tabla segn se indica a
continuacin:

Tabla Laboratorio
Nombre del
Campo
Tipo Ancho Descripcin
LabCodigo T 03 Cdigo del curso
LabHora T 08 Horario de laboratorio
LabProfe T 50 Nombre del profesor de laboratorio

Al momento de cerrar la tabla que acaba de crear, asgnele el nombre de
Laboratorio. Luego, proceda a ingresar la siguiente informacin:

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 Crdoba 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 Crdoba Saavedra, Javier
VF3 DO 14-16 Linares Alarcon, Adams
PB1 VI 16-18 Crdoba Saavedra, Javier
PB2 VI 14-16 Crdoba Saavedra, Javier
SQ1 SA 16-18 Crdoba Saavedra, Javier
SQ2 SA 18-20 Crdoba Saavedra, Javier
WIN SA 10-12 Montes Tejada, Estela


Aplicacin N 1
Elaborar una aplicacin que permita realizar el mantenimiento de la
informacin almacenada en la tabla Curso de la base de datos CursosLibres.MDB.
El diseo de la interfaz debe ser similar a la figura mostrada:


289


Los botones ubicados en el marco Navegador (Primero, Anterior, Siguiente
y Ultimo, de izquierda a derecha) permiten desplazarse a travs de la tabla.
Los botones ubicados en el marco Mantenimiento (Nuevo, Editar, Guardar y
Eliminar, de izquierda a derecha) permiten realizar las operaciones bsicas de
mantenimiento de la tabla.

Para desarrollar nuestra aplicacin, lo primero que debemos hacer es
conectarnos a la base de datos CursosLibres.MDB. Para ello ingrese a Visual
Basic de manera habitual, a continuacin en el men Proyecto seleccione la
opcin Agregar Data Environment y se crear una nueva conexin para la que
debe establecer propiedades de vnculo de datos. En la ventana Data
Environment cambie el nombre del objeto DataEnvironment por DeCursosLibres y
el de la conexin por CnCursosLibres. El aspecto de la ventana Data
Environment deber ser similar a la siguiente figura:



Luego haga click con el botn derecho del ratn en CnCursosLibres y
seleccione la opcin Propiedades. Deber presentarse un cuadro de dilogo
similar al siguiente:


290

En la ficha Proveedor del cuadro de dilogo anterior, seleccione
Microsoft Jet 4.0 OLE DB Provider y haga click en el botn Siguiente. En
seguida aparecer un cuadro de dilogo similar al mostrado:


291


En la ficha Conexin del cuadro de dilogo Propiedades de Data Link
escriba el nombre de la base de datos CursosLibres.MDB y haga click en el
botn Probar conexin. Luego si la conexin es satisfactoria haga click en el
botn Aceptar.

En seguida en la barra de herramientas de la ventana Data Environment
haga click en el botn Agregar Comando y denomine al comando CmCurso. Luego
haga click derecho sobre el comando y seleccione Propiedades:


292


Compruebe que este comando utiliza la conexin CnCursosLibres, luego
establezca el nombre de la tabla a utilizar, en este caso Curso y haga click
en el botn Aceptar.

A continuacin seleccione el comando CmCurso y arrstrelo 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
Nombre FraIngreso
Caption

Frame2
Nombre FraNavegador
Caption Navegador

Frame3
Nombre FraMantenimiento
Caption Mantenimiento

LblFieldLabel(0)
Nombre LblFieldLabel
Caption Cdigo:

293

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

294
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
Caption &Salir
Picture C:\FundVB\Bitmaps\Exit.bmp
Style 1-Graphical

El cdigo asociado a la aplicacin se muestra a continuacin:

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


295
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
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 aplicacin?, _
vbQuestion + vbYesNo, Pregunta) = vbYes Then
End
Else
Cancel = True
End If
End Sub
Private Sub Form_Activate()
ModoEditar False
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 aplicacin debemos asegurarnos de elegir
el tipo de bloqueo adecuado. Para ello haga click derecho sobre el comando

296
CmCurso y elija la opcin Propiedades y en la ficha Avanzadas selecciones el
tipo de bloqueo 3-Optimistic, tal como se muestra en la figura siguiente:



Aplicacin N 2
Desarrollar una aplicacin que permita mostrar en una grilla el
contenido de la tabla Curso. El diseo de la interfaz se muestra a
continuacin:



Para desarrollar la aplicacin, lo primero que debemos hacer es
conectarnos a la base de datos CursosLibres.MDB. Luego, aada un Comando y
denomnelo CmConsultaCurso. Haga click derecho sobre el comando y seleccione
Propiedades:


297

Compruebe que este comando utiliza la conexin CnCursosLibres. Luego
seleccione la opcin Instruccin SQL (Structured Query Language, Lenguaje de
Estructuras de Consultas) e ingrese el siguiente cdigo:

Select CurCodigo As Cdigo, CurNombre As Nombre,
CurVacantes As Vacantes, CurProfe As Profesor From Curso

Luego, haga click en el botn Aceptar. La ventana DataEnvironment debe
presentar el siguiente aspecto:



A continuacin seleccione el comando CmConsultaCurso y arrstrelo con el
botn derecho del ratn hacia el formulario. Del men desplegable que se
presenta, seleccione la opcin Cuadrcula de datos.


298


Luego, cambie las dimensiones de la grilla de tal forma que ocupe la
totalidad del formulario. Finalmente guarde y pruebe su aplicacin.

Aplicacin N 3
Desarrollar una aplicacin 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 aada un comando y denomnelo CmConsultaProfe.
Luego haga click derecho sobre el comando y seleccione Propiedades. Compruebe
que este comando utiliza la conexin CnCursosLibres. Luego seleccione la
opcin Instruccin SQL e ingrese el siguiente cdigo:

Select CurCodigo As Cdigo, CurNombre As Nombre,
CurProfe As Profesor From Curso Where (CurProfe = ?)

A continuacin proceda a aadir otro comando y denomnelo CmProfe.
Compruebe que este comando utiliza la conexin CnCursosLibres. Seleccione la
opcin Instruccin SQL e ingrese el siguiente cdigo:

Select Distinct CurProfe From Curso

Luego proceda ha ubicar los siguientes controles en el formulario:
1 control DataCombo
1 control DataGrid
1 botn de comandos

En seguida proceda a establecer las propiedades segn se indica:

Form1
Nombre FrmConsultaProfe
Caption Consulta de profesores
BorderStyle 3-Fixed Dialog

299

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 continuacin ingrese el siguiente cdigo:

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

Aplicacin N 4
Desarrollar una aplicacin que permita mostrar el contenido de la tabla
Laboratorio, relacionada con la tabla Curso, tal como se muestra a
continuacin:



Observar que la tabla Laboratorio slo 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 mltiples
tablas (para nuestro caso Curso y Laboratorio), se indica a continuacin:

Select Laboratorio.LabCodigo As Cdigo,
Curso.CurNombre As Nombre,
Laboratorio.LabHora As Horario,
Laboratorio.LabProfe As [Jefe de prctica]

300
From Laboratorio, Curso
Where Laboratorio.LabCodigo = Curso.CurCodigo


Microsoft Visual Basic
GUA DE LABORATORIO N 7

Objetivos
Luego de completar este laboratorio, el estudiante ser capaz de:

- - Utilizar el objeto ADO Connection para crear una conexin a una base de
datos.
- - Crear un objeto ADO Recordset para recuperar informacin de una base de
datos.
- - Utilizar el mtodo Execute de una conexin para actualizar la
informacin 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.

Aplicacin N 1
Elaborar una aplicacin que permita realizar el mantenimiento de la
informacin contenida en la tabla Curso.


En esta aplicacin Ud. debe disear la interfaz y luego escribir cdigo
para conectarse y recuperar informacin de la base de datos.

Para el diseo 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 segn se indica:

Form1
Nombre FrmMantenCursos
Caption Mantenimiento de cursos
BorderStyle 3-Fixed Dialog

301
Moveable False
StartUpPosition 2-CenterScreen

Frame1
Nombre FraIngreso
Caption

Frame2
Nombre FraNavegador
Caption Navegador

Frame3
Nombre FraMantenimiento
Caption Mantenimiento


Label1
Nombre LblCodigo
Caption Cdigo:

Label2
Nombre LblNombre
Caption Nombre:

Label3
Nombre LblVacantes
Caption Vacantes:

Label4
Nombre LblProfesor
Caption Profesor:

Text1
Nombre TxtCurCodigo
Locked True
Text

Text2
Nombre TxtCurNombre
Locked True
Text

Text3
Nombre TxtCurVacantes
Locked True
Text


Text4
Nombre TxtCurProfe
Locked True
Text


302
Para establecer las propiedades de los botones de comando Command1,
Command2, . . ., Command8, copiar los pasos de la pg. 87 a la pg. 88 de la
Gua de Laboratorio N 6 (Aplicacin N 1).

Antes de ingresar cdigo a la aplicacin, debemos tener en cuenta que
para poder utilizar los objetos ADO es una aplicacin Visual Basic es
necesario cargar la librera correspondiente. Para ello selecciones el men
Proyecto y elija la opcin Referencias. En el cuadro de dilogo Referencias
seleccione la opcin Microsoft ActiveX Data Objects 2.1 Library, tal como se
indica en la figura siguiente:



Luego de hacer click en el botn Aceptar estar en condiciones de
utilizar los objetos ADO en su aplicacin.

El cdigo necesario para realizar la conexin y efectuar el
mantenimiento de la tabla se muestra a continuacin. Observar la analoga
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

303

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
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
End Sub

Private Sub CmdEditar_Click()
ModoEditar True
End Sub

Private Sub CmdGuardar_Click()
Rs.Update

304
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

Aplicacin N 2
Desarrollar una aplicacin que permita realizar una consulta a la tabla
Curso. Para ello el usuario debe seleccionar de un cuadro combinado (combo) el
nombre de un profesor y a continuacin se deben visualizar los cursos a su
cargo. El diseo de la interfaz debe ser similar a la figura mostrada:


Para el desarrollo de esta aplicacin, proceda ha ubicar los siguientes
controles en el formulario:

1 control ComboBox
1 control DataGrid
1 botn de comandos

En seguida proceda a establecer las propiedades segn se indica:

Form1
Nombre FrmConsultaProfe
Caption Consulta de profesores
BorderStyle 3-Fixed Dialog

Combo1
Nombre CboProfe
Text

DataGrid1
Nombre DbgrdCursos

305
Font Arial (Negrita 10)
HeadFont Arial (Negrita 10)

Command1
Nombre CmdBuscar
Caption &Buscar
Default True

A continuacin debe ingresar el cdigo 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
RsCurso.LockType = adLockReadOnly
RsCurso.CursorLocation = adUseClient
RsCurso.Open Select CurCodigo As Cdigo, & _
CurNombre As Nombre, CurProfe As Profesor & _
From Curso Where CurProfe = ' & CboProfe.Text & '
Set DbgrdCursos.DataSource = RsCurso
End Sub

Private Sub Form_Unload(Cancel As Integer)
Cn.Close
Set Cn = Nothing
End Sub

Aplicacin N 3
Desarrollar una aplicacin que permita realizar el mantenimiento de las
tablas de la base de datos CursosLibres.MDB (estas tablas le sern
proporcionadas con datos suficientes, por el Jefe de Prctica).

El diseo de la interfaz debe ser similar a la siguiente figura:


306

Por ejemplo para realizar el mantenimiento de la tabla Curso debemos
preparar los siguientes formularios:






307

Para desarrollar nuestra aplicacin debe agregar un mdulo de cdigo al
proyecto. Luego ingrese lo siguiente:

Public Cn As ADODB.Connection

Tambin ser necesario agregar un formulario MDI. Luego, cambie el
nombre del formulario por el de MDICursosLibres. En seguida, disee el men
para la aplicacin segn se indica:

Caption Name ShortCut
&Mantenimiento MnuManten 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

Luego, haga doble click sobre el formulario e ingrese el siguiente
cdigo:

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

308
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 opcin Nuevo de la tabla Curso, aada 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 segn se indica:
Form1
Nombre FrmMantenCursos
Caption Nuevo curso
BorderStyle 3-Fixed Dialog
MDIChild True

Label1
Nombre LblCodigo
Caption Cdigo:

Label2
Nombre LblNombre
Caption Nombre:

Label3
Nombre LblVacantes
Caption Vacantes:

Label4
Nombre LblProfesor
Caption Profesor:

Text1
Nombre TxtCurCodigo
Text

Text2
Nombre TxtCurNombre
Text

309

Text3
Nombre TxtCurVacantes
Text
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
cdigo:

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

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 opcin Editar de la tabla Curso, aada un nuevo
formulario al proyecto. Luego, ubique los siguientes controles en el
formulario:

1 marco

310
4 etiquetas
4 cajas de texto
4 botones de comando

En seguida proceda a establecer las propiedades segn se indica:

Form1
Nombre FrmMantenCursos
Caption Editar curso
BorderStyle 3-Fixed Dialog
MDIChild True

Frame1
Nombre FraCodigo
Caption
Label1
Nombre LblCodigo
Caption Cdigo:

Label2
Nombre LblNombre
Caption Nombre:

Label3
Nombre LblVacantes
Caption Vacantes:

Label4
Nombre LblProfesor
Caption Profesor:

Text1
Nombre TxtCurCodigo
Text

Text2
Nombre TxtCurNombre
Text

Text3
Nombre TxtCurVacantes
Text

Text4
Nombre TxtCurProfe
Text

Command1
Nombre CmdAceptar
Caption &Aceptar

Command2
Nombre CmdGrabar
Caption &Grabar

311

Command3
Nombre CmdNuevo
Caption &Nuevo

Command4
Nombre CmdCerrar
Caption &Cerrar

Una vez establecidas las propiedades, proceda a ingresar el siguiente
cdigo:

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 ningn curso con este cdigo
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
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

312
CmdNuevo.Enabled = False
TxtCurCodigo.Enabled = True
TxtCurCodigo.SetFocus
End Sub

Private Sub CmdCerrar_Click()
Unload Me
End Sub

Para desarrollar la opcin Eliminar de la tabla Cursos, aada 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 segn se indica:

Form1
Nombre FrmMantenCursos
Caption Eliminar curso
BorderStyle 3-Fixed Dialog
MDIChild True

Frame1
Nombre FraCodigo
Caption

Label1
Nombre LblCodigo
Caption Cdigo:

Label2
Nombre LblNombre
Caption Nombre:

Label3
Nombre LblVacantes
Caption Vacantes:

Label4
Nombre LblProfesor
Caption Profesor:

Text1
Nombre TxtCurCodigo
Text

Text2
Nombre TxtCurNombre
Text

Text3

313
Nombre TxtCurVacantes
Text

Text4
Nombre TxtCurProfe
Text

Command1
Nombre CmdAceptar
Caption &Aceptar

Command2
Nombre CmdEliminar
Caption &Eliminar

Command3
Nombre CmdNuevo
Caption &Nuevo

Command4
Nombre CmdCerrar
Caption &Cerrar

Una vez establecidas las propiedades, proceda a ingresar el siguiente
cdigo:

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

314
If (Rs.EOF And Rs.BOF) Then
MsgBox No existe ningn curso con este cdigo
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 cdigo para los formularios
de mantenimiento de las dems tablas.

Aplicacin N 4
Elaborar una aplicacin que permita recuperar y mantener la informacin
de la base de datos CursosLibres.MDB. Para tal fin debe preparar un formulario
que permita establecer la conexin con el origen de datos. Luego, si la
conexin 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 diseo de la interfaz
debe ser similar a la siguiente figura:


315


Las opciones Mantenimiento y Consulta deben ser anlogas a las
realizadas en aplicaciones anteriores.
Microsoft Visual Basic
GUA DE LABORATORIO N 8

Objetivos
Luego de completar este laboratorio, el estudiante ser capaz de:

- - Usar el diseador 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.

Aplicacin N 1
Disear un reporte que muestre la informacin almacenada en la tabla
Cursos. El formato del reporte pedido se muestra a continuacin:


316

Para disear nuestro reporte, lo primero que debemos hacer es
conectarnos a la base de datos CursosLibres.MDB. La conexin la haremos
efectiva mediante el Data Environment. Luego, aada un Comando y denomnelo
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 opcin Agregar Data Report, lo
cual permite agregar el diseador de reportes:


317

En seguida del Data Environment seleccionar cada campo que desee incluir
en el reporte y luego arrastre el campo hacia la seccin Detalles del Data
Report.

El diseador de reportes presenta un conjunto de controles que permiten
mejorar la presentacin de nuestro reporte. En seguida ubicar los siguientes
controles:

2 etiquetas en la seccin Encabezado de informe
4 etiquetas en la seccin Encabezado de pgina

A continuacin proceda a establecer las propiedades segn se indica:

Etiqueta1
Nombre RptLblVAB
Caption Instituto de Educacin Superior
Vctor Andrs Belande
Font Arial (Negrita 09)

Etiqueta2
Nombre RptLblNombre
Caption Reporte de Cursos
Font Arial (Negrita Cursiva 16)

Etiqueta3
Nombre RptLblCodigo
Caption Cdigo:
Font Arial (Negrita 10)

Etiqueta4
Nombre RptLblNombre
Caption Nombre:
Font Arial (Negrita 10)
Etiqueta5

318
Nombre RptLblVacantes
Caption Vacantes:
Font Arial (Negrita 10)

Etiqueta6
Nombre RptLblProfesor
Caption Profesor:
Font Arial (Negrita 10)

Para insertar la fecha actual dar un click con el botn derecho del
ratn sobre el diseador de reportes en la seccin de Encabezado de informe,
del men contextual que se presenta seleccionar la opcin Insertar control,
luego Fecha actual (formato corto). En seguida, cambiar las siguientes
propiedades:

DataReport1
DataMember CmCurso
DataSource DeCursosLibres

Luego, seleccione del men Proyecto la opcin Propiedades de Proyecto, y
en la ficha General del cuadro de dilogo Propiedades del proyecto, establecer
DataReport1 como objeto inicial. Haga click en Aceptar y ejecute su
aplicacin.

Aplicacin N 2
Disear un reporte que permita mostrar un listado de profesores y los
cursos que tienen a su cargo. Tener en cuenta que la informacin relacionada
con cada profesor debe empezar en una pgina nueva. El formato del reporte
pedido se muestra a continuacin:



319


En esta aplicacin explicaremos como crear grupos de datos. Para ello
iniciar un nuevo proyecto. En seguida, conectarse a la base de datos
CursosLibres.MDB mediante el Data Environment. Luego, aada un Comando y
denomnelo 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 dilogo Propiedades de CmProfesor. A continuacin
activar la casilla de verificacin Agrupar comando, luego seleccionar de la
lista de campos, el campo por el cual se desea agrupar la informacin, para
nuestro caso seleccionar CurProfe y dar un click en el botn . El cuadro
de dilogo Propiedades de CmProfesor debe presentar un aspecto similar a la
figura siguiente:
>

320


A continuacin sobre el diseador de reportes dar un click con el botn
derecho del ratn y del men emergente que se presenta elegir la opcin
Insertar encabezado o pie de grupo. Del objeto DeCursosLibres arrastrar el
campo CurProfe de la seccin Campo de resumen en CmProfesor_Grouping al
diseador de reportes pero a la seccin Encabezado de grupo. Los dems campos
arrastrarlos de la seccin Campos de Detalle en CmProfesor a la seccin
Detalle del generador de reportes. Por ltimo proceda a cambiar las siguientes
propiedades del objeto DataReport:

DataReport1
DataMember CmProfesor_Grouping
DataSource DeCursosLibres

Aplicacin N 3
Desarrollar una aplicacin que permita crear un reporte para mostrar la
informacin de la base de datos CursosLibres.MDB. Para tal fin debe preparar
un formulario que permita al usuario elegir una tabla, y en seguida se debe
generar el reporte correspondiente. Adems el usuario puede obtener una vista
preliminar del reporte o una copia impresa. El diseo de la interfaz debe ser
similar a la figura que se muestra a continuacin:


321


Para desarrollar nuestra aplicacin, proceda a disear los reportes
correspondientes segn:

Tabla Reporte
Alumno DataReport1
Curso DataReport2
Laboratorio DataReport3

Luego, ubique los siguientes controles sobre el formulario:

1 marco
3 botones de opcin
3 botones de comando

En seguida proceda a establecer las propiedades segn se indica:
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

322

Command1
Nombre CmdVistaPrevia
Caption VistaPrevia
Picture C:\Archivos de programa\Microsoft Visual
Studio\Common\Graphics\Bitmaps\Win95\
Explorer.bmp
Style 1-Graphical
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
cdigo:

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
Private Sub CmdSalir_Click()
Unload Me
End Sub

Cuando ejecute la aplicacin, al dar un click en el botn Imprimir se
visualizar el siguiente cuadro de dilogo, el cual nos permitir confirmar o
cancelar la impresin:


323


Aplicacin N 4
Disear un reporte combinando datos de la tabla Curso y Laboratorio. El
reporte debe mostrar el cdigo del curso, el nombre del curso, el nombre del
profesor de teora, el nombre del jefe de prctica y el horario de
laboratorio. Dar formato al reporte segn su criterio.














324
GUA DE LABORATORIO
Parte III










Microsoft Visual Basic
GUA DE LABORATORIO N 9

Objetivos
Luego de completar este laboratorio, el estudiante ser capaz de:

- - Crear y utilizar clases dentro de una aplicacin Visual Basic.
- - Disear 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.

Aplicacin N 1
Implementar una clase denominada Circulo, la cual debe contar con las
propiedades pblicas Radio y Area. Para tal fin seleccione la opcin Agregar
mdulo de clase del Men Proyecto:



En la ficha Nuevo seleccione la opcin Mdulo de clase y haga click en
Abrir. En seguida active la ventana de propiedades y cambie el nombre de la
nueva clase por Circulo. La ventana de cdigo de la clase debe presentar la
siguiente apariencia:


325


A continuacin proceda a ingresar el siguiente cdigo 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

Luego proceda a ubicar los siguientes controles en el formulario:

2 etiquetas
2 cajas de texto
3 botones de comando

A continuacin proceda a establecer las propiedades segn se indica:

Form1
Nombre FrmEjemClaseCirculo
Caption Ejemplo con la clase Circulo

Label1
Nombre LblRadio
Caption Radio:

Label2
Nombre LblArea
Caption Area:

Text1

326
Nombre TxtRadio
Text

Text2
Nombre TxtArea
Text

Una vez que ha establecido las propiedades indicadas, proceda a ingrese
el siguiente cdigo para el formulario de prueba:

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 aplicacin. El resultado debe ser similar a la
siguiente figura:



Aplicacin N 2
Disear un control ActiveX que muestre el mensaje Bienvenido al Mundo
de la Programacin con ActiveX. Adicionalmente, el control debe permitir al
usuario la posibilidad de cambiar el color del texto.
Para comenzar nuestra aplicacin, debe ingresar a Visual Basic y en la
ventana de dilogo Nuevo Proyecto seleccione Control ActiveX, y luego haga
click en el botn Aceptar.


327


Con esta opcin, podr crear un Control Active X. Las diferencias entre
una opcin y la usual (EXE estndar) las ver mejor conforme avance en el
desarrollo de la presente Prctica de Laboratorio.

En seguida aada un nuevo proyecto EXE estndar. Esto lo puede realizar
desde el Men Archivo opcin Agregar Proyecto. Luego establezca las
propiedades indicadas a continuacin:

Proyecto1
Nombre ActiveXMiControl

UserControl1
Nombre MiControl
ToolboxBitmap C:\Archivos de programa\Microsoft Visual
Studio\Common\Graphics\Bitmaps\Assorted\
Heart.bmp
Proyecto2
Nombre VbpMiControl

Form1
Nombre FrmPruebaMiControl
Caption Prueba de Control ActiveX
BorderStyle 3-Fixed Dialog

La ventana del Explorador de proyectos debe presentar la siguiente
apariencia:


328


En la ventana anterior haga click con el botn derecho del ratn sobre
MiControl y elija la opcin Ver cdigo. En el ComboBox General seleccione
UserControl y en el ComboBox Declaraciones seleccione Paint. Ahora ingrese el
siguiente cdigo:

Private Sub UserControl_Paint()
Const Msg = Bienvenido al Mundo de la Programacin & _
con ActiveX
UserControl.Cls
UserControl.Print Msg
End Sub
Luego en el Explorador de proyectos, hacer click con el botn derecho
del ratn sobre la carpeta Controles de usuario y seleccione la opcin
Propiedades de ActiveXMiControl. En seguida se mostrar la ventana Propiedades
del proyecto:



329

En la ventana anterior, en la ficha General, apartado Descripcin del
proyecto, escribir Este es mi primer Control ActiveX, tal como se muestra.
Luego pulsar el botn Aceptar.

Cierre todas las ventanas abiertas y haga un slo click sobre la carpeta
Controles de usuario. A continuacin ingrese al Men Archivo y seleccione la
opcin Generar ActiveXMiControl.ocx, guarde el archivo con su nombre por
defecto.

Luego, establezca como inicial el formulario FrmPruebaMiControl y aadir
desde el Cuadro de herramientas nuestro control recientemente creado.
Del Men Proyecto seleccione la opcin Componentes y veremos la
descripcin de nuestro control con su casilla de verificacin activada, tal
como se muestra a continuacin:



En seguida, guarde y ejecute su aplicacin. El resultado debe ser
similar al siguiente:



En este momento, Ud. acaba de terminar el diseo de su primer control
ActiveX. No se preocupe por las diferencias que puede haber encontrado con

330
respecto a la forma tradicional de programar. Conforme avancemos en el
desarrollo de la prctica veremos que esta forma de programar en base a
componentes es bastante sencilla.

Sin embargo, debemos modificar nuestro control, de tal forma que nos
permita cambiar el color de texto de presentacin. Para tal fin, vamos a hacer
uso del Asistente para interfaz de control ActiveX y el Asistente para pginas
de propiedades. Estos complementos deben ser instalados desde el men
principal Complementos y seleccionar la opcin Administrador de complementos,
tal como se indica a continuacin:



En la ventana anterior debe activar las casillas de verificacin
Cargado/Descargado y Cargar al iniciar. Luego haga click en el botn Aceptar.

En seguida el men Complementos deber presentar la siguiente
apariencia:


Luego, haga click sobre la opcin Asistente para interfaz de control
ActiveX. En seguida, aparecer una ventana de presentacin, haga doble click
en el botn Siguiente. Tendremos entonces una ventana similar a la que se
muestra:


331


Haga click con el ratn sobre el botn << y a continuacin elija de la
lista de la izquierda ForeColor y haga click sobre el botn >. 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:



332
Pulse, luego el botn Siguiente. En seguida aparecer otra ventana, haga
nuevamente click en el botn Siguiente.


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 botn Siguiente y en la siguiente ventana pulse el botn Finalizar.
Aparecer luego una ventana de informacin, lea detenidamente su contenido y
luego haga click en el botn Cerrar. A continuacin guarde su aplicacin y
genere nuevamente el control.

Para probar el control abra el formulario FrmPruebaMiControl y aada al
Cuadro de herramientas el componente Microsoft Common Dialog Control 6.0. En
seguida aada al formulario un MiControl, un CommonDialog y un CommandButton.
Cambie el nombre del botn Command1 por CmdAceptar e ingrese el siguiente
cdigo:

Private Sub CmdAceptar_Click()
CommonDialog1.ShowColor
MiControl1.ForeColor = CommonDialog1.Color
MiControl1.Visible = False
MiControl1.Visible = True
End Sub

Guarde y luego ejecute su aplicacin, el resultado ser similar al
siguiente:


333


Al hacer click sobre el botn Aceptar, se presenta la siguiente caja de
dilogo en la cual podemos elegir el nuevo color para el texto de bienvenida:



Preste atencin 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, deberamos hacerlo mediante cdigo dentro del mismo control,
pero por el momento y para probar como asociar una propiedad a un control es
ms que suficiente.

Aplicacin N 3
Disear un control ActiveX que presente la forma de un cuadro de texto,
pero que slo admita nmeros. Es decir, el usuario slo podr escribir en el
control nmeros, cualquier otro carcter que no sea un nmero, ser rechazado
por el control y no se imprimir en el cuadro de texto.

Al igual que en la aplicacin anterior crear el grupo de proyectos y
establezca las propiedades segn:
Proyecto1
Nombre ActiveXNumBox

UserControl1
Nombre NumBox
ToolboxBitmap C:\Archivos de programa\Microsoft Visual

334
Studio\Common\Graphics\Bitmaps\Assorted\
Diamond.bmp

Proyecto2
Nombre VbpNumBox

Form1
Nombre FrmPruebaNumBox
Caption Prueba de Control ActiveX
BorderStyle 3-Fixed Dialog

Para disear nuestro control utilizaremos un control TextBox el cual
debe insertar en el formulario NumBox (UserControl). Luego elimine el
contenido de la propiedad Text. Tener cuidado en que el control ha de ser del
mismo tamao del cuadro de texto. Luego, el cuadro de texto debe
redimensionarse de acuerdo al control en tiempo de diseo, esto es a la hora
de insertar nuestro control en un formulario. Para ello es necesario ingresar
el siguiente cdigo:

Private Sub UserControl_Resize()
Text1.Top = 0
Text1.Left = 0
Text1.Width = UserControl.Width
Text1.Height = UserControl.Height
End Sub

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 continuacin genere el control NumBox y cierre el formulario de diseo
del control. Establezca como inicial el proyecto VbpNumBox y aada un control
NumBox y un CommandButton al formulario FrmPruebaNumBox. Cambie el nombre del
botn de comando por CmdSalir. A continuacin guarde y ejecute su aplicacin,
el resultado debe ser similar al mostrado:



El control que acabamos de disear permite escribir nicamente nmeros,
es decir es un cuadro de nmeros. Trate de ingresar otros caracteres y vea lo
que sucede.

335

Aplicacin N 4
Crear un control ActiveX que permita el ingreso del da, mes y el ao
correspondiente a cualquier fecha desde el ao 1 hasta el ao 9999. Deber
validar la fecha ingresada y no deber permitir la edicin de fechas no
existentes como por ejemplo 5 de Setiembre de 1752. El control deber mostrar
el da de la semana correspondiente a la fecha ingresada, tal como se muestra
en la figura siguiente:



El calendario Gregoriano actual obedece a la reforma del calendario
Juliano que orden el papa Gregorio XIII en 1752, para ponerlo de acuerdo con
los movimientos de los cuerpos celestes. Lo cual trajo como consecuencia
adelantar las fechas del 2 de Setiembre al 14 de Setiembre de 1752, es decir
las fechas comprendidas en este intervalo de tiempo nunca existieron.







Microsoft Visual Basic
GUA DE LABORATORIO N 10

Objetivos
Luego de completar este laboratorio, el estudiante ser capaz de:

- - Crear documentos ActiveX que se ejecuten directamente en una pgina Web.
- - Utilizar documentos ActiveX que incorporan hipervnculos.
- - Desarrollar documentos ActiveX para interactuar con bases de datos
relacionales.

336

Consideraciones
Para el desarrollo del presente laboratorio Ud. deber crear una carpeta
C:\FundVB\Lab10, para guardar sus trabajos correspondientes a este
laboratorio.

Aplicacin N 1
Como primer ejercicio vamos a desarrollar un documento ActiveX que
permite recuperar informacin 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
disean de la misma manera que los formularios estndar de Visual Basic. Para
comenzar a desarrollar nuestro documento ActiveX, debe ingresar a Visual Basic
y en la ventana de dilogo Nuevo Proyecto seleccione EXE de documento ActiveX
y luego haga click en el botn Aceptar, tal como se indica en la figura:


A continuacin proceda a disear la siguiente interfaz de usuario:


337


Para tal efecto, proceda a ubicar los siguientes controles en el
formulario:
3 etiquetas
1 cuadro combinado
1 control DataGrid
1 botn de comandos

En seguida proceda a establecer las propiedades segn se indica:

Label1
Nombre LblTitulo1
AutoSize True
Caption Instituto de Educacin Superior
Font Arial (Negrita 12)
ForeColor &H00C00000&

Label2
Nombre LblTitulo2
AutoSize True
Caption Vctor Andrs Belande
Font Times New Roman (Negrita 24)
ForeColor &H000000FF&

Label3
Nombre LblTablas
AutoSize True
Caption Vacantes:
Font Arial (Negrita 10)

Combo1

338
Nombre CboTabla
Font Arial (Negrita 10)
Text

DataGrid1
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
cdigo:

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 Cdigo, & _
(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 Cdigo, & _
CurNombre As Nombre, & _
CurVacantes As Vacantes, & _
CurProfe As Profesor From Curso
Set DbgrdTabla.DataSource = RsCurso
End Sub

339

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 Cdigo, & _
LabHora As Horario, & _
LabProfe As [Jefe de prctica] From Laboratorio
Set DbgrdTabla.DataSource = RsLaboratorio
End Sub

Private Sub CmdMostrar_Click()
Select Case CboTabla.ListIndex
Case 0
Call MostrarAlumno
Case 1
Call MostrarCurso
Case 2
Call MostrarLaboratorio
End Select
End Sub

Finalmente guarde y pruebe su documento ActiveX. El resultado debe ser
similar a la figura que se muestra a continuacin:


Aplicacin N 2

340
Al documento ActiveX desarrollado en el ejercicio anterior, aadirle un
botn Acerca de, que presente la informacin referente al autor (o autores) de
la aplicacin. El diseo del formulario debe ser tal como se muestra a
continuacin:



En primer lugar proceda a aadir un formulario estndar al proyecto.
Cambie el nombre del formulario por el de FrmAcercaDe y disee la interfaz
pedida.

En seguida aada un botn de comandos al documento ActiveX y cambie su
nombre por CmdAcerca. Luego haga doble click sobre dicho botn e ingrese el
siguiente cdigo:

Private Sub CmdAcerca_Click()
Load FrmAcercaDe
FrmAcercaDe.Show vbModal
End Sub

Finalmente guarde y pruebe su aplicacin. Como puede apreciar
desarrollar documentos ActiveX no es nada complicado.
Aplicacin N 3
Al documento ActiveX desarrollado anteriormente aadirle un botn Ir a,
que permita enlazarnos con la direccin que se ingrese en el cuadro de texto
adjunto. El diseo del documento se muestra a continuacin:


341


Para lograr lo que se pide, aada un botn de comandos y un cuadro de
texto y cambie sus nombres por CmdURL y TxtURL respectivamente. Luego ingrese
el siguiente cdigo:

Private Sub CmdURL_Click()
UserDocument.Hyperlink.NavigateTo TxtURL
End Sub
Aplicacin N 4
Elaborar un documento ActiveX que permita mostrar el contenido de la
tabla Curso de la base de datos CursosLibres.MDB. A continuacin el usuario
selecciona un curso y tiene la posibilidad de separar la matrcula o en su
defecto matricularse en el curso de su eleccin. El diseo de la aplicacin
debe ser similar a la siguiente figura:


342


Sugerencia: Aadir una nueva tabla a la base de datos para registrar a los
alumnos matriculados o con separacin de matrcula.



Microsoft Visual Basic
GUA DE LABORATORIO N 11

Objetivos
Luego de completar este laboratorio, el estudiante ser capaz de:

- - Disear pginas Web dinmicas mediante aplicaciones DHTML.
- - Desarrollar aplicaciones DHTML para interactuar con los datos de un
sistema distribuido de bases de datos relacionales.
- - Implementar aplicaciones mediante cdigo Visual Basic y cdigo 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.

Aplicacin N 1
En este ejercicio, vamos a desarrollar una aplicacin DHTML que lea un
nmero entero y muestre su tabla de multiplicar.


343
En su forma ms sencilla, una aplicacin DHTML (Dynamic HyperText Markup
Language) puede consistir de una o ms pginas HTML enlazadas con cdigo
Visual Basic y el modelo de objetos HTML dinmico.

Para comenzar a desarrollar nuestra aplicacin, ingresar a Visual Basic
y en la ventana de dilogo Nuevo Proyecto seleccione Aplicacin DHTML, y haga
click en el botn Aceptar.



Al observar la ventana del Explorador de proyectos, esta presentar la
siguiente apariencia:



Visual Basic agrega automticamente un Diseador de pginas DHTML al
proyecto. En seguida, haga doble click sobre DHTMLPage1 y proceda a establecer
las propiedades que se indican:

DHTMLPage1
Nombre DHTMLTablaMultiplicar
Id DHTMLTablaMultiplicar

Para crear la interfaz de la aplicacin DHTML, simplemente tenemos que
ir agregando elementos HTML de la caja de herramientas. De esa manera, realice
el diseo de la pgina mostrada en la siguiente figura:


344


Una vez terminado el proceso de diseo de la pgina, seleccione el
encabezado Tabla de Multiplicar y haga click en el cuarto botn de la barra de
herramientas del Diseador (Ajustar la seleccin 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 continuacin proceda a establecer las propiedades para los dems
controles segn se indica:

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

345
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
TxtTabla.Value = S
Else
TxtTabla.Value =
End If
End Sub

Finalmente, guarde y pruebe su aplicacin DHTML. El resultado debe ser
similar a la figura siguiente:



Aplicacin N 2

346
Desarrollar una aplicacin DHTML que permita visualizar el contenido de
la tabla Curso de la base de datos CursosLibres.MDB. El diseo de la pgina
debe ser similar al mostrado:




Para desarrollar nuestra aplicacin, lo primero que debe de hacer es
abrir una nuevo proyecto DHTML. Luego debe crear la conexin a la base de
datos CursosLibres.MDB. Para ello ingrese al men Proyecto seleccione la
opcin Agregar Data Environment. En la ventana Data Environment cambie el
nombre del objeto DataEnvironment por DeCursosLibres y el de la conexin por
CnCursosLibres. Luego, aada un Comando y denomnelo CmCurso. Haga click
derecho sobre el comando y seleccione Propiedades. A continuacin seleccione
la opcin Instruccin SQL e ingrese el siguiente cdigo:

Select CurCodigo, CurNombre, CurVacantes, CurProfe From Curso



347


Luego haga click en el botn Aceptar. El aspecto de la ventana Data
Environment debe ser similar al siguiente:



En seguida proceda a disear la pgina. Para ello digite los encabezados
y etiquetas necesarios. Luego aada los siguientes controles HTML al diseador
de pginas DHTML:

4 cajas de texto
4 botones de comandos
A continuacin, proceda a establecer las propiedades segn se indica:

Vctor Andrs Belande
Id Titulo

TextField1
Nombre TxtCurCodigo
Id TxtCurCodigo
Value

348

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


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 pgina DHTML con un origen de datos cuando se
carga la pgina. Esto le permite modificar los datos y escribir cdigo para
actualizar un conjunto de registros subyacente o simplemente desplazarse a
travs de los mismos. Por ejemplo, puede usar un objeto BindingCollection con
un objeto Recordset de ADO para enlazar los elementos TextField de la pgina
de cdigo HTML con campos de la tabla Curso.

Para poder utilizar los objetos de la Microsoft Data Binding Collection
es necesario cargar la librera correspondiente. Selecciones el men Proyecto
y elija la opcin Referencias. En el cuadro de dilogo Referencias seleccione
la opcin Microsoft Data Binding Collection, tal como se indica en la figura:


349


A continuacin declare una variable de tipo BindingCollection en la
seccin de Declaraciones de la pgina DHTML y proceda a ingresar el cdigo
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
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

350
DeCursosLibres.rsCmCurso.MoveLast
End If
End Function

Private Function CmdUltimo_onclick() As Boolean
DeCursosLibres.rsCmCurso.MoveLast
End Function

Finalmente, guarde y pruebe su aplicacin.

Aplicacin N 3
Disear una aplicacin que permita cargar en una tabla HTML el contenido
de la tabla Curso. La tabla HTML se debe crear dinmicamente de acuerdo al
nmero de registros existentes.

Para desarrollar nuestra aplicacin, aada una nueva pgina DHTML al
proyecto anterior. Para ello seleccione el men Proyecto y elija la opcin
Agregar DHTML Page. En seguida proceda a ingresar el siguiente cdigo:
Dim ColBind As BindingCollection

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

Aplicacin N 4
Disear una aplicacin DHTML que permita seleccionar de un control
Select (similar a un cuadro combinado), el nombre de un profesor y a
continuacin se muestren en una tabla HTML dinmica 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 pgina HTML,
simplemente arrastrar el elemento a la pgina. A continuacin establecer las
siguientes propiedades:

Seleccion1
Nombre SelProfe

351
Id SelProfe
Value

Para especificar los elementos de lista que se deben mostrar en el
elemento Select agregar el siguiente cdigo al procedimiento de evento Load de
la pgina 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 aplicacin debe ser similar a la figura mostrada:



Finalmente a manera de ejercicio para el estudiante, proceda a escribir
el cdigo necesario para mostrar la informacin relacionada con cada profesor.

352













Microsoft Visual Basic
GUA 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.
- - Aadir un sistema de ayuda a una aplicacin.
- - Usar el asistente para empaquetado y distribucin.
- - Generar programas de instalacin mediante disquetes, carpetas en una
unidad local de red o en una publicacin Web.

Consideraciones
Para el desarrollo del presente laboratorio Ud. deber crear una carpeta
C:\FundVB\Lab12, para guardar sus trabajos correspondientes a este
laboratorio.

Aplicacin N 1
Un programador de aplicaciones Visual Basic, adems de conocer su
entorno de trabajo, debe conocer su entorno de programacin, conocido
generalmente como Interfaz de Programacin 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.
Las funciones API de Windows no son nada complicadas como pueden pensar
algunos programadores de Visual Basic.

Como primer ejercicio vamos a escribir una aplicacin que permita
modificar el ttulo de un formulario. En la prctica, siempre se modifican los
ttulos 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 aadir un mdulo de cdigo al proyecto. En
seguida proceda a declarar la funcin en la seccin de declaraciones del
mdulo:

Public Declare Function SetWindowText Lib user32 _
Alias SetWindowTextA (ByVal hWnd As Long, _

353
ByVal lpString As String) As Long

Luego, en el formulario ingrese el cdigo que se muestra a continuacin:

Private Sub Form_Load()
SetWindowText Form1.hWnd, Bienvenidos a la API de Windows
End Sub

Al ejecutar su aplicacin, su resultado debe ser similar a la siguiente
figura:



Aplicacin N 2
Desarrollar una aplicacin que permita reproducir un archivo Wav o Midi.
Utilizar la funcin API de Windows mciExecute para lograr el objetivo deseado.



Como se sabe, el lenguaje C diferencia las letras maysculas de las
minsculas. Por ello, si Ud. comete un error, por ejemplo utiliza una letra
mayscula en lugar de una minscula (o viceversa), la funcin declarada no
ser reconocida y obtendr un mensaje de error.

Para evitar este tipo de problemas, vamos a utilizar el Visor API de
Windows. En seguida, del men Complementos elija la opcin Administrador de
Complementos. Del cuadro de dilogo que se presenta cargar la opcin Visor de
API de VB 6. Al dar un click en el botn Aceptar, se aadir en el men
Complementos la opcin Visor de API.




354
En seguida ingrese al Visor de API. Se debe presentar una pantalla
similar a la siguiente:


En la pantalla anterior, seleccione el men Archivo y elija la opcin
Cargar archivo de texto. En el cuadro de dilogo que se presenta elegir el
archivo Win32api.Txt y dar un click en el botn Abrir.


De la siguiente pantalla Ud. podr seleccionar la funcin que desea,
luego active la opcin pblico y dar un click en el botn Agregar para
visualizar el cdigo de declaracin de dicha funcin.


355


En seguida haga click en el botn Copiar y pegue dicho cdigo a su
aplicacin. Recordar que la declaracin de la funcin API se debe realizar en
un mdulo, por lo tanto debe agregar un nuevo mdulo y pegar el siguiente
cdigo:

Public Declare Function mciExecute Lib winmm.dll _
(ByVal lpstrCommand As String) As Long

Luego proceda a disear la interfaz de la aplicacin. Para ello ubique
los siguientes controles:
1 control Image
2 botones de comando

En seguida establezca las propiedades segn se indica a continuacin:

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

356
Nombre CmdEjecutar
Caption &Ejecutar

Command2
Nombre CmdSalir
Caption &Salir

Una vez establecidas las propiedades, proceda a ingresar el siguiente
cdigo:

Private Sub CmdEjecutar_Click()
iResult = mciExecute(Play c:\vbN2\bmp\34.wav)
End Sub

Private Sub CmdSalir_Click()
Unload Me
End Sub
Aplicacin N 3
Uno de los temas en los que Windows ha creado un estndar es el sistema
de ayuda de las aplicaciones. Para ello incluye una aplicacin 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 programacin

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 lnea de texto y presione la
combinacin de teclas Ctrl + Enter, para comenzar en una nueva pgina. A
continuacin digite lo siguiente:
Microsoft Visual Basic 6.0
Curso de programacin


357
Profesor Carlos Castillo Peralta

Nivel I
- - Conceptos bsicos
- - 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 lnea de texto que acaba de
ingresar y pulse Ctrl + Enter para comenzar a digitar el siguiente texto en
una pgina diferente:

Microsoft Visual Basic 6.0
Curso de programacin

Profesor Carlos Castillo Peralta

Nivel II
- Creacin de bases de datos
- Aplicaciones Cliente Servidor
- Sentencias SQL
- Entorno de datos
- Objetos de Datos ActiveX (ADO)
- Reportes

Volver
De manera anloga a los dems casos, ubique el cursor en la ltima lnea
de texto y presione Ctrl + Enter. En seguida ingrese el siguiente texto:

Microsoft Visual Basic 6.0
Curso de programacin

Profesor Carlos Castillo Peralta

Nivel III
- Creacin componentes
- Lenguaje HTML
- Visual Basic Script
- Aplicaciones DHTML
- API de Windows
- Creacin de archivos de ayuda
- Empaquetado y distribucin

358

Volver

Finalmente, debe obtener un archivo de cuatro pginas. Guarde su archivo
como MiAyuda.RTF.

El archivo de ayuda que vamos a construir va a utilizar ms de una
pgina, y en ese caso se requiere especificar un identificador para cada
pgina.

Ahora procederemos a crear los identificadores de pginas. Para ello
ubicar el cursor en la primera pgina antes del encabezado Microsoft Visual
Basic 6.0 y seleccione del men Insertar la opcin Nota al pie. Luego,
ingresar como marca personal el smbolo # tal como se muestra en la siguiente
figura:



Al dar click en el botn Aceptar, el cursor se ubicar automticamente
en el pie de pgina donde debe digitar VBMain delante del smbolo #.

En la misma pgina, ubicar el cursor delante de la palabra Microsoft
Visual Basic Nivel I y darle el atributo de subrayado doble. Luego, escribir
VB1 inmediatamente despus del texto subrayado y a este identificador darle el
atributo de oculto.

Realizar acciones similares para las dos siguientes lneas, despus del
texto Microsoft Visual Basic Nivel II escribir VB2 y para Microsoft Visual
Basic Nivel III escribir VB3. No olvidar que estos identificadores deben tener
atributo de oculto.

En la segunda pgina ubicar el cursor antes del encabezado Microsoft
Visual Basic 6.0 y seleccione del men Insertar la opcin Nota al pie. Luego,
ingresar como marca personal el smbolo # y luego digitar en el pie de pgina
VB1. Luego en la misma pgina, posicionar el cursor delante de la palabra
Volver y darle el atributo de subrayado doble. Escribir VBMain inmediatamente
despus del texto subrayado y a este identificador darle el atributo de
oculto.
Continuar de manera similar con las siguientes pginas. Al concluir
vuelva a guardar su archivo. La primera pgina debe presentar una apariencia
similar a la siguiente figura:


359


Continuando con nuestro esquema, ahora debemos generar el archivo HLP a
partir del archivo RTF que acabamos de crear. Para ello debemos ejecutar la
aplicacin 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 aplicacin Help Workshop. A continuacin se presentar una
ventana similar a la mostrada en la siguiente figura:



360


Seleccione el men File y elija la opcin New. A continuacin se
mostrar un cuadro de dilogo similar al siguiente:



Seleccione la opcin Help Project y dar un click en el botn 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 botn Guardar, tal como se indica en la figura que se muestra a
continuacin:

361


Al hacer click en el botn Guardar, en seguida se presentar la
siguiente pantalla:



Ahora que Ud. ha creado un proyecto de ayuda, necesita agregar la
informacin sobre su archivo o archivos de ayuda.
Ha creado su archivo de ayuda MiAyuda.RTF? Si Ud. ya lo ha creado haga
click en el botn Files y en seguida aparecer la siguiente pantalla:


362


Luego dar un click en el botn 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 botn
Abrir.


En seguida se mostrar la siguiente pantalla. Ud. haga click sobre el
botn OK.


363


A continuacin se presentar una pantalla similar a la figura mostrada:


A continuacin vamos a definir una ventana. Para ello haga click sobre
el botn Windows. En seguida aparecer un cuadro de dilogo en el cual debe
ingresar el nombre de la ventana. Para nuestro caso digite Main. Luego haga
click en el botn OK.


364


En seguida se presentar el siguiente cuadro de dilogo. En la ficha
General ingrese el texto que se indica para la barra de ttulo de la ventana.


En la ficha Position defina el tamao inicial de la ventana de ayuda,
para ello haga click en el botn Auto-Sizer.


365


En seguida se presentar una ventana de prueba similar a la que se
muestra en la figura siguiente. Cambie las dimensiones de esta ventana segn
su parecer y haga click en el botn OK.


A continuacin seleccione la ficha Buttons y active los botones que Ud.
quiere agregar para su ventana.


366


Luego seleccione la ficha Color. En seguida se presentar una pantalla
similar a la siguiente:


Para cambiar el color de la zona de no desplazamiento o la zona de
desplazamiento pulse el botn Change al lado de la ventana de muestra. Escoja
el color que Ud. desee y entonces haga click en el botn Aceptar.

El archivo de proyecto debe presentar una apariencia similar a la figura
mostrada:


367


Bueno, Ud. acaba de crear su primer proyecto de ayuda bsico. Ms
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 botn Save and Compile. En seguida se presentar una pantalla similar a la
siguiente:



368


En seguida ingrese al men File y elija la opcin Run WinHelp. Luego, se
presentar una pantalla similar a la mostrada:


En seguida dar click en el botn View Help. A continuacin se presentar
una pantalla similar a la figura siguiente. Pruebe ingresando a las otras
pginas, para ello simplemente haga click en cualquiera de los tres tems que
se muestran en la seccin Contenido.


369


Sabe Ud. como aadir 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 pgina y aada el siguiente texto {BMC CCP.BMP} antes
del nombre del profesor. Luego guarde su archivo.

A continuacin cargue el Help Workshop. Luego dar click sobre el botn
Bitmaps. Se presentar una pantalla similar a la figura siguiente:



En seguida haga click en el botn Add. A continuacin se presentar una
ventana similar a la siguiente figura:


370


En el cuadro de dilogo anterior seleccione la ruta que se indica. Luego
haga click en el botn OK.

Finalmente, grabe y compile su proyecto de ayuda. Para ello dar click en
el botn View Help.
A continuacin se presentar una ventana similar a la siguiente figura:


371


Por ltimo, veremos como utilizar nuestros archivos de ayuda desde una
aplicacin Visual Basic. Para tal fin abra un nuevo proyecto y aada un botn
de comandos al formulario. Cambie el nombre del botn por CmdAyuda y proceda a
ingresar el siguiente cdigo:

Private Sub CmdAyuda_Click()
Dim Ayuda
Ayuda = Shell(C:\Windows\WinHelp.exe & _
C:\FundVB\Lab12\MiAyuda.HLP, 1)
End Sub
Aplicacin N 4
Despus de crear una aplicacin Visual Basic, por lo general debemos
proporcionrsela al usuario final, ya sea en disquetes, CD, a travs de una
red local, o bien a travs de una Intranet o Internet. Esto requiere primero
empaquetar la aplicacin y despus distribuirla.

Como ejemplo, vamos a generar el programa de instalacin para la
aplicacin creada en el ejercicio anterior. Para ello es necesario que tenga
abierta dicha aplicacin.

Primero debemos iniciar el Asistente de empaquetado y distribucin. Para
tal fin, del Men Complementos seleccione la opcin Administrador de
complementos y aada la utilidad Package and Deployment Wizard. Al momento de
iniciar el Asistente se visualizar una ventana similar a la siguiente figura:


372

En seguida haga click en el botn Empaquetar. Esto har que el Asistente
le presente varios cuadros de dilogo que le pedirn informacin referente al
proyecto que vamos a empaquetar y le permitir elegir qu opciones quiere
incorporar al programa de instalacin, el tipo de empaquetado, la carpeta
donde se almacenar el paquete de instalacin, qu archivos desea incluir
adicionalmente en el paquete, qu grupos y elementos de grupo del men Inicio
se debern crear en el equipo del usuario final durante la instalacin de la
aplicacin, etc. A medida que avanza, si necesita ms informacin consulte al
Jefe de Prctica.

Una vez concluido el proceso de empaquetado cierre Microsoft Visual
Basic. Luego haga click en el men Inicio y seleccione la opcin Ejecutar.
Seguidamente ingrese la ruta de nuestro programa de instalacin y dar click en
Aceptar, tal como se indica en la figura:



En esos instantes se dar inicio a la instalacin de nuestra aplicacin.
Concluido este proceso, seleccione el men Inicio, carpeta Programas y ubique
la carpeta que contiene la aplicacin. Finalmente proceda a ejecutar su
aplicacin.

También podría gustarte