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