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

Visual basic 0.6 rivera & g

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