1. Visual Basic - Curso completo teoria y practica
1. Visual Basic - Curso completo teoria y practica
1. Visual Basic - Curso completo teoria y practica
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
CAPÍTULO 1<br />
FUNDAMENTOS<br />
Microsoft <strong>Visual</strong> <strong>Basic</strong> es un conjunto de herramientas que<br />
posibilitan el desarrollo de aplicaciones para Windows de una<br />
manera rápida y sencilla, basado en el lenguaje BASIC y en la<br />
programación orientada a objetos.<br />
La palabra “<strong>Visual</strong>” hace referencia al método que se<br />
utiliza para crear la interfaz gráfica de usuario. En lugar de<br />
escribir numerosas líneas de código para implementar la<br />
interfaz, simplemente se utiliza el ratón para agregar objetos<br />
prefabricados en el lugar deseado dentro de la pantalla.<br />
La palabra “<strong>Basic</strong>” hace referencia al lenguaje BASIC<br />
(Beginners All-Purpose Symbolic Instruction Code), un lenguaje<br />
utilizado por más programadores que ningún otro lenguaje en la<br />
historia de la informática. <strong>Visual</strong> <strong>Basic</strong> ha evolucionado a<br />
partir del lenguaje BASIC original y ahora contiene centenares<br />
de instrucciones, funciones y palabras clave, muchas de las<br />
cuales están directamente relacionadas con la interfaz gráfica<br />
de Windows.<br />
El lenguaje de programación <strong>Visual</strong> <strong>Basic</strong> no es exclusivo<br />
de Microsoft <strong>Visual</strong> <strong>Basic</strong>. Este lenguaje es utilizado también<br />
por Microsoft Excel, Microsoft Access y muchas otras<br />
Pág. 1
aplicaciones Windows. El lenguaje de programación <strong>Visual</strong> <strong>Basic</strong><br />
Script para programar en Internet es un subconjunto del<br />
lenguaje <strong>Visual</strong> <strong>Basic</strong>. De tal forma, que la inversión realizada<br />
en el aprendizaje de <strong>Visual</strong> <strong>Basic</strong> le ayudará a abarcar estas<br />
otras áreas.<br />
EJECUTANDO VISUAL BASIC<br />
Si ya tiene instalado <strong>Visual</strong> <strong>Basic</strong>, para ejecutarlo<br />
proceda igual que con cualquier otra aplicación Windows: hacer<br />
click en el icono correspondiente.<br />
En seguida se presentará una ventana similar a la figura<br />
siguiente:<br />
Pág. 2
En la ventana anterior indicar el tipo de proyecto que<br />
desea crear (para nuestro caso seleccionar EXE estándar) y dar<br />
click sobre el botón “Abrir”. En ese instante se presentará el<br />
Entorno Integrado de Desarrollo (IDE) de <strong>Visual</strong> <strong>Basic</strong>:<br />
Los elementos que componen el IDE de <strong>Visual</strong> <strong>Basic</strong> son:<br />
• Barra de menús • Barra de herramientas<br />
• Cuadro de herramientas • Diseñador de formularios<br />
• Explorador de proyectos • Ventana de propiedades<br />
• Posición del formulario • Menús contextuales<br />
Barra de menús<br />
Pág. 3
Presenta las órdenes que se utilizan para desarrollar una<br />
aplicación. Las opciones más utilizadas son: Archivo, Edición,<br />
Ver, Ventana y Ayuda. Se proporcionan otros menús para tener<br />
acceso a funciones específicas de programación como Proyecto,<br />
Formato o Depuración.<br />
Barra de herramientas<br />
Facilita el acceso rápido a las órdenes más comúnmente<br />
utilizadas. Omitimos el significado de cada botón porque le<br />
será mostrado al pasar el puntero del ratón sobre cada uno de<br />
ellos.<br />
Puede visualizar otras barras de herramientas ejecutando<br />
la opción Barra de herramientas del Menú Ver.<br />
Cuadro de herramientas<br />
Proporciona un conjunto de herramientas que permiten<br />
diseñar la interfaz gráfica de usuario.<br />
Pág. 4
Icono Descripción<br />
Puntero<br />
Cuadro de imagen<br />
Etiqueta<br />
Cuadro de texto<br />
Marco<br />
Botón de comando<br />
Casilla de verificación<br />
Botón de opción<br />
Cuadro combinado<br />
Cuadro de lista<br />
Barra de desplazamiento horizontal<br />
Barra de desplazamiento vertical<br />
Cronómetro<br />
Cuadro de lista de unidades<br />
Cuadro de lista de directorios<br />
Cuadro de lista de archivos<br />
Formas<br />
Líneas<br />
Imagen<br />
Contenedor OLE<br />
Pág. 5
Para utilizar algún objeto simplemente debe hacer doble<br />
click sobre el icono correspondiente, luego puede cambiar su<br />
posición y sus dimensiones.<br />
Diseñador de formularios<br />
Es la ventana sobre la que colocaremos los objetos<br />
(controles) de la interfaz de usuario.<br />
Explorador de proyectos<br />
Contiene el conjunto de archivos que constituyen la<br />
aplicación o proyecto.<br />
Pág. 6
Ventana de propiedades<br />
Como veremos más adelante, cada objeto lleva asociado un<br />
conjunto de propiedades. Para ver o especificar los valores de<br />
las propiedades de los objetos, utilizaremos la ventana de<br />
propiedades.<br />
Posición del formulario<br />
Esta ventana le permite especificar la posición de los<br />
formularios de la aplicación.<br />
Menús contextuales<br />
Pág. 7
Es un menú emergente que presenta órdenes específicas<br />
relativas a un determinado objeto. Para abrir un menú<br />
contextual, dar click derecho sobre el objeto. Por ejemplo, al<br />
dar click derecho sobre el formulario se presenta el siguiente<br />
menú contextual.<br />
Ventana de código<br />
Se presenta cuando se hace doble click sobre un objeto que<br />
se encuentra en el Diseñador de formularios. Esta ventana<br />
muestra dos cuadros combinados (combos) en la parte superior,<br />
en una aparece el nombre del objeto (izquierda) y en la otra el<br />
nombre del evento (derecha).<br />
Pág. 8
MI PRIMERA APLICACIÓN<br />
Hay tres pasos principales para crear una aplicación en<br />
<strong>Visual</strong> <strong>Basic</strong>:<br />
• Crear la interfaz.<br />
• Establecer propiedades.<br />
• Escribir el código.<br />
Para ver como se realiza esto, siga los pasos del<br />
siguiente ejemplo para crear una aplicación sencilla que<br />
consiste en un formulario y un botón de comando. Cuando haga<br />
click en el botón de comando aparecerá el mensaje “<strong>Visual</strong> <strong>Basic</strong><br />
es fácil” en un cuadro de diálogo predefinido.<br />
Creación de la interfaz<br />
Para el desarrollo del presente ejemplo proceda a crear<br />
una nueva aplicación. En seguida añadir un botón de comando al<br />
formulario, para ello en el Cuadro de herramientas, dar doble<br />
click sobre el control deseado, tal como se indica en la figura<br />
siguiente:<br />
Pág. 9
mostrada:<br />
La apariencia de la interfaz debe ser similar a la figura<br />
Estableciendo las propiedades<br />
Para ver las propiedades de un objeto, simplemente debe<br />
seleccionarlo y pulsar la tecla F4. Por ejemplo la figura<br />
siguiente muestra las propiedades del botón de comando y<br />
podemos ver que la propiedad Caption tiene el valor “Command1”.<br />
Pág. 10
Puede cambiar el valor de cualquier propiedad<br />
seleccionándolo de la ventana anterior y simplemente<br />
modificando su valor, por ejemplo para el caso anterior<br />
establezca el valor de la propiedad Caption de “Command1” a<br />
“Haga click aquí”.<br />
De manera similar proceda cambiar la propiedad Caption del<br />
formulario a “Mi primera aplicación”. La apariencia de la<br />
interfaz debe ser similar a la figura mostrada:<br />
Pág. 11
Escribiendo el código<br />
Para ingresar el código a la aplicación debe dar doble<br />
click sobre el control al cual asociaremos dicho código. Para<br />
nuestro caso dar doble click sobre el botón de comando e<br />
ingresar el código que se indica a continuación:<br />
Para guardar la aplicación que acaba de crear, seleccione<br />
la opción Guardar Proyecto del Menú Archivo.<br />
Bueno, ahora sólo falta que ejecute su aplicación. Para<br />
ello simplemente debe pulsar la tecla F5. El resultado debe ser<br />
similar al siguiente:<br />
Pág. 12
CAPÍTULO 2<br />
LOS OBJETOS<br />
<strong>Visual</strong> <strong>Basic</strong> se basa en la programación orientada a<br />
objetos (POO), la cual es una forma de programación que utiliza<br />
objetos (similares a los objetos del mundo real) para la<br />
solución de problemas. La POO permite descomponer un problema<br />
en bloques relacionados. Cada bloque pasa a ser un objeto<br />
autocontenido que contiene sus propios datos e instrucciones.<br />
De esta manera, la complejidad se reduce y se pueden realizar<br />
programas más largos de una manera sencilla.<br />
MECANISMOS BÁSICOS DE LA POO<br />
Los mecanismos básicos de la programación orientada a<br />
objetos son:<br />
• Objetos<br />
• Propiedades<br />
• Métodos<br />
• Eventos<br />
• Mensajes<br />
• Clases<br />
Pág. 13
Objetos<br />
Un objeto es una entidad que tiene atributos particulares<br />
(propiedades) y unas formas de operar sobre ellos (métodos).<br />
Por tanto, un objeto contiene variables que especifican su<br />
estado y operaciones que definen su comportamiento.<br />
Son ejemplos de objetos: formularios, botones de comando,<br />
cuadros de texto, etiquetas, etc.<br />
Propiedades<br />
Las propiedades representan las características del<br />
objeto. Hay propiedades particulares, como Caption que la<br />
poseen los botones de comando por ejemplo, y genéricas como<br />
Name que la poseen todos lo objetos.<br />
Métodos<br />
Los métodos son procedimientos asociados a un objeto. Se<br />
ejecutan como respuesta a un evento, por ejemplo al dar click<br />
en un botón de comando. También pueden ser invocados<br />
explícitamente en el programa.<br />
Eventos<br />
Un evento es la capacidad de un objeto de reaccionar<br />
cuando ocurre una determinada acción (acción y reacción). Como<br />
respuesta a un evento se envía un mensaje y se ejecuta un<br />
determinado método (procedimiento).<br />
Pág. 14
Mensajes<br />
Un mensaje es una llamada a un método (procedimiento), de<br />
tal forma que cuando un objeto recibe un mensaje la respuesta a<br />
ese mensaje es ejecutar el procedimiento asociado.<br />
Cuando se ejecuta un programa orientado a objetos, los<br />
objetos están constantemente recibiendo, interpretando y<br />
respondiendo a mensajes de otros objetos.<br />
Clases<br />
Una clase es una descripción para producir objetos de esa<br />
clase o tipo. Es decir se trata de una generalización de un<br />
tipo específico de objetos. En otras palabras, un objeto es una<br />
variable del tipo definido por una clase. Por ejemplo, piense<br />
en un molde para hacer pasteles, el molde es la clase y los<br />
pasteles los objetos.<br />
CARACTERÍSTICAS DE LA POO<br />
Las características fundamentales de la programación<br />
orientada a objetos son:<br />
• Abstracción<br />
• Encapsulamiento<br />
• Herencia<br />
• Polimorfismo<br />
Pág. 15
Abstracción<br />
La abstracción permite no detenernos en los detalles<br />
concretos del funcionamiento de las cosas, sino centrarnos en<br />
los aspectos que realmente nos importan y nos son útiles en un<br />
determinado momento, en cierta medida, se podría decir que es<br />
“úsese el objeto y olvídese de como funciona en forma interna”.<br />
Por ejemplo, para manejar una computadora no necesitamos<br />
saber como funcionan sus circuitos electrónicos, en términos de<br />
corriente, tensión, etc.<br />
Encapsulamiento<br />
Esta característica permite ver un objeto como una “caja<br />
negra” autocontenida en la que se ha metido de alguna manera<br />
toda la información que maneja dicho objeto. Esto permite<br />
manipular los objetos como unidades básicas, permaneciendo<br />
oculta su estructura interna.<br />
Herencia<br />
La herencia es la característica que permite compartir<br />
automáticamente propiedades y métodos entre objetos. Es decir,<br />
se pueden crear nuevas clases de objetos en base a clases<br />
existentes. Más concreto, un objeto puede heredar un conjunto<br />
general de propiedades y métodos a las que puede añadir<br />
Pág. 16
aquellas características que son específicas suyas. El usuario<br />
de <strong>Visual</strong> <strong>Basic</strong> no dispone de esta característica.<br />
Polimorfismo<br />
Polimorfismo, del griego cuyo significado es “muchas<br />
formas”, es la característica que permite implementar múltiples<br />
formas de un mismo método, dependiendo cada una de ellas de la<br />
clase sobre la que se realiza la implementación. Esto hace<br />
posible que se puede acceder a una variedad de métodos<br />
distintos (todos con el mismo nombre) utilizando exactamente el<br />
mismo medio de acceso.<br />
LOS OBJETOS DE VISUAL BASIC<br />
<strong>Visual</strong> <strong>Basic</strong> soporta la abstracción, la encapsulación, el<br />
polimorfismo y la reutilización de código.<br />
La reutilización de código es la capacidad de trasladar<br />
características de un objeto a otro, lo que se logra con alguna<br />
forma de herencia. Esto se consigue mediante la creación y uso<br />
del objeto.<br />
Los objetos de <strong>Visual</strong> <strong>Basic</strong> están divididos en dos tipos:<br />
controles y contenedores.<br />
Los controles son un medio gráfico que permiten a los<br />
usuarios interactuar con la aplicación para la manipulación de<br />
datos y ejecución de tareas. Son ejemplo de controles:<br />
etiquetas, cuadros de texto, botones de comando, casillas de<br />
Pág. 17
verificación, botones de opción, cuadros de lista, cuadros<br />
combinados, etc.<br />
Los contenedores son objetos que pueden incluir otros<br />
objetos y permiten el acceso a los objetos que contienen. Entre<br />
los más utilizados tenemos a los formularios, marcos y<br />
cuadrículas.<br />
El formulario más los controles constituyen la interfaz de<br />
la aplicación.<br />
REFERENCIANDO OBJETOS<br />
La sintaxis para referenciar objetos es la siguiente:<br />
OBJETO.PROPIEDAD = VALOR<br />
Por ejemplo, para establecer el título de un formulario a<br />
“<strong>Visual</strong> <strong>Basic</strong> es fácil”, la orden sería:<br />
Form<strong>1.</strong>Caption = “<strong>Visual</strong> <strong>Basic</strong> es fácil”<br />
LOS EVENTOS<br />
Cada objeto responde a un conjunto de eventos. Como<br />
respuesta a un evento se ejecuta un determinado procedimiento.<br />
Los procedimientos asociados a un evento presentan la forma:<br />
Private Sub OBJETO_EVENTO()<br />
End Sub<br />
SENTENCIAS<br />
Pág. 18
Para aclarar este concepto desarrollaremos la siguiente<br />
aplicación, la cual consiste en un formulario, un cuadro de<br />
texto y un botón de comando. El usuario debe ingresar un<br />
mensaje en el cuadro de texto y al pulsar el botón de comando,<br />
el mensaje recientemente ingresado, se coloca como título del<br />
formulario.<br />
Para ello proceda a construir la interfaz mostrada en la<br />
figura anterior. Luego, dar doble click sobre el botón de<br />
comando e ingrese el siguiente código:<br />
Private Sub Command1_Click()<br />
End Sub<br />
Form<strong>1.</strong>Caption = Text<strong>1.</strong>Text<br />
Seguidamente guarde y proceda ejecutar su aplicación. Como<br />
puede verificar, el evento Click se dispara cada vez que el<br />
usuario pulsa (hace click) sobre un control.<br />
CONVENCIÓN DE NOMBRES PARA LOS OBJETOS<br />
Pág. 19
La convención a seguir en la presente guía - para dar<br />
nombre a los objetos - consiste en utilizar ciertos prefijos,<br />
los cuales indicaran el tipo de objeto del que se trata.<br />
Prefijo Objeto<br />
Frm Formulario<br />
Fra Marco<br />
Lbl Etiqueta<br />
Txt Cuadro de texto<br />
Cmd Botón de comando<br />
Chk Casilla de verificación<br />
Opt Botón de opción<br />
Lst Cuadro de lista<br />
Cbo Cuadro combinado<br />
Tim Cronómetro<br />
HS Barra de desplazamiento horizontal<br />
VS Barra de desplazamiento vertical<br />
Pic Cuadro de imagen<br />
Img Imagen<br />
Drv Cuadro de lista de unidades<br />
Dir Cuadro de lista de directorios<br />
Fil Cuadro de lista de archivos<br />
Ole Contenedor OLE<br />
Grd Cuadrícula<br />
Pág. 20
Gra Gráfico<br />
Ctr Control (se utiliza en procedimientos cuando<br />
el tipo de control es desconocido)<br />
CAPÍTULO 3<br />
EL LENGUAJE<br />
<strong>Visual</strong> <strong>Basic</strong> es un lenguaje de programación basado en el<br />
lenguaje BASIC, al cual incorpora la funcionalidad de la<br />
programación orientada a objetos.<br />
El código de <strong>Visual</strong> <strong>Basic</strong> se almacena en módulos, donde<br />
cada módulo está subdividido en distintas secciones, una para<br />
cada objeto del módulo. Cada sección de código puede contener<br />
uno o más procedimientos, formados por declaraciones de<br />
constantes y variables, expresiones, sentencias de control y<br />
llamadas a procedimientos y/o funciones.<br />
En este capítulo vamos a analizar los diferentes elementos<br />
que intervienen al momento de realizar el código para una<br />
aplicación.<br />
TIPOS DE DATOS<br />
Los datos con los que trabajaremos probablemente incluyan<br />
información relacionada con números, dinero, nombres,<br />
Pág. 21
descripciones, fechas, etc. Cada dato corresponde a un<br />
determinado tipo, es decir, pertenece a una categoría de datos<br />
que se manipulan de maneras similares.<br />
Tipo Descripción Rango<br />
Integer Entero (2 bytes) -32768 a 32767<br />
Long Entero largo (4 bytes) -2147483648 a<br />
Single Punto flotante de simple<br />
precisión (4 bytes)<br />
Double Punto flotante de doble<br />
precisión (8 bytes)<br />
Currency Monetario (8 bytes) +/-<br />
2147483647<br />
-3.40E+38 a<br />
3.40E+38<br />
-<strong>1.</strong>79D+308 a<br />
<strong>1.</strong>79D+308<br />
Byte Carácter (1 byte) 0 a 255<br />
String Cadena de caracteres (1<br />
byte por carácter)<br />
922337203685477.5807<br />
Aproximadamente<br />
hasta 64K (65400<br />
caracteres)<br />
Boolean Lógico (2 bytes) True o False<br />
Date Fecha/Hora (8 bytes) 01/ENERO/100 a<br />
Variant<br />
(por omisión)<br />
31/DICIEMBRE/9999<br />
Cualquier tipo de dato Con números hasta el<br />
intervalo de un tipo<br />
Double.<br />
Con caracteres 22<br />
Pág. 22
IDENTIFICADORES<br />
bytes + 1 byte por<br />
carácter<br />
Los identificadores son nombres dados a los elementos de<br />
una aplicación, tales como constantes, variables,<br />
procedimientos, funciones, objetos, etc. Un identificador es<br />
una secuencia de caracteres que puede ser de hasta 255<br />
caracteres. Para la construcción de identificadores debemos<br />
tener presente las siguientes reglas:<br />
• Deben comenzar con una letra y no puede contener espacios en<br />
blanco.<br />
• Letras, dígitos y caracteres subrayados están permitidos<br />
después del primer carácter.<br />
• No se puede utilizar una palabra reservada como<br />
identificador. Una palabra reservada tiene un significado<br />
especial para <strong>Visual</strong> <strong>Basic</strong>.<br />
CONSTANTES<br />
Una constante almacena un dato cuyo valor no cambia<br />
durante la ejecución de un programa. Para declarar una<br />
constante utilice la siguiente sintaxis:<br />
Const NOMBRE_CONSTANTE [As TIPO] = VALOR<br />
Pág. 23
Si no se declara el tipo de constante (utilizando As TIPO)<br />
se asigna a la constante el tipo de dato más apropiado a su<br />
valor.<br />
El valor de una constante puede ser numérico,<br />
alfanumérico, carácter o de tipo fecha y hora. Por ejemplo:<br />
VARIABLES<br />
Const MAXIT = 25<br />
Const PI As Double = 3.141592<br />
Const CADENA As String = “<strong>Visual</strong> <strong>Basic</strong> es fácil”<br />
Const FECHA_POR_DEFECTO = #01/01/99#<br />
Una variable almacena un dato cuyo valor puede cambiar<br />
durante la ejecución de un programa. Para declarar una variable<br />
utilice la siguiente sintaxis:<br />
Dim NOMBRE_VARIABLE [As TIPO]<br />
Cuando se declara una variable y no se especifica su tipo<br />
(con As TIPO), se asume que es de tipo Variant.<br />
La instrucción Dim puede realizar más de una declaración,<br />
teniendo en cuenta que la cláusula opcional As TIPO le permite<br />
definir el tipo de dato de cada variable que vaya a declarar.<br />
Por ejemplo:<br />
Dim X, Y As Integer<br />
Pág. 24
La sentencia anterior le puede inducir a pensar que X e Y<br />
son de tipo Integer, lo cual no es cierto, pues X es de tipo<br />
Variant (por omisión) e Y es de tipo Integer.<br />
sintaxis:<br />
Para asignar valores a una variable, utilizar la siguiente<br />
NOMBRE_VARIABLE = VALOR<br />
A manera de ejemplo considere lo siguiente:<br />
Dim CANTIDAD As Integer, PRECIO As Double, TOTAL As Double<br />
CANTIDAD = 30<br />
PRECIO = <strong>1.</strong>5<br />
TOTAL = CANTIDAD * PRECIO<br />
OPERADORES<br />
Los operadores son símbolos que indican cómo serán<br />
manipulados los operandos. Los operandos son los datos<br />
(constantes y/o variables) sobre los que actúa los operadores<br />
para producir un determinado resultado.<br />
Operadores aritméticos<br />
Operador Significado<br />
^ Exponenciación<br />
- Menos unario<br />
Pág. 25
* / Multiplicación y división<br />
\ División entera<br />
Mod Resto de una división entera<br />
+ - Suma y resta<br />
Operadores relacionales<br />
Operador Significado<br />
= Igual que<br />
<br />
<<br />
><br />
<br />
Diferente que<br />
Menor que<br />
Mayor que<br />
Operadores lógicos<br />
Menor o igual que<br />
Mayor o igual que<br />
Operador Significado<br />
Not Negación<br />
And Conjunción<br />
Or Disyunción inclusiva<br />
Xor Disyunción exclusiva<br />
Eqv Equivalencia (opuesto a Xor)<br />
Imp Implicación (falso si primer operando<br />
verdadero y segundo operando falso)<br />
Pág. 26
Operadores de cadenas de caracteres<br />
Operador Significado<br />
&<br />
Concatenación<br />
Like Compara dos cadenas de caracteres<br />
SENTENCIAS<br />
Una sentencia es una línea de código que indica una o más<br />
operaciones a realizar. Una línea puede incluir varias<br />
sentencias, separadas unas de otras por dos puntos. Por<br />
ejemplo:<br />
Dim CANTIDAD As Integer, PRECIO As Double, TOTAL As Double<br />
CANTIDAD = 30 : PRECIO = <strong>1.</strong>5 : TOTAL = CANTIDAD * PRECIO<br />
Una sentencia <strong>Visual</strong> <strong>Basic</strong> puede escribirse en más de una<br />
línea física utilizando el carácter de continuación de línea<br />
(un espacio en blanco seguido del carácter de subrayado). Por<br />
ejemplo:<br />
Dim CH4_ENTRADA As Double, CH4_SALIDA As Double, _<br />
CH4_GENERA As Double, CH4_CONSUME AS Double<br />
ENTRADA Y SALIDA DE DATOS<br />
<strong>Visual</strong> <strong>Basic</strong> posee una serie de objetos (controles) que<br />
pueden ser utilizados como mecanismos de entrada y salida (E/S)<br />
de datos. Sin embargo, estos serán estudiados en capítulos<br />
posteriores.<br />
Pág. 27
Otra posibilidad de proporcionar datos o de visualizarlos<br />
durante la ejecución de una aplicación es utilizando cajas de<br />
diálogos predefinidas. Debido a que esta es la forma más simple<br />
de realizar la E/S de datos nos ocuparemos de ella.<br />
Entrada de datos<br />
La entrada de datos permite proporcionar valores durante<br />
la ejecución de una aplicación. Estos valores son ingresados<br />
generalmente mediante el teclado y asignados a variables del<br />
programa. En <strong>Visual</strong> <strong>Basic</strong> una forma de ingresar datos a la<br />
aplicación es utilizando la caja de diálogo predefinida<br />
provista por la función InputBox. Su sintaxis es la siguiente:<br />
VARIABLE = InputBox(MENSAJE [, TÍTULO] [, PREDETERMINADO])<br />
Donde MENSAJE es el mensaje que indica al usuario el tipo<br />
de información que debe ingresar. Por ejemplo, las sentencias:<br />
Dim EDAD As Integer<br />
EDAD = InputBox(“Ingrese su edad?”)<br />
Da lugar a que <strong>Visual</strong> <strong>Basic</strong> presente la siguiente caja de<br />
diálogo solicitando la información requerida:<br />
Pág. 28
Como puede observar, el resto de los parámetros son<br />
opcionales. TÍTULO es el texto que se muestra en la barra de<br />
título del cuadro de diálogo, si se omite TÍTULO, el nombre de<br />
la aplicación es la que se muestra en la barra de título.<br />
PREDETERMINADO es una expresión de cadena que aparece en el<br />
cuadro de texto como respuesta predeterminada si no se<br />
proporciona ningún otro texto. Si se omite PREDETERMINADO el<br />
cuadro de texto se muestra vacío. A manera de ejemplo considere<br />
lo siguiente:<br />
Dim EDAD As Integer<br />
EDAD = InputBox(“Ingrese su edad?”, “Ficha de datos”, 18)<br />
En este caso se visualiza la caja de diálogo que se<br />
presenta en la figura siguiente:<br />
Pág. 29
Salida de datos<br />
La salida de datos generalmente consiste en tomar la<br />
información de la memoria y mostrarla en pantalla. Para<br />
realizar la operación de salida de datos en <strong>Visual</strong> <strong>Basic</strong>,<br />
podemos utilizar el procedimiento MsgBox, cuya sintaxis es como<br />
sigue:<br />
MsgBox MENSAJE [, ICONO, TÍTULO]<br />
MENSAJE es La cadena que se muestra como salida en la caja<br />
de diálogo. ICONO es se refiere al estilo de icono que se va ha<br />
utilizar y TÍTULO es una texto que se mostrará en la barra de<br />
título de la caja de diálogo. Por ejemplo:<br />
Dim EDAD As Integer<br />
EDAD = InputBox(“Ingrese su edad?”)<br />
EDAD = EDAD + 10<br />
MsgBox “Dentro de 10 años su edad será:” & Str(EDAD)<br />
Si ejecuta el código anterior e ingresa su edad (en mi<br />
caso 29 años) la salida debe ser similar a la figura siguiente:<br />
Pág. 30
Para que pueda ejecutar el código anterior, proceda a<br />
crear una nueva aplicación y haga doble click sobre el<br />
formulario, luego ingrese el código anterior:<br />
Private Sub Form_Load()<br />
Dim EDAD As Integer<br />
EDAD = InputBox(“Ingrese su edad?”)<br />
EDAD = EDAD + 10<br />
MsgBox “Dentro de 10 años su edad será:” & Str(EDAD)<br />
End Sub<br />
A manera de observación cabe señalar que la función Str()<br />
se utiliza para convertir una expresión numérica a una cadena<br />
de caracteres.<br />
ESTRUCTURAS DE CONTROL<br />
Las estructuras de control permiten tomar decisiones y<br />
realizar un proceso repetidas veces (procesos iterativos). Para<br />
ello <strong>Visual</strong> <strong>Basic</strong> dispone de las siguientes estructuras de<br />
control: If . . . Then . . . Else, If . . . Then . . . ElseIf,<br />
Select Case, For . . . Next, While . . . . Wend, Do . . . Loop<br />
y GoTo.<br />
Estructura If . . . Then . . . Else<br />
Este tipo de estructura evalúa una determinada condición y<br />
en función a ello ejecuta uno de entre dos posibles grupos de<br />
sentencias. Su sintaxis es la siguiente:<br />
Pág. 31
If CONDICIÓN Then<br />
Else<br />
End If<br />
SENTENCIAS_VERDADERAS<br />
SENTENCIAS_FALSAS<br />
Si CONDICIÓN es verdadera se ejecuta el grupo de<br />
SENTENCIAS_VERDADERAS. Si CONDICIÓN es falsa se ejecuta el<br />
grupo de SENTENCIAS_FALSAS.<br />
Por ejemplo, el siguiente código determina si un entero A<br />
es o no divisible por otro entero B:<br />
Dim A As Integer, B As Integer<br />
A = InputBox(“Ingrese A?”)<br />
B = InputBox(“Ingrese B?”)<br />
If A Mod B = 0 Then<br />
Else<br />
End If<br />
MsgBox Str(A) & “ es divisible por ” & Str(B)<br />
MsgBox Str(A) & “ no es divisible por ” & Str(B)<br />
Estructura If . . . Then . . . ElseIf<br />
Este tipo de estructura se utiliza para elegir una de<br />
entre múltiples alternativas. Su sintaxis es como sigue:<br />
If CONDICIÓN_1 Then<br />
Pág. 32
SENTENCIAS_1<br />
ElseIf CONDICIÓN_2 Then<br />
Else<br />
SENTENCIAS_2<br />
.<br />
.<br />
.<br />
SENTENCIAS_FALSAS<br />
End If<br />
Si CONDICIÓN_1 es verdadera se ejecuta el grupo de<br />
SENTENCIAS_1, y si es no se cumple, se evalúan secuencialmente<br />
las condiciones siguientes hasta Else, ejecutándose las<br />
sentencias correspondientes al primer ElseIf cuya condición sea<br />
verdadera. Si todas las condiciones son falsas, se ejecutan las<br />
SENTENCIAS_FALSAS correspondientes a Else.<br />
Por ejemplo considere el siguiente código, el cual imprime<br />
el nombre del mes correspondiente a los números del 1 al 12.<br />
Dim N As Integer<br />
N = InputBox(“Ingrese N?”)<br />
If N = 1 Then<br />
MsgBox “Enero”<br />
ElseIf N = 2 Then : MsgBox “Febrero”<br />
ElseIf N = 3 Then : MsgBox “Marzo”<br />
ElseIf N = 4 Then : MsgBox “Abril”<br />
ElseIf N = 5 Then : MsgBox “Mayo”<br />
Pág. 33
ElseIf N = 6 Then : MsgBox “Junio”<br />
ElseIf N = 7 Then : MsgBox “Julio”<br />
ElseIf N = 8 Then : MsgBox “Agosto”<br />
ElseIf N = 9 Then : MsgBox “Setiembre”<br />
ElseIf N = 10 Then : MsgBox “Octubre”<br />
ElseIf N = 11 Then : MsgBox “Noviembre”<br />
ElseIf N = 12 Then : MsgBox “Diciembre”<br />
Else : MsgBox “Error de datos”<br />
End If<br />
Estructura Select Case<br />
Este estructura es una alternativa a la estructura<br />
If . . . Then . . . ElseIf, cuando lo que necesita es comparar<br />
la misma expresión con diferentes valores. Su sintaxis es la<br />
siguiente:<br />
Select Case EXPRESIÓN_TEST<br />
End Select<br />
Case EXPRESIÓN_1<br />
SENTENCIAS_1<br />
Case EXPRESIÓN_2<br />
SENTENCIAS_2<br />
.<br />
.<br />
.<br />
Case Else<br />
SENTENCIAS_FALSAS<br />
Pág. 34
En este caso se comprueba el valor de EXPRESIÓN_TEST<br />
frente a la lista expresiones EXPRESIÓN_1, EXPRESIÓN_2, . . . y<br />
así sucesivamente, y busca el primer Case que incluya el valor<br />
evaluado en EXPRESIÓN_TEST, ejecutando a continuación el bloque<br />
de sentencias correspondiente. Si no existe un valor igual a<br />
EXPRESIÓN_TEST, entonces se ejecuta las SENTENCIAS_FALSAS<br />
correspondientes al Case Else.<br />
A manera de ejemplo vamos a codificar el programa de la<br />
sección anterior el cual imprime el nombre del mes<br />
correspondiente a los números del 1 al 12. Pero en esta vez<br />
utilizaremos la estructura Select Case (compare con cual de<br />
ambas estructuras es más cómodo trabajar).<br />
Dim N As Integer<br />
N = InputBox(“Ingrese N?”)<br />
Select Case N<br />
Case 1 : MsgBox “Enero”<br />
Case 2 : MsgBox “Febrero”<br />
Case 3 : MsgBox “Marzo”<br />
Case 4 : MsgBox “Abril”<br />
Case 5 : MsgBox “Mayo”<br />
Case 6 : MsgBox “Junio”<br />
Case 7 : MsgBox “Julio”<br />
Case 8 : MsgBox “Agosto”<br />
Case 9 : MsgBox “Setiembre”<br />
Pág. 35
Case 10 : MsgBox “Octubre”<br />
Case 11 : MsgBox “Noviembre”<br />
Case 12 : MsgBox “Diciembre”<br />
Case Else<br />
End Select<br />
MsgBox “Error de datos”<br />
Cabe destacar que Select Case también se puede utilizar de<br />
la siguiente manera:<br />
Dim X As Integer<br />
X = InputBox(“Ingrese X?”)<br />
Select Case X<br />
Case 1<br />
Case 2, 3<br />
MsgBox “X = 1”<br />
MsgBox “X = 2 o X = 3”<br />
Case 4 To 10<br />
Case Else<br />
End Select<br />
Estructura For . . . Next<br />
MsgBox “4
ser conocido de antemano. Su sintaxis es la que se presenta a<br />
continuación:<br />
For CONTADOR = INICIO To FINAL [Step INCREMENTO/DECREMENTO]<br />
Next<br />
SENTENCIAS_REPETITIVAS<br />
[Exit For]<br />
Donde la variable CONTADOR es inicializada con el valor de<br />
INICIO y se incrementa o decrementa hasta un valor FINAL.<br />
INCREMENTO/DECREMENTO define la manera en que cambia el valor<br />
de la variable CONTADOR en cada iteración.<br />
La sentencia Exit For permite salir del bucle For . . . Next<br />
antes de que este finalice.<br />
Por ejemplo, el siguiente código imprime los cuadrados de<br />
los números enteros del 1 al 25.<br />
Dim C As Integer<br />
For C = 1 To 25<br />
Next<br />
Print C<br />
Para que este código funcione correctamente debe<br />
establecer la propiedad AutoRedraw del formulario a True.<br />
Estructura While . . . Wend<br />
La estructura While . . . Wend es aquella en la que el<br />
número de iteraciones no se conoce por anticipado y el cuerpo<br />
Pág. 37
del bucle se repite mientras se cumple una determinada<br />
condición. Su sintaxis es la siguiente:<br />
While CONDICIÓN<br />
Wend<br />
SENTENCIAS_REPETITIVAS<br />
La estructura While . . . Wend evalúa la CONDICIÓN en cada<br />
iteración y si el resultado es verdadero continúa su ejecución.<br />
El bucle termina cuando CONDICIÓN es falsa.<br />
A manera de ejemplo, considere el siguiente código, el<br />
cual imprime en pantalla la suma de los N primeros números<br />
naturales, es decir S = 1 + 2 + 3 + 4 + . . . + N<br />
Dim N As Integer, S As Integer<br />
S = 0<br />
N = InputBox(“Ingrese N?”)<br />
While N 0<br />
Wend<br />
S = S + N<br />
N = N - 1<br />
MsgBox “La suma es S= ” & Str(S)<br />
Estructura Do . . . Loop<br />
Esta estructura ejecuta un bucle mientras una condición<br />
dada sea cierta, o hasta que una condición dada sea cierta. La<br />
Pág. 38
condición puede ser verificada antes o después de ejecutarse el<br />
cuerpo del bucle. Su sintaxis es:<br />
Formato 1: Do [While/Until] CONDICIÓN<br />
SENTENCIAS_REPETITIVAS<br />
[Exit Do]<br />
Loop<br />
Formato 2: Do<br />
SENTENCIAS_REPETITIVAS<br />
[Exit Do]<br />
Loop [While/Until] CONDICIÓN<br />
Esta estructura (como se puede observar en ambos formatos)<br />
permite realizar varias estructuras diferentes dependiendo si<br />
la condición de terminación está al principio o al final del<br />
cuerpo del bucle.<br />
Como ejemplo, consideremos el siguiente programa, el cual<br />
calcula el factorial de un entero N ingresado por teclado:<br />
Dim N As Integer, FACT As Integer, C As Integer<br />
FACT = 1<br />
C = 1<br />
N = InputBox(“Ingrese N?”)<br />
Do<br />
FACT = FACT * C<br />
C = C + 1<br />
Loop While C
MsgBox “El factorial de ” & Str(N) & “ es=” & Str(FACT)<br />
Sentencia GoTo<br />
Transfiere el control a una línea específica de código,<br />
identificada por una etiqueta o por un número de línea. Su<br />
sintaxis es:<br />
GoTo ETIQUETA/NUMERO_LÍNEA<br />
Aunque el uso del GoTo se ha depreciado considerablemente,<br />
en el presente trabajo no se juzgará su validez. Sin embargo,<br />
se ha establecido que no hay situaciones de programación que<br />
requieran el uso del GoTo, es decir, no es un elemento<br />
necesario para hacer <strong>completo</strong> el lenguaje.<br />
Sin embargo, el GoTo es un convenio que, si su usa con<br />
cuidado, puede ser beneficioso en ciertas situaciones de<br />
programación.<br />
Por ejemplo podría escribir un bucle para imprimir los<br />
cuadrados de los números enteros del 1 al 25.<br />
Dim X As Integer<br />
X = 0<br />
LABEL1:<br />
X = X + 1<br />
Print X ^ 2<br />
If X < 25 Then GoTo LABEL1<br />
Pág. 40
Un uso abusivo de la sentencia GoTo da lugar a códigos<br />
difíciles de interpretar y de mantener. Por ello, se recomienda<br />
su uso solamente en ocasiones excepcionales. La tarea que vaya<br />
a desempeñar una sentencia GoTo puede suplirse utilizando<br />
cualquiera de las estructuras de control vistas en las<br />
secciones anteriores.<br />
ARREGLOS<br />
Un arreglo o matriz es una estructura de datos en la que<br />
se almacena una colección finita de datos del mismo tipo, que<br />
comparten un nombre común, a los que se puede acceder por la<br />
posición (índice) que ocupa cada uno de ellos dentro del<br />
arreglo. Cada elemento del arreglo es una variable que puede<br />
contener un número o una cadena de caracteres, dependiendo del<br />
tipo de arreglo que se declare.<br />
Los arreglos en <strong>Visual</strong> <strong>Basic</strong> se clasifican en estáticos y<br />
dinámicos.<br />
Arreglos estáticos<br />
Son aquellos arreglos cuyo tamaño no puede cambiar en<br />
tiempo de ejecución. La declaración de un arreglo estático se<br />
puede realizar mediante la siguiente sintaxis:<br />
Dim NOMBRE_ARREGLO(DIMENSONES) As TIPO<br />
Pág. 41
Donde DIMENSIONES es una lista de números, separados por<br />
comas y que definen las dimensiones del arreglo. Esta lista<br />
puede ser de la siguiente forma:<br />
DIMENSIÓN_1, DIMENSIÓN_2, DIMENSIÓN_3, . . ., DIMENSIÓN_ K<br />
Para el caso de un arreglo formado por “ K ” dimensiones,<br />
es decir un arreglo K -dimensional.<br />
A manera de ejemplo considere los siguientes casos que se<br />
pueden presentar:<br />
Dim LISTA(9) As Integer<br />
Dim MATRIZ(4, 3) As Double<br />
Dim NOMBRES(19) As String * 30<br />
En el primer caso se declara un arreglo unidimensional de<br />
10 elementos de tipo entero (por defecto los elementos de un<br />
arreglo se numeran a partir de 0).<br />
En el segundo caso se define de un arreglo bidimensional<br />
de 20 elementos (5 filas por 4 columnas) de tipo punto flotante<br />
en doble precisión.<br />
En el tercer caso se define una arreglo unidimensional de<br />
20 elementos de tipo cadena de caracteres (cada elemento tiene<br />
una longitud fija de 30 caracteres).<br />
Como se observa la numeración de los elementos de un<br />
arreglo por defecto comienza en cero, para hacer que la<br />
Pág. 42
numeración comience en 1, debe ingresar la siguiente orden en<br />
la sección de Declaraciones del módulo de formulario:<br />
Luego, para declarar los mismos arreglos de los casos<br />
anteriores, las sentencias serían las siguientes:<br />
Dim LISTA(10) As Integer<br />
Dim MATRIZ(5, 4) As Double<br />
Dim NOMBRES(20) As String * 30<br />
Establecer la sentencia Option Base a 1 o trabajar con el<br />
valor predeterminado (cero) queda a consideración del lector.<br />
Arreglos dinámicos<br />
Son aquellos arreglos en los que su tamaño puede definirse<br />
o modificarse en tiempo de ejecución. Para declara una arreglo<br />
dinámico utilice la siguiente sintaxis:<br />
sintaxis:<br />
Dim NOMBRE_ARREGLO() As TIPO<br />
Para definir el tamaño del arreglo utilizar la siguiente<br />
Pág. 43
ReDim NOMBRE_ARREGLO(NÚMERO_ELEMENTOS)<br />
Cada vez que se ejecuta la sentencia ReDim, todos los<br />
valores almacenados en el arreglo se pierden. Para definir o<br />
cambiar el tamaño del arreglo conservando los valores del mismo<br />
use la siguiente sintaxis:<br />
ReDim Preserve NOMBRE_ARREGLO(NÚMERO_ELEMENTOS)<br />
Para liberar el espacio de memoria utilizado por arreglos<br />
dinámicos que ya no son útiles, utilizar la sintaxis:<br />
Erase NOMBRE_ARREGLO<br />
La orden Erase asigna cero a cada elemento de los arreglos<br />
numéricos y nulo (“”) a cada elemento de los arreglos de cadena<br />
de caracteres.<br />
A manera de ejemplo considere el siguiente código que<br />
declara y hace uso de un arreglo dinámico:<br />
Dim I As Integer, N As Integer, TEMP() As Integer<br />
N = InputBox(“Ingrese N?”)<br />
ReDim TEMP(N - 1)<br />
For I = 0 To N - 1<br />
Next<br />
TEMP(I) = I + 1<br />
Print TEMP(I)<br />
Erase TEMP<br />
Pág. 44
REGISTROS<br />
Un registro es un nuevo tipo de dato, que se define como<br />
una colección de datos de diferentes tipos, conocidos como<br />
“campos”, los cuales se encuentran evidentemente relacionados.<br />
Un registro sólo se puede ser creado en la sección de<br />
declaraciones de un módulo. La sintaxis correspondiente es:<br />
Private Type NOMBRE_REGISTRO<br />
End Type<br />
DECLARACIONES_DE_LOS_MIEMBROS<br />
Por ejemplo considere el siguiente código que define la<br />
estructura ALUMNO:<br />
Private Type ALUMNO<br />
End Type<br />
ID_ALUMNO As String * 7<br />
NOMBRE As String * 25<br />
DIRECCION As String * 35<br />
TELEFONO As String * 7<br />
ESTADO As Boolean<br />
Luego, podemos declarar una variable tipo ALUMNO de la<br />
siguiente forma:<br />
Dim X As ALUMNO<br />
Pág. 45
Para referirse a un determinado miembro del registro se<br />
utiliza el operador selector de campos ( . ), veamos:<br />
X.ID_ALUMNO = “980976G”<br />
X.NOMBRE = “Carlos Castillo Peralta”<br />
X.DIRECCION = “Jr. C. Richardson 412 Chorrillos”<br />
X.TELEFONO = “2510850”<br />
X.ESTADO = True<br />
Las mismas órdenes del párrafo anterior se pueden escribir<br />
de una manera más fácil, más legible y más eficiente si utiliza<br />
la sentencia With . . . End With, del siguiente modo:<br />
With X<br />
End With<br />
FUNCIONES<br />
. ID_ALUMNO = “980976G”<br />
.NOMBRE = “Carlos Castillo Peralta”<br />
.DIRECCION = “Jr. C. Richardson 412 Chorrillos”<br />
.TELEFONO = “2510850”<br />
.ESTADO = True<br />
Las funciones son uno de los elementos básicos en<br />
programación. A continuación serán estudiadas detalladamente.<br />
Declaración de una función<br />
Pág. 46
Una función es un procedimiento que cuando se ejecuta<br />
devuelve un único resultado al procedimiento que la invocó. La<br />
sintaxis correspondiente a la declaración de una función es:<br />
Function NOMBRE_FUNCIÓN([LISTA_PARÁMETROS]) [As TIPO]<br />
SENTENCIAS<br />
[NOMBRE_FUNCIÓN = VALOR_RETORNADO]<br />
[Exit Function]<br />
End Function<br />
Donde LISTA_PARÁMETROS es una secuencia de variables<br />
separadas por comas que se corresponden con los argumentos<br />
pasados cuando es invocada la función.<br />
Para especificar el tipo de datos que será retornado por<br />
la función utilice la cláusula opcional As TIPO, el tipo es<br />
Variant por omisión.<br />
El valor retornado por la función es almacenado en su<br />
propio nombre, es decir en NOMBRE_FUNCIÓN, que actúa como<br />
variable dentro del cuerpo de la función. Si no se efectúa esta<br />
asignación el valor devuelto será cero si la función es de tipo<br />
numérica, nulo (“”) si la función es de tipo cadena, o vacío<br />
(Empty) si la función es de tipo Variant.<br />
La cláusula opcional Exit Function permite salir de una<br />
función antes de que la función finalice, en caso sea esto<br />
necesario.<br />
Pág. 47
La sintaxis para la llamada a una función es de la<br />
siguiente forma:<br />
VARIABLE = NOMBRE_FUNCIÓN([LISTA_ARGUMENTOS])<br />
Donde LISTA_ARGUMENTOS es una secuencia de constantes,<br />
variables o expresiones separadas por comas. El número de<br />
argumentos debe ser igual al número de parámetros de la<br />
función. Los tipos de los argumentos deben coincidir con los<br />
tipos de sus correspondientes parámetros.<br />
A manera de ejemplo considere la implementación de la<br />
siguiente función:<br />
2<br />
f ( x)<br />
= x + 2x<br />
+ 3<br />
En la sección de Declaraciones del módulo de formulario<br />
ingrese el siguiente código:<br />
Function F(X As Double) As Double<br />
F = X ^ 2 + 2 * X + 3<br />
End Function<br />
Para invocar la función creada recientemente, codifique<br />
las siguientes líneas:<br />
Dim A As Double, RESP As Double<br />
A = InputBox(“Ingrese A?”)<br />
RESP = F(A)<br />
Pág. 48
MsgBox (Str(RESP))<br />
Paso de argumentos a una función<br />
El paso de argumentos a una función es la forma como se<br />
ingresan los datos y variables al interior de la función y se<br />
presenta de dos formas:<br />
• Por referencia<br />
• Por valor<br />
Paso de argumentos por referencia<br />
En las funciones de <strong>Visual</strong> <strong>Basic</strong>, los argumentos se pasan<br />
por referencia (forma por defecto), de este modo cualquier<br />
cambio de valor que sufra un parámetro en el cuerpo de la<br />
función, también se produce en el argumento correspondiente de<br />
la llamada a la función. Esta forma de pasar los argumentos a<br />
una función es útil para funciones que devuelven más de un<br />
valor. Por ejemplo, considere la siguiente función que calcula<br />
2<br />
las raíces reales de una ecuación cuadrática Ax + Bx + C = 0 .<br />
Function RAIZ(A As Double, B As Double, C As Double, _<br />
Dim D As Double<br />
D = B ^ 2 - 4 * A * C<br />
If D >= 0 Then<br />
X1 As Double, X2 As Double) As Boolean<br />
X1 = (-B - Sqr(D)) / (2 * A)<br />
X2 = (-B + Sqr(D)) / (2 * A)<br />
Pág. 49
Else<br />
End If<br />
End Function<br />
RAIZ = True ' Verdadero si hay raíces reales<br />
RAIZ = False ' Falso si no hay raíces reales<br />
La llamada a esta función se puede realizar de la manera<br />
que se presenta a continuación:<br />
Dim A As Double, B As Double, C As Double<br />
Dim X1 As Double, X2 As Double<br />
A = InputBox(“Ingrese A?”)<br />
B = InputBox(“Ingrese B?”)<br />
C = InputBox(“Ingrese C?”)<br />
If RAIZ(A, B, C, X1, X2) Then<br />
Else<br />
End If<br />
MsgBox “X1= ” & Str(X1)<br />
MsgBox “X2= ” & Str(X2)<br />
MsgBox “NO EXISTEN RAÍCES REALES”<br />
Paso de argumentos por valor<br />
Cuando se ejecuta una función, se podrá especificar que el<br />
valor de un argumento no sea cambiado por esta función, pasando<br />
dicho argumento por valor. Para ello se debe anteponer la<br />
Pág. 50
palabra reservada ByVal a la declaración del parámetro en la<br />
cabecera de la función. Por ejemplo:<br />
Function F(ByVal X As Double) As Double<br />
F = X ^ 2 + 2 * X + 3<br />
End Function<br />
La cabecera de la función F especifica que X será pasado<br />
por valor y no por referencia.<br />
Funciones recursivas<br />
Se dice que una función es recursiva si se llama a sí<br />
misma. Por ejemplo la función FACTORIAL cuyo código se presenta<br />
a continuación es recursiva:<br />
Function FACTORIAL(N As Integer) As Long<br />
If N 0 Then<br />
Else<br />
End If<br />
End Function<br />
PROCEDIMIENTOS<br />
FACTORIAL = FACTORIAL(N - 1) * N<br />
FACTORIAL = 1<br />
La sintaxis para definir un procedimiento es la<br />
siguiente:<br />
Private Sub NOMBRE_PROCEDIMIENTO([LISTA_PARÁMETROS])<br />
Pág. 51
End Sub<br />
SENTENCIAS<br />
[Exit Sub]<br />
La explicación es análoga a la dada para las funciones.<br />
Sin embargo, un procedimiento no puede ser utilizado en una<br />
expresión, ya que un procedimiento no retorna ningún valor a<br />
través de su nombre.<br />
La llamada a un procedimiento puede ser realizada de<br />
alguna de las dos formas siguientes:<br />
Call NOMBRE_PROCEDIMIENTO([LISTA_ARGUMENTOS])<br />
ó<br />
NOMBRE_PROCEDIMIENTO([LISTA_ARGUMENTOS])<br />
Por ejemplo, el siguiente código corresponde a un<br />
procedimiento que calcula e imprime la suma de los N primeros<br />
números naturales impares, es decir: S = 1 + 3 + 5 + . . . + N<br />
Private Sub SUMA_IMPAR(N As Integer)<br />
Dim S As Integer, I As Integer<br />
S = 0<br />
For I = 1 To N<br />
If I Mod 2 0 Then<br />
End If<br />
S = S + I<br />
Pág. 52
Next<br />
End Sub<br />
MsgBox “La suma es S= ” & Str(S)<br />
La llamada a este procedimiento podría ser de la forma:<br />
Call SUMA_IMPAR(25)<br />
Pág. 53
CAPÍTULO 4<br />
USO DE LOS CONTROLES<br />
Los controles son aquellos objetos que se encuentran<br />
dentro de un contenedor y que permiten la interacción entre el<br />
usuario y la aplicación, ya sea para manipular datos y/o<br />
ejecutar tareas.<br />
En <strong>Visual</strong> <strong>Basic</strong>, los controles suelen ser agrupados en<br />
tres categorías:<br />
• Controles básicos<br />
• Controles complementarios<br />
• Controles externos<br />
Los controles básicos son las etiquetas, cuadros de texto<br />
y botones de comando, pues utilizando estos tres controles se<br />
puede construir cualquier interfaz.<br />
Los controles complementarios son el resto de los<br />
controles, por ejemplo una casilla de verificación, un cuadro<br />
combinado o un cronómetro.<br />
Los controles externos se refieren a aquellos controles<br />
creados por terceros. Este tipo de controles son llamados<br />
ActiveX.<br />
Pág. 54
CONTROLES BÁSICOS<br />
Los controles básicos lo conforman las etiquetas, cuadros<br />
de texto y botones de comando, debido a que cualquier interfaz<br />
se puede implementar con sólo estos tres objetos.<br />
Etiqueta<br />
Una etiqueta es un control que permite presentar texto de<br />
solo lectura. Se utiliza para mostrar títulos y mensajes que<br />
por lo general no cambian. Sin embargo, si lo desea, puede<br />
escribir procedimientos que cambien el texto mostrado por una<br />
etiqueta como respuesta a eventos en tiempo de ejecución.<br />
Propiedad Descripción<br />
Alignment Especifica<br />
texto.<br />
la forma como se alineará el<br />
AutoSize Especifica si se cambia automáticamente el<br />
tamaño del control para que quepan sus<br />
contenidos.<br />
BackColor, Especifica el color de fondo y de primer<br />
ForeColor<br />
plano empleado para mostrar el texto.<br />
BackStyle Especifica si el fondo del control es<br />
transparente u opaco.<br />
Caption Especifica<br />
control.<br />
el texto que se muestra en el<br />
WordWrap Especifica si la etiqueta se extiende a más<br />
de una línea cuando el texto es amplio.<br />
Pág. 55
Cuadro de texto<br />
Un cuadro de texto es un control en el que el usuario<br />
pueda ingresar datos desde el teclado o visualizar un resultado<br />
generado por la aplicación. El valor de un cuadro de texto por<br />
lo general se asocia a una variable de memoria.<br />
Propiedad Descripción<br />
Enabled Habilita o deshabilita el control, es decir<br />
si se puede o no modificar el contenido.<br />
Locked Permite bloquear el acceso al control en<br />
MaxLenght<br />
tiempo de ejecución.<br />
Especifica la longitud máxima (en caracteres)<br />
que puede escribirse en el control.<br />
MultiLine Especifica si el control admitirá múltiples<br />
líneas.<br />
PasswordChar Determina si se muestran en el control los<br />
caracteres escritos por el usuario o los<br />
caracteres de marcador de posición.<br />
ScrollBars Especifica si se muestran las barras de<br />
desplazamiento horizontales o verticales.<br />
SelLength Especifica el número de caracteres<br />
SelStart<br />
seleccionados.<br />
Especifica el inicio del texto seleccionado.<br />
Si su valor es 0, el texto seleccionado<br />
SelText<br />
comienza por el primer carácter.<br />
Contiene el texto seleccionado.<br />
Text Contiene el texto introducido en el control.<br />
Puede inicializar el contenido en tiempo de<br />
diseño.<br />
Pág. 56
Los eventos asociados a un cuadro de texto son los<br />
siguientes:<br />
Evento Descripción<br />
Change Ocurre cuando se cambia el contenido del<br />
KeyPress<br />
control utilizando el teclado o el ratón.<br />
Ocurre cuando se pulsa una tecla.<br />
Botón de comando<br />
Un botón de comando es un control que suele emplearse para<br />
ejecutar una acción, como cerrar un formulario, imprimir un<br />
informe, etc.<br />
Propiedad Descripción<br />
Cancel Especifica si el control responderá a la<br />
Caption<br />
tecla ESC, por lo general para terminar la<br />
aplicación.<br />
Muestra un título para el control.<br />
Default Especifica si el control responderá a la<br />
Enabled<br />
tecla ENTRAR, sin importar la ubicación del<br />
enfoque.<br />
Permite habilitar o deshabilitar el control.<br />
Picture Especifica<br />
control.<br />
una imagen tipo icono para el<br />
Style Especifica la apariencia del control, ya sea<br />
estándar (estilo estándar de Windows) o<br />
gráfica (con una imagen personalizada).<br />
Pág. 57
Los botones de comando suelen responder al evento Click,<br />
cuya descripción es:<br />
Evento Descripción<br />
Click Ocurre cuando el usuario hace click sobre el<br />
control.<br />
A manera de ejemplo vamos a desarrollar la siguiente<br />
aplicación. Esta consiste en un cajero automático el cual<br />
permite manipular cierta cantidad de dinero para lo cual<br />
dispone de los siguientes billetes: S/. 10.00; S/. 20.00;<br />
S/. 50.00; S/. 100.00 y S/. 200.00. Elaborar una aplicación que<br />
permita la lectura de la cantidad a retirar e indique el menor<br />
número de billetes a utilizar.<br />
Para el desarrollo de la presente aplicación proceda a<br />
ubicar los siguientes controles en el formulario:<br />
6 etiquetas<br />
Pág. 58
6 cajas de texto<br />
3 botones de comando<br />
Una vez ubicados los controles, establezca las propiedades<br />
según se indica:<br />
Form1<br />
Label1<br />
Label2<br />
Label3<br />
Label4<br />
Label5<br />
Nombre FrmCajero<br />
BorderStyle 3-Fixed Dialog<br />
Caption Cajero automático<br />
Nombre LblCantidad<br />
AutoSize True<br />
Caption Cantidad a retirar:<br />
Nombre LblB10<br />
AutoSize True<br />
Caption Billetes de S/. 10<br />
Nombre LblB20<br />
AutoSize True<br />
Caption Billetes de S/. 20<br />
Nombre LblB50<br />
AutoSize True<br />
Caption Billetes de S/. 50<br />
Pág. 59
Label6<br />
Text1<br />
Text2<br />
Text3<br />
Text4<br />
Text5<br />
Text6<br />
Command1<br />
Nombre LblB100<br />
AutoSize True<br />
Caption Billetes de S/. 100<br />
Nombre LblB200<br />
AutoSize True<br />
Caption Billetes de S/. 200<br />
Nombre TxtCantidad<br />
Text<br />
Nombre TxtB10<br />
Text<br />
Nombre TxtB20<br />
Text<br />
Nombre TxtB50<br />
Text<br />
Nombre TxtB100<br />
Text<br />
Nombre TxtB200<br />
Text<br />
Pág. 60
Command2<br />
Command3<br />
Nombre CmdAceptar<br />
Caption &Aceptar<br />
Nombre CmdLimpiar<br />
Caption &Limpiar<br />
Nombre CmdSalir<br />
Caption &Salir<br />
Para añadir código a la aplicación haga doble click sobre<br />
el botón “Aceptar” e ingrese lo siguiente:<br />
Private Sub CmdAceptar_Click()<br />
Dim C As Integer, B200 As Integer, B100 As Integer, _<br />
B50 As Integer, B20 As Integer, B10 As Integer<br />
C = Val(TxtCantidad)<br />
If C Mod 10 = 0 Then<br />
Else<br />
B200 = C \ 200 : C = C Mod 200<br />
B100 = C \ 100 : C = C Mod 100<br />
B50 = C \ 50 : C = C Mod 50<br />
B20 = C \ 20 : B10 = C Mod 20<br />
TxtB200 = Str(B200)<br />
TxtB100 = Str(B100)<br />
TxtB50 = Str(B50)<br />
TxtB20 = Str(B20)<br />
TxtB10 = Str(B10)<br />
Pág. 61
End Sub<br />
End If<br />
MsgBox “Cantidad a retirar debe ser múltiplo de 10”<br />
TxtCantidad = “”<br />
TxtCantidad.SetFocus<br />
Luego, haga doble click sobre el botón “Limpiar” y añada<br />
el siguiente código:<br />
Private Sub CmdLimpiar_Click()<br />
End Sub<br />
TxtCantidad = “”<br />
TxtB200 = “”<br />
TxtB100 = “”<br />
TxtB50 = “”<br />
TxtB20 = “”<br />
TxtB10 = “”<br />
TxtCantidad.SetFocus<br />
Finalmente dar doble click sobre el botón “Salir” y añada<br />
el siguiente código:<br />
Private Sub CmdSalir_Click()<br />
End<br />
End Sub<br />
Pág. 62
En el código anterior hemos utilizado el método SetFocus<br />
para enfocar la caja de texto TxtCantidad, esto es, para<br />
posicionar el cursor sobre ella.<br />
CONTROLES COMPLEMENTARIOS<br />
Los controles complementarios se utilizan como alternativa<br />
a los controles básicos en aplicaciones en las cuales su uso<br />
facilita o mejora el diseño de la interfaz. Como el lector<br />
podrá verificar, algunos controles son más adecuados que otros<br />
dependiendo del tipo de aplicación que se pretenda desarrollar.<br />
Marco<br />
Un marco es un objeto contenedor que puede utilizarse para<br />
agrupar casillas de verificación, botones de opción, botones de<br />
comando, etc.<br />
Propiedad Descripción<br />
Caption Muestra un título para el control.<br />
Casilla de verificación<br />
Una casilla de verificación se utiliza para alternar entre<br />
dos posibles valores (Activado/Desactivado). Cada casilla de<br />
verificación es independiente de las demás ya que cada una<br />
tiene su propio nombre (Name). Puede utilizar casillas de<br />
verificación en grupos para mostrar múltiples opciones entre<br />
Pág. 63
las cuales el usuario puede seleccionar todas las que desee a<br />
la vez.<br />
Propiedad Descripción<br />
Caption Muestra un título para el control.<br />
Value Devuelve o establece el estado del control,<br />
puede ser: Desactivado (0), Activado (1).<br />
Click.<br />
Las casillas de verificación suelen responder al evento<br />
Botón de opción<br />
Un botón de opción se utiliza para alternar entre dos<br />
posibles valores (Activado/Desactivado), de manera similar a<br />
las casillas de verificación, la diferencia radica en que de un<br />
grupo de botones de opción el usuario sólo puede seleccionar un<br />
único botón a la vez.<br />
Propiedad Descripción<br />
Caption Muestra un título para el control.<br />
Value Devuelve o establece el estado del control,<br />
puede ser: Desactivado (Falso), Activado<br />
(True).<br />
Click.<br />
Los botones de opción también suelen responder al evento<br />
Pág. 64
A manera de ejemplo vamos a desarrollar la siguiente<br />
aplicación, la cual permite cambiar el aspecto de un cuadro de<br />
texto, el usuario debe elegir el color (rojo, verde, azul) y el<br />
estilo (negrita, cursiva, subrayado) de la fuente a utilizar.<br />
Adicionalmente, cuando el usuario active la casilla de<br />
verificación “Convertir a mayúsculas”, todo el texto que haya<br />
escrito en el cuadro de texto se presentará en mayúsculas y<br />
todo texto que escriba a continuación (mientras la opción esté<br />
activada) también deberá aparecer en mayúsculas.<br />
Para el desarrollo de la presente aplicación proceda a<br />
ubicar los siguientes controles en el formulario:<br />
1 cuadro de texto<br />
2 marcos<br />
3 botones de opción<br />
4 casillas de verificación<br />
Pág. 65
Una vez ubicados los controles, establezca las propiedades<br />
según se indica:<br />
Form1<br />
Text1<br />
Frame1<br />
Frame2<br />
Option1<br />
Option2<br />
Nombre FrmEditor<br />
BorderStyle 3-Fixed Dialog<br />
Caption Editor<br />
Nombre TxtMensaje<br />
ForeColor &H000000FF&<br />
Text<br />
Nombre FraColor<br />
Caption Color<br />
Nombre FraEstilo<br />
Caption Estilo<br />
Nombre OptRojo<br />
Caption Rojo<br />
ForeColor &H000000FF&<br />
Value True<br />
Nombre OptVerde<br />
Caption Verde<br />
ForeColor &H00008000&<br />
Pág. 66
Option3<br />
Check1<br />
Check2<br />
Check3<br />
Check4<br />
Nombre OptAzul<br />
Caption Azul<br />
ForeColor &H00C00000&<br />
Nombre ChkNegrita<br />
Caption Negrita<br />
Font Arial (Negrita)<br />
Nombre ChkCursiva<br />
Caption Cursiva<br />
Font Arial (Cursiva)<br />
Nombre ChkSubrayado<br />
Caption Subrayado<br />
Font Arial (Subrayado)<br />
Nombre ChkMayuscula<br />
Caption Convertir a mayúsculas<br />
Una vez establecidas las propiedades, proceda a ingresar<br />
el código que se indica a continuación:<br />
Private Sub OptRojo_Click()<br />
End Sub<br />
If OptRojo.Value Then<br />
End If<br />
TxtMensaje.ForeColor = RGB(255, 0, 0)<br />
Pág. 67
Private Sub OptVerde_Click()<br />
End Sub<br />
If OptVerde.Value Then<br />
End If<br />
TxtMensaje.ForeColor = RGB(0, 255, 0)<br />
Private Sub OptAzul_Click()<br />
End Sub<br />
If OptAzul.Value Then<br />
End If<br />
TxtMensaje.ForeColor = RGB(0, 0, 255)<br />
Private Sub ChkNegrita_Click()<br />
If ChkNegrita.Value Then<br />
Else<br />
End Sub<br />
End If<br />
TxtMensaje.Font.Bold = True<br />
TxtMensaje.Font.Bold = False<br />
Private Sub ChkCursiva_Click()<br />
If ChkCursiva.Value Then<br />
Else<br />
End Sub<br />
End If<br />
TxtMensaje.Font.Italic = True<br />
TxtMensaje.Font.Italic = False<br />
Pág. 68
Private Sub ChkSubrayado_Click()<br />
If ChkSubrayado.Value Then<br />
Else<br />
End Sub<br />
End If<br />
TxtMensaje.Font.Underline = True<br />
TxtMensaje.Font.Underline = False<br />
Private Sub ChkMayuscula_Click()<br />
End Sub<br />
If ChkMayuscula.Value Then<br />
End If<br />
TxtMensaje = UCase(TxtMensaje)<br />
Private Sub TxtMensaje_KeyPress(KeyAscii As Integer)<br />
End Sub<br />
Dim CAR As String * 1<br />
If ChkMayuscula.Value Then<br />
End If<br />
CAR = UCase(Chr(KeyAscii))<br />
KeyAscii = Asc(CAR)<br />
La función RGB() especifica el color que se asigna a la<br />
propiedad ForeColor.<br />
La función UCase() retorna una cadena de caracteres en<br />
mayúsculas.<br />
Pág. 69
Cuadro de lista<br />
Un cuadro de lista es un control que presenta una lista de<br />
elementos en la que el usuario puede seleccionar uno o más de<br />
dichos elementos. Si el número de elementos supera el número<br />
que puede mostrarse, se agregará automáticamente una barra de<br />
desplazamiento al control.<br />
Propiedad Descripción<br />
List Contiene los elementos de la lista. Puede<br />
definirlos en tiempo de diseño.<br />
ListCount Especifica el número de elementos de la<br />
ListIndex<br />
lista. Su valor siempre es uno más que el<br />
mayor valor de ListIndex.<br />
Especifica el número de orden que ocupa el<br />
elemento seleccionado en la lista. Toma el<br />
valor de 0 para el primer elemento, si no ha<br />
selecciona ninguno retorna -<strong>1.</strong><br />
MultiSelect Especifica si se pueden seleccionar varios<br />
elementos de la lista.<br />
SelCount Devuelve el número de elementos<br />
Selected<br />
seleccionados.<br />
Especifica si un elemento de la lista está<br />
seleccionado.<br />
Sorted Especifica si los elementos de la lista se<br />
ordenan alfabéticamente.<br />
Text Especifica el valor del elemento seleccionado<br />
en ese instante. El valor es tratado como una<br />
cadena de caracteres.<br />
Pág. 70
Los métodos que se pueden utilizar para un cuadro de lista<br />
son los siguientes:<br />
Método Descripción<br />
AddItem Agrega un nuevo elemento a la lista.<br />
Clear Elimina todos los elementos contenidos en la<br />
lista.<br />
RemoveItem Elimina en elemento de la lista.<br />
Cuadro combinado<br />
Un cuadro combinado es una mezcla de un cuadro de texto<br />
con una lista. En él no sólo se podrá ingresar un dato sino<br />
también seleccionarlo de la lista. Presenta las mismas<br />
propiedades, eventos y métodos que el cuadro de lista a<br />
excepción de lo siguiente:<br />
Propiedad Descripción<br />
Style Especifica si el control se comporta como un<br />
cuadro de texto o como una lista desplegable.<br />
Un cuadro de texto permite ingresar valores.<br />
Una lista desplegable sólo permite<br />
seleccionar valores. El valor predeterminado<br />
es 0-vbComboDropDown, e incluye una lista<br />
desplegable y un cuadro de texto. El valor<br />
1-vbComboSimple incluye tan solo cuadro de<br />
texto. El valor 2-Dropdown List incluye sólo<br />
una lista desplegable.<br />
Pág. 71
Como ejemplo del uso de listas vamos a desarrollar una<br />
aplicación que permita ingresar el nombre de un curso, el cual<br />
pasa a formar parte de una lista de espera antes de ser<br />
programado para su dictado. Los cursos deben ser seleccionados<br />
de la lista de espera y trasladados a la lista de cursos<br />
programados y viceversa.<br />
Para el desarrollo de la presente aplicación proceda a<br />
ubicar los siguientes controles en el formulario:<br />
3 etiquetas<br />
1 cuadro de texto<br />
2 listas<br />
5 botones de comando<br />
Pág. 72
indica:<br />
Form1<br />
Label1<br />
Label2<br />
Label3<br />
Text1<br />
List1<br />
List2<br />
En seguida proceda a establecer las propiedades según se<br />
Nombre Frm<strong>Curso</strong>s<br />
BorderStyle 3-Fixed Dialog<br />
Caption <strong>Curso</strong>s<br />
Nombre Lbl<strong>Curso</strong><br />
AutoSize True<br />
Caption Ingrese nuevo curso:<br />
Nombre LblSeleccionar<br />
AutoSize True<br />
Caption Seleccione un curso:<br />
Nombre LblProgramado<br />
AutoSize True<br />
Caption <strong>Curso</strong> programado:<br />
Nombre Txt<strong>Curso</strong><br />
Text<br />
Nombre LstSeleccionar<br />
Nombre LstProgramado<br />
Pág. 73
Command1<br />
Command2<br />
Command3<br />
Command4<br />
Command5<br />
Nombre CmdAgregar<br />
Caption<br />
Picture C:\FundVB\Bitmaps\AddItem.Bmp<br />
Style 1-Graphical<br />
Nombre CmdAgregarTodo<br />
Caption<br />
Picture C:\FundVB\Bitmaps\AddAll.Bmp<br />
Style 1-Graphical<br />
Nombre CmdQuitar<br />
Caption<br />
Picture C:\FundVB\Bitmaps\Remove.Bmp<br />
Style 1-Graphical<br />
Nombre CmdQuitarTodo<br />
Caption<br />
Picture C:\FundVB\Bitmaps\RemoveAll.Bmp<br />
Style 1-Graphical<br />
Nombre CmdAnnadir<br />
Caption &Añadir<br />
Default True<br />
Seguidamente proceda a ingresar el código que se indica a<br />
continuación:<br />
Private Sub CmdAnnadir_Click()<br />
Pág. 74
End Sub<br />
LstSeleccionar.AddItem Txt<strong>Curso</strong><br />
Txt<strong>Curso</strong> = “”<br />
Txt<strong>Curso</strong>.SetFocus<br />
Private Sub CmdAgregar_Click()<br />
End Sub<br />
Dim CURSO As String, I As Integer<br />
CURSO = LstSeleccionar.Text<br />
I = LstSeleccionar.ListIndex<br />
If LstSeleccionar.ListIndex >= 0 Then<br />
End If<br />
LstProgramado.AddItem CURSO<br />
LstSeleccionar.RemoveItem I<br />
Private Sub CmdQuitar_Click()<br />
End Sub<br />
Dim CURSO As String, I As Integer<br />
CURSO = LstProgramado.Text<br />
I = LstProgramado.ListIndex<br />
If LstProgramado.ListIndex >= 0 Then<br />
End If<br />
LstSeleccionar.AddItem CURSO<br />
LstProgramado.RemoveItem I<br />
Private Sub CmdAgregarTodo_Click()<br />
Dim I As Integer<br />
Pág. 75
For I = 0 To LstSeleccionar.ListCount - 1<br />
Next<br />
End Sub<br />
LstProgramado.AddItem LstSeleccionar.List(I)<br />
LstSeleccionar.Clear<br />
Private Sub CmdQuitarTodo_Click()<br />
Dim I As Integer<br />
For I = 0 To LstProgramado.ListCount - 1<br />
Next<br />
End Sub<br />
LstSeleccionar.AddItem LstProgramado.List(I)<br />
LstProgramado.Clear<br />
Seguidamente mostraremos un ejemplo del uso de los cuadros<br />
combinados. Para tal fin vamos a desarrollar una aplicación que<br />
permita realizar consultas acerca de un determinado curso. La<br />
relación de cursos se presentará mediante un cuadro combinado,<br />
del cual el usuario debe seleccionar el curso de su interés y<br />
en seguida se presentará el nombre del profesor encargado del<br />
curso (teoría), el nombre del jefe de práctica (laboratorio),<br />
así como los horarios de teoría y de laboratorio,<br />
respectivamente.<br />
Pág. 76
Para el desarrollo de la presente aplicación proceda a<br />
ubicar los siguientes controles en el formulario:<br />
indica:<br />
Form1<br />
1 etiqueta<br />
1 cuadro de texto<br />
1 cuadro combinado<br />
1 botón de comando<br />
En seguida proceda a establecer las propiedades según se<br />
Nombre FrmConsulta<strong>Curso</strong>s<br />
BorderStyle 3-Fixed Dialog<br />
Caption Consulta de cursos<br />
Pág. 77
Label1<br />
Text1<br />
Combo1<br />
Nombre Lbl<strong>Curso</strong>s<br />
Caption <strong>Curso</strong>s:<br />
Nombre Txt<strong>Curso</strong><br />
MultiLine True<br />
ScrollBars<br />
Text<br />
2-Vertical<br />
Nombre Cbo<strong>Curso</strong>s<br />
Text<br />
Command1<br />
Style 2-Dropdown List<br />
Nombre CmdSalir<br />
Caption &Salir<br />
Seguidamente proceda a ingresar el código que se indica a<br />
continuación:<br />
Dim Matriz(5, 3) As String<br />
Private Sub Form_Load()<br />
Cbo<strong>Curso</strong>s.AddItem “Microsoft <strong>Visual</strong> <strong>Basic</strong> Nivel I”<br />
Cbo<strong>Curso</strong>s.AddItem “Microsoft <strong>Visual</strong> <strong>Basic</strong> Nivel II”<br />
Cbo<strong>Curso</strong>s.AddItem “Microsoft <strong>Visual</strong> FoxPro Nivel I”<br />
Cbo<strong>Curso</strong>s.AddItem “Microsoft <strong>Visual</strong> FoxPro Nivel II”<br />
Cbo<strong>Curso</strong>s.AddItem “Microsoft <strong>Visual</strong> C++ Nivel I”<br />
Cbo<strong>Curso</strong>s.AddItem “Microsoft <strong>Visual</strong> C++ Nivel II”<br />
Pág. 78
End Sub<br />
Matriz(0, 0) = “Castillo Peralta, Carlos”<br />
Matriz(1, 0) = “Castillo Peralta, Carlos”<br />
Matriz(2, 0) = “Linares Alarcon, Adams”<br />
Matriz(3, 0) = “Castillo Peralta, Carlos”<br />
Matriz(4, 0) = “Córdoba Saavedra, Javier”<br />
Matriz(5, 0) = “Castillo Peralta, Carlos”<br />
Matriz(0, 1) = “Sa 08-11”<br />
Matriz(1, 1) = “Sa 14-17”<br />
Matriz(2, 1) = “Sa 08-11”<br />
Matriz(3, 1) = “Do 08-11”<br />
Matriz(4, 1) = “Sa 14-17”<br />
Matriz(5, 1) = “Sa 17-20”<br />
Matriz(0, 2) = “Castillo Peralta, Carlos”<br />
Matriz(1, 2) = “Linares Alarcon, Adams”<br />
Matriz(2, 2) = “Montes Tejada, Estela”<br />
Matriz(3, 2) = “Linares Alarcon, Adams”<br />
Matriz(4, 2) = “Córdoba Saavedra, Javier”<br />
Matriz(5, 2) = “Córdoba Saavedra, Javier”<br />
Matriz(0, 3) = “Sa 11-13”<br />
Matriz(1, 3) = “Do 08-10”<br />
Matriz(2, 3) = “Sa 11-13”<br />
Matriz(3, 3) = “Do 14-16”<br />
Matriz(4, 3) = “Sa 18-20”<br />
Matriz(5, 3) = “Do 08-10”<br />
Pág. 79
Private Sub Cbo<strong>Curso</strong>s_Click()<br />
End Sub<br />
Dim P_TEORIA As String, H_TEORIA As String<br />
Dim P_LAB As String, H_LAB As String<br />
P_TEORIA = “Profesor de teoría: ” & _<br />
Matriz(Cbo<strong>Curso</strong>s.ListIndex, 0)<br />
H_TEORIA = “Horario de teoría: ” & _<br />
Matriz(Cbo<strong>Curso</strong>s.ListIndex, 1)<br />
P_LAB = “Jefe de práctica: ” & _<br />
Matriz(Cbo<strong>Curso</strong>s.ListIndex, 2)<br />
H_LAB = “Horario laboratorio: ” & _<br />
Matriz(Cbo<strong>Curso</strong>s.ListIndex, 3)<br />
Txt<strong>Curso</strong> = P_TEORIA & vbCrLf & H_TEORIA & vbCrLf & _<br />
Private Sub CmdSalir_Click()<br />
End<br />
End Sub<br />
P_LAB & vbCrLf & H_LAB<br />
La constante vbCrLf es una combinación de retorno de carro<br />
y avance de línea, es equivalente a Chr(13) + Chr(10).<br />
Para este ejemplo en particular hemos almacenado la<br />
información en memoria RAM mediante el uso de un arreglo<br />
bidimensional (Matriz).<br />
Pág. 80
Cronómetro<br />
Un cronómetro sirve para controlar el tiempo transcurrido<br />
desde el inicio de una acción.<br />
Propiedad Descripción<br />
Interval Especifica el número de milisegundos que se<br />
esperará para disparar el evento Timer.<br />
El control Cronómetro responde al evento Timer, cuya<br />
descripción es:<br />
Evento Descripción<br />
Timer Ocurre cuando el número de milisegundos<br />
especificado<br />
transcurrido.<br />
en la propiedad Interval ha<br />
A manera de ejemplo vamos a desarrollar la siguiente<br />
aplicación que simula el funcionamiento de un reloj digital.<br />
Pág. 81
Para el desarrollo de la presente aplicación proceda a<br />
ubicar los siguientes controles sobre el formulario:<br />
indica:<br />
Form1<br />
Label1<br />
Text1<br />
Timer1<br />
Command1<br />
1 etiqueta<br />
1 cuadro de texto<br />
1 cronómetro<br />
1 botón de comando<br />
En seguida proceda a establecer las propiedades según se<br />
Nombre FrmReloj<br />
BorderStyle 3-Fixed Dialog<br />
Caption Reloj digital<br />
Nombre LblHora<br />
Caption Hora<br />
Nombre TxtHora<br />
Text<br />
Nombre Timer1<br />
Interval 500<br />
Nombre CmdTerminar<br />
Caption &Terminar<br />
Pág. 82
Seguidamente proceda a ingresar el código que se indica a<br />
continuación:<br />
Private Sub Form_Activate()<br />
End Sub<br />
TxtHora = Time()<br />
Private Sub Timer1_Timer()<br />
End Sub<br />
If TxtHora Time() Then<br />
End If<br />
TxtHora = Time()<br />
Private Sub CmdTerminar_Click()<br />
End<br />
End Sub<br />
Cuadro de imagen<br />
Un cuadro de imagen se utiliza para mostrar un archivo de<br />
imagen (BMP, GIF o JPG). Recorta el gráfico si el control no es<br />
lo bastante grande para mostrar la imagen completa.<br />
Propiedad Descripción<br />
AutoSize Especifica si el control ajusta<br />
automáticamente su tamaño para mostrar un<br />
gráfico <strong>completo</strong>.<br />
Picture Especifica<br />
control.<br />
el archivo de imagen para el<br />
Pág. 83
El evento que suele manejarse para este control es<br />
MouseMove, cuya descripción es:<br />
Evento Descripción<br />
MouseMove Ocurre cuando el usuario mueve el ratón sobre<br />
el control.<br />
Imagen<br />
Un control imagen se utilizará para mostrar un archivo de<br />
imagen (BMP, GIF o JPG) de manera similar a un Cuadro de<br />
imagen. Sin embargo, este control utiliza menos recursos del<br />
sistema y se actualiza con más rapidez que un cuadro de imagen.<br />
Propiedad Descripción<br />
Picture Especifica<br />
control.<br />
el archivo de imagen para el<br />
Stretch Especifica como se ajusta el tamaño del<br />
archivo gráfico para que quepa dentro del<br />
control imagen.<br />
Para este control también se suele manejar el evento<br />
MouseMove.<br />
Barras de desplazamiento horizontal<br />
Una barra de desplazamiento horizontal representa un valor<br />
entero, la cual tiene un cuadrado que se desplaza a lo largo de<br />
la misma para fijar un valor.<br />
Pág. 84
La posición más a la izquierda se corresponde con el valor<br />
mínimo, la posición más a la derecha con el valor máximo, y<br />
cualquier otra posición es un valor entre ellos dos.<br />
Propiedad Descripción<br />
Max Especifica el valor máximo que puede tomar la<br />
propiedad Value.<br />
Min Especifica el valor mínimo que puede tomar la<br />
propiedad Value.<br />
LargeChange Especifica en cuanto cambiará el valor de la<br />
propiedad Value cuando el usuario haga click<br />
antes o después del cuadrado de<br />
SmallChange<br />
desplazamiento.<br />
Especifica en cuanto cambiará el valor de la<br />
propiedad Value cuando el usuario haga click<br />
en alguna de las flechas de los extremos de<br />
la barra.<br />
Value Especifica el valor del control, este se<br />
encuentra siempre entre los valores de las<br />
propiedades Min y Max.<br />
Las barras de desplazamientos responden a los eventos:<br />
Evento Descripción<br />
Change Ocurre inmediatamente después que el cuadrado<br />
de desplazamiento ha sido movido.<br />
Scroll Ocurre mientras el cuadrado de desplazamiento<br />
está siendo movido (este evento sólo ocurre<br />
cuando el cuadrado es arrastrado).<br />
Barras de desplazamiento vertical<br />
Pág. 85
Una barra de desplazamiento vertical representa un valor<br />
entero, la cual tiene un cuadrado que se desplaza a lo largo de<br />
la misma para fijar un valor.<br />
La posición más hacia arriba se corresponde con el valor<br />
mínimo, la posición más hacia abajo se corresponde con el valor<br />
máximo, y cualquier otra posición es un valor entre ellos dos.<br />
Las propiedades y eventos de las barras de desplazamiento<br />
horizontal y vertical son análogas.<br />
Como ejemplo, vamos a construir una aplicación que permita<br />
cambiar el color de fondo de un cuadro de imagen, mediante tres<br />
barras de desplazamiento (rojo, verde y azul).<br />
Para el desarrollo de la presente aplicación proceda a<br />
ubicar los siguientes controles en el formulario:<br />
3 etiquetas<br />
Pág. 86
indica:<br />
Form1<br />
Label1<br />
Label2<br />
Label3<br />
HScroll1<br />
HScroll2<br />
3 barras de desplazamiento horizontal<br />
1 cuadro de imagen<br />
En seguida proceda a establecer las propiedades según se<br />
Nombre FrmColores<br />
BorderStyle 3-Fixed Dialog<br />
Caption Colores<br />
Nombre LblRojo<br />
Caption Rojo<br />
Nombre LblVerde<br />
Caption Verde<br />
Nombre LblAzul<br />
Caption Azul<br />
Nombre HSRojo<br />
LargeChange 10<br />
Max 255<br />
Min 0<br />
SmallChange 1<br />
Value 255<br />
Pág. 87
HScroll3<br />
Picture1<br />
Nombre HSVerde<br />
LargeChange 10<br />
Max 255<br />
Min 0<br />
SmallChange 1<br />
Value 0<br />
Nombre HSAzul<br />
LargeChange 10<br />
Max 255<br />
Min 0<br />
SmallChange 1<br />
Value 0<br />
Nombre PicFondo<br />
BackColor &H000000FF&<br />
Seguidamente proceda a ingresar el código que se indica a<br />
continuación:<br />
Private Sub HSRojo_Change()<br />
End Sub<br />
PicFondo.BackColor = RGB(HSRojo, HSVerde, HSAzul)<br />
Private Sub HSVerde_Change()<br />
End Sub<br />
PicFondo.BackColor = RGB(HSRojo, HSVerde, HSAzul)<br />
Private Sub HSAzul_Change()<br />
Pág. 88
End Sub<br />
PicFondo.BackColor = RGB(HSRojo, HSVerde, HSAzul)<br />
En el código anterior se debió colocar HSRojo.Value,<br />
HSVerde.Value y HSAzul.Value, pero debido a que la propiedad<br />
Value es por defecto se puede omitir.<br />
Cuadro de lista de unidades<br />
Un cuadro de lista de unidades permite al usuario<br />
seleccionar una unidad de disco válida en tiempo de ejecución.<br />
Utilice este control para presentar una lista de todas las<br />
unidades válidas del sistema.<br />
Propiedad Descripción<br />
Drive Especifica la unidad seleccionada en tiempo<br />
de ejecución.<br />
Este control responde al evento Change, cuya descripción<br />
es la siguiente:<br />
Evento Descripción<br />
Change Ocurre cuando el usuario hace click sobre la<br />
unidad que desea seleccionar. El evento<br />
Change también ocurre si se selecciona la<br />
unidad mediante el teclado.<br />
Cuadro de lista de directorios<br />
Pág. 89
Un cuadro de lista de directorios muestra directorios y<br />
rutas de acceso en tiempo de ejecución. Utilice este control<br />
para mostrar una lista jerárquica de directorios.<br />
Propiedad Descripción<br />
Path Especifica la ruta de acceso actual.<br />
Un cuadro de lista de directorios también responde al<br />
evento Change.<br />
Cuadro de lista de archivos<br />
Un cuadro de lista de archivos encuentra y muestra los<br />
archivos del directorio especificado por la propiedad Path en<br />
tiempo de ejecución. Utilice este control para mostrar una<br />
lista de los archivos seleccionados por tipo.<br />
Propiedad Descripción<br />
Path Especifica la ruta de acceso actual.<br />
Pattern Especifica el tipo de archivo que se desea<br />
visualizar en el control.<br />
List Devuelve los elementos contenidos en la parte<br />
de lista del control.<br />
ListIndex Especifica el índice del elemento<br />
seleccionado actualmente en el control.<br />
Como ejemplo vamos a desarrollar una aplicación que<br />
permita el manejo de unidades, carpetas y archivos. El usuario<br />
Pág. 90
puede seleccionar la unidad actual de trabajo, la carpeta y el<br />
archivo y poder visualizar su contenido (en este caso archivos<br />
gráficos *.JPG).<br />
Para el desarrollo de la presente aplicación proceda a<br />
ubicar los siguientes controles en el formulario:<br />
indica:<br />
Form1<br />
4 etiquetas<br />
1 cuadro de lista de unidades<br />
1 cuadro de lista de directorios<br />
1 cuadro de lista de archivos<br />
1 imagen<br />
En seguida proceda a establecer las propiedades según se<br />
Nombre FrmVisor<br />
Caption Visor<br />
Pág. 91
Label1<br />
Label2<br />
Label3<br />
Label4<br />
Drive1<br />
Dir1<br />
File1<br />
Image1<br />
Nombre LblUnidad<br />
Caption Unidad<br />
Nombre LblCarpeta<br />
Caption Carpeta<br />
Nombre LblArchivo<br />
Caption Archivo<br />
Nombre LblVista<br />
Caption Vista previa<br />
Nombre Drive1<br />
Nombre Dir1<br />
Nombre File1<br />
Pattern *.JPG<br />
Nombre ImgVista<br />
Stretch True<br />
Seguidamente proceda a ingresar el código que se indica a<br />
continuación:<br />
Private Sub Drive1_Change()<br />
Pág. 92
On Error GoTo DRIVE_ERROR<br />
Dir<strong>1.</strong>Path = Drive<strong>1.</strong>Drive<br />
Exit Sub<br />
DRIVE_ERROR:<br />
End Sub<br />
MsgBox “ERROR: Unidad no preparada”, vbCritical, “Error”<br />
Exit Sub<br />
Private Sub Dir1_Change()<br />
End Sub<br />
File<strong>1.</strong>Path = Dir<strong>1.</strong>Path<br />
Private Sub File1_Click()<br />
End Sub<br />
Dim ARCHIVO As String<br />
ARCHIVO = File<strong>1.</strong>Path & “\”<br />
ARCHIVO = ARCHIVO & File<strong>1.</strong>List(File<strong>1.</strong>ListIndex)<br />
ImgVista.Picture = LoadPicture(ARCHIVO)<br />
La instrucción On Error activa una rutina de control de<br />
errores y especifica la ubicación de la misma en un<br />
procedimiento.<br />
LA FUNCIÓN MSGBOX<br />
A menudo habrá situaciones en las cuales tendrá que<br />
presentar algún mensaje (por ejemplo una pregunta) y en función<br />
Pág. 93
de la respuesta del usuario se ejecutará una determinada<br />
acción.<br />
La función MsgBox() muestra un cuadro de diálogo<br />
predefinido y retorna un valor de tipo entero dependiendo del<br />
botón seleccionado por el usuario. Su sintaxis es de la<br />
siguiente forma:<br />
VALOR = MsgBox(MENSAJE [, BOTÓN + ICONO, TÍTULO])<br />
Donde MENSAJE se refiere a una expresión de cadena que se<br />
muestra como mensaje en el cuadro de diálogo.<br />
BOTÓN es una expresión numérica que se refiere al tipo y<br />
cantidad de botones a utilizar.<br />
ICONO es una expresión numérica que se refiere al estilo<br />
de icono que se va ha utilizar.<br />
TÍTULO es una texto que se mostrará en la barra de título<br />
de la caja de diálogo.<br />
Tipo de botón<br />
Valor Botón Nombre<br />
0 Aceptar vbOKOnly<br />
Pág. 94
1 Aceptar y Cancelar vbOKCancel<br />
2 Anular, Reintentar, Ignorar vbAbortRetryIgnore<br />
3 Sí, No y Cancelar vbYesNoCancel<br />
4 Sí y No vbYesNo<br />
5 Reintentar y Cancelar vbRetryCancel<br />
Tipo de icono<br />
Valor Icono Nombre<br />
16 Mensaje crítico vbCritical<br />
32 Signo de interrogación vbQuestion<br />
48 Signo de exclamación vbExclamation<br />
64 Signo de información vbInformation<br />
Valores retornados<br />
Valor Botón Nombre<br />
1 Aceptar vbOK<br />
2 Cancelar vbCancel<br />
3 Anular vbAbort<br />
4 Reintentar vbRetry<br />
5 Ignorar vbIgnore<br />
6 Sí vbYes<br />
7 No vbNo<br />
Como ejemplo vamos a construir un formulario que presente<br />
un botón “Salir”, de tal forma que cuando el usuario pulse<br />
dicho botón se presente el siguiente mensaje:<br />
Pág. 95
En caso de que el usuario elija la opción “Sí”, la<br />
aplicación debe terminar. En caso contrario, es decir si el<br />
usuario elige la opción “No”, se debe proseguir con la<br />
aplicación.<br />
Para el desarrollo del presente ejemplo, proceda a ubicar<br />
sobre el formulario un botón de comando (CmdSalir), a<br />
continuación ingresar el siguiente código:<br />
Private Sub CmdSalir_Click()<br />
End Sub<br />
Dim RESP As Integer<br />
RESP = MsgBox(“Desea terminar la aplicación?”, _<br />
vbQuestion + vbYesNo, “Pregunta”)<br />
If RESP = vbYes Then<br />
End If<br />
End<br />
Para ilustrar mejor el uso de la función MsgBox() vamos a<br />
desarrollar la siguiente aplicación que permite mostrar los<br />
diferentes tipos de botones e iconos generados por la función.<br />
Pág. 96
Para ello proceda a ubicar los siguientes controles en el<br />
formulario:<br />
indica:<br />
Form1<br />
List1<br />
List2<br />
Command1<br />
2 cuadros de lista<br />
1 botón de comando<br />
En seguida proceda a establecer las propiedades según se<br />
Nombre FrmFuncionMsgBox<br />
BorderStyle 3-Fixed Dialog<br />
Caption Función MsgBox<br />
Nombre LstBoton<br />
Nombre LstIcono<br />
Pág. 97
Nombre CmdMensaje<br />
Caption &Mensaje<br />
Seguidamente proceda a ingresar el código que se indica a<br />
continuación:<br />
Private Sub Form_Load()<br />
End Sub<br />
LstBoton.AddItem “Aceptar”<br />
LstBoton.AddItem “Aceptar y Cancelar”<br />
LstBoton.AddItem “Anular, Reintentar, Ignorar”<br />
LstBoton.AddItem “Sí, No y Cancelar”<br />
LstBoton.AddItem “Sí y No”<br />
LstBoton.AddItem “Reintentar y Cancelar”<br />
LstIcono.AddItem “Mensaje crítico”<br />
LstIcono.AddItem “Signo de interrogación”<br />
LstIcono.AddItem “Signo de exclamación”<br />
LstIcono.AddItem “Signo de información”<br />
Private Sub CmdMensaje_Click()<br />
End Sub<br />
Dim RESP As Integer, BOTON As Integer, ICONO As Integer<br />
BOTON = LstBoton.ListIndex<br />
ICONO = (LstIcono.ListIndex + 1) * 16<br />
RESP = MsgBox(“Hola Mundo”, BOTON + ICONO, “Ejemplo”)<br />
Pág. 98
CAPÍTULO 5<br />
EL FORMULARIO<br />
Un formulario es un objeto contenedor que sirve para<br />
diseñar la interfaz de usuario. En el formulario se colocan los<br />
controles para que el usuario pueda interactuar con la<br />
aplicación de una manera fácil e intuitiva.<br />
Los formularios tienen sus propias propiedades, eventos y<br />
métodos con los que se puede controlar su apariencia y<br />
comportamiento, muchos de los cuales ya han sido utilizados en<br />
las aplicaciones de los capítulos anteriores y que a<br />
continuación pasamos a describir.<br />
Pág. 99
Propiedad Descripción<br />
AutoRedraw Especifica si se activa el redibujado<br />
automático del formulario.<br />
BackColor Especifica el color de fondo del formulario.<br />
BorderStyle Especifica un estilo de borde para el<br />
formulario.<br />
Caption Especifica el texto que se muestra en la<br />
barra de título del formulario.<br />
ControlBox Especifica si aparece un icono de menú<br />
ForeColor<br />
desplegable en el ángulo superior izquierdo<br />
del formulario.<br />
Especifica el color de primer plano utilizado<br />
para mostrar texto sobre el formulario.<br />
Height Especifica el alto del formulario. Se mide en<br />
“twips”.<br />
Icon Especifica el icono que se muestra para un<br />
formulario.<br />
MaxButton Especifica si el formulario tiene un botón<br />
Maximizar.<br />
MinButton Especifica si el formulario tiene un botón<br />
Minimizar.<br />
Picture Especifica el archivo de imagen que se va ha<br />
mostrar como fondo para el formulario.<br />
StartUpPosition Especifica la posición del formulario la<br />
Visible<br />
primera vez que se ejecuta.<br />
Establece si el formulario es visible o está<br />
oculto.<br />
Width Especifica el ancho del formulario. Se mide<br />
en “twips”.<br />
WindowState Establece el estado del formulario (normal,<br />
minimizado o maximizado).<br />
Pág. 100
Nota<br />
Un twip es una unidad independiente de la pantalla<br />
utilizada para asegurar que la colocación y la proporción de<br />
los elementos de la pantalla de la aplicación son los mismos en<br />
todos los sistemas de pantallas. Un twip es igual a 1/20 de un<br />
punto de impresora. Existen aproximadamente 1440 twips en una<br />
pulgada o 567 twips en un centímetro.<br />
Los eventos a los que responde un formulario son los<br />
siguientes:<br />
Evento Descripción<br />
Activate Ocurre cuando el formulario se convierte en<br />
ventana activa.<br />
Deactivate Ocurre cuando el formulario deja de ser la<br />
ventana activa.<br />
Load Ocurre cuando el formulario se carga en la<br />
memoria.<br />
MouseDown Ocurre cuando el usuario pulsa el botón<br />
derecho del ratón sobre el formulario.<br />
QueryUnload Ocurre antes de iniciarse el proceso de<br />
descarga<br />
Unload).<br />
del formulario (antes del evento<br />
Resize Ocurre cuando se muestra primero el<br />
Unload<br />
formulario o se cambian sus dimensiones.<br />
Ocurre cuando el formulario se descarga de la<br />
memoria.<br />
Pág. 101
Los métodos que se pueden utilizar con un formulario son<br />
los siguientes:<br />
Método Descripción<br />
Hide Oculta un formulario.<br />
PopupMenu Presenta un menú popup en la posición actual<br />
del ratón.<br />
Print Imprime un valor sobre el formulario.<br />
Refresh Vuelve a pintar un formulario y actualiza<br />
Show<br />
todos los valores contenidos en él.<br />
Muestra un formulario y determina si es modal<br />
o carece de modo. Si el formulario a mostrar<br />
no está cargado <strong>Visual</strong> <strong>Basic</strong> lo carga<br />
automáticamente.<br />
Como ejemplo vamos a desarrollar una aplicación que<br />
utilice dos formularios. Desde el primer formulario el usuario<br />
podrá ir al segundo formulario y viceversa.<br />
Pág. 102
Para el desarrollo de la presente aplicación proceda a<br />
crear un nuevo proyecto. Seguidamente debe ubicar dos botones<br />
de comando en el formulario. Luego establezca las siguientes<br />
propiedades:<br />
Form1<br />
Command1<br />
Command2<br />
Nombre Form1<br />
Caption Primer formulario<br />
Nombre CmdIr<br />
Caption &Ir<br />
Nombre CmdSalir<br />
Caption &Salir<br />
Seguidamente procede a ingresar el código que se muestra a<br />
continuación:<br />
Private Sub CmdIr_Click()<br />
End Sub<br />
Form2.Show<br />
Form<strong>1.</strong>Hide<br />
Private Sub CmdSalir_Click()<br />
End<br />
End Sub<br />
Pág. 103
Luego debe añadir un formulario adicional al proyecto.<br />
Para tal fin, seleccione el menú Proyecto y elija la opción<br />
Agregar formulario.<br />
Del cuadro de diálogo que se presenta elija el icono<br />
Formulario y haga click en el botón “Abrir”, tal como se indica<br />
en la figura. En ese instante se añadirá un nuevo formulario al<br />
proyecto. Luego, proceda a ubicar un botón de comandos en el<br />
formulario que acaba de añadir y establezca las siguientes<br />
propiedades:<br />
Form2<br />
Nombre Form2<br />
Caption Segundo formulario<br />
ControlBox False<br />
Pág. 104
Command2<br />
Nombre CmdVolver<br />
Caption &Volver<br />
En seguida proceda a ingresar el código que se indica a<br />
continuación:<br />
Private Sub CmdVolver_Click()<br />
End Sub<br />
Form<strong>1.</strong>Show<br />
Form2.Hide<br />
ESTILOS DE FORMULARIO<br />
<strong>Visual</strong> <strong>Basic</strong> cuenta con seis diferentes estilos de<br />
formulario, cuya descripción es la siguiente:<br />
Valor Estilo Descripción<br />
0 None No presenta ningún borde.<br />
1 Fixed Single Puede incluir un Menú de control,<br />
una Barra de título , un botón<br />
Maximizar y un botón Minimizar.<br />
Sólo puede cambiar de tamaño<br />
mediante los botones Maximizar y<br />
2 Sizable<br />
Minimizar.<br />
(Predeterminado). Puede cambiar de<br />
tamaño mediante cualquiera de los<br />
elementos opcionales de borde<br />
indicados para Fixed Single.<br />
Pág. 105
Valor Estilo Descripción<br />
3 Fixed Dialog Puede incluir un Menú de control y<br />
una Barra de título, pero no los<br />
botones Maximizar ni Minimizar. No<br />
puede cambiar de tamaño.<br />
4 Fixed ToolWindow Sólo muestra el botón Cerrar y el<br />
texto de la barra de título aparece<br />
5 Sizable ToolWindow<br />
con un tamaño de fuente reducido.<br />
No puede cambiar su tamaño.<br />
Sólo muestra el botón Cerrar y el<br />
texto de la barra de título aparece<br />
con un tamaño de fuente reducido.<br />
Puede cambiar de tamaño.<br />
Como ejemplo vamos a desarrollar una aplicación que<br />
permita representar los diferentes estilos de formulario de<br />
<strong>Visual</strong> <strong>Basic</strong>.<br />
Pág. 106
Para el desarrollo de la presente aplicación proceda a<br />
crear un nuevo proyecto y luego ubique los siguientes controles<br />
en el formulario:<br />
1 cuadro de lista<br />
2 botones de comando<br />
Luego debe establecer las propiedades que se indican a<br />
continuación:<br />
Form1<br />
List1<br />
Command1<br />
Command2<br />
Nombre FrmPrincipal<br />
Caption Estilos de formulario<br />
BorderStyle 3-Fixed Dialog<br />
Nombre LstTipoForm<br />
List 0-None<br />
1-Fixed Single<br />
2-Sizable<br />
3-Fixed Dialog<br />
4-Fixed ToolWindow<br />
5-Sizable ToolWindow<br />
Nombre CmdMostrar<br />
Caption &Mostrar<br />
Nombre CmdSalir<br />
Caption &Salir<br />
Pág. 107
Seguidamente procede a ingresar el código que se muestra a<br />
continuación:<br />
Private Sub Form_Load()<br />
End Sub<br />
Load FrmNone<br />
Load FrmFixedSingle<br />
Load FrmSizable<br />
Load FrmFixedDialog<br />
Load FrmFixedToolWindow<br />
Load FrmSizableToolWindow<br />
Private Sub CmdMostrar_Click()<br />
End Sub<br />
Dim OP As Integer<br />
OP = LstTipoForm.ListIndex<br />
Select Case OP<br />
Case 0 : FrmNone.Show vbModal<br />
Case 1 : FrmFixedSingle.Show vbModal<br />
Case 2 : FrmSizable.Show vbModal<br />
Case 3 : FrmFixedDialog.Show vbModal<br />
Case 4 : FrmFixedToolWindow.Show vbModal<br />
Case 5 : FrmSizableToolWindow.Show vbModal<br />
Case Else<br />
End Select<br />
MsgBox “Debe seleccionar estilo de formulario”<br />
Pág. 108
Private Sub LstTipoForm_DblClick()<br />
End Sub<br />
Call CmdMostrar_Click<br />
Private Sub CmdSalir_Click()<br />
End<br />
End Sub<br />
Seguidamente proceda a añadir los formularios para las<br />
diferentes opciones del cuadro de lista. Cambie los nombres de<br />
los formularios según se indica:<br />
Formulario Nombre<br />
Form2 FrmNone<br />
Form3 FrmFixedSingle<br />
Form4 FrmSizable<br />
Form5 FrmFixedDialog<br />
Form6 FrmFixedToolWindow<br />
Form7 FrmSizableToolWindow<br />
Luego debe activar el formulario FrmNone, ubicar un botón<br />
de comandos sobre el mismo y establecer las siguientes<br />
propiedades:<br />
Form2<br />
Nombre FrmNone<br />
BorderStyle 0-None<br />
Caption None<br />
Pág. 109
Command1<br />
Nombre CmdVolver<br />
Caption &Volver<br />
Una vez establecidas las propiedades, proceda a ingresar<br />
el código que se muestra a continuación:<br />
Private Sub CmdVolver_Click()<br />
End Sub<br />
Unload Me<br />
Para concluir con el diseño de la aplicación, simplemente<br />
repita el procedimiento anterior para los demás tipos de<br />
formularios.<br />
Como habrá podido observar, al mostrar un formulario<br />
mediante el método Show podemos hacerlo de forma modal<br />
(vbModal) o no modal (opción por defecto). Un formulario modal<br />
es aquel que necesita cerrarse antes de pasar el enfoque a otro<br />
formulario. Un formulario no modal no requiere cerrarse para<br />
pasar el enfoque a otro formulario.<br />
PASANDO VALORES ENTRE FORMULARIOS<br />
Muchas veces se requieren pasar valores de un formulario a<br />
otro, esto se puede realizar mediante el uso módulos estándar,<br />
los cuales son contenedores de procedimientos y declaraciones a<br />
los que tienen acceso otros módulos de la aplicación.<br />
Pág. 110
Como ejemplo vamos a construir la siguiente aplicación, la<br />
cual envía un mensaje de texto del primer formulario hacia el<br />
segundo formulario.<br />
Para el desarrollo de la presente aplicación proceda a<br />
crear un nuevo proyecto y añada un formulario adicional, de tal<br />
forma que tenga los formularios Form1 y Form2. Seguidamente<br />
ubicar los siguientes controles:<br />
Form1 Form2<br />
Text1 TxtMensaje1 Text1 TxtMensaje2<br />
Command1 CmdEnviar Command1 CmdRecibir<br />
Command2 CmdSalir Command2 CmdVolver<br />
A continuación proceda a ingresar el código que se indica<br />
para el primer formulario (Form1):<br />
Pág. 111
Private Sub CmdEnviar_Click()<br />
End Sub<br />
Mensaje = TxtMensaje1<br />
Form<strong>1.</strong>Hide<br />
Form2.Show<br />
Private Sub CmdSalir_Click()<br />
End<br />
End Sub<br />
Para el segundo formulario (Form2) proceda a ingresar el<br />
código siguiente:<br />
Private Sub CmdRecibir_Click()<br />
End Sub<br />
TxtMensaje2 = Mensaje<br />
Private Sub CmdVolver_Click()<br />
End Sub<br />
Form2.Hide<br />
Form<strong>1.</strong>Show<br />
Seguidamente debe añadir un módulo estándar al proyecto,<br />
para ello, seleccione el Menú Proyecto y elija la opción<br />
Agregar módulo, se debe presentar un cuadro de diálogo similar<br />
a la figura mostrada, en el cual debe dar click en el botón<br />
“Abrir”.<br />
Pág. 112
Seguidamente proceda a declarar la variable Mensaje como<br />
“pública” en la sección de declaraciones del módulo que acaba<br />
de añadir:<br />
Una variable pública (Public) es una variable que se<br />
declara a nivel de módulo y se le puede acceder desde cualquier<br />
otro módulo.<br />
Pág. 113
FORMULARIOS MDI<br />
Un formulario MDI (Interfaz de Documentos Múltiples) es<br />
una ventana que actúa como fondo de una aplicación y es el<br />
contenedor (ventana padre) de otros formularios (ventanas<br />
hijas).<br />
En una aplicación MDI pueden haber varias ventanas hijas,<br />
pero sólo una ventana padre por aplicación. Para que una<br />
ventana actúe como hija debe tener su propiedad MDIChild<br />
establecida a True.<br />
Como ejemplo vamos a desarrollar una aplicación MDI que<br />
incluya tres ventanas hijas. Para tal fin proceda a crear un<br />
nuevo proyecto y seguidamente agregar dos formularios (simples)<br />
al mismo.<br />
Pág. 114
No olvide establecer la propiedad MDIChild de los<br />
formularios Form1, Form2 y Form3 a True.<br />
Luego, debemos agregar el formulario MDI, para ello<br />
acceder al Menú Proyecto y elegir la opción Agregar formulario<br />
MDI, del cuadro de diálogo que se presenta hacer click en el<br />
botón “Abrir”.<br />
A continuación dar doble click sobre el formulario MDI e<br />
ingresar el siguiente código:<br />
Private Sub MDIForm_Load()<br />
End Sub<br />
Form<strong>1.</strong>Show<br />
Form2.Show<br />
Form3.Show<br />
Pág. 115
Ahora sólo tiene que indicarle a <strong>Visual</strong> <strong>Basic</strong> que el<br />
formulario de arranque (inicial) será el formulario MDI. Para<br />
ello vaya al Menú Proyecto y elija la opción Propiedades de<br />
Proyecto. En el cuadro combinado “Objeto inicial” seleccionar<br />
MDIForm1, tal como se indica en la figura:<br />
Eso es todo, ahora simplemente tiene que ejecutar su<br />
aplicación.<br />
Cabe destacar que en los formularios MDI por lo general no<br />
se pueden incluir controles, debido a ello se suele trabajar<br />
con menús de opciones o barras de herramientas para indicar<br />
alguna acción a realizar.<br />
Pág. 116
CREACIÓN DE MENÚS<br />
Un menú es un conjunto de opciones que se presentan al<br />
usuario, entre las cuales debe elegir una de ellas. Dependiendo<br />
de la decisión se realizarán una serie de acciones.<br />
Para diseñar un menú cualquiera dar click derecho sobre el<br />
formulario y del menú emergente que se presenta elegir la<br />
opción Editor de menús.<br />
Pág. 117
<strong>Basic</strong>.<br />
En seguida se ha de presentar el Editor de menús de <strong>Visual</strong><br />
Para crear un menú, tener en cuenta los siguiente<br />
procedimientos:<br />
• Ingresar el Editor de menús.<br />
• Introducir el título del menú en el cuadro de texto Caption,<br />
el cual aparecerá en la barra de menús.<br />
• Introducir un nombre para el menú en el cuadro de texto Name,<br />
el cual será utilizado en el código para referirse al menú.<br />
• Introducir los elementos que componen el menú, para ello<br />
escriba en los cuadros de texto Caption y Name el título y el<br />
nombre del correspondiente elemento del menú.<br />
Pág. 118
• Para diferenciar un elemento del menú del propio menú, hay<br />
que sangrar el título del elemento, para tal fin,<br />
selecciónelo y haga click en el botón flecha hacia la derecha<br />
( ).<br />
• Un elemento de menú puede ser una orden (si el elemento<br />
siguiente aparece sangrado al mismo nivel) o un submenú (si<br />
el elemento siguiente aparece sangrado un nivel más).<br />
• Utilizando separadores puede agrupar las órdenes en función<br />
de lo que realizan. Para insertar un separador, escriba un<br />
único guión (-) en el cuadro Caption del Editor de menús.<br />
Tiene que especificar también un nombre para el separador.<br />
• Para añadir un acelerador (una tecla o combinación de teclas<br />
que permiten activar un menú), utilizar la propiedad<br />
Shortcut.<br />
• La propiedad Checked es útil para indicar si una orden está<br />
activa o no lo está. Cuando se especifica esta propiedad<br />
aparece una marca (3) a la izquierda del elemento de menú.<br />
• La propiedad Enabled es útil para desactivar una orden en un<br />
momento en el cual no tiene sentido que esté activa.<br />
• La propiedad Visible es útil cuando durante la ejecución se<br />
desea ocultar un elemento de menú.<br />
• Cerrar el Editor de menús, para ello una vez que haya<br />
finalizado su diseño pulse el botón “Aceptar”.<br />
Pág. 119
Como ejercicio intente construir el menú mostrado en la<br />
figura anterior.<br />
Caption Name ShortCut<br />
&Archivo MnuArchivo Ninguno<br />
. . . &Artículo MnuArchivoArticulo Ninguno<br />
. . . &Cliente MnuArchivoCliente Ninguno<br />
. . . &Vendedor MnuArchivoVendedor Ninguno<br />
. . . - MnuArchivoLinea Ninguno<br />
. . . &Salir MnuArchivoSalir Ctrl + X<br />
&Proceso MnuProceso Ninguno<br />
. . . &Pedido MnuProcesoPedido Ninguno<br />
. . . &Facturación MnuProcesoFacturacion Ninguno<br />
&Reporte MnuReporte Ninguno<br />
. . . &Registro de ventas MnuReporteRegVentas Ninguno<br />
. . . Catálogo de &artículos<br />
Ninguno<br />
. . . - MnuReporteLinea Ninguno<br />
. . . &Cliente del mes MnuReporteClienteMes Ninguno<br />
. . . &Vendedor del mes MnuReporteVendMes Ninguno<br />
Ay&uda MnuAyuda Ninguno<br />
. . . &Contenido MnuAyudaContenido Ninguno<br />
. . . &Indice MnuAyudaIndice Ninguno<br />
. . . &Búsqueda MnuAyudaBusqueda Ninguno<br />
. . . - MnuAyudaLinea Ninguno<br />
. . . &Acerca de MnuAyudaAbout Ninguno<br />
Pág. 120
Para probar el menú que acaba de crear, ingrese el<br />
siguiente código:<br />
Private Sub MnuArchivoArticulo_Click()<br />
End Sub<br />
MsgBox “Seleccionó la opción Artículo”<br />
Private Sub MnuArchivoCliente_Click()<br />
End Sub<br />
MsgBox “Seleccionó la opción Cliente”<br />
Private Sub MnuArchivoVendedor_Click()<br />
End Sub<br />
MsgBox “Seleccionó la opción Vendedor”<br />
Private Sub MnuArchivoSalir_Click()<br />
End Sub<br />
Unload Me<br />
Private Sub MDIForm_Unload(Cancel As Integer)<br />
End Sub<br />
Dim RESP As Integer<br />
RESP = MsgBox(“¿Desea terminar la aplicación?”, _<br />
vbQuestion + vbYesNo, “Pregunta”)<br />
If RESP = vbYes Then<br />
End<br />
Else: Cancel = True<br />
End If<br />
Pág. 121
Luego al ejecutar su aplicación y seleccionar el menú<br />
Archivo, opción Artículo, el resultado será similar a la figura<br />
mostrada:<br />
Hasta ahora hemos programado la salida de una aplicación,<br />
asociando el código al botón “Salir”. Sin embargo, cuando el<br />
usuario hace click en el botón “Cerrar” de la barra de título o<br />
en la opción “Salir” del Menú de control del formulario, el<br />
código escrito para el botón “Salir” es ignorado.<br />
Para remediar esta situación, en el ejemplo anterior<br />
cuando el usuario pulsa el botón “Salir”, se invoca al evento<br />
Unload. La palabra reservada “Me” proporciona una forma de<br />
referirse al formulario desde donde se está ejecutando el<br />
código.<br />
Recordar que el evento Unload del formulario se<br />
desencadena cuando el usuario intenta cerrar el formulario<br />
mediante cualquiera de las formas descritas anteriormente.<br />
Para determinar si ocurre la descarga del formulario<br />
utilice el parámetro Cancel. Si Cancel es False ocurre la<br />
descarga, si Cancel es True impide que el formulario se quite.<br />
CREACIÓN DE UNA BARRA DE HERRAMIENTAS<br />
Pág. 122
Una barra de herramientas contiene botones con las<br />
opciones más utilizadas de un menú, de tal manera que el<br />
usuario haciendo click en dicho control activaría la opción<br />
indicada de una manera más rápida.<br />
Para crear una barra de herramientas debemos utilizar dos<br />
controles que no están en la lista de controles estándar, por<br />
tanto debemos agregar dichos controles que se encuentran en el<br />
componente Microsoft Windows Common Controls 6.0, tal como se<br />
indica a continuación:<br />
Pág. 123
Como ejemplo, vamos a crear la barra de herramientas de la<br />
figura mostrada:<br />
Para ello, ubicar un control ImageList sobre el<br />
formulario, para establecer sus propiedades dar click derecho<br />
sobre el control y elija la opción Propiedades.<br />
Pág. 124
Se ha de presentar un cuadro de diálogo similar a la<br />
figura mostrada:<br />
Activar la ficha Imágenes y pulsar el botón “Insertar<br />
imagen” para seleccionar las imágenes que se incluirán en el<br />
control ImageList.<br />
Para el ejemplo, debe incluir ocho imágenes que<br />
corresponden a cada uno de los botones de la barra de<br />
herramientas.<br />
Concluido el proceso anterior, proceda a ubicar un control<br />
Toolbar sobre el formulario. Luego hacer click derecho sobre<br />
dicho control y del menú emergente que se presenta seleccionar<br />
la opción Propiedades. Del cuadro de diálogo que se presenta en<br />
la ficha General establecer las siguientes propiedades:<br />
Pág. 125
Luego, en la ficha Botones pulse el botón “Insertar<br />
botón”. En el cuadro de texto Image se debe indicar un número<br />
que corresponde al orden de imagen a mostrar.<br />
Pág. 126
El lector debe continuar con este proceso hasta completar<br />
los botones restantes, según:<br />
Index ToolTipText Image<br />
1 Artículo 1<br />
2 Cliente 2<br />
3 Vendedor 3<br />
4 Pedido 4<br />
5 Facturación 5<br />
6 Registro de ventas 6<br />
7 Catálogo de artículos 7<br />
8 Ayuda 8<br />
Como el código a ejecutar tiene que ser el mismo cuando el<br />
usuario elija una opción del menú o de un click sobre un botón<br />
de la barra de herramientas se pueden programar procedimientos<br />
de usuario que realicen dichas tareas, luego se deben invocar a<br />
estos procedimientos tanto para las opciones del menú como para<br />
la barra de herramientas.<br />
Sin embargo, para el ejemplo el código es muy sencillo, ya<br />
que sólo muestra un mensaje con la opción seleccionada (esto<br />
por razones de simplicidad). Para probar la funcionalidad de la<br />
barra de herramientas que acaba de crear ingrese el siguiente<br />
código:<br />
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)<br />
Pág. 127
Select Case Button.Index<br />
End Sub<br />
End Select<br />
Case 1: MsgBox “Seleccionó la opción Artículo”<br />
Case 2: MsgBox “Seleccionó la opción Cliente”<br />
Case 3: MsgBox “Seleccionó la opción Vendedor”<br />
Case 4: MsgBox “Seleccionó la opción Pedido”<br />
Case 5: MsgBox “Seleccionó la opción Facturación”<br />
Case 6: MsgBox “Seleccionó la opción Registro de ventas”<br />
Case 7: MsgBox “Seleccionó opción Catálogo de artículos”<br />
Case 8: MsgBox “Seleccionó la opción Ayuda”<br />
El evento ButtonClick se dispara cuando el usuario hace<br />
click sobre un botón de la barra de herramientas. La propiedad<br />
Index permite identificar el número de botón pulsado.<br />
CREACIÓN DE UNA BARRA DE ESTADO<br />
Una barra de estado es un marco que se ubica en la parte<br />
inferior del formulario y puede contener varios paneles que<br />
informan al usuario acerca del estado de la aplicación. Para<br />
crear una barra de estado utilizar el control StatusBar, el<br />
cual forma de los controles personalizados que se encuentran en<br />
el componente Microsoft Windows Common Controls 6.0.<br />
Como ejemplo vamos a crear una barra de estado similar a<br />
la de la figura mostrada:<br />
Pág. 128
Para ello ubicar un control StatusBar sobre el formulario,<br />
dar click derecho sobre el mismo y en la ficha Paneles incluir<br />
una imagen para la hora del sistema.<br />
Pág. 129
El resto de propiedades se establecerán mediante código al<br />
momento de la carga del formulario.<br />
Private Sub MDIForm_Load()<br />
Dim I As Integer<br />
For I = 1 To 2<br />
Next<br />
End Sub<br />
StatusBar<strong>1.</strong>Panels.Add ' Se agregan 2 paneles más<br />
With StatusBar<strong>1.</strong>Panels<br />
End With<br />
.Item(1).Style = sbrTime<br />
.Item(2).Style = sbrCaps<br />
.Item(3).Style = sbrIns<br />
La propiedad Style permite mostrar el estado de las<br />
teclas, la hora y la fecha del sistema con un mínimo de código.<br />
Constante Valor Descripción<br />
sbrText 0 (Predeterminado). Texto o mapa de bits.<br />
sbrCaps 1 Tecla BLOQ MAYÚS.<br />
sbrNum 2 Tecla BLOQ NÚM.<br />
sbrIns 3 Tecla INS.<br />
sbrScrl 4 Tecla BLOQ DESPL.<br />
sbrTime 5 Muestra la hora actual con el formato del<br />
sistema.<br />
sbrDate 6 Muestra la fecha actual con el formato<br />
del sistema.<br />
Pág. 130
CREACIÓN DE UN MENÚ CONTEXTUAL<br />
Un menú contextual es un menú emergente (flotante) que se<br />
muestra sobre un formulario, independiente de la barra de<br />
menús. Para mostrar un menú contextual el usuario debe pulsar<br />
el botón derecho del ratón sobre el formulario.<br />
A menudo querrá usar un menú contextual para tener acceso<br />
a opciones que no se encuentran disponibles en la barra de<br />
menús. Para crear un menú que no se presente en la barra de<br />
menús, haga invisible un elemento de menú de nivel superior en<br />
tiempo de diseño (asegúrese de que la casilla de verificación<br />
Visible del Editor de menús no esté activada). Cuando <strong>Visual</strong><br />
<strong>Basic</strong> presenta un menú emergente, pasa por alto la propiedad<br />
Visible del menú de nivel superior especificado.<br />
Pág. 131
Para crear el menú contextual de la figura, debe ingresar<br />
al Editor de menús y añadir lo siguiente:<br />
Caption Name Visible<br />
&Herramientas MnuTools<br />
. . . Calculadora MnuToolsCalc 3<br />
. . . Calendario MnuToolsCalen 3<br />
. . . Solitario MnuToolsSol 3<br />
Seguidamente proceda a ingresar el código que se indica a<br />
continuación:<br />
Private Sub MDIForm_MouseDown(Button As Integer, _<br />
End Sub<br />
Shift As Integer, X As Single, Y As Single)<br />
If Button = vbRightButton Then<br />
End If<br />
PopupMenu MnuTools<br />
Private Sub MnuToolsCalc_Click()<br />
End Sub<br />
Dim I<br />
I = Shell(“C:\WINDOWS\CALC.EXE”, 1)<br />
Private Sub MnuToolsCalen_Click()<br />
End Sub<br />
FrmCalendario.Show<br />
Pág. 132
Private Sub MnuToolsSol_Click()<br />
End Sub<br />
Dim I<br />
I = Shell(“C:\WINDOWS\SOL.EXE”, 1)<br />
En el ejemplo anterior se asume que existe otro formulario<br />
de nombre FrmCalendario. Este puede ser construido usando el<br />
control MonthView.<br />
La función Shell ejecuta un programa ejecutable y devuelve<br />
un tipo Variant (Double) que representa la identificación de la<br />
tarea del programa si se ha ejecutado con éxito, en caso<br />
contrario devuelve cero.<br />
Pág. 133
CAPÍTULO 6<br />
CONTROLES ACTIVEX<br />
Los controles ActiveX son objetos que no forman parte del<br />
conjunto de controles estándar de <strong>Visual</strong> <strong>Basic</strong>, sino más bien<br />
han sido desarrollados por terceras personas.<br />
Los controles ActiveX existen como archivos independientes<br />
con extensión .OCX y deben ser cargados antes de utilizarse.<br />
Para ello ingresar al Menú Proyecto y elija la opción<br />
Componentes.<br />
Pág. 134
CONTROL ANIMATION<br />
El control Animation permite reproducir archivos de<br />
extensión .AVI que no tengan sonido para crear animaciones.<br />
Para agregar este control debe seleccionar el componente<br />
Microsoft Windows Common Controls-2 6.0.<br />
Propiedad Descripción<br />
AutoPlay Especifica si el archivo AVI se reproducirá<br />
automáticamente al cargarse el control.<br />
Método Descripción<br />
Close Cierra el archivo AVI abierto actualmente.<br />
Open Permite abrir el archivo AVI.<br />
Play Reproduce<br />
Animation.<br />
el archivo AVI en el control<br />
Stop Termina la reproducción del archivo AVI.<br />
Como ejemplo vamos a desarrollar un formulario que permita<br />
reproducir un archivo AVI, tal como se muestra en la figura:<br />
Pág. 135
Para ello crear un nuevo formulario y agregar un control<br />
Animation (Animation1) y dos botones de comando (CmdIniciar y<br />
CmdTerminar, respectivamente). Luego ingrese el código que se<br />
muestra:<br />
Private Sub CmdIniciar_Click()<br />
End Sub<br />
Dim RUTA As String<br />
RUTA = “C:\Archivos de programa\Microsoft <strong>Visual</strong> Studio\”<br />
RUTA = RUTA & “Common\Graphics\Videos\Filenuke.avi”<br />
Animation<strong>1.</strong>Open (RUTA)<br />
Animation<strong>1.</strong>Play<br />
Private Sub CmdTerminar_Click()<br />
Animation<strong>1.</strong>Close<br />
End<br />
End Sub<br />
CONTROL COMMONDIALOG<br />
El control CommonDialog proporciona un conjunto de cuadros<br />
de diálogo estándar que permiten realizar las operaciones más<br />
comúnmente empleadas en el diseño de aplicaciones, como abrir y<br />
guardar archivos, seleccionar colores y fuentes, imprimir, etc.<br />
Para agregar este control seleccionar el componente Microsoft<br />
Common Dialog Control 6.0.<br />
Pág. 136
Propiedad Descripción<br />
Color Especifica el color seleccionado.<br />
FileName Especifica la ruta y nombre del archivo<br />
seleccionado.<br />
Filter Especifica el tipo de archivos que se han de<br />
mostrar en un cuadro de diálogo Abrir o<br />
FilterIndex<br />
Guardar como.<br />
Especifica el filtro predeterminado para un<br />
cuadro de diálogo Abrir o Guardar como, en<br />
caso se esté utilizando varios filtros.<br />
Método Descripción<br />
ShowColor Presenta la paleta de colores.<br />
ShowFont Presenta el cuadro de diálogo Fuentes.<br />
ShowHelp Presenta la ayuda de Windows.<br />
ShowOpen Presenta el cuadro de diálogo Abrir.<br />
ShowPrinter Presenta el cuadro de diálogo Imprimir.<br />
ShowSave Presenta el cuadro de diálogo Guardar como.<br />
Como ejemplo vamos a desarrollar una aplicación que<br />
permite cambiar el color de fondo de un formulario en tiempo de<br />
ejecución. Para ello el usuario debe dar click en el botón<br />
“Cambiar color” y en seguida se presentará la paleta de colores<br />
de donde debe elegir el color deseado, tal como se muestra en<br />
la figura siguiente:<br />
Pág. 137
Para ello crear un nuevo formulario, agregarle un botón de<br />
comando (CmdCambiarColor) y un control CommonDialog. Luego<br />
ingresar el siguiente código:<br />
Private Sub CmdCambiarColor_Click()<br />
End Sub<br />
CommonDialog<strong>1.</strong>ShowColor<br />
Form<strong>1.</strong>BackColor = CommonDialog<strong>1.</strong>Color<br />
Como siguiente ejemplo vamos a desarrollar una aplicación<br />
que permita mostrar el contenido de un archivo JPG. Este deberá<br />
ser seleccionado por el usuario de un cuadro de diálogo Abrir,<br />
tal como se indica en la figura:<br />
Pág. 138
Al hacer click en el botón “Abrir”, el archivo<br />
seleccionado debe ser mostrado en el formulario:<br />
Para el diseño de esta aplicación crear un nuevo<br />
formulario y ubicar un botón de comando (CmdAbrirArchivo), un<br />
control imagen y un control CommonDialog.<br />
Pág. 139
Seguidamente ingrese el código que se indica a<br />
continuación:<br />
Private Sub CmdAbrirArchivo_Click()<br />
End Sub<br />
Dim FILTRO As String, FILE As String<br />
FILTRO = “Imágenes JPEG (*.JPG)|*.JPG”<br />
CommonDialog<strong>1.</strong>Filter = FILTRO<br />
CommonDialog<strong>1.</strong>ShowOpen<br />
FILE = CommonDialog<strong>1.</strong>FileName<br />
Image<strong>1.</strong>Picture = LoadPicture(FILE)<br />
CONTROL MARCHOSO<br />
El control Marchoso tiene como función reproducir archivos<br />
GIF animados. Para agregar este control seleccionar el<br />
componente Marchoso ActiveX Control Module. Este control fue<br />
creado en <strong>Visual</strong> <strong>Basic</strong> y si no lo tiene en su disco duro lo<br />
puede bajar de Internet.<br />
Propiedad Descripción<br />
FileName Especifica la ruta y nombre del archivo GIF<br />
animado.<br />
A manera de ejemplo vamos a diseñar un formulario que<br />
permita mostrar archivos GIF animados.<br />
Pág. 140
Para ello proceda a crear un nuevo formulario y ubicar un<br />
botón de comando (CmdVerGIFAnimado), un control Marchoso y un<br />
control CommonDialog. Luego, ingresar el siguiente código:<br />
Private Sub CmdVerGIFAnimado_Click()<br />
End Sub<br />
Dim FILTRO As String, FILE As String<br />
FILTRO = “Archivos GIF Animados (*.GIF)|*.GIF”<br />
CommonDialog<strong>1.</strong>Filter = FILTRO<br />
CommonDialog<strong>1.</strong>ShowOpen<br />
FILE = CommonDialog<strong>1.</strong>FileName<br />
Marchoso<strong>1.</strong>FileName = FILE<br />
CONTROL HIERARCHICAL FLEXGRID<br />
El control Hierarchical FlexGrid presenta una cuadrícula<br />
la cual permite mostrar datos en forma de celdas. Una celda es<br />
la región formada por la intersección de una fila y una<br />
columna.<br />
Pág. 141
Para agregar este control debe seleccionar el componente<br />
Microsoft Hierarchical FlexGrid Control 6.0 (OLEDB).<br />
Propiedad Descripción<br />
Col Especifica el número de columna de la celda<br />
actual.<br />
Cols Especifica el número total de columnas, fijas<br />
y no fijas.<br />
FixedCols Especifica el número de columnas fijas. El<br />
valor por defecto es <strong>1.</strong><br />
FixedRows Especifica el número de filas fijas. El valor<br />
por defecto es <strong>1.</strong><br />
Row Especifica<br />
actual.<br />
el número de fila de la celda<br />
Rows Especifica el número total de filas, fijas y<br />
no fijas.<br />
Text Especifica el contenido de la celda actual.<br />
TextArray Especifica el contenido de una celda elegida<br />
aleatoriamente, se debe especificar el índice<br />
de la celda a la cual se desea acceder.<br />
ScrollBars Especifica si la cuadrícula presenta barras<br />
de desplazamiento horizontales, verticales o<br />
ambas a la vez.<br />
Como ejemplo vamos a desarrollar una aplicación que<br />
visualice un cuadrado mágico de orden impar N . Un cuadrado<br />
mágico se compone de números enteros comprendidos entre 1 y<br />
2<br />
N<br />
. La suma de los números que figuran en cada fila, cada<br />
columna y cada diagonal son idénticos.<br />
Pág. 142
números:<br />
Por ejemplo para N = 5 tenemos el siguiente arreglo de<br />
Un método de construcción del cuadrado consiste en situar<br />
el número 1 en el centro de la primera fila, el número<br />
siguiente en la casilla situada encima y a la derecha, y así<br />
sucesivamente. Es preciso considerar que el cuadrado se cierra<br />
sobre sí mismo, la fila encima de la primera es de hecho la<br />
última y la columna a la derecha de la última es la primera.<br />
Sin embargo, cuando la posición del número caiga en una celda<br />
ocupada, se elige la casilla situada por debajo del número que<br />
acaba de ser situado.<br />
Para el desarrollo de la presente aplicación proceda a<br />
crear un nuevo formulario y ubicar una etiqueta (N?), un cuadro<br />
de texto (TxtN) y un control Hierarchical FlexGrid.<br />
Seguidamente debe ingresar el código que se indica:<br />
Private Sub TxtN_Change()<br />
Pág. 143
Dim N As Integer, I As Integer<br />
Dim FIL As Integer, COL As Integer<br />
N = Val(TxtN)<br />
FIL = 1<br />
COL = (N \ 2) + 1<br />
MSHFlexGrid<strong>1.</strong>Cols = N<br />
MSHFlexGrid<strong>1.</strong>Rows = N<br />
MSHFlexGrid<strong>1.</strong>FixedCols = 0<br />
MSHFlexGrid<strong>1.</strong>FixedRows = 0<br />
For I = 1 To N ^ 2<br />
Next<br />
MSHFlexGrid<strong>1.</strong>COL = COL - 1<br />
MSHFlexGrid<strong>1.</strong>Row = FIL - 1<br />
MSHFlexGrid<strong>1.</strong>Text = Str(I)<br />
If I Mod N = 0 Then<br />
Else<br />
End If<br />
End Sub<br />
CONTROL UPDOWN<br />
FIL = FIL + 1<br />
If FIL = N + 1 Then FIL = 1<br />
FIL = FIL - 1<br />
If FIL = 0 Then FIL = N<br />
COL = COL + 1<br />
If COL = N + 1 Then COL = 1<br />
Pág. 144
El control UpDown tiene dos botones con flechas en los que<br />
el usuario puede hacer clic para incrementar o disminuir un<br />
valor de un control asociado, denominado control auxiliar. A<br />
menudo, al usuario le parecerá que el control UpDown y su<br />
control auxiliar son un único control. Por lo general se usa un<br />
control UpDown con un cuadro de texto para solicitar al usuario<br />
una entrada numérica, una combinación que en ocasiones se<br />
denomina control Spinner.<br />
Para agregar un control UpDown debe seleccionar el<br />
componente Microsoft Windows Common Controls-2 6.0.<br />
Propiedad Descripción<br />
BuddyControl Especifica<br />
auxiliar.<br />
el control utilizado como<br />
BuddyProperty Especifica la propiedad utilizada para<br />
sincronizar<br />
auxiliar.<br />
el control UpDown con su<br />
Increment Especifica un valor que determina la cantidad<br />
en que varía la propiedad Value cuando se<br />
hace click en los botones del control UpDown.<br />
Max Especifica el valor máximo del intervalo de<br />
desplazamiento del control UpDown.<br />
Min Especifica el valor mínimo del intervalo de<br />
desplazamiento del control UpDown.<br />
SyncBuddy Especifica si el control UpDown sincroniza la<br />
propiedad Value con una propiedad del control<br />
auxiliar.<br />
Como ejemplo vamos a desarrollar una aplicación que<br />
permita mostrar el código ANSI de un carácter especificado.<br />
Pág. 145
Para tal fin crear un nuevo formulario y ubicar los<br />
siguientes controles: 2 etiquetas (Código ANSI, Carácter), 2<br />
cuadros de texto (TxtANSI, TxtCaracter) y 1 control UpDown.<br />
Luego establezca las propiedades que se indican:<br />
UpDown1<br />
Nombre UpDown1<br />
BuddyControl TxtANSI<br />
BuddyProperty Text<br />
Increment 1<br />
Max 255<br />
Min 0<br />
SyncBuddy True<br />
Seguidamente proceda a transcribir el siguiente código:<br />
Private Sub TxtANSI_Change()<br />
End Sub<br />
TxtCaracter = Chr(TxtANSI)<br />
CONTROL MONTHVIEW<br />
Pág. 146
El control MonthView permite al usuario la posibilidad de<br />
ver y establecer información de fechas mediante una interfaz<br />
similar a un calendario. Para agregar este control seleccionar<br />
el componente Microsoft Windows Common Controls-2 6.0.<br />
Propiedad Descripción<br />
Day Especifica el número de día mostrado.<br />
Month Especifica el número de mes mostrado.<br />
Year Especifica el número de año mostrado.<br />
Value Especifica la fecha mostrada.<br />
DayOfWeek Especifica el día de la semana<br />
Week<br />
correspondiente a la fecha mostrada.<br />
Especifica el número de la semana en que cae<br />
la fecha mostrada.<br />
MultiSelect Especifica si se puede seleccionar un<br />
intervalo contiguo de fechas.<br />
MaxSelCount Especifica el número máximo de días que<br />
pueden seleccionarse mediante la propiedad<br />
MultiSelect.<br />
SelStart<br />
Especifica los límite inferior y superior<br />
SelEnd<br />
respectivamente<br />
seleccionado.<br />
del intervalo de fechas<br />
MonthColumns Permiten mostrar más de un mes<br />
MonthRows<br />
simultáneamente. MonthColumns especifica el<br />
número de meses que se mostrarán en sentido<br />
horizontal. MonthRows especifica el número de<br />
meses que se mostrarán en sentido vertical.<br />
Evento Descripción<br />
Pág. 147
Click Ocurre cada vez que el usuario hace click<br />
sobre el control.<br />
DateClick Ocurre cada vez que el usuario hace click<br />
sobre una fecha mostrada en el control.<br />
Como ejemplo vamos a crear un sencillo calendario. Cuando<br />
el usuario haga click sobre alguna fecha, esta aparecerá en el<br />
cuadro de texto. Pamela Anderson representará la parte<br />
atractiva de nuestra aplicación.<br />
Para ello crear un nuevo formulario y agregar una etiqueta<br />
(La fecha selecciona es), un cuadro de texto (TxtFecha), un<br />
control imagen (ImgPamela) y un control MonthView. Luego<br />
ingresar el siguiente código:<br />
Private Sub MonthView1_DateClick(ByVal DateClicked As Date)<br />
Pág. 148
End Sub<br />
TxtFecha = WeekdayName(MonthView<strong>1.</strong>DayOfWeek) & “ , ” _<br />
& Str(MonthView<strong>1.</strong>Day) & “ de ” _<br />
& MonthName(MonthView<strong>1.</strong>Month) & “ de ” _<br />
& Str(MonthView<strong>1.</strong>Year)<br />
Private Sub MonthView1_Click()<br />
End Sub<br />
Call MonthView1_DateClick(MonthView<strong>1.</strong>Value)<br />
Private Sub Form_Load()<br />
End Sub<br />
Call MonthView1_DateClick(MonthView<strong>1.</strong>Value)<br />
La función WeekdayName retorna una cadena con el nombre<br />
del día de la semana especificado. Requiere como argumento el<br />
número de día de la semana.<br />
La función MonthName retorna una cadena con el nombre del<br />
mes especificado. Requiere como argumento el número de mes.<br />
El evento DateClick tiene un parámetro DateClicked que<br />
especifica la fecha seleccionada. Puede utilizar este valor<br />
(DateClicked) para obtener la fecha en la que el usuario hizo<br />
click.<br />
CONTROL CALENDAR<br />
Pág. 149
El control Calendar es similar en funcionalidad al control<br />
MonthView, pues también presenta un calendario. Para agregar<br />
este control seleccionar el componente Control Calendar de<br />
Microsoft 9.0.<br />
Propiedad Descripción<br />
Day Especifica el número de día mostrado.<br />
Month Especifica el número de mes mostrado.<br />
Year Especifica el número de año mostrado.<br />
Value Especifica la fecha mostrada.<br />
Como ejemplo vamos a desarrollar la aplicación anterior,<br />
pero esta vez haciendo uso de un control Calendar.<br />
Pág. 150
Para ello crear un nuevo formulario y agregar una etiqueta<br />
(La fecha selecciona es), un cuadro de texto (TxtFecha), un<br />
control imagen (ImgPamela) y un control Calendar. Luego<br />
ingresar el siguiente código:<br />
Private Sub Calendar1_Click()<br />
End Sub<br />
TxtFecha = WeekdayName(Weekday(Calendar<strong>1.</strong>Value)) & “ , ” _<br />
& Str(Calendar<strong>1.</strong>Day) & “ de ” _<br />
& MonthName(Calendar<strong>1.</strong>Month) & “ de ” _<br />
& Str(Calendar<strong>1.</strong>Year)<br />
La función Weekday retorna un número entero que representa<br />
el día de la semana de una fecha dada. Se utiliza para suplir a<br />
la propiedad DayOfWeek la cual no está permitida para el<br />
control Calendar.<br />
Pág. 151
CAPÍTULO 7<br />
ARCHIVOS<br />
Un archivo (fichero) es un conjunto de información<br />
relacionada entre sí, almacenada como una unidad en un<br />
dispositivo de almacenamiento secundario (disquete, disco<br />
duro). Los datos almacenados en un archivo son de manera<br />
permanente de modo que pueden ser manipulados en cualquier<br />
momento. Cada archivo está referenciado por un identificador,<br />
su nombre.<br />
CONCEPTO DE ARCHIVO BAJO WINDOWS/VISUAL BASIC<br />
Un archivo tiene un nombre almacenado en una carpeta junto<br />
con otros archivos de disco. Los nombres de los archivos en<br />
Windows y <strong>Visual</strong> <strong>Basic</strong> requieren de 1 a 215 caracteres<br />
(incluidos espacios en blanco), y pueden incluir también una<br />
extensión de 1 a 3 letras, normalmente son significativas y<br />
relativas al contenido del mismo. Por ejemplo:<br />
LEAME.TXT Archivo de texto<br />
MISDATOS.DAT Archivo de datos<br />
PLANILLA.XLS Archivo de MS-Excel<br />
SHAKIRA.BMP Archivo de mapa de bits<br />
Pág. 152
El nombre de un archivo para ser referenciado<br />
correctamente consta de:<br />
• Unidad (Especificador de unidad, por ejemplo A, B, C)<br />
• Camino (Especificador de ruta, por ejemplo \DATA\)<br />
• Nombre (Especificador de archivo, por ejemplo DEMO.DAT)<br />
Como ejemplo, suponga que el archivo DEMO.DAT está en la<br />
carpeta DATA de la unidad C (disco duro); la descripción<br />
completa del nombre del archivo es:<br />
C:\DATA\DEMO.DAT<br />
Ahora, suponga que el archivo CONSTANTES.DAT se encuentra<br />
en la carpeta LIB, que a su vez está contenida en la carpeta<br />
DATA de la unidad C. La descripción completa del nombre de<br />
dicho archivo está dada por:<br />
C:\DATA\LIB\CONSTANTES.DAT<br />
Desde el punto de vista de <strong>Visual</strong> <strong>Basic</strong> un archivo<br />
almacena los datos como un conjunto de registros, conteniendo<br />
todos ellos, generalmente, los mismos campos. Cada campo<br />
almacena un dato de tipo predefinido o de un tipo definido por<br />
el usuario. El elemento de información más simple estaría<br />
formado por un carácter.<br />
OPERACIONES SOBRE EL SISTEMA DE ARCHIVOS<br />
Pág. 153
Para manipular el sistema de archivos de un disco, <strong>Visual</strong><br />
<strong>Basic</strong> proporciona las sentencias que a continuación se<br />
describen.<br />
Sentencia Kill<br />
Permite eliminar un archivo almacenado en un disco. Su<br />
sintaxis es de la forma:<br />
Kill NOMBRE_ARCHIVO<br />
Donde NOMBRE_ARCHIVO es una cadena de caracteres que<br />
identifica al archivo que se desea borrar. Se permiten<br />
caracteres comodín (* y ?). Si el archivo no existe se produce<br />
un error. Por ejemplo:<br />
Kill “C:\TEMP\TEMPO.DAT”<br />
La instrucción anterior elimina el archivo TEMPO.DAT<br />
ubicado en la carpeta C:\TEMP.<br />
Sentencia Name<br />
Permite cambiar el nombre (renombrar) de un archivo del<br />
disco y moverlo a otro directorio si fuera preciso. Su sintaxis<br />
es la siguiente:<br />
Name NOMBRE_ACTUAL As NOMBRE_NUEVO<br />
Donde NOMBRE_ACTUAL es una cadena de caracteres que<br />
especifica el nombre actual del archivo y NOMBRE_NUEVO es otra<br />
Pág. 154
cadena de caracteres que indica el nuevo nombre que se desea<br />
dar al archivo. Este nombre no debe existir, de lo contrario se<br />
obtendrá un error. Por ejemplo:<br />
Name “C:\TEMP\TEMPO.DAT” As “C:\DATA\CURSO.DAT”<br />
La instrucción anterior cambia el nombre del archivo<br />
TEMPO.DAT por el nombre CURSO.DAT. El contenido del archivo<br />
permanece inalterado y su localización física se cambia de la<br />
carpeta C:\TEMP a C:\DATA.<br />
Sentencia MkDir<br />
Permite crear una nueva carpeta. Su sintaxis es:<br />
MkDir NUEVA_CARPETA<br />
Donde NUEVA_CARPETA es una cadena de caracteres que<br />
identifica la carpeta que se va ha crear. Por ejemplo:<br />
MkDir “C:\DATA\TEMP”<br />
Sentencia RmDir<br />
Elimina una carpeta vacía existente en el disco. Su<br />
sintaxis es de la forma:<br />
RmDir NOMBRE_CARPETA<br />
Donde NOMBRE_CARPETA es una cadena de caracteres que<br />
identifica la carpeta que se desea eliminar. Por ejemplo:<br />
Pág. 155
RmDir “C:\DATA\TEMP”<br />
Sentencia ChDir<br />
Permite cambiar la carpeta actual. Su sintaxis es:<br />
ChDir NOMBRE_CARPETA<br />
Donde NOMBRE_CARPETA es una cadena de caracteres que<br />
identifica la nueva ruta de acceso predeterminada. Por ejemplo:<br />
ChDir “C:\DATA\GRAFICOS”<br />
MsgBox App.Path<br />
La propiedad Path del objeto App especifica la ruta de<br />
acceso actual.<br />
Sentencia ChDrive<br />
Permite cambiar la unidad de disco actual. Su sintaxis es:<br />
ChDrive UNIDAD<br />
Donde UNIDAD es un carácter que especifica la nueva unidad<br />
de disco. Si el parámetro UNIDAD es una cadena de múltiples<br />
caracteres sólo se lee la primera letra. Por ejemplo:<br />
ChDrive “A”<br />
OPERACIONES CON ARCHIVOS<br />
Pág. 156
Para realizar alguna operación sobre un archivo hay<br />
referenciarlo mediante su nombre <strong>completo</strong>. Las operaciones<br />
básicas que se pueden realizar con los archivos son:<br />
• Abrir, preparar un archivo para hacer referencia a él.<br />
• Escribir, introducir un elemento de información a un archivo.<br />
• Leer, obtener un elemento de información de un archivo.<br />
• Modificar, alterar un elemento de información ya existente en<br />
un archivo.<br />
• Cerrar, evitar cualquier otra referencia al archivo en tanto<br />
no se le abra otra vez.<br />
TIPOS DE ARCHIVOS<br />
Los tipos de archivos dependen del modo como están<br />
organizados los registros y de la forma de accesar a la los<br />
datos contenidos en ellos. En <strong>Visual</strong> <strong>Basic</strong> existen tres tipos<br />
de archivos de datos, estos son:<br />
• Archivos secuenciales (acceso secuencial).<br />
• Archivos aleatorios (acceso aleatorio).<br />
• Archivos binarios (acceso binario).<br />
A continuación pasamos a describir cada uno de ellos en<br />
forma detallada.<br />
ARCHIVOS DE ACCESO SECUENCIAL<br />
Pág. 157
En un archivo de acceso secuencial los registros se<br />
almacenan siguiendo una a otro, según el orden en que son<br />
ingresados. Cuando se lee la información, se empieza por el<br />
primer registro y se continua al siguiente hasta alcanzar el<br />
final. Las sentencias y funciones necesarias para manipular<br />
archivos de tipo secuencial se presentan a continuación.<br />
Sentencia Open<br />
Permite abrir un archivo. La sintaxis para esta sentencia<br />
es la siguiente:<br />
Open NOMBRE_ARCHIVO For MODO As # NÚMERO_ARCHIVO<br />
Donde NOMBRE_ARCHIVO es una cadena que especifica el<br />
nombre del archivo que se debe ser abierto en MODO Output,<br />
Append o Input.<br />
Modo Descripción<br />
Output Escritura de datos. Si el archivo existe, su<br />
Append<br />
contenido actual se destruye. Si el archivo no<br />
existe, se crea.<br />
Añadir datos. Los datos son añadidos a partir de<br />
los últimos existentes. Si el archivo no existe,<br />
se crea.<br />
Input Lectura de datos. La lectura empieza desde el<br />
principio del archivo. Si el archivo no existe, se<br />
produce un error.<br />
El parámetro NÚMERO_ARCHIVO es un entero cuyo valor debe<br />
estar comprendido entre 1 y 51<strong>1.</strong> Este número será asociado al<br />
Pág. 158
nombre del archivo mientras éste permanezca abierto. Para<br />
obtener el número del siguiente archivo disponible se utiliza<br />
la función FreeFile().<br />
Como ejemplo suponga que se requiere abrir el archivo<br />
DEMO.DAT ubicado en la carpeta C:\DATA, la instrucción sería la<br />
siguiente:<br />
Dim N1 As Integer<br />
N1 = FreeFile()<br />
Open “C:\DATA\DEMO.DAT” For Output As # N1<br />
Sentencia Print<br />
Permite escribir datos secuencialmente en un archivo. Su<br />
sintaxis es:<br />
Print # NÚMERO_ARCHIVO, LISTA_DE_EXPRESIONES<br />
Donde NÚMERO_ARCHIVO es el número utilizado cuando el<br />
archivo fue abierto. LISTA_DE_EXPRESIONES es un conjunto de<br />
expresiones (numéricas, de cadena, de fecha, etc.) separadas<br />
por punto y coma (;) que serán escritas en el archivo.<br />
La sentencia Print escribe en el archivo una imagen de los<br />
datos tal y como se habrían visualizado sobre el formulario con<br />
la sentencia Print. Por ejemplo:<br />
Dim N1 As Integer<br />
N1 = FreeFile()<br />
Pág. 159
Open “C:\DATA\DEMO.DAT” For Output As # N1<br />
Print # N1, “<strong>Visual</strong> <strong>Basic</strong> es fácil”; “, ”; Date()<br />
Al ejecutarse el código anterior se escribiría en el<br />
archivo la siguiente información:<br />
<strong>Visual</strong> <strong>Basic</strong> es fácil, 24/04/2001<br />
Como se observa, al utilizar la sentencia Print se deben<br />
delimitar los datos para que se impriman correctamente.<br />
Sentencia Write<br />
Permite escribir datos secuencialmente en un archivo. Su<br />
sintaxis es:<br />
Write # NÚMERO_ARCHIVO, LISTA_DE_EXPRESIONES<br />
Donde NÚMERO_ARCHIVO es el número utilizado cuando el<br />
archivo fue abierto. LISTA_DE_EXPRESIONES es un conjunto de<br />
expresiones (numéricas, de cadena, de fecha, etc.) separadas<br />
por punto y coma (;) que serán escritas en el archivo.<br />
La sentencia Write inserta comas (,) entre las expresiones<br />
de la LISTA_DE_EXPRESIONES, por tanto no es necesario poner<br />
delimitadores explícitamente como en el caso de la sentencia<br />
Print.<br />
Cuando se utiliza la sentencia Write para escribir<br />
información en un archivo, se siguen distintas convenciones<br />
Pág. 160
universales, de modo que los datos siempre se pueden leer e<br />
interpretar correctamente, independientemente de la<br />
configuración regional, estas convenciones son:<br />
• Los datos numéricos siempre se escriben utilizando la coma<br />
(,) como separador decimal.<br />
• Para datos de tipo Boolean se imprime # TRUE # o # FALSE #.<br />
• Los datos de tipo Date se escriben en el archivo usando el<br />
formato de fecha universal (fechas como # aaaa-mm-dd # y horas<br />
como # hh:mm:ss #).<br />
código:<br />
A manera de ejemplo considere el siguiente segmento de<br />
Dim N1 As Integer<br />
N1 = FreeFile()<br />
Open “C:\DATA\DEMO.DAT” For Output As # N1<br />
Write # N1, “<strong>Visual</strong> <strong>Basic</strong> es fácil”; Date()<br />
La ejecución de este código escribiría en el archivo la<br />
siguiente información:<br />
Sentencia Close<br />
<strong>Visual</strong> <strong>Basic</strong> es fácil", # 2002-04-11 #<br />
Pág. 161
Cierra uno archivo abierto mediante la sentencia Open. Su<br />
sintaxis es la siguiente:<br />
Close # NÚMERO_ARCHIVO [, # NÚMERO_ARCHIVO, . . .]<br />
Donde NÚMERO_ARCHIVO es el número con el cual se abrió el<br />
archivo. Por ejemplo:<br />
Close # 1, # 2<br />
La instrucción anterior cierra los archivos asociados con<br />
los números 1 y 2. La siguiente sentencia cierra todos los<br />
archivos abiertos.<br />
Close<br />
Sentencia Input<br />
Permite leer datos de un archivo secuencial y los asigna a<br />
las variables especificadas. Su sintaxis es:<br />
Input # NÚMERO_ARCHIVO, VARIABLE1 [, VARIABLE2, . . .]<br />
Donde NÚMERO_ARCHIVO es el número utilizado cuando el<br />
archivo fue abierto. VARIABLE1, VARIABLE2, . . . son los<br />
nombres de las variables que han de recibir los<br />
correspondientes datos del archivo.<br />
Pág. 162
Los datos del archivo deben aparecer en el mismo orden que<br />
tienen las variables en la sentencia Input y deben coincidir<br />
con variables del mismo tipo de datos. Por ejemplo:<br />
Dim N1 As Integer<br />
N1 = FreeFile()<br />
Open “C:\DATA\DEMO.DAT” For Input As # N1<br />
Dim A As Integer<br />
Dim B As Double<br />
Dim S As String<br />
Dim F As Date<br />
Input # N1, A, B, S, F<br />
El segmento de código anterior espera encontrar en el<br />
archivo un entero, un real, una cadena y una fecha, en ese<br />
orden (separados por comas o un retorno de carro).<br />
Sentencia Line Input<br />
Permite leer una línea de un archivo secuencial ignorando<br />
los delimitadores (comas) y la asigna a una variable tipo<br />
cadena. Su sintaxis es:<br />
Line Input # NÚMERO_ARCHIVO, VARIABLE<br />
Donde NÚMERO_ARCHIVO es el número utilizado cuando el<br />
archivo fue abierto. VARIABLE es el nombre de una variable tipo<br />
cadena de caracteres.<br />
Pág. 163
La sentencia Line Input se utiliza especialmente para leer<br />
un archivo de texto línea a línea, ya que esta sentencia lee<br />
todos los caracteres del archivo hasta que encuentra un retorno<br />
de carro, entonces continua en la siguiente línea y así<br />
sucesivamente. Por ejemplo:<br />
Dim N1 As Integer, LINE1 As String, LINE2 As String<br />
N1 = FreeFile()<br />
Open “C:\DATA\DEMO.TXT” For Output As # N1<br />
Print # N1, “Línea de prueba 1”<br />
Print # N1, “Línea de prueba 2”<br />
Close # N1<br />
Open “C:\DATA\DEMO.TXT” For Input As # N1<br />
Line Input # N1, LINE1<br />
MsgBox LINE1<br />
Line Input # N1, LINE2<br />
MsgBox LINE2<br />
La ejecución del código anterior produce la siguiente salida:<br />
Pág. 164
Función Input<br />
Retorna los siguientes N caracteres de un archivo<br />
secuencial y los asigna a una variable de cadena. Su sintaxis<br />
es de la forma:<br />
VARIABLE = Input( N , # NÚMERO_ARCHIVO)<br />
A diferencia de la sentencia Input, la función Input()<br />
retorna todos los caracteres que lee, incluyendo comas,<br />
retornos de carro, continuaciones de línea, etc. Por ejemplo:<br />
Dim N1 As Integer, S As String<br />
N1 = FreeFile()<br />
Open “C:\DATA\DEMO.TXT” For Output As # N1<br />
Print # N1, “Línea de prueba 1”<br />
Print # N1, “Línea de prueba 2”<br />
Close # N1<br />
Open “C:\DATA\DEMO.TXT” For Input As # N1<br />
S = Input(24, # N1)<br />
MsgBox S<br />
La ejecución del código anterior produce la siguiente salida:<br />
Función EOF<br />
Pág. 165
Especifica si se ha llegado al final de un archivo. Su<br />
sintaxis es de la forma:<br />
VARIABLE = EOF(NÚMERO_ARCHIVO)<br />
Se utiliza EOF() para evitar producir un error al intentar<br />
obtener información más allá del final del archivo. EOF()<br />
retorna un valor True si se ha alcanzado el final del archivo y<br />
False en caso contrario. Por ejemplo:<br />
Dim N1 As Integer<br />
Dim CADENA As String<br />
N1 = FreeFile()<br />
Open “C:\DATA\DEMO.TXT” For Input As # N1<br />
While Not EOF(N1)<br />
Wend<br />
Close # N1<br />
Line Input # N1, CADENA<br />
Print CADENA<br />
Este segmento de código lee y visualiza cada línea del<br />
archivo de texto DEMO.TXT. El bucle finaliza cuando se detecta<br />
el final del archivo. Para que el código anterior funcione<br />
correctamente, no olvide poner la propiedad AutoRedraw del<br />
formulario a True.<br />
Como ejemplo final del uso de archivos secuenciales vamos<br />
a desarrollar un sencillo editor de texto. Este editor aunque<br />
Pág. 166
sus prestaciones son bastante limitadas va ha servir para poner<br />
en práctica lo aprendido recientemente.<br />
El menú que se muestra en la figura obedece a la siguiente<br />
descripción:<br />
Caption Name ShortCut<br />
&Archivo MnuArchivo Ninguno<br />
. . . &Nuevo MnuArchivoNuevo Ninguno<br />
. . . &Abrir MnuArchivoAbrir Ninguno<br />
. . . &Guardar MnuArchivoGuardar Ninguno<br />
. . . - MnuArchivoLinea Ninguno<br />
. . . &Salir MnuArchivoSalir Ctrl + X<br />
Luego proceda a ubicar los siguientes controles sobre el<br />
formulario:<br />
Pág. 167
indican:<br />
Form1<br />
Text1<br />
1 cuadro de texto<br />
1 control CommonDialog<br />
Seguidamente debe establecer las propiedades que se<br />
Nombre FrmEditor<br />
Caption Editor<br />
Nombre TxtEditor<br />
MultiLine True<br />
ScrollBars<br />
Text<br />
3-Both<br />
CommonDialog1<br />
Nombre CommonDialog1<br />
CancelError True<br />
Una vez establecidas las propiedades de la interfaz<br />
ingresar el código que se muestra:<br />
Private Sub Form_Resize()<br />
End Sub<br />
TxtEditor.Move 0, 0, ScaleWidth, ScaleHeight<br />
Private Sub MnuArchivoNuevo_Click()<br />
End Sub<br />
TxtEditor = “”<br />
Pág. 168
Private Sub MnuArchivoAbrir_Click()<br />
Dim FILTRO As String, FILE As String<br />
Dim N1 As Integer, CADENA As String<br />
On Error GoTo ERROR_ABRIR<br />
FILTRO = “Archivos de texto (*.TXT)|*.TXT”<br />
CommonDialog<strong>1.</strong>Filter = FILTRO<br />
CommonDialog<strong>1.</strong>ShowOpen<br />
FILE = CommonDialog<strong>1.</strong>FileName<br />
N1 = FreeFile()<br />
CADENA = “”<br />
TxtEditor = “”<br />
Open FILE For Input As # N1<br />
While Not EOF(N1)<br />
Wend<br />
Close # N1<br />
Input # N1, CADENA<br />
TxtEditor = TxtEditor & CADENA & vbCrLf<br />
FrmEditor.Caption = “Editor - ” & FILE<br />
SALIR_ABRIR:<br />
Exit Sub<br />
ERROR_ABRIR:<br />
MsgBox Err.Description<br />
Resume SALIR_ABRIR<br />
End Sub<br />
Private Sub MnuArchivoGuardar_Click()<br />
Dim FILTRO As String, FILE As String<br />
Dim N1 As Integer<br />
Pág. 169
On Error GoTo ERROR_GUARDAR<br />
FILTRO = “Archivos de texto (*.TXT)|*.TXT”<br />
CommonDialog<strong>1.</strong>Filter = FILTRO<br />
CommonDialog<strong>1.</strong>ShowSave<br />
FILE = CommonDialog<strong>1.</strong>FileName<br />
N1 = FreeFile()<br />
Open FILE For Output As # N1<br />
Print # N1, TxtEditor<br />
Close # N1<br />
FrmEditor.Caption = “Editor - ” & FILE<br />
SALIR_GUARDAR:<br />
Exit Sub<br />
ERROR_GUARDAR:<br />
End Sub<br />
MsgBox Err.Description<br />
Resume SALIR_GUARDAR<br />
La sentencia Err.Description retorna una cadena que<br />
contiene la descripción asociada a un error en tiempo de<br />
ejecución.<br />
La sentencia Resume continua la ejecución en la etiqueta<br />
especificada cuando termina una rutina de gestión de errores.<br />
ARCHIVOS DE ACCESO ALEATORIO<br />
En los archivo de acceso aleatorio el almacenamiento de<br />
los datos se hace mediante registros (todos de la misma<br />
Pág. 170
longitud), lo cuales son identificados mediante un único número<br />
denominado índice. El primer registro de un archivo tiene como<br />
índice 1, el segundo tiene índice 2 y así sucesivamente. La<br />
información contenida en un archivo de este tipo puede ser<br />
accedida en cualquier secuencia, ya que cada registro<br />
individual se asocia con su respectivo índice y puede ser<br />
leído, escrito o actualizado.<br />
Las sentencias y funciones necesarias para manipular<br />
archivos de tipo aleatorio se presentan a continuación.<br />
Sentencia Open<br />
Permite abrir un archivo. La sintaxis para acceder<br />
aleatoriamente a un archivo es:<br />
Open NOMBRE_ARCHIVO For Random As # NÚMERO_ARCHIVO Len = LON_REG<br />
Donde NOMBRE_ARCHIVO es una cadena que especifica el<br />
nombre del archivo que se debe ser abierto en modo Random.<br />
El parámetro NÚMERO_ARCHIVO es un entero cuyo valor está<br />
comprendido entre 1 y 51<strong>1.</strong> Este número será asociado con el<br />
nombre del archivo mientras permanezca abierto.<br />
LON_REG es un entero que establece la longitud del<br />
registro para archivos aleatorios.<br />
Sentencia Put<br />
Permite grabar un registro en un archivo abierto para<br />
acceso aleatorio. Su sintaxis es:<br />
Pág. 171
Put # NÚMERO_ARCHIVO, NÚMERO_REG, VARIABLE<br />
Donde NÚMERO_ARCHIVO es el número bajo el cual se abrió el<br />
archivo, NÚMERO_REG es el número correspondiente al registro<br />
que se va ha grabar y VARIABLE contiene los datos a escribir en<br />
el archivo. Por ejemplo:<br />
Dim N1 As Integer, REG As DISTRITO<br />
REG.ID_DISTRITO = “L09”<br />
REG.NOMBRE = “Chorrillos”<br />
N1 = FreeFile()<br />
Open “C:\DATA\RAND<strong>1.</strong>DAT” For Random As # N1 Len = Len(REG)<br />
Put # N1, 1, REG<br />
Close # N1<br />
El segmento de código anterior utiliza una variable REG de<br />
tipo DISTRITO, cuya definición es la siguiente:<br />
Private Type DISTRITO<br />
End Type<br />
ID_DISTRITO As String * 3<br />
NOMBRE As String * 30<br />
Sentencia Get<br />
Permite leer un registro procedente de un archivo de<br />
acceso aleatorio, almacenando los datos en una variable<br />
específica. Su sintaxis es de la forma:<br />
Pág. 172
Get # NÚMERO_ARCHIVO, NÚMERO_REG, VARIABLE<br />
Donde NÚMERO_ARCHIVO es el número bajo el cual se abrió el<br />
archivo, NÚMERO_REG es el número correspondiente al registro<br />
que se va ha leer y VARIABLE almacena los datos del registro<br />
leído. Por ejemplo:<br />
Dim N1 As Integer, I As Integer, REG As DISTRITO<br />
N1 = FreeFile()<br />
Open “C:\DATA\RAND<strong>1.</strong>DAT” For Random As # N1 Len = Len(REG)<br />
I = 1<br />
While Not EOF(# N1)<br />
Wend<br />
Close # N1<br />
Get # N1, I, REG<br />
MsgBox REG.ID_DISTRITO & “ ” & REG.NOMBRE<br />
I = I + 1<br />
Cuando EOF() se utiliza con un archivo aleatorio, retorna<br />
un valor True si una sentencia Get intenta leer y no puede<br />
porque ha alcanzado el final del archivo.<br />
Función LOF<br />
Retorna el número de bytes (caracteres) que ocupa un<br />
determinado archivo abierto mediante la sentencia Open. Su<br />
sintaxis es:<br />
Pág. 173
archivo.<br />
VARIABLE = LOF(# NÚMERO_ARCHIVO)<br />
Donde NÚMERO_ARCHIVO es el número con el que se abrió el<br />
Esta función es de utilidad, porque aplicada a un archivo<br />
de acceso aleatorio, permite conocer el número de registros<br />
almacenados en el archivo. Para ello debe dividir el valor<br />
retornado entre la longitud del registro. Como ejemplo,<br />
considere lo siguiente:<br />
Dim N1 As Integer, REG As DISTRITO<br />
Dim NUM_REGS As Integer, I As Integer<br />
N1 = FreeFile()<br />
Open “C:\DATA\RAND<strong>1.</strong>DAT” For Random As # N1 Len = Len(REG)<br />
NUM_REGS = LOF(N1) / Len(REG)<br />
For I = 1 To NUM_REGS<br />
Next<br />
Close # N1<br />
Función Loc<br />
Get # N1, I, REG<br />
MsgBox REG.ID_DISTRITO & “ ” & REG.NOMBRE<br />
Esta función retorna la posición actual dentro de un<br />
fichero. Su sintaxis es:<br />
VARIABLE = Loc(# NÚMERO_ARCHIVO)<br />
Pág. 174
La función Loc() aplicada a un archivo de acceso aleatorio<br />
retorna el número del último registro leído o grabado en el<br />
archivo especificado. Por ejemplo:<br />
Dim N1 As Integer, REG As DISTRITO<br />
Dim NUM_REGS As Integer, I As Integer<br />
N1 = FreeFile()<br />
Open “C:\DATA\RAND<strong>1.</strong>DAT” For Random As # N1 Len = Len(REG)<br />
NUM_REGS = LOF(N1) / Len(REG)<br />
I = 1<br />
Do While True<br />
Loop<br />
Close # N1<br />
Get # N1, I, REG<br />
MsgBox REG.ID_DISTRITO & “ ” & REG.NOMBRE<br />
I = I + 1<br />
If Loc(N1) = NUM_REGS Then Exit Do<br />
La sentencia If finaliza el bucle si se ha alcanzado el<br />
último registro.<br />
Como ejemplo final vamos a desarrollar una aplicación que<br />
permita realizar el mantenimiento de los datos almacenados en<br />
el archivo C:\DATA\CURSO.DAT.<br />
Pág. 175
Los botones ubicados en el marco Navegador (Primero,<br />
Anterior, Siguiente y Ultimo, de izquierda a derecha) permiten<br />
desplazarse a través de los registros del archivo. Los botones<br />
ubicados en el marco Mantenimiento (Nuevo, Editar, Guardar y<br />
Eliminar, de izquierda a derecha) permiten realizar las<br />
operaciones básicas de mantenimiento de los registros.<br />
Para el desarrollo de la presente aplicación ubicar los<br />
siguientes controles al formulario:<br />
indican:<br />
Form1<br />
3 marcos<br />
4 etiquetas<br />
4 cuadros de texto<br />
9 botones de comando<br />
Seguidamente proceda a establecer las propiedades que se<br />
Pág. 176
Frame1<br />
Frame2<br />
Frame3<br />
Label1<br />
Label2<br />
Label3<br />
Label4<br />
Nombre Frm<strong>Curso</strong><br />
Caption Mantenimiento de cursos<br />
BorderStyle 3-Fixed Dialog<br />
StarUpPosition 2-CenterScreen<br />
Nombre FraIngreso<br />
Caption<br />
Nombre FraNavegador<br />
Caption Navegador<br />
Nombre FraMantenimiento<br />
Caption Mantenimiento<br />
Nombre LblCodigo<br />
Caption Código:<br />
Nombre LblNombre<br />
Caption Nombre:<br />
Nombre LblVacantes<br />
Caption Vacantes:<br />
Nombre LblProfesor<br />
Caption Profesor:<br />
Pág. 177
Text1<br />
Text2<br />
Text3<br />
Text4<br />
Command1<br />
Command2<br />
Nombre TxtCodigo<br />
Locked<br />
Text<br />
True<br />
Nombre TxtNombre<br />
Locked<br />
Text<br />
True<br />
Nombre TxtVacantes<br />
Locked<br />
Text<br />
True<br />
Nombre TxtProfesor<br />
Locked<br />
Text<br />
True<br />
Nombre<br />
Caption<br />
CmdPrimero<br />
Picture C:\FundVB\Bitmaps\First.bmp<br />
Style 1-Graphical<br />
Nombre<br />
Caption<br />
CmdAnterior<br />
Picture C:\FundVB\Bitmaps\Previous.bmp<br />
Pág. 178
Command3<br />
Command4<br />
Command5<br />
Command6<br />
Command7<br />
Style 1-Graphical<br />
Nombre<br />
Caption<br />
CmdSiguiente<br />
Picture C:\FundVB\Bitmaps\Next.bmp<br />
Style 1-Graphical<br />
Nombre<br />
Caption<br />
CmdUltimo<br />
Picture C:\FundVB\Bitmaps\Last.bmp<br />
Style 1-Graphical<br />
Nombre<br />
Caption<br />
CmdNuevo<br />
Picture C:\FundVB\Bitmaps\New.bmp<br />
Style 1-Graphical<br />
Nombre<br />
Caption<br />
CmdEditar<br />
Picture C:\FundVB\Bitmaps\Edit.bmp<br />
Style 1-Graphical<br />
Nombre<br />
Caption<br />
CmdGuardar<br />
Picture C:\FundVB\Bitmaps\Save.bmp<br />
Pág. 179
Command8<br />
Command9<br />
Style 1-Graphical<br />
Nombre CmdEliminar<br />
Caption<br />
Picture C:\FundVB\Bitmaps\Delete.bmp<br />
Style 1-Graphical<br />
Nombre CmdSalir<br />
Caption &Salir<br />
Picture C:\FundVB\Bitmaps\Exit.bmp<br />
Style 1-Graphical<br />
Luego, proceda a transcribir el código mostrado a continuación:<br />
Private Type CURSO<br />
End Type<br />
ID_CURSO As String * 3<br />
NOMBRE As String * 30<br />
VACANTES As Integer<br />
PROFESOR As String * 25<br />
ESTADO As Boolean<br />
Dim N1 As Integer, POSICION As Integer<br />
Dim REG As CURSO<br />
Private Sub MODO_EDITAR(ByVal Ok As Boolean)<br />
TxtCodigo.Locked = Not Ok<br />
TxtNombre.Locked = Not Ok<br />
Pág. 180
End Sub<br />
TxtVacantes.Locked = Not Ok<br />
TxtProfesor.Locked = Not Ok<br />
CmdNuevo.Enabled = Not Ok<br />
CmdEditar.Enabled = Not Ok<br />
CmdGuardar.Enabled = Ok<br />
CmdEliminar.Enabled = Not Ok<br />
CmdPrimero.SetFocus<br />
If Ok Then TxtCodigo.SetFocus<br />
Private Sub ABRIR_ARCHIVO()<br />
On Error GoTo ERROR_ABRIR:<br />
N1 = FreeFile()<br />
Open “C:\DATA\CURSO.DAT” For Random As # N1 Len = Len(REG)<br />
SALIR_ABRIR:<br />
Exit Sub<br />
ERROR_ABRIR:<br />
End Sub<br />
MsgBox Err.Description<br />
Resume SALIR_ABRIR:<br />
Private Sub Form_Load()<br />
Call ABRIR_ARCHIVO<br />
End Sub<br />
Private Sub Form_Activate()<br />
MODO_EDITAR False<br />
Call CmdPrimero_Click<br />
Pág. 181
End Sub<br />
Private Sub CmdPrimero_Click()<br />
End Sub<br />
POSICION = 1<br />
Get # N1, POSICION, REG<br />
TxtCodigo = REG.ID_CURSO<br />
TxtNombre = REG.NOMBRE<br />
TxtVacantes = Str(REG.VACANTES)<br />
TxtProfesor = REG.PROFESOR<br />
Private Sub CmdAnterior_Click()<br />
POSICION = Loc(N1) - 1<br />
If POSICION = 0 Then<br />
Else<br />
End If<br />
Get # N1, 1, REG<br />
MsgBox “Estamos en el primer registro”<br />
Get # N1, POSICION, REG<br />
TxtCodigo = REG.ID_CURSO<br />
TxtNombre = REG.NOMBRE<br />
TxtVacantes = Str(REG.VACANTES)<br />
TxtProfesor = REG.PROFESOR<br />
End Sub<br />
Private Sub CmdSiguiente_Click()<br />
Dim ULTIMO As Integer<br />
ULTIMO = LOF(N1) / Len(REG)<br />
Pág. 182
End Sub<br />
POSICION = Loc(N1) + 1<br />
If POSICION = ULTIMO + 1 Then<br />
Else<br />
End If<br />
Get # N1, ULTIMO, REG<br />
MsgBox “Estamos en el último registro”<br />
Get # N1, POSICION, REG<br />
TxtCodigo = REG.ID_CURSO<br />
TxtNombre = REG.NOMBRE<br />
TxtVacantes = Str(REG.VACANTES)<br />
TxtProfesor = REG.PROFESOR<br />
Private Sub CmdUltimo_Click()<br />
POSICION = LOF(N1) / Len(REG)<br />
If POSICION 0 Then<br />
End If<br />
Get #N1, POSICION, REG<br />
TxtCodigo = REG.ID_CURSO<br />
TxtNombre = REG.NOMBRE<br />
TxtVacantes = Str(REG.VACANTES)<br />
TxtProfesor = REG.PROFESOR<br />
End Sub<br />
Private Sub CmdNuevo_Click()<br />
POSICION = LOF(N1) / Len(REG) + 1<br />
MODO_EDITAR True<br />
Pág. 183
End Sub<br />
TxtCodigo = “”<br />
TxtNombre = “”<br />
TxtVacantes = “”<br />
TxtProfesor = “”<br />
TxtCodigo.SetFocus<br />
Private Sub CmdEditar_Click()<br />
End Sub<br />
MODO_EDITAR True<br />
Private Sub CmdGuardar_Click()<br />
End Sub<br />
REG.ID_CURSO = Trim(TxtCodigo)<br />
REG.NOMBRE = Trim(TxtNombre)<br />
REG.VACANTES = TxtVacantes<br />
REG.PROFESOR = Trim(TxtProfesor)<br />
REG.ESTADO = True<br />
Put # N1, POSICION, REG<br />
MODO_EDITAR False<br />
Private Sub CmdEliminar_Click()<br />
Dim N2 As Integer<br />
Dim I As Integer, J As Integer<br />
REG.ESTADO = False<br />
Put # N1, POSICION, REG<br />
N2 = FreeFile()<br />
Pág. 184
End Sub<br />
Open “C:\DATA\TEMPO.DAT” For Random As # N2 Len = Len(REG)<br />
I = 1<br />
J = 1<br />
While Not EOF(N1)<br />
Wend<br />
Get # N1, I, REG<br />
If REG.ESTADO Then<br />
End If<br />
I = I + 1<br />
Close # N1, # N2<br />
Put # N2, J, REG<br />
J = J + 1<br />
Kill “C:\DATA\CURSO.DAT”<br />
Name “C:\DATA\TEMPO.DAT” As “C:\DATA\CURSO.DAT”<br />
Call ABRIR_ARCHIVO<br />
Call CmdPrimero_Click<br />
Private Sub CmdSalir_Click()<br />
Close # N1<br />
End<br />
End Sub<br />
ARCHIVOS DE ACCESO BINARIO<br />
Pág. 185
Un archivo binario contiene más que simplemente texto.<br />
Puede contener imágenes, sonido, hojas de cálculo, o documentos<br />
concebidos para el procesamiento de texto.<br />
El acceso binario permite la posibilidad de tratar<br />
cualquier archivo como una secuencia numerada de bytes,<br />
independientemente de la estructura del mismo. Los bytes ocupan<br />
las posiciones 1, 2, 3, etc. Por ejemplo, si se requiere<br />
recuperar un dato de tipo entero (Integer, 2 bytes) de la<br />
posición 3 del archivo, serían recuperados los bytes 3 y 4 para<br />
poder formar el valor del entero. Por tanto, antes de trabajar<br />
con archivos binarios es necesario conocer cómo fueron escritos<br />
los datos que contiene para poder recuperarlos correctamente.<br />
Sentencia Open<br />
Permite abrir un archivo para acceso binario. Su sintaxis<br />
es de la forma:<br />
Open NOMBRE_ARCHIVO For Binary As # NÚMERO_ARCHIVO<br />
Donde NOMBRE_ARCHIVO es una cadena que especifica el<br />
nombre del archivo que se debe ser abierto en modo Binary.<br />
El parámetro NÚMERO_ARCHIVO es un entero cuyo valor está<br />
comprendido entre 1 y 51<strong>1.</strong> Este número será asociado con el<br />
nombre del archivo mientras permanezca abierto.<br />
Sentencia Put<br />
Pág. 186
Permite grabar en un archivo binario tantos bytes como<br />
haya en una variable. Su sintaxis es:<br />
Put # NÚMERO_ARCHIVO, POSICIÓN, VARIABLE<br />
Donde NÚMERO_ARCHIVO es el número bajo el cual se abrió el<br />
archivo. POSICIÓN es el número de byte a partir del cual se han<br />
de grabar los datos contenidos en VARIABLE.<br />
Sentencia Get<br />
Permite leer de un archivo binario tantos bytes como<br />
quepan en una variable. Su sintaxis es de la forma:<br />
Get # NÚMERO_ARCHIVO, POSICIÓN, VARIABLE<br />
Donde NÚMERO_ARCHIVO es el número bajo el cual se abrió el<br />
archivo. POSICIÓN es el número de byte a partir del cual se han<br />
de leer los datos almacenados en VARIABLE.<br />
Sentencia Seek<br />
Permite situar la posición de lectura o de escritura en<br />
una posición determinada dentro del archivo. Su sintaxis es:<br />
Get # NÚMERO_ARCHIVO, POSICIÓN, VARIABLE<br />
Donde POSICIÓN es el número de byte a partir del cual<br />
queremos leer o escribir dentro del archivo.<br />
Pág. 187
Como ejemplo vamos a desarrollar una aplicación que<br />
permite guardar “cifrados” los textos ingresados en un cuadro<br />
de texto. Para ello crear un nuevo proyecto y ubicar en el<br />
formulario un cuadro de texto (TxtMensaje) y un botón de<br />
comando (CmdCifrar). Luego, ingrese el siguiente código:<br />
Const CLAVE As Integer = 3<br />
Private Sub CmdCifrar_Click()<br />
End Sub<br />
Dim N1 As Integer, I As Integer<br />
Dim CAR As String * 1<br />
N1 = FreeFile()<br />
Open “C:\DATA\DEMO.BIN” For Binary As # N1<br />
For I = 1 To Len(TxtMensaje)<br />
Next<br />
Close # N1<br />
CAR = Chr((Asc(Mid(TxtMensaje, I, 1)) + CLAVE) Mod 256)<br />
Put # N1, , CAR<br />
En el código la función Mid() obtiene el carácter “I” de<br />
la caja de texto, la función Asc() obtiene su código ANSI, al<br />
que sumamos el valor de CLAVE, para después obtener el resto de<br />
la división entre 256, con el fin de mantenernos en el rango de<br />
0 a 255 (rango de valores de la tabla de caracteres ANSI). Por<br />
último, la función Chr() retorna el carácter correspondiente al<br />
valor obtenido, el cual es almacenado en el archivo binario.<br />
Pág. 188
Por ejemplo si ingresa el mensaje “HOLA” se almacena en el<br />
archivo como “KROD” (lo puede comprobar mediante el Bloc de<br />
notas), ya que el valor ANSI de la “H” es 72, este carácter al<br />
sumarle el valor de CLAVE sería el 75 (72 + 3), que es la “K”,<br />
y así sucesivamente (ver la tabla de caracteres ANSI).<br />
El descifrado sería el proceso inverso, para ello crear un<br />
nuevo formulario y ubicar un botón de comando (CmdDescifrar),<br />
luego ingresar el código siguiente:<br />
Const CLAVE As Integer = 3<br />
Private Sub CmdDescifrar_Click()<br />
End Sub<br />
Dim N1 As Integer, I As Integer<br />
Dim CAR As String * 1, CADENA As String<br />
N1 = FreeFile()<br />
Open “C:\DATA\DEMO.BIN” For Binary As # N1<br />
Get # N1, , CAR<br />
While Not EOF(N1)<br />
Wend<br />
CAR = Chr((Asc(CAR) + (256 - Val(CLAVE))) Mod 256)<br />
CADENA = CADENA & CAR<br />
Get # N1, , CAR<br />
MsgBox CADENA<br />
Pág. 189
CAPÍTULO 8<br />
GRÁFICOS<br />
Un gráfico tiene por finalidad facilitar la legibilidad de<br />
la información que se presenta: “un gráfico vale más que mil<br />
palabras”.<br />
LOS COLORES<br />
En <strong>Visual</strong> <strong>Basic</strong> se pueden manipular los colores mediante<br />
tres formas diferentes: código hexadecimal, la función RGB() y<br />
la función QBColor().<br />
Código Hexadecimal<br />
Un código de color se compone de seis dígitos<br />
hexadecimales, cuyos valores van desde &H000000& (cero) hasta<br />
&HFFFFFF& (16 777 215). De forma práctica podemos guiarnos<br />
mediante:<br />
&HAAVVRR&<br />
Donde AA representa al color azul, VV al color verde y RR<br />
al color rojo. Todos los demás colores se obtienen mezclando<br />
estos tres colores.<br />
Pág. 190
Como ejemplo considere los siguientes códigos de colores<br />
que se presentan a continuación:<br />
AZUL = &HFF0000&<br />
VERDE = &H00FF00&<br />
ROJO = &H0000FF&<br />
NEGRO = &H000000&<br />
La función RGB()<br />
La función RGB() retorna un número de tipo entero largo<br />
(Long) que representa el valor de un color. Su sintaxis es:<br />
COLOR = RGB(nROJO, nVERDE, nAZUL)<br />
Donde nROJO, nVERDE, nAZUL son enteros comprendidos entre<br />
0 y 255. La siguiente tabla muestra algunos colores estándar y<br />
sus valores de nROJO, nVERDE y nAZUL:<br />
Color nROJO nVERDE nAZUL<br />
Negro 0 0 0<br />
Azul 0 0 255<br />
Verde 0 255 0<br />
Cián 0 255 255<br />
Rojo 255 0 0<br />
Magenta 255 0 255<br />
Amarillo 255 255 0<br />
Blanco 255 255 255<br />
Pág. 191
El ejemplo anterior (código hexadecimal) utilizando la<br />
función RGB() será similar a:<br />
AZUL = RGB(0, 0, 255)<br />
VERDE = RGB(0, 255, 0)<br />
ROJO = RGB(255, 0, 0)<br />
NEGRO = RGB(0, 0, 0)<br />
La función QBColor()<br />
La función QBColor() retorna un número de tipo entero largo<br />
(Long) que representa el código de color RGB correspondiente al<br />
número de color especificado. Su sintaxis es:<br />
COLOR = QBColor(nCOLOR)<br />
Donde el argumento nCOLOR es un entero entre 0 y 15; los<br />
valores que puede tomar se presentan en la siguiente tabla:<br />
Número Color Número Color<br />
0 Negro 8 Gris<br />
1 Azul 9 Azul claro<br />
2 Verde 10 Verde claro<br />
3 Cián 11 Cián claro<br />
4 Rojo 12 Rojo claro<br />
5 Magenta 13 Magenta claro<br />
6 Amarillo 14 Amarillo claro<br />
7 Blanco 15 Blanco brillante<br />
Pág. 192
El ejemplo inicial (código hexadecimal) utilizando la<br />
función QBColor() se soluciona como se muestra a continuación:<br />
AZUL = QBColor(1)<br />
VERDE = QBColor(2)<br />
ROJO = QBColor(4)<br />
NEGRO = QBColor(0)<br />
EL SISTEMA DE COORDENADAS<br />
Todas las operaciones gráficas descritas en este capítulo<br />
utilizan el sistema de coordenadas del área de dibujo (que<br />
puede ser la pantalla, un formulario, un cuadro de imagen, o<br />
cualquier otro contenedor).<br />
El sistema de coordenadas es una cuadrícula bidimensional<br />
que define ubicaciones del área de dibujo. Las ubicaciones de<br />
esta cuadrícula se definen mediante las coordenadas del área de<br />
dibujo:<br />
( X ,Y )<br />
Donde el valor de X es la ubicación del punto sobre el<br />
“eje X”, con la ubicación predeterminada (cero) en el extremo<br />
izquierdo. El valor de Y es la ubicación del punto sobre el<br />
eje Y , con la ubicación predeterminada (cero) en el extremo<br />
superior. Este sistema de coordenadas se ilustra en la<br />
siguiente figura:<br />
Pág. 193
El sistema de coordenadas de <strong>Visual</strong> <strong>Basic</strong> tiene las<br />
siguientes reglas:<br />
• El sistema de coordenadas predeterminado de cualquier<br />
contenedor empieza por la coordenada (0, 0) en la esquina<br />
superior izquierda del contenedor.<br />
• Las unidades de medida utilizadas para definir las<br />
ubicaciones a lo largo de los ejes se denominan<br />
colectivamente “escala”. En <strong>Visual</strong> <strong>Basic</strong>, cada eje del<br />
sistema de coordenadas puede tener su propia escala.<br />
• Todos los métodos gráficos utilizan el sistema de coordenadas<br />
del contenedor. Por ejemplo, las instrucciones que dibujan<br />
dentro de un cuadro de imagen utilizan el sistema de<br />
coordenadas de dicho control.<br />
Establecer las coordenadas de dibujo<br />
Para establecer las coordenadas de dibujo del contenedor<br />
se utilizan las propiedades CurrentX y CurrentY de dicho<br />
contenedor.<br />
Pág. 194
Por ejemplo, las instrucciones siguientes establecen las<br />
coordenadas de dibujo a la esquina superior izquierda de un<br />
cuadro de imagen:<br />
Picture<strong>1.</strong>CurrentX = 0<br />
Picture<strong>1.</strong>CurrentY = 0<br />
De forma predeterminada, los formularios y los cuadros de<br />
imagen utilizan un sistema de coordenadas en el que cada unidad<br />
corresponde a un “twip” (1 440 twips equivalen a una pulgada y<br />
567 twips son aproximadamente un centímetro).<br />
Cambiar la unidad de medida del sistema de coordenadas<br />
Para cambiar la unidad de medida del sistema de<br />
coordenadas su establece la propiedad ScaleMode a uno de los<br />
valores enumerados en la tabla siguiente:<br />
Valor de<br />
ScaleMode<br />
1 Twips<br />
2 Puntos<br />
Descripción<br />
3 Pixeles<br />
4 Caracteres<br />
5 Pulgadas<br />
6 Milímetros<br />
7 Centímetros<br />
Pág. 195
Por ejemplo la siguiente orden establece la escala a<br />
pulgadas de un cuadro de imagen:<br />
Picture<strong>1.</strong>ScaleMode = 5<br />
Crear una escala personalizada<br />
Para crear una escala personalizada se pueden utilizar las<br />
propiedades ScaleLeft, ScaleTop, ScaleWidth y ScaleHeight de un<br />
determinado objeto.<br />
Las propiedades ScaleLeft y ScaleTop asignan valores<br />
numéricos a la esquina superior izquierda de un objeto. Por<br />
ejemplo, las instrucciones siguientes establecen el valor de la<br />
esquina superior izquierda de un cuadro de imagen:<br />
Picture<strong>1.</strong>ScaleLeft = 100<br />
Picture<strong>1.</strong>ScaleTop = 100<br />
Las propiedades ScaleWidth y ScaleHeight definen las<br />
unidades según el ancho y el alto real del área de dibujo (si<br />
el objeto cambia de tamaño posteriormente, las unidades siguen<br />
siendo las mismas). Por ejemplo las instrucciones siguientes<br />
definen la unidad horizontal como 1/1 000 del ancho interno<br />
actual del cuadro de imagen y la unidad vertical como 1/500 del<br />
alto interno actual del cuadro de imagen:<br />
Picture<strong>1.</strong>ScaleWidth = 1000<br />
Picture<strong>1.</strong>ScaleHeight = 500<br />
Pág. 196
A manera de ejemplo considere la escala mostrada en la<br />
siguiente figura, la cual tiene ScaleLeft, ScaleTop, ScaleWidth<br />
y ScaleHeight establecidas todas a 100.<br />
Una forma más eficiente de personalizar la escala de un<br />
sistema de coordenadas es utilizando el método Scale. Su<br />
sintaxis es:<br />
OBJETO.Scale (X1, Y1) – (X2, Y2)<br />
Donde los valores de (X1, Y1) determinan las coordenadas<br />
de la esquina superior izquierda, los valores de (X2, Y2)<br />
determinan los valores de la esquina inferior derecha. Para<br />
obtener el mismo sistema de coordenadas de ejemplo anterior<br />
(donde se utilizó las propiedades ScaleLeft, ScaleTop,<br />
ScaleWidth y ScaleHeight) la orden sería la siguiente:<br />
Scale (100, 100)-(200, 200)<br />
Pág. 197
Donde es evidente que las diferencias entre las dos<br />
coordenadas “X” y las dos coordenadas “Y” determinan los<br />
valores de ScaleWidth y ScaleHeight, respectivamente.<br />
MÉTODOS GRÁFICOS<br />
<strong>Visual</strong> <strong>Basic</strong> proporciona varios métodos para la creación<br />
de gráficos. Los métodos gráficos, resumidos en la tabla<br />
siguiente, son aplicables a los formularios y a los cuadros de<br />
imagen.<br />
Método Descripción<br />
Cls Borra todos los gráficos y el resultado del<br />
método Print.<br />
Pset Dibuja un punto individual.<br />
Point Devuelve el color de un punto especificado.<br />
Line Dibuja una línea, un rectángulo o un cuadro<br />
relleno.<br />
Circle Dibuja una círculo, una elipse o un arco.<br />
PaintPicture Dibuja gráficos en ubicaciones arbitrarias.<br />
Print Imprime texto en formularios y cuadros de<br />
imagen.<br />
Para que la mayoría de los métodos gráficos funcionen<br />
correctamente la propiedad AutoRedraw del formulario debe está<br />
activada, caso contrario el dibujo no se visualizará.<br />
Puntos<br />
Pág. 198
Para el dibujo de puntos se usará el método Pset, cuya<br />
sintaxis es:<br />
OBJETO.Pset (X, Y), COLOR<br />
Donde X, Y son valores de tipo Single que indican las<br />
coordenadas horizontal (eje X) y vertical (eje Y) del punto que<br />
se va a dibujar. COLOR es un entero largo (Long) que indica el<br />
color RGB especificado para el punto, si se omite se usará el<br />
valor actual de la propiedad ForeColor de OBJETO.<br />
Como ejemplo vamos a crear una sencilla aplicación que<br />
permita dibujar puntos en la posición especificada mediante el<br />
ratón, con la posibilidad de poder seleccionar colores (tipo<br />
“Paint”).<br />
Pág. 199
Para el desarrollo de la presente aplicación proceda a<br />
crear un nuevo proyecto y agregar al formulario 34 cuadros de<br />
imagen. Luego ingresar el código mostrado.<br />
Objeto Nombre Descripción<br />
Picture1 . . . Picture32 PicColor Opciones de color<br />
Picture33 PicMuestra Color actual utilizado<br />
Picture34 PicLienzo Area de dibujo<br />
Dim COLOR As Single<br />
Private Sub Form_Load()<br />
End Sub<br />
PicLienzo.ScaleMode = 3<br />
PicLienzo.DrawWidth = 5<br />
COLOR = RGB(0, 0, 0)<br />
Private Sub PicColor_Click(Index As Integer)<br />
End Sub<br />
COLOR = PicColor(Index).BackColor<br />
PicMuestra.BackColor = COLOR<br />
Private Sub PicLienzo_MouseDown(Button As Integer, _<br />
End Sub<br />
If Button = vbLeftButton Then<br />
End If<br />
Shift As Integer, X As Single, Y As Single)<br />
PicLienzo.PSet (X, Y), COLOR<br />
Pág. 200
En el ejemplo anterior se utiliza la propiedad DrawWidth,<br />
la cual sirve para fijar el tamaño del punto dibujado.<br />
Para que el método Pset funcione correctamente la<br />
propiedad ScaleMode debe estar establecida a pixeles.<br />
Líneas, rectángulos y cuadros rellenos<br />
Para dibujar líneas, rectángulos o cuadros rellenos<br />
utilice el método Line, cuya sintaxis es:<br />
OBJETO.Line (X1, Y1) - (X2, Y2), COLOR, B/BF<br />
Donde X1, Y1 son valores de tipo Single que indican las<br />
coordenadas del punto inicial para la línea o el rectángulo.<br />
X2, Y2 son valores de tipo Single que indican las coordenadas<br />
del punto final para la línea o el rectángulo que se está<br />
dibujando. COLOR es un entero largo (Long) que indica el color<br />
RGB especificado para dibujar la línea, si se omite se usará el<br />
valor actual de la propiedad ForeColor de OBJETO. Los<br />
parámetros B y BF son opcionales: B hace que se dibuje un<br />
rectángulo usando las coordenadas para especificar las esquinas<br />
opuestas del mismo. BF especifica que el cuadro se rellena con<br />
el mismo color especificado mediante el parámetro COLOR.<br />
A manera de ejemplo vamos a mejorar nuestro sencillo<br />
“Editor gráfico”, de tal forma que además de dibujar puntos<br />
permita también dibujar líneas cuando se mantenga pulsado el<br />
botón izquierdo del ratón.<br />
Pág. 201
Para lograr nuestro cometido añadir el siguiente código a<br />
la aplicación anterior:<br />
Private Sub PicLienzo_MouseMove(Button As Integer, _<br />
End Sub<br />
If Button = vbLeftButton Then<br />
End If<br />
Shift As Integer, X As Single, Y As Single)<br />
PicLienzo.Line -(X, Y), COLOR<br />
Otro ejemplo sencillo para ilustrar como se usa el método<br />
Line para dibujar rectángulos y cuadros rellenos se presenta a<br />
continuación, consiste en dibujar una bandera directamente<br />
sobre el formulario, en este caso será la bandera de mi país:<br />
Perú.<br />
Pág. 202
Para este ejemplo crear una nueva aplicación e ingresar el<br />
código mostrado:<br />
Private Sub Form_Click()<br />
End Sub<br />
Height = 3 * 1440<br />
Width = 5 * 1440<br />
BackColor = QBColor(12)<br />
ForeColor = QBColor(15)<br />
Line (Width / 3, 0) - ((Width / 3) * 2, Height), , BF<br />
Círculos, elipses y arcos<br />
Para dibujar círculos, elipses o arcos se utiliza el<br />
método Circle, cuya sintaxis es:<br />
OBJETO.Circle (X, Y), RADIO, COLOR, INICIO, FIN, ASPECTO<br />
Pág. 203
Donde X, Y son valores de tipo Single que indican las<br />
coordenadas para el punto central del círculo, elipse o arco.<br />
RADIO es un valor de tipo Single que indica el radio del<br />
círculo, elipse o arco. COLOR es un valor entero de tipo Long<br />
que indica el color RGB del contorno del círculo, elipse o<br />
arco (es opcional). INICIO y FIN son valores de tipo Single,<br />
que especifican (en radianes) las posiciones de inicio y de fin<br />
del arco (son opcionales). ASPECTO es un valor de tipo Single<br />
que indica la relación de aspecto del círculo, el valor<br />
predeterminado es <strong>1.</strong>0, lo que produce un círculo perfecto (no<br />
elíptico) en cualquier pantalla (opcional).<br />
A manera de ejemplo vamos a mejor aún más nuestro “Editor<br />
gráfico” de tal manera que se podrá dibujar puntos, líneas,<br />
rectángulos, círculos y elipses.<br />
Pág. 204
Para el desarrollo de la presente aplicación se debe<br />
añadir al ejemplo anterior 5 botones de comandos y formar una<br />
matriz de controles (CmdForma). Luego ingresar el siguiente<br />
código:<br />
Dim COLOR As Single<br />
Dim FORMA As Integer<br />
Dim X1 As Single, Y1 As Single, X2 As Single, Y2 As Single<br />
Private Sub CmdForma_Click(Index As Integer)<br />
End Sub<br />
FORMA = Index + 1<br />
Private Sub Form_Load()<br />
End Sub<br />
COLOR = RGB(0, 0, 0)<br />
FORMA = 1<br />
PicLienzo.ScaleMode = 3<br />
PicLienzo.DrawWidth = 3<br />
Private Sub PicColor_Click(Index As Integer)<br />
End Sub<br />
COLOR = PicColor(Index).BackColor<br />
PicMuestra.BackColor = COLOR<br />
Private Sub PicLienzo_MouseDown(Button As Integer, Shift As Integer, _<br />
End Sub<br />
If Button = vbLeftButton Then<br />
End If<br />
X1 = X<br />
Y1 = Y<br />
X As Single, Y As Single)<br />
Pág. 205
Private Sub PicLienzo_MouseUp(Button As Integer, Shift As Integer, _<br />
End Sub<br />
If Button = vbLeftButton Then<br />
End If<br />
X2 = X<br />
Y2 = Y<br />
X As Single, Y As Single)<br />
RADIO = Sqr((X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2)) / 2<br />
Select Case FORMA<br />
Case 1<br />
Case 2<br />
Case 3<br />
Case 4<br />
Case 5<br />
End Select<br />
CONTROLES GRÁFICOS<br />
PicLienzo.PSet (X, Y), COLOR<br />
PicLienzo.Line -(X, Y), COLOR<br />
PicLienzo.Line (X1, Y1)-(X2, Y2), COLOR, B<br />
PicLienzo.Circle (X, Y), RADIO, COLOR<br />
PicLienzo.Circle (X, Y), RADIO, COLOR, , , 0.5<br />
<strong>Visual</strong> <strong>Basic</strong> proporciona tres controles gráficos diseñados<br />
para crear efectos gráficos en las aplicaciones:<br />
• Control Image (estudiado en el Capítulo 4)<br />
• Control Line<br />
• Control Shape<br />
Pág. 206
Control Line<br />
Line es un control gráfico que se muestra como una línea<br />
horizontal, vertical o diagonal.<br />
El control Line tiene una funcionalidad limitada y está<br />
pensado para usos sencillos. Para usos más avanzados debe usar<br />
el método Line.<br />
Propiedad Descripción<br />
BorderColor Devuelve o establece el color de la línea.<br />
BorderStyle Devuelve o establece el estilo de la línea.<br />
BorderWidth Devuelve o establece el ancho de la línea.<br />
X1, Y1, X2, Y2 Devuelven o establecen las coordenadas del<br />
Control Shape<br />
punto inicial (X1, Y1) y del punto final<br />
(X2, Y2) de la línea.<br />
Shape es un control gráfico que se muestra como un<br />
rectángulo, un cuadrado, una elipse, un círculo, un rectángulo<br />
redondeado o un cuadrado redondeado.<br />
El control Shape presenta propiedades similares al control<br />
Line (BorderColor, BorderStyle, BorderWidth). Adicionalmente,<br />
la propiedad Shape del control Shape proporciona seis formas<br />
predefinidas. En la tabla siguiente se enumeran todas las<br />
formas predefinidas, sus valores y las constantes de <strong>Visual</strong><br />
<strong>Basic</strong> equivalentes:<br />
Pág. 207
Forma Estilo Constante<br />
Rectángulo 0 vbShapeRectangle<br />
Cuadrado 1 vbShapeSquare<br />
Elipse 2 vbShapeOval<br />
Círculo 3 vbShapeCircle<br />
Rectángulo redondeado 4 vbShapeRoundedRectangle<br />
Cuadrado redondeado 5 vbShapeRoundedSquare<br />
Las seis formas predefinidas que presenta el control Shape<br />
se muestran en el siguiente formulario:<br />
GRAFICACIÓN MATEMÁTICA<br />
Como la mayor parte de las ecuaciones matemáticas expresa<br />
relaciones complicadas en una, dos tres o más dimensiones,<br />
tratar de entenderlas sin gráficas es casi lo mismo que tratar<br />
de caminar con los ojos vendados.<br />
Funciones algebraicas<br />
Pág. 208
Como ejemplo de este tipo de gráficas vamos a dibujar una<br />
parábola, cuya ecuación matemática (ecuación general de segundo<br />
grado) es de la forma:<br />
= + +<br />
2<br />
f ( x) Ax Bx C<br />
Para realizar la presente aplicación crear un nuevo<br />
proyecto y añadir al formulario un cuadro de imagen (PicPlano),<br />
tres cuadros de texto (TxtA, TxtB, TxtC) y un botón de comandos<br />
(Cmd<strong>Visual</strong>izar). Los aspectos decorativos (etiquetas, marcos,<br />
etc.) quedan a criterio del lector. Luego ingresar el siguiente<br />
código:<br />
Dim A As Double, B As Double, C As Double<br />
Pág. 209
Function F(ByVal X As Single) As Single<br />
F = A * (X * X) + B * X + C<br />
End Function<br />
Private Sub Cmd<strong>Visual</strong>izar_Click()<br />
Dim X As Single<br />
A = TxtA<br />
B = TxtB<br />
C = TxtC<br />
PicPlano.Cls<br />
PicPlano.Scale (-100, 100)-(100, -100)<br />
PicPlano.Line (-100, 0)-(100, 0)<br />
PicPlano.Line (0, -100)-(0, 100)<br />
PicPlano.CurrentX = -10<br />
PicPlano.CurrentY = F(-10)<br />
For X = -10 To 10<br />
Next<br />
End Sub<br />
PicPlano.Line -(X, F(X))<br />
Funciones trigonométricas<br />
Graficar funciones trigonométricas (seno, coseno,<br />
tangente, cotangente, secante, cosecante) no es nada<br />
complicado, sino analice el siguiente ejemplo.<br />
Pág. 210
Para realizar nuestra aplicación de ejemplo crear un nuevo<br />
proyecto y añadir al formulario un cuadro de imagen (PicPlano)<br />
y 6 botones de comandos (CmdFuncion, es decir se trata de una<br />
matriz de controles). Luego ingresar el código siguiente:<br />
Private Sub CmdFuncion_Click(Index As Integer)<br />
End Sub<br />
PicPlano.Cls<br />
Dibuja (Index)<br />
Private Sub Dibuja(OP As Integer)<br />
PicPlano.Scale (-5, 5)-(5, -5)<br />
PicPlano.Line (-5, 0)-(5, 0)<br />
PicPlano.Line (0, -5)-(0, 5)<br />
DosPi = 8 * Atn(1)<br />
Pág. 211
Dim X As Single<br />
For X = -DosPi To DosPi Step 0.025<br />
Next<br />
End Sub<br />
Select Case OP<br />
Case 0<br />
Case 1<br />
Case 2<br />
Case 3<br />
Case 4<br />
Case 5<br />
End Select<br />
Y = Sin(X)<br />
Y = Cos(X)<br />
Y = Sin(X) / Cos(X)<br />
If X < -0.001 Or X > 0.001 Then<br />
End If<br />
Y = Cos(X) / Sin(X)<br />
Y = 1 / Cos(X)<br />
If X < -0.001 Or X > 0.001 Then<br />
End If<br />
PicPlano.PSet (X, Y)<br />
Gráficas en coordenadas polares<br />
Y = 1 / Sin(X)<br />
Pág. 212
Para el caso de las gráficas de ecuaciones polares tampoco<br />
es complicado, sólo hay que tener presente las siguientes<br />
consideraciones.<br />
Dado un punto Px ( , y)<br />
del plano, tal punto se encuentra a<br />
una distancia r del origen, y a un ángulo θ respecto del<br />
semieje horizontal positivo.<br />
De la gráfica se tiene que el punto P tiene coordenadas<br />
rectangulares<br />
( x, y ) y coordenadas polares (, r θ ) entonces se<br />
cumplen las siguientes relaciones de transformación:<br />
x= rcosθ y = rsenθ<br />
= + y<br />
θ =<br />
2 2 2<br />
De donde: r x ; tan y<br />
x<br />
Pág. 213
A continuación presentamos algunas ecuaciones polares<br />
características:<br />
Nombre Ecuación<br />
Circunferencia de radio<br />
Trébol de cuatro hojas<br />
n r = n<br />
r = 2cos2θ<br />
Cardioide r = 1 + cosθ<br />
Limazón<br />
Lemniscata<br />
Pétalo de rosa<br />
Espiral<br />
r = 1 + 2 cosθ<br />
2<br />
r = cos 2θ<br />
r = sen 4θ<br />
r =<br />
θ<br />
2n<br />
Espiral logarítmica n<br />
r e θ<br />
=<br />
Astroide<br />
Nefroide<br />
Concoide<br />
Estrofoide<br />
3<br />
r = (cos 2 θ )<br />
r = 3cos2 θ − cos6θ<br />
r =<br />
1<br />
r = + 1<br />
cos 2θ<br />
1<br />
cos 2 θ + tan 2θ<br />
Para realizar una aplicación que permita dibujar<br />
ecuaciones polares crear un nuevo proyecto y añadir al<br />
formulario 1 cuadro de imagen (PicPlano), un cuadro de lista<br />
(LstEcuacion) y un botón de comandos (Cmd<strong>Visual</strong>izar). La<br />
apariencia de la interfaz debe ser similar a la de la figura<br />
mostrada:<br />
Pág. 214
Luego proceda a ingresar el código que se presenta a<br />
continuación:<br />
Dim OP As Integer<br />
Function F(ByVal THETA As Single) As Single<br />
Select Case OP<br />
Case 0 : F = 2<br />
Case 1 : F = 2 * Cos(2 * THETA)<br />
Case 2 : F = 1 + Cos(THETA)<br />
Case 3 : F = 1 + 2 * Cos(THETA)<br />
Case 4 : If Cos(2 * THETA) >= 0 Then F = Sqr(Cos(2 * THETA))<br />
Case 5 : F = Sin(4 * THETA)<br />
Case 6 : F = THETA / 2<br />
Case 7 : F = Exp(THETA / 8)<br />
Case 8 : F = Cos(2 * THETA) * Cos(2 * THETA) * Cos(2 * THETA)<br />
Pág. 215
Case 9 : F = 3 * Cos(2 * THETA) - Cos(6 * THETA)<br />
Case 10: F = 1 / Cos(2 * THETA) + 1<br />
Case 11: If Int(THETA / 45) THETA / 45 Or THETA 0 _<br />
End Select<br />
End Function<br />
Private Sub LstEcuacion_Click()<br />
OP = LstEcuacion.ListIndex<br />
End Sub<br />
Private Sub Cmd<strong>Visual</strong>izar_Click()<br />
Dim X As Single, Y As Single<br />
Dim I As Single, R As Single<br />
DosPi = 8 * Atn(1)<br />
PicPlano.Cls<br />
PicPlano.ScaleMode = 3<br />
Then F = 1 / (Cos(2 * THETA) + Tan(2 * THETA))<br />
PicPlano.Scale (-3.25, 3.25)-(3.25, -3.25)<br />
PicPlano.Line (-3.25, 0)-(3.25, 0)<br />
PicPlano.Line (0, -3.25)-(0, 3.25)<br />
For I = 0 To DosPi Step 0.01<br />
Next<br />
End Sub<br />
R = F(I)<br />
Fractales<br />
X = R * Cos(I)<br />
Y = R * Sin(I)<br />
PicPlano.PSet (X, Y), QBColor(1)<br />
Pág. 216
La matemática fractal es producto de la interacción de un<br />
matemático genial (Benoit B. Mandelbrot) y la computadora.<br />
El ahora ubicuo término fractal se debe al hecho de que la<br />
matemática fractal trabaja con fracciones, las figuras<br />
generadas no tienen una relación de enteros entre sus<br />
componentes, de modo que ninguna dimensión es producto de otra<br />
multiplicada por un entero. Es decir, al dividir una dimensión<br />
entre otra nunca se obtiene un resultado exacto. Los fractales<br />
generan figuras y estas figuras resultan tener una extraña<br />
similitud con algunas formas que genera la naturaleza.<br />
Entre las ecuaciones para generar fractales Mandelbrot ha<br />
producido una en particular que ha recibido el nombre de<br />
“Conjunto de Mandelbrot”. Esta ecuación se resuelve en el campo<br />
de los números comprendidos entre las longitudes -2.0 a +0.5 y<br />
las latitudes -<strong>1.</strong>25 a +<strong>1.</strong>25, está dominado por un gran mar<br />
fractal con bahías y entrantes. La expresión matemática del<br />
Conjunto de Mandelbrot es:<br />
Z Z C<br />
n+<br />
1 = +<br />
2<br />
n<br />
Donde C es un número complejo constante y Z es un número<br />
complejo variable que permite obtener las respectivas<br />
iteraciones (los valores de cada punto del paisaje fractal,<br />
latitud y longitud).<br />
Pág. 217
Como ejemplo vamos a obtener las tres primeras<br />
iteraciones. Para ello asignamos valores a C de cualquier<br />
posición arbitraria dentro del conjunto, digamos C = 1+ i y para<br />
arrancar las iteraciones podemos comenzar con Z = , luego:<br />
Z = + + i = + i<br />
2<br />
1 (0) (1 ) 1<br />
Z i i i<br />
2<br />
2 = (1 + ) + (1 + ) = 1+ 3<br />
Z i i i<br />
2<br />
3 = (1+ 3 ) + (1 + ) = − 7 + 7<br />
0 0<br />
Cuando se continua desarrollando el Conjunto de Mandelbrot<br />
se obtiene una figura similar a la mostrada:<br />
Pág. 218
Para el desarrollo de la presente aplicación crear un<br />
nuevo proyecto y añadir sobre el formulario un cuadro de imagen<br />
(PicPlano) y un botón de comandos (Cmd<strong>Visual</strong>izar), luego<br />
ingresar el código siguiente:<br />
Function Hipotenusa(ByVal A As Double, ByVal B As Double) As Double<br />
Hipotenusa = Sqr(A * A + B * B)<br />
End Function<br />
Private Sub Cmd<strong>Visual</strong>izar_Click()<br />
Dim MaxX As Integer, MaxY As Integer<br />
Dim Limite As Integer, Pasos As Integer<br />
Dim I As Integer, J As Integer<br />
Dim PasoX As Double, PasoY As Double<br />
Dim PosX As Double, PosY As Double<br />
Dim OrigX As Double, OrigY As Double<br />
Dim DimX As Double, DimY As Double<br />
Dim IterX As Double, IterY As Double, TempX As Double<br />
Dim Terminar As Boolean<br />
PicPlano.ScaleMode = 3<br />
MaxX = PicPlano.ScaleWidth<br />
MaxY = PicPlano.ScaleHeight<br />
Limite = 16<br />
OrigX = -2<br />
OrigY = -<strong>1.</strong>25<br />
DimX = 0.5<br />
DimY = <strong>1.</strong>25<br />
PasoX = (DimX - OrigX) / MaxX<br />
Pág. 219
End Sub<br />
PasoY = (DimY - OrigY) / MaxY<br />
For I = 0 To MaxX<br />
Next<br />
For J = 0 To MaxY<br />
Next<br />
PosX = OrigX + I * PasoX<br />
PosY = OrigY + J * PasoY<br />
IterX = 0 : IterY = 0<br />
Terminar = False<br />
Pasos = 0<br />
While (Not Terminar)<br />
Wend<br />
TempX = (IterX * IterX) - (IterY * IterY) + PosX<br />
IterY = 2 * (IterX * IterY) + PosY<br />
IterX = TempX<br />
Pasos = Pasos + 1<br />
If Hipotenusa(Abs(IterX), Abs(IterY)) >= 2 Then<br />
End If<br />
Terminar = True<br />
If (Pasos >= Limite) Then<br />
End If<br />
Terminar = True<br />
If (Pasos < Limite) Then<br />
End If<br />
PicPlano.PSet (I, J), QBColor(Pasos)<br />
Pág. 220
En este capítulo, debido a las limitaciones de espacio y<br />
materia, tan sólo se ofrece el camino de acceso a unos pocos de<br />
los diversos temas que abarca el fascinante mundo de la<br />
programación de gráficos por computadora.<br />
Muchos de estos temas siguen siendo materia de<br />
investigación (como el caso de los fractales), por lo que si<br />
Ud. desea profundizar en este laberinto de fascinación, no hay<br />
la garantía de un retorno sano y salvo a nuestro universo<br />
mundano.<br />
Pág. 221
GUÍA DE LABORATORIO<br />
Parte I<br />
ELABORADO POR<br />
CARLOS CASTILLO PERALTA<br />
cc_peralta@hotmail.com<br />
INTRODUCCIÓN<br />
Pág. 222
La presente Guía de Laboratorio de Microsoft <strong>Visual</strong> <strong>Basic</strong>,<br />
se elaboró con la finalidad de complementar la parte teórica<br />
con la parte práctica del curso. Los problemas presentan un<br />
grado de dificultad gradual, es decir, en cada práctica primero<br />
se comienzan con problemas muy sencillos con la finalidad de<br />
que el estudiante esclarezca dudas y quede claro en los<br />
conceptos asimilados en la teoría, y luego en los problemas<br />
posteriores se va incrementando el nivel de dificultad.<br />
Esta guía explora una gran variedad de materias y contiene<br />
muchos problemas recopilados a lo largo de varios años de<br />
experiencia. Espero que satisfaga las necesidades de los<br />
estudiantes y colegas, ya que ha sido elaborada teniendo en<br />
cuenta los objetivos de aprendizaje del curso.<br />
Si desean compartirla con otros colegas, me agradaría<br />
mucho que lo hicieran, con la única condición de que siempre se<br />
respete el derecho del autor.<br />
Desde ya les deseo la mejor de las suertes en el<br />
aprendizaje de Microsoft <strong>Visual</strong> <strong>Basic</strong>.<br />
Carlos Castillo Peralta<br />
Microsoft <strong>Visual</strong> <strong>Basic</strong><br />
Lima, Diciembre del 2000<br />
Pág. 223
GUÍA DE LABORATORIO Nº 1<br />
Objetivos<br />
Luego de completar este laboratorio, el estudiante será<br />
capaz de:<br />
• Identificar los elementos del entorno integrado de<br />
desarrollo de Microsoft <strong>Visual</strong> <strong>Basic</strong> 6.0.<br />
• Añadir controles a un formulario.<br />
• Establecer las propiedades de los controles.<br />
• Trabajar con procedimientos de eventos.<br />
• Crear una aplicación simple con Microsoft <strong>Visual</strong> <strong>Basic</strong>.<br />
Consideraciones<br />
Para el desarrollo del presente laboratorio Ud. deberá<br />
crear una carpeta C:\FundVB\Lab1, para guardar sus trabajos<br />
correspondientes a este laboratorio.<br />
Aplicación Nº 1<br />
Elaborar una aplicación que permita calcular el salario<br />
neto de un trabajador en función del número de horas<br />
trabajadas, pago por hora de trabajo y un descuento fijo al<br />
sueldo bruto del 20 por 100. Los cálculos a efectuar para<br />
obtener el salario neto de un trabajador se muestran a<br />
continuación:<br />
SalarioBruto = HorasTrabajadas * PagoPorHora<br />
Descuento = 0.2 * SalarioBruto<br />
SalarioNeto = SalarioBruto - Descuento<br />
El diseño de la interfaz debe ser similar a la figura<br />
mostrada:<br />
Pág. 224
Para el desarrollo de esta aplicación, proceda a ubicar<br />
los siguientes controles en el formulario:<br />
2 marcos<br />
6 etiquetas<br />
6 cajas de texto<br />
3 botones de comando<br />
Una vez ubicados los controles, establezca las propiedades<br />
según se indica:<br />
Form1<br />
Frame1<br />
Nombre FrmSalarioNeto<br />
BorderStyle 3-Fixed Dialog<br />
Caption Cálculo del salario neto<br />
Moveable False<br />
StartUpPosition 2-CenterScreen<br />
Nombre FraIngreso<br />
Pág. 225
Frame2<br />
Label1<br />
Label2<br />
Label3<br />
Label4<br />
Label5<br />
Label6<br />
Caption Ingreso de datos:<br />
Nombre FraSalida<br />
Caption Salida de datos:<br />
Nombre LblApellidosNombres<br />
AutoSize True<br />
Caption Apellidos y nombres:<br />
Nombre LblHorasTrabajadas<br />
AutoSize True<br />
Caption Horas trabajadas:<br />
Nombre LblPagoPorHora<br />
AutoSize True<br />
Caption Pago por hora S/.<br />
Nombre LblSalarioBruto<br />
AutoSize True<br />
Caption Salario bruto S/.<br />
Nombre LblDescuento<br />
AutoSize True<br />
Caption Descuento S/.<br />
Nombre LblSalarioNeto<br />
Pág. 226
Text1<br />
Text2<br />
Text3<br />
Text4<br />
Text5<br />
Text6<br />
Command1<br />
Command2<br />
AutoSize True<br />
Caption Salario neto S/.<br />
Nombre TxtApellidosNombres<br />
Text<br />
Nombre TxtHorasTrabajadas<br />
Text<br />
Nombre TxtPagoPorHora<br />
Text<br />
Nombre TxtSalarioBruto<br />
Text<br />
Nombre TxtDescuento<br />
Text<br />
Nombre TxtSalarioNeto<br />
Text<br />
Nombre CmdAceptar<br />
Caption &Aceptar<br />
Nombre CmdLimpiar<br />
Pág. 227
Command3<br />
Caption &Limpiar<br />
Nombre CmdSalir<br />
Caption &Salir<br />
Luego de establecer las propiedades para los controles,<br />
debe añadir código a la aplicación. Para ello haga doble click<br />
sobre el botón Aceptar e ingrese el siguiente código:<br />
Private Sub CmdAceptar_Click()<br />
Dim HorasTrabajadas As Integer, PagoPorHora As Double<br />
Dim SalarioBruto As Double<br />
Dim Descuento As Double<br />
Dim SalarioNeto As Double<br />
HorasTrabajadas = Val(TxtHorasTrabajadas)<br />
PagoPorHora = Val(TxtPagoPorHora)<br />
SalarioBruto = HorasTrabajadas * PagoPorHora<br />
Descuento = 0.2 * SalarioBruto<br />
SalarioNeto = SalarioBruto - Descuento<br />
TxtSalarioBruto = Str(SalarioBruto)<br />
TxtDescuento = Str(Descuento)<br />
TxtSalarioNeto = Str(SalarioNeto)<br />
End Sub<br />
A continuación haga doble click sobre el botón Salir y<br />
añada el siguiente código:<br />
Private Sub CmdSalir_Click()<br />
End<br />
End Sub<br />
Guarde y luego ejecute la aplicación que acaba de crear.<br />
Pruebe ingresando diferentes valores.<br />
Pág. 228
Luego, haga doble click sobre el botón Limpiar y añada el<br />
siguiente código:<br />
Private Sub CmdLimpiar_Click()<br />
TxtApellidosNombres = “”<br />
TxtHorasTrabajadas = “”<br />
TxtPagoPorHora = “”<br />
TxtSalarioBruto = “”<br />
TxtDescuento = “”<br />
TxtSalarioNeto = “”<br />
TxtApellidosNombres.SetFocus<br />
End Sub<br />
Guarde y ejecute su aplicación. ¿Cómo afecta el código<br />
añadido en el botón Limpiar a la aplicación?. Anote sus<br />
observaciones.<br />
Aplicación Nº 2<br />
El menú de un restaurante rápido se muestra a<br />
continuación:<br />
MENÚ PRECIO (S/.)<br />
Hamburguesa 2.50<br />
Cerveza 4.00<br />
Gaseosa 3.00<br />
Ensalada <strong>1.</strong>50<br />
Salchichas 2.00<br />
Refresco <strong>1.</strong>00<br />
Sopa <strong>1.</strong>50<br />
Postre <strong>1.</strong>50<br />
Se desea construir una<br />
aplicación que calcule las<br />
ventas totales al final del<br />
día, así como los impuestos<br />
a pagar (18 por 100).<br />
La interfaz de entrada<br />
y salida deberá ser similar<br />
a la figura mostrada a<br />
continuación:<br />
Pág. 229
Para el diseño del cuadro de menú utilizaremos el control<br />
Microsoft Hierarchical FlexGrid. Para tal fin, seleccione el<br />
Menú Proyecto y elija la opción Componentes:<br />
Pág. 230
A continuación active la casilla de verificación Microsoft<br />
Hierarchical FlexGrid Control 6.0 OLEDB y haga click sobre el<br />
botón Aceptar. En seguida este control se añadirá al Cuadro de<br />
Herramientas.<br />
Para el desarrollo de esta aplicación, proceda a ubicar<br />
los siguientes controles en el formulario:<br />
10 etiquetas<br />
10 cajas de texto<br />
1 control MSHFlexGrid<br />
3 botones de comando<br />
En seguida, elabore el diseño de entrada y salida. Para<br />
ello proceda a establecer las propiedades según se indica a<br />
continuación:<br />
Form1<br />
Label1<br />
Label2<br />
Nombre FrmRestaurante<br />
BorderStyle 3-Fixed Dialog<br />
Caption Restaurante<br />
Moveable False<br />
StartUpPosition 2-CenterScreen<br />
Nombre LblHamburguesa<br />
AutoSize True<br />
Caption Hamburguesa:<br />
Nombre LblCerveza<br />
AutoSize True<br />
Caption Cerveza:<br />
Pág. 231
Label3<br />
Label4<br />
Label5<br />
Label6<br />
Label7<br />
Label8<br />
Label9<br />
Nombre LblGaseosa<br />
AutoSize True<br />
Caption Gaseosa:<br />
Nombre LblEnsalada<br />
AutoSize True<br />
Caption Ensalada:<br />
Nombre LblSalchichas<br />
AutoSize True<br />
Caption Salchichas:<br />
Nombre LblRefresco<br />
AutoSize True<br />
Caption Refresco:<br />
Nombre LblSopa<br />
AutoSize True<br />
Caption Sopa:<br />
Nombre LblPostre<br />
AutoSize True<br />
Caption Postre:<br />
Nombre LblVentaTotal<br />
Caption Venta total S/.<br />
Pág. 232
Label10<br />
Nombre LblImpuesto<br />
Caption Impuesto S/.<br />
MSHFlexGrid1<br />
Text1<br />
Text2<br />
Text3<br />
Text4<br />
Text5<br />
Text6<br />
Nombre GrdMenu<br />
Font Arial (Negrita 10)<br />
FontFixed Arial (Negrita 10)<br />
Nombre TxtHamburguesa<br />
Text<br />
Nombre TxtCerveza<br />
Text<br />
Nombre TxtGaseosa<br />
Text<br />
Nombre TxtEnsalada<br />
Text<br />
Nombre TxtSalchichas<br />
Text<br />
Nombre TxtRefresco<br />
Text<br />
Pág. 233
Text7<br />
Text8<br />
Text9<br />
Text10<br />
Nombre TxtSopa<br />
Text<br />
Nombre TxtPostre<br />
Text<br />
Nombre TxtVentaTotal<br />
Locked<br />
Text<br />
True<br />
Nombre TxtImpuesto<br />
Locked True<br />
Text<br />
Command1<br />
Command2<br />
Command3<br />
Nombre CmdAceptar<br />
Caption &Aceptar<br />
Nombre CmdLimpiar<br />
Caption &Limpiar<br />
Nombre CmdSalir<br />
Caption &Salir<br />
Picture C:\Archivos de programa\Microsoft <strong>Visual</strong><br />
Studio\Common\Graphics\Icons\Arrows\Point04.ico<br />
Style 1-Graphical<br />
Pág. 234
En primer lugar debemos cargar los datos a la cuadrícula.<br />
Esto lo vamos a realizar en tiempo de ejecución al momento de<br />
cargarse en memoria el formulario. Para ello, haga doble click<br />
sobre el formulario y añada el siguiente código:<br />
Private Sub Form_Load()<br />
GrdMenu.Cols = 2<br />
GrdMenu.Rows = 9<br />
GrdMenu.FixedCols = 0<br />
GrdMenu.FixedRows = 1<br />
GrdMenu.TextArray(0) = “Menú”<br />
GrdMenu.TextArray(1) = “Precio”<br />
GrdMenu.TextArray(2) = “Hamburguesa”<br />
GrdMenu.TextArray(3) = “2.50”<br />
GrdMenu.TextArray(4) = “Cerveza”<br />
GrdMenu.TextArray(5) = “4.00”<br />
GrdMenu.TextArray(6) = “Gaseosa”<br />
GrdMenu.TextArray(7) = “3.00”<br />
GrdMenu.TextArray(8) = “Ensalada”<br />
GrdMenu.TextArray(9) = “<strong>1.</strong>50”<br />
GrdMenu.TextArray(10) = “Salchichas”<br />
GrdMenu.TextArray(11) = “2.00”<br />
GrdMenu.TextArray(12) = “Refresco”<br />
GrdMenu.TextArray(13) = “<strong>1.</strong>00”<br />
GrdMenu.TextArray(14) = “Sopa”<br />
GrdMenu.TextArray(15) = “<strong>1.</strong>50”<br />
GrdMenu.TextArray(16) = “Postre”<br />
GrdMenu.TextArray(17) = “<strong>1.</strong>50”<br />
End Sub<br />
Luego debemos añadir el código que se encargará de<br />
realizar los cálculos. Para tal fin haga doble click sobre el<br />
botón Aceptar y proceda a ingresar lo siguiente:<br />
Pág. 235
Private Sub CmdAceptar_Click()<br />
Dim Hamburguesa As Integer, Cerveza As Integer<br />
Dim Gaseosa As Integer, Ensalada As Integer<br />
Dim Salchichas As Integer, Refresco As Integer<br />
Dim Sopa As Integer, Postre As Integer<br />
Dim VentaTotal As Double, Impuesto As Double<br />
Hamburguesa = Val(TxtHamburguesa)<br />
Cerveza = Val(TxtCerveza)<br />
Gaseosa = Val(TxtGaseosa)<br />
Ensalada = Val(TxtEnsalada)<br />
Salchichas = Val(TxtSalchichas)<br />
Refresco = Val(TxtRefresco)<br />
Sopa = Val(TxtSopa)<br />
Postre = Val(TxtPostre)<br />
VentaTotal = Hamburguesa * 2.5 + Cerveza * 4.0 _<br />
+ Gaseosa * 3.0 + Ensalada * <strong>1.</strong>5 + Salchichas * 2.0 _<br />
+ Refresco * <strong>1.</strong>0 + Sopa * <strong>1.</strong>5 + Postre * <strong>1.</strong>5<br />
Impuesto = 0.18 * VentaTotal<br />
TxtVentaTotal = Str(VentaTotal)<br />
TxtImpuesto = Str(Impuesto)<br />
End Sub<br />
Luego, haga doble click sobre el botón Limpiar y añada el<br />
siguiente código:<br />
Private Sub CmdLimpiar_Click()<br />
TxtHamburguesa = “” : TxtCerveza = “”<br />
TxtGaseosa = “” : TxtEnsalada = “”<br />
TxtSalchichas = “” : TxtRefresco = “”<br />
TxtSopa = “” : TxtPostre = “”<br />
TxtVentaTotal = “” : TxtImpuesto = “”<br />
TxtHamburguesa.SetFocus<br />
End Sub<br />
Pág. 236
A continuación haga doble click sobre el botón Salir y<br />
añada el siguiente código:<br />
Private Sub CmdSalir_Click()<br />
End<br />
End Sub<br />
Aplicación Nº 3<br />
Elaborar una aplicación que permita calcular la edad de<br />
una persona a partir de su fecha de nacimiento. El diseño de la<br />
interfaz debe ser similar a la figura mostrada:<br />
Para el desarrollo de esta aplicación, proceda a ubicar<br />
los siguientes controles en el formulario:<br />
2 etiquetas<br />
2 cajas de texto<br />
3 botones de comando<br />
Luego, proceda a establecer las propiedades según se<br />
indica a continuación:<br />
Form1<br />
Nombre FrmEdad<br />
BorderStyle 3-Fixed Dialog<br />
Caption Calcula la edad de una persona<br />
Pág. 237
Label1<br />
Label2<br />
Text1<br />
Text2<br />
Command1<br />
Command2<br />
Command3<br />
Nombre LblFecNac<br />
AutoSize True<br />
Caption Fecha de nacimiento:<br />
Nombre LblEdad<br />
AutoSize True<br />
Caption Su edad es:<br />
Nombre TxtFecNac<br />
Text<br />
Nombre TxtEdad<br />
Locked<br />
Text<br />
True<br />
Nombre CmdAceptar<br />
Caption &Aceptar<br />
Default True<br />
Nombre CmdLimpiar<br />
Caption &Limpiar<br />
Nombre CmdSalir<br />
Cancel True<br />
Caption &Salir<br />
En seguida proceda a ingresar el siguiente código:<br />
Pág. 238
Private Sub CmdAceptar_Click()<br />
Dim FecNac As Date, Edad As Integer<br />
FecNac = CDate(TxtFecNac)<br />
Edad = CInt((Date - FecNac) / 365)<br />
TxtEdad = Str(Edad) & “ años”<br />
End Sub<br />
Se deja como ejercicio para el estudiante el código<br />
asociado con los botones Limpiar y Salir, respectivamente.<br />
Aplicación Nº 4<br />
Se tiene un cajero automático el cual permite manipular<br />
cierta cantidad de dinero para lo cual dispone de los<br />
siguientes billetes: S/. 10.00, S/. 20.00, S/. 50.00,<br />
S/. 100.00 y S/. 200.00. Elaborar una aplicación que permita la<br />
lectura de la cantidad a retirar e indique el menor número de<br />
billetes a utilizar.<br />
Creo que a estas alturas Ud. ya entendió como funciona<br />
esto. Por ello, esta aplicación se deja como ejercicio para el<br />
estudiante.<br />
Pág. 239
GUÍA DE LABORATORIO Nº 2<br />
Objetivos<br />
Microsoft <strong>Visual</strong> <strong>Basic</strong><br />
Luego de completar este laboratorio, el estudiante será<br />
capaz de:<br />
• Implementar<br />
selectivas.<br />
aplicaciones utilizando estructuras de control<br />
• Usar casillas de verificación y botones de opción para<br />
alternar entre uno o más valores.<br />
• Utilizar<br />
mensajes.<br />
cajas de diálogo predefinidas para visualizar<br />
Consideraciones<br />
Para el desarrollo del presente laboratorio Ud. deberá<br />
crear una carpeta C:\FundVB\Lab2, para guardar sus trabajos<br />
correspondientes a este laboratorio.<br />
Aplicación Nº 1<br />
Se desea elaborar la boleta de pago de los trabajadores de<br />
una fábrica. Para ello se cuenta con los siguientes datos de<br />
entrada:<br />
Apellidos y nombres del trabajador<br />
Sueldo básico<br />
Horas extras trabajadas<br />
Además, se sabe que los trabajadores laboran en dos<br />
turnos: diurno y nocturno. Y que la tarifa por las horas extras<br />
diurnas es de 10 soles y por las horas extras nocturnas es de<br />
15 soles.<br />
Pág. 240
Los descuentos a aplicar son sobre el sueldo básico y se<br />
obtienen de la siguiente manera:<br />
Renta = Sueldo<strong>Basic</strong>o * 0.1<br />
Fonavi = Sueldo<strong>Basic</strong>o * 0.07<br />
AFP = Sueldo<strong>Basic</strong>o * 0.03<br />
Finalmente el sueldo neto del trabajador se calcula<br />
mediante las siguientes expresiones:<br />
Ingresos = Sueldo<strong>Basic</strong>o + HorasExtras * PagoHoraExtra<br />
Egresos = Renta + Fonavi + AFP<br />
SueldoNeto = Ingresos - Egresos<br />
El diseño de la interfaz deberá ser similar a la figura<br />
mostrada:<br />
Pág. 241
Para el desarrollo de esta aplicación, proceda a ubicar<br />
los siguientes controles en el formulario:<br />
2 marcos<br />
5 etiquetas<br />
8 cajas de texto<br />
2 botones de opción<br />
3 casillas de verificación<br />
3 botones de comando<br />
Luego, proceda a establecer las propiedades según se<br />
indica a continuación:<br />
Form1<br />
Label1<br />
Label2<br />
Label3<br />
Nombre FrmBoletaDePago<br />
BorderStyle 3-Fixed Dialog<br />
Caption Boleta de pago<br />
Moveable False<br />
Nombre LblTrabajador<br />
AutoSize True<br />
Caption Trabajador:<br />
Nombre LblSueldo<strong>Basic</strong>o<br />
AutoSize True<br />
Caption Sueldo Bruto S/.<br />
Nombre LblHorasExtras<br />
AutoSize True<br />
Caption Horas extras:<br />
Pág. 242
Label4<br />
Label5<br />
Text1<br />
Text2<br />
Text3<br />
Text4<br />
Text5<br />
Nombre LblPagoHoraExtra<br />
AutoSize True<br />
Caption Pago hora extra S/.<br />
Nombre LblSueldoNeto<br />
AutoSize True<br />
Caption Sueldo neto S/.<br />
Nombre TxtTrabajador<br />
Text<br />
Nombre TxtSueldo<strong>Basic</strong>o<br />
Text<br />
Nombre TxtHorasExtras<br />
Text<br />
Nombre TxtPagoHoraExtra<br />
BackColor &H80000004&<br />
Text<br />
Nombre TxtRenta<br />
BackColor &H80000004&<br />
Locked True<br />
Text<br />
Pág. 243
Text6<br />
Text7<br />
Text8<br />
Option1<br />
Option2<br />
Check1<br />
Check2<br />
Nombre TxtFonavi<br />
BackColor &H80000004&<br />
Locked True<br />
Text<br />
Nombre TxtAFP<br />
BackColor &H80000004&<br />
Locked True<br />
Text<br />
Nombre TxtSueldoNeto<br />
BackColor &H80000004&<br />
Locked True<br />
Text<br />
Nombre OptDiurno<br />
Caption Diurno<br />
Value True<br />
Nombre OptNocturno<br />
Caption Nocturno<br />
Value False<br />
Nombre ChkRenta<br />
Caption Renta<br />
Pág. 244
Check3<br />
Command1<br />
Command2<br />
Command3<br />
Nombre ChkFonavi<br />
Caption Fonavi<br />
Nombre ChkAFP<br />
Caption AFP<br />
Nombre CmdAceptar<br />
Caption &Aceptar<br />
Default True<br />
Nombre CmdLimpiar<br />
Caption &Limpiar<br />
Nombre CmdSalir<br />
Cancel True<br />
Caption &Salir<br />
Una vez establecidas las propiedades, proceda a ingresar<br />
el código que se indica a continuación:<br />
Private Sub CmdAceptar_Click()<br />
Dim Sueldo<strong>Basic</strong>o As Double<br />
Dim HorasExtras As Integer, PagoHoraExtra As Double<br />
Dim Renta As Double, Fonavi As Double, AFP As Double<br />
Dim Ingresos As Double, Egresos As Double<br />
Dim SueldoNeto As Double<br />
Sueldo<strong>Basic</strong>o = Val(TxtSueldo<strong>Basic</strong>o)<br />
HorasExtras = Val(TxtHorasExtras)<br />
If OptDiurno Then<br />
Pág. 245
PagoHoraExtra = 10<br />
End If<br />
If OptNocturno Then<br />
PagoHoraExtra = 15<br />
End If<br />
If ChkRenta.Value Then<br />
Renta = Sueldo<strong>Basic</strong>o * 0.1<br />
Else<br />
Renta = 0<br />
End If<br />
If ChkFonavi.Value Then<br />
Fonavi = Sueldo<strong>Basic</strong>o * 0.07<br />
Else<br />
Fonavi = 0<br />
End If<br />
If ChkAFP.Value Then<br />
AFP = Sueldo<strong>Basic</strong>o * 0.03<br />
Else<br />
AFP = 0<br />
End If<br />
Ingresos = Sueldo<strong>Basic</strong>o + HorasExtras * PagoHoraExtra<br />
Egresos = Renta + Fonavi + AFP<br />
SueldoNeto = Ingresos - Egresos<br />
TxtPagoHoraExtra = Str(PagoHoraExtra)<br />
TxtRenta = Str(Renta)<br />
TxtFonavi = Str(Fonavi) : TxtAFP = Str(AFP)<br />
TxtSueldoNeto = Str(SueldoNeto)<br />
End Sub<br />
Private Sub CmdSalir_Click()<br />
End<br />
End Sub<br />
Aplicación Nº 2<br />
Pág. 246
Cuatro notas entre 0 y 20 representan las calificaciones<br />
de un estudiante de un curso de programación. Elaborar una<br />
aplicación para obtener el promedio de esas calificaciones y<br />
visualizar su puntuación de acuerdo al siguiente cuadro:<br />
Promedio Puntuación<br />
19-20 A<br />
16-18 B<br />
11-15 C<br />
6-10 D<br />
0-5 E<br />
El diseño de la interfaz deberá ser similar a la figura<br />
mostrada:<br />
Para el desarrollo de esta aplicación, proceda a ubicar<br />
los siguientes controles en el formulario:<br />
7 etiquetas<br />
7 cajas de texto<br />
3 botones de comando<br />
Pág. 247
Luego, proceda a establecer las propiedades según se<br />
indica a continuación:<br />
Form1<br />
Label1<br />
Label2<br />
Label3<br />
Label4<br />
Label5<br />
Nombre FrmNotas<br />
BorderStyle 3-Fixed Dialog<br />
Caption Puntuación de un estudiante<br />
Nombre LblAlumno<br />
AutoSize True<br />
Caption Alumno:<br />
Nombre LblN1<br />
AutoSize True<br />
Caption Nota 1:<br />
Nombre LblN2<br />
AutoSize True<br />
Caption Nota 2:<br />
Nombre LblN3<br />
AutoSize True<br />
Caption Nota 3:<br />
Nombre LblN4<br />
AutoSize True<br />
Caption Nota 4:<br />
Pág. 248
Label6<br />
Label7<br />
Text1<br />
Text2<br />
Text3<br />
Text4<br />
Text5<br />
Nombre LblPromedio<br />
AutoSize True<br />
Caption Promedio:<br />
Nombre LblPuntuacion<br />
AutoSize True<br />
Caption Puntuación:<br />
Nombre TxtAlumno<br />
Text<br />
Nombre TxtN1<br />
Text<br />
Nombre TxtN2<br />
Text<br />
Nombre TxtN3<br />
Text<br />
Nombre TxtN4<br />
Text<br />
Pág. 249
Text6<br />
Text7<br />
Command1<br />
Command2<br />
Command3<br />
Nombre TxtPromedio<br />
BackColor &H80000004&<br />
Locked True<br />
Text<br />
Nombre TxtPuntuacion<br />
BackColor &H80000004&<br />
Locked True<br />
Text<br />
Nombre CmdAceptar<br />
Caption &Aceptar<br />
Default True<br />
Nombre CmdLimpiar<br />
Caption &Limpiar<br />
Nombre CmdSalir<br />
Cancel True<br />
Caption &Salir<br />
Una vez establecidas las propiedades, proceda a ingresar<br />
el código que se indica:<br />
Private Sub CmdAceptar_Click()<br />
Dim N1 As Double, N2 As Double, N3 As Double, N4 As Double<br />
Dim Promedio As Integer<br />
N1 = Val(TxtN1) : N2 = Val(TxtN2)<br />
Pág. 250
N3 = Val(TxtN3) : N4 = Val(TxtN4)<br />
Promedio = CInt((N1 + N2 + N3 + N4) / 4)<br />
TxtPromedio = Str(Promedio)<br />
If Promedio >= 19 And Promedio = 16 And Promedio = 11 And Promedio = 6 And Promedio = 0 And Promedio
En caso de que el usuario ingrese algún dato incorrecto<br />
(por ejemplo 13 como un número de mes), se debe visualizar el<br />
siguiente mensaje:<br />
Cuando el usuario haga click en el botón Salir, se debe<br />
observar el siguiente mensaje:<br />
En caso de que el usuario elija la opción Si, la<br />
aplicación debe terminar. En caso contrario, es decir si el<br />
usuario elige la opción No, se debe proseguir con la<br />
aplicación.<br />
Para el desarrollo de esta aplicación, proceda a ubicar<br />
los siguientes controles en el formulario:<br />
4 etiquetas<br />
3 cajas de texto<br />
1 marco<br />
3 botones de comando<br />
En seguida proceda a establecer las propiedades según se<br />
indica:<br />
Pág. 252
Form1<br />
Label1<br />
Label2<br />
Label3<br />
Label4<br />
Text1<br />
Text2<br />
Nombre FrmFecha<br />
BorderStyle 3-Fixed Dialog<br />
Caption Fecha en letras<br />
Nombre LblDia<br />
AutoSize True<br />
Caption Día:<br />
Nombre LblMes<br />
AutoSize True<br />
Caption Mes:<br />
Nombre LblAnno<br />
AutoSize True<br />
Caption Año:<br />
Nombre LblFecha<br />
AutoSize True<br />
Caption<br />
Nombre TxtDia<br />
Text<br />
Nombre TxtMes<br />
Text<br />
Pág. 253
Text3<br />
Command1<br />
Command2<br />
Command3<br />
Nombre TxtAnno<br />
Text<br />
Nombre CmdAceptar<br />
Caption &Aceptar<br />
Default True<br />
Nombre CmdLimpiar<br />
Caption &Limpiar<br />
Nombre CmdSalir<br />
Caption &Salir<br />
Una vez establecidas las propiedades de la interfaz<br />
proceda a ingresar el siguiente código:<br />
Private Sub CmdAceptar_Click()<br />
Dim CadMes As String, Mes As Integer<br />
Mes = Val(TxtMes)<br />
Select Case Mes<br />
Case 1: CadMes = “Enero”<br />
Case 2: CadMes = “Febrero”<br />
Case 3: CadMes = “Marzo”<br />
Case 4: CadMes = “Abril”<br />
Case 5: CadMes = “Mayo”<br />
Case 6: CadMes = “Junio”<br />
Case 7: CadMes = “Julio”<br />
Case 8: CadMes = “Agosto”<br />
Case 9: CadMes = “Setiembre”<br />
Pág. 254
Case 10: CadMes = “Octubre”<br />
Case 11: CadMes = “Noviembre”<br />
Case 12: CadMes = “Diciembre”<br />
Case Else<br />
MsgBox “Error de datos...”, vbCritical, “Mensaje”<br />
Call CmdLimpiar_Click<br />
Exit Sub<br />
End Select<br />
LblFecha = TxtDia & “ de ” & CadMes & “ de ” & TxtAnno<br />
End Sub<br />
Private Sub CmdLimpiar_Click()<br />
TxtDia = “” : TxtMes = “” : TxtAnno = “”<br />
TxtDia.SetFocus<br />
End Sub<br />
Private Sub CmdSalir_Click()<br />
If MsgBox(“¿Desea terminar la aplicación?”, _<br />
vbQuestion + vbYesNo, “Pregunta”) = vbYes Then<br />
End<br />
Else: Call CmdLimpiar_Click<br />
End If<br />
End Sub<br />
Aplicación Nº 4<br />
Un restaurante ofrece un descuento del 10% para consumos<br />
entre S/. 30.00 y S/. 50.00; un descuento del 20% para<br />
consumos mayores a S/. 50.00 nuevos soles; para todos los demás<br />
casos no se aplica ningún tipo de descuento. Elaborar una<br />
aplicación que permita determinar el importe a pagar por el<br />
consumidor. El diseño de la interfaz y otras consideraciones se<br />
dejan a su criterio.<br />
Pág. 255
GUÍA DE LABORATORIO Nº 3<br />
Objetivos<br />
Microsoft <strong>Visual</strong> <strong>Basic</strong><br />
Luego de completar este laboratorio, el estudiante será<br />
capaz de:<br />
• Implementar aplicaciones utilizando estructuras de control<br />
repetitivas.<br />
• Cambiar las propiedades de los controles en tiempo de<br />
ejecución.<br />
Consideraciones<br />
Para el desarrollo del presente laboratorio Ud. deberá<br />
crear una carpeta C:\FundVB\Lab3, para guardar sus trabajos<br />
correspondientes a este laboratorio.<br />
Aplicación Nº 1<br />
Escribir una aplicación que lea un número entero y muestre<br />
la tabla de multiplicar de dicho número. El diseño de entrada y<br />
salida debe ser similar al siguiente:<br />
Pág. 256
Para el desarrollo de esta aplicación, proceda a ubicar<br />
los siguientes controles en el formulario:<br />
1 etiqueta<br />
2 cajas de texto<br />
1 botón de comando<br />
En seguida proceda a establecer las propiedades según se<br />
indica:<br />
Form1<br />
Label1<br />
Text1<br />
Text2<br />
Command1<br />
Nombre FrmTabla<br />
BorderStyle 3-Fixed Dialog<br />
Caption Tabla de multiplicar<br />
Nombre LblNumero<br />
Caption Ingrese un número:<br />
Nombre TxtNumero<br />
Text<br />
Nombre TxtTabla<br />
MultiLine True<br />
Locked True<br />
ScrollBars<br />
Text<br />
2-Vertical<br />
Nombre CmdLimpiar<br />
Caption &Limpiar<br />
Pág. 257
Una vez diseñada la interfaz, proceda a ingresar el código<br />
que se indica a continuación:<br />
Private Sub TxtNumero_Change()<br />
If IsNumeric(TxtNumero) Then<br />
Dim N As Integer, P As Integer, I As Integer<br />
Dim S As String<br />
N = Val(TxtNumero)<br />
S = “”<br />
For I = 0 To 12<br />
P = N * I<br />
S = S & N & “ * ” & I & “ = ” & P & vbCrLf<br />
Next I<br />
TxtTabla = S<br />
ElseIf TxtNumero = “” Then<br />
Exit Sub<br />
Else: MsgBox “Ingrese un número”, vbCritical, “Mensaje”<br />
TxtTabla = “”<br />
End If<br />
End Sub<br />
Private Sub CmdLimpiar_Click()<br />
TxtNumero = “” : TxtTabla = “”<br />
TxtNumero.SetFocus<br />
End Sub<br />
Aplicación Nº 2<br />
Un número perfecto es un entero positivo, que es igual a<br />
la suma de todos los enteros positivos (excluido el mismo) que<br />
son divisores del número. El primer número perfecto es 6, ya<br />
que los divisores de 6 son 1, 2, 3 y 1 + 2 + 3 = 6. Escribir<br />
una aplicación que encuentre los tres primeros números<br />
perfectos.<br />
Pág. 258
El diseño de la interfaz debe ser similar a la figura<br />
mostrada:<br />
Para el desarrollo de esta aplicación, proceda a ubicar<br />
los siguientes controles en el formulario:<br />
1 marco<br />
1 caja de texto<br />
En seguida proceda a establecer las propiedades según se<br />
indica:<br />
Form1<br />
Frame1<br />
Text1<br />
Nombre FrmNumeroPerfecto<br />
BorderStyle 3-Fixed Dialog<br />
Caption Los 3 primeros números perfectos<br />
Nombre FraPerfecto<br />
Caption Número perfecto<br />
Nombre TxtPerfecto<br />
MultiLine<br />
Text<br />
True<br />
Pág. 259
Una vez establecidas las propiedades proceda a ingresar el<br />
código que se indica a continuación:<br />
Private Sub Form_Load()<br />
Dim N As Long, I As Long, S As Long<br />
Dim K As Integer, Cad As String<br />
N = 1 : K = 0 : Cad = “”<br />
While True<br />
S = 0<br />
For I = 1 To (N - 1)<br />
If N Mod I = 0 Then S = S + I<br />
Next I<br />
If N = S Then<br />
Cad = Cad & N & vbCrLf<br />
K = K + 1<br />
End If<br />
If K = 3 Then<br />
TxtPerfecto = Cad<br />
Exit Sub<br />
End If<br />
N = N + 1<br />
Wend<br />
End Sub<br />
Aplicación Nº 3<br />
Construya una aplicación que permita el ingreso de un<br />
número entero y muestre en pantalla la siguiente información:<br />
1) Cantidad de cifras, 2) Suma de cifras impares, 3) Suma de<br />
cifras pares, 4) Suma total de cifras, 5) Cifra mayor, 6) Cifra<br />
menor y 7) Divisores de dicho número.<br />
El diseño de la interfaz debe ser similar a la figura<br />
siguiente:<br />
Pág. 260
Para el desarrollo de esta aplicación, proceda a ubicar<br />
los siguientes controles en el formulario:<br />
4 marcos<br />
7 etiquetas<br />
8 cajas de texto<br />
1 botón de comando<br />
En seguida proceda a establecer las propiedades según se<br />
indica:<br />
Form1<br />
Nombre FrmNumeroPerfecto<br />
BorderStyle 3-Fixed Dialog<br />
Caption Los 3 primeros números perfectos<br />
Moveable False<br />
StartUpPosition 2-CenterScreen<br />
Pág. 261
Frame1<br />
Frame2<br />
Frame3<br />
Frame4<br />
Label1<br />
Label2<br />
Label3<br />
Label4<br />
Nombre FraEntrada<br />
Caption<br />
Nombre FraSalida<br />
Caption<br />
Nombre FraDivisores<br />
Caption Divisores<br />
Nombre FraSalir<br />
Caption<br />
Nombre LblNumero<br />
AutoSize True<br />
Caption Ingrese un número:<br />
Nombre LblCantCifras<br />
AutoSize True<br />
Caption Cantidad de cifras:<br />
Nombre LblSumImpares<br />
AutoSize True<br />
Caption Suma de cifras impares:<br />
Pág. 262
Label5<br />
Label6<br />
Label7<br />
Text1<br />
Text2<br />
Text3<br />
Nombre LblSumPares<br />
AutoSize True<br />
Caption Suma de cifras pares:<br />
Nombre LblSumTotal<br />
AutoSize True<br />
Caption Suma total de cifras:<br />
Nombre LblCifraMayor<br />
AutoSize True<br />
Caption Cifra mayor:<br />
Nombre LblCifraMenor<br />
AutoSize True<br />
Caption Cifra menor:<br />
Nombre TxtNumero<br />
Text<br />
Nombre TxtCantCifras<br />
Locked<br />
Text<br />
True<br />
Nombre TxtSumImpares<br />
Locked True<br />
Text<br />
Text4<br />
Pág. 263
Text5<br />
Text6<br />
Text7<br />
Text8<br />
Nombre TxtSumPares<br />
Locked True<br />
Text<br />
Command3<br />
Nombre TxtSumTotal<br />
Locked<br />
Text<br />
True<br />
Nombre TxtCifraMayor<br />
Locked<br />
Text<br />
True<br />
Nombre TxtCifraMenor<br />
Locked<br />
Text<br />
True<br />
Nombre TxtDivisores<br />
MultiLine True<br />
Locked True<br />
ScrollBars<br />
Text<br />
2-Vertical<br />
Nombre CmdSalir<br />
Caption &Salir<br />
Picture C:\FundVB\Bitmaps\Exit.bmp<br />
Style 1-Graphical<br />
Pág. 264
Una vez establecidas las propiedades proceda ha ingresar<br />
el código que se indica a continuación:<br />
Private Sub CmdAceptar_Click()<br />
If IsNumeric(TxtNumero) Then<br />
Dim S As Integer, SI As Integer, SP As Integer<br />
Dim May As Integer, Min As Integer<br />
Dim Cad As String<br />
Dim I As Integer, J As Integer<br />
N = CLng(TxtNumero)<br />
M = CLng(TxtNumero)<br />
Cad = “”<br />
I = 0<br />
J = 1<br />
S = SP = SI = 0<br />
For J = 1 To N<br />
If (N Mod J = 0) Then<br />
Cad = Cad & J & vbCrLf<br />
End If<br />
Next J<br />
While (N > 0)<br />
If ((N Mod 10) Mod 2) = 0 Then<br />
SP = SP + (N Mod 10)<br />
Else<br />
SI = SI + (N Mod 10)<br />
End If<br />
S = S + (N Mod 10)<br />
N = N \ 10<br />
I = I + 1<br />
Wend<br />
May = Mid(TxtNumero, 1, 1)<br />
Men = May<br />
While (M > 0)<br />
Pág. 265
If May < (M Mod 10) Then<br />
May = M Mod 10<br />
End If<br />
If Men > (M Mod 10) Then<br />
Men = M Mod 10<br />
End If<br />
M = M \ 10<br />
Wend<br />
TxtCantCifras = Str(I)<br />
TxtSumImpares = Str(SI)<br />
TxtSumPares = Str(SP)<br />
TxtSumTotal = Str(S)<br />
TxtCifraMayor = Str(May)<br />
TxtCifraMenor = Str(Men)<br />
TxtDivisores = Cad<br />
Else<br />
MsgBox “Debe ingresar un número”, vbCritical, “Mensaje”<br />
TxtNumero.SetFocus<br />
End If<br />
End Sub<br />
Private Sub CmdSalir_Click()<br />
If MsgBox(“¿Desea terminar la aplicación?”, _<br />
vbQuestion + vbYesNo, "Pregunta") = vbYes Then<br />
End<br />
Else<br />
Cancel = True<br />
TxtNumero.SetFocus<br />
End If<br />
End Sub<br />
Aplicación Nº 4<br />
Pág. 266
Un centro numérico es un número que separa una lista de<br />
números enteros (comenzando en 1) en dos grupos de números,<br />
cuyas sumas son iguales. El primer centro numérico es el 6, el<br />
cual separa la lista (1 a 8) en los grupos: (1; 2; 3; 4; 5) y<br />
(7; 8) cuyas sumas son ambas iguales a 15. El segundo centro<br />
numérico es el 35, el cual separa la lista (1 a 49) en los<br />
grupos: (1 a 34) y (36 a 49) cuyas sumas son ambas iguales a<br />
595. Se pide elaborar una aplicación que calcule los centros<br />
numéricos entre 1 y N.<br />
El diseño de la interfaz y otras consideraciones se dejan<br />
a su criterio.<br />
Pág. 267
GUÍA DE LABORATORIO Nº 4<br />
Objetivos<br />
Microsoft <strong>Visual</strong> <strong>Basic</strong><br />
Luego de completar este laboratorio, el estudiante será<br />
capaz de:<br />
• Manipular y realizar operaciones con arreglos.<br />
• Crear una estructura y realizar operaciones con los campos de<br />
la misma.<br />
• Implementar arreglos de estructuras.<br />
• Trabajar con listas desplegables y cuadros combinados.<br />
Consideraciones<br />
Para el desarrollo del presente laboratorio Ud. deberá<br />
crear una carpeta C:\FundVB\Lab4 para guardar sus trabajos<br />
correspondientes a este laboratorio.<br />
Aplicación Nº 1<br />
Elabore una aplicación que permita leer N números de tipo<br />
entero, y a continuación los visualice ordenados en forma<br />
ascendente o descendente.<br />
Pág. 268
Para el desarrollo de esta aplicación, proceda a ubicar<br />
los siguientes controles en el formulario:<br />
3 marcos<br />
1 caja de texto<br />
1 control lista<br />
2 botones de opción<br />
3 botones de comando<br />
En seguida proceda a establecer las propiedades según se<br />
indica:<br />
Form1<br />
Frame1<br />
Frame2<br />
Frame3<br />
Text1<br />
Nombre FrmBurbuja<br />
BorderStyle 3-Fixed Dialog<br />
Caption Ordenación por burbuja<br />
Moveable False<br />
Nombre FraNumero<br />
Caption Ingrese un nuevo número:<br />
Nombre FraLista<br />
Caption Lista de números:<br />
Nombre FraOrden<br />
Caption Orden:<br />
Nombre TxtNumero<br />
Text<br />
Pág. 269
List1<br />
Option1<br />
Option2<br />
Command1<br />
Command2<br />
Command3<br />
Nombre LstNumero<br />
List<br />
Nombre OptAscendente<br />
Caption Ascendente<br />
Value True<br />
Nombre OptDescendente<br />
Caption Descendente<br />
Value False<br />
Nombre CmdAnnadir<br />
Caption &Añadir<br />
Default True<br />
Nombre CmdOrdenar<br />
Caption &Ordenar<br />
Nombre CmdSalir<br />
Caption &Salir<br />
Picture C:\Archivos de programa\Microsoft <strong>Visual</strong><br />
Studio\Common\Graphics\Icons\Arrows\<br />
Point04.ico<br />
Style 1-Graphical<br />
Una vez establecidas las propiedades proceda a ingresar el<br />
código que se indica a continuación:<br />
Pág. 270
Private Sub CmdAceptar_Click()<br />
If IsNumeric(TxtNumero.Text) Then<br />
LstNumero.AddItem TxtNumero.Text<br />
TxtNumero.Text = “”<br />
TxtNumero.SetFocus<br />
Else<br />
MsgBox “Ingrese un número”, vbCritical, “Mensaje”<br />
TxtNumero.SelStart = 0<br />
TxtNumero.SelLength = Len(TxtNumero.Text)<br />
TxtNumero.SetFocus<br />
End If<br />
End Sub<br />
Private Sub CmdOrdenar_Click()<br />
Dim I As Integer, J As Integer, T As Integer, N As Integer<br />
Dim A() As Integer<br />
N = LstNumero.ListCount<br />
ReDim A(N)<br />
For I = 0 To N - 1<br />
A(I) = LstNumero.List(I)<br />
Next I<br />
If OptAscendente.Value Then<br />
For I = 0 To N - 2<br />
For J = I + 1 To N - 1<br />
If A(I) > A(J) Then<br />
T = A(I)<br />
A(I) = A(J)<br />
A(J) = T<br />
End If<br />
Next J<br />
Next I<br />
End If<br />
Pág. 271
If OptDescendente.Value Then<br />
For I = 0 To N - 2<br />
For J = I + 1 To N - 1<br />
If A(I) < A(J) Then<br />
T = A(I)<br />
A(I) = A(J)<br />
A(J) = T<br />
End If<br />
Next J<br />
Next I<br />
End If<br />
LstNumero.Clear<br />
For I = 0 To N - 1<br />
LstNumero.List(I) = A(I)<br />
Next I<br />
End Sub<br />
Private Sub Form_Unload(Cancel As Integer)<br />
If MsgBox(“Desea terminar la aplicación?”, _<br />
vbQuestion + vbYesNo, “Pregunta”) = vbYes Then<br />
End<br />
Else: Cancel = True : TxtNumero.SetFocus<br />
End If<br />
End Sub<br />
Private Sub CmdSalir_Click()<br />
Unload Me<br />
End Sub<br />
Aplicación Nº 2<br />
Elaborar una aplicación que permita seleccionar un<br />
artículo de un cuadro combinado (Combo). Apenas el usuario<br />
seleccione un artículo se debe mostrar el precio del mismo, el<br />
interés es fijo para esta ocasión.<br />
Pág. 272
figura:<br />
El diseño de la interfaz debe ser similar a la siguiente<br />
La venta ha realizarse es a plazos, ello condiciona la<br />
cuota mensual a pagarse. Cuando se haga click sobre el botón<br />
Cuota mensual debe mostrarse un cuadro de diálogo con los datos<br />
propuestos:<br />
De manera similar al hacer click sobre el botón Total nos<br />
debe mostrar la cantidad total a pagar.<br />
Pág. 273
Para el desarrollo de esta aplicación, proceda a ubicar<br />
los siguientes controles en el formulario:<br />
1 marco<br />
3 etiquetas<br />
1 cuadro combinado<br />
2 cajas de texto<br />
3 botones de opción<br />
2 botones de comando<br />
En seguida proceda a establecer las propiedades según se<br />
indica:<br />
Form1<br />
Frame1<br />
Label1<br />
Label2<br />
Label3<br />
Nombre FrmCotizacion<br />
BorderStyle 3-Fixed Dialog<br />
Caption Pedido de cotizaciones<br />
Nombre FraPlazo<br />
Caption Plazo:<br />
Nombre LblArticulo<br />
Caption Artículo:<br />
Nombre LblPrecio<br />
Caption Precio US$<br />
Nombre LblInteres<br />
Caption Interés:<br />
Pág. 274
Combo1<br />
Text1<br />
Text2<br />
Option1<br />
Option2<br />
Option3<br />
Nombre CboArticulo<br />
Text<br />
Command1<br />
Nombre TxtPrecio<br />
Locked<br />
Text<br />
True<br />
Nombre TxtInteres<br />
Locked<br />
Text<br />
True<br />
Nombre OptPlazo<br />
Caption 6 meses<br />
Value True<br />
Nombre OptPlazo<br />
Caption 12 meses<br />
Value False<br />
Nombre OptPlazo<br />
Caption 24 meses<br />
Value False<br />
Nombre CmdCuotaMensual<br />
Caption &Cuota mensual<br />
Pág. 275
Command2<br />
Nombre CmdTotal<br />
Caption &Total<br />
Una vez establecidas las propiedades de la interfaz, haga<br />
doble click sobre el formulario e ingrese las siguientes<br />
declaraciones en la sección General del módulo de formulario:<br />
Private Type Articulo<br />
Nombre As String * 30<br />
Precio As Double<br />
End Type<br />
Dim A(4) As Articulo, Plazo As Integer<br />
Const Interes = 0.12<br />
Recuerde que un dato declarado en la sección General de un<br />
módulo puede ser accedido por todos los procedimientos de dicho<br />
módulo. Luego, continúe ingresando el código que se muestra a<br />
continuación:<br />
Private Sub Form_Load()<br />
A(0).Nombre = “Monitor SAMSUNG SyncMaster 3”<br />
A(1).Nombre = “Impresora Hewlett Packard DeskJet 930C”<br />
A(2).Nombre = “Impresora Epson Stylus Color 740”<br />
A(3).Nombre = “Microprocesador Pentium I 233 MHZ”<br />
A(0).Precio = 150 : A(1).Precio = 275<br />
A(2).Precio = 145 : A(3).Precio = 80<br />
Dim I As Integer<br />
For I = 1 To 4<br />
CboArticulo.AddItem A(I - 1).Nombre<br />
Next I<br />
TxtInteres = Interes : Plazo = 6<br />
End Sub<br />
Pág. 276
Private Sub CboArticulo_Click()<br />
Dim I As Integer<br />
I = CboArticulo.ListIndex<br />
TxtPrecio = A(I).Precio<br />
End Sub<br />
Private Sub OptPlazo_Click(Index As Integer)<br />
Select Case Index<br />
Case 0: Plazo = 6<br />
Case 1: Plazo = 12<br />
Case 2: Plazo = 24<br />
End Select<br />
End Sub<br />
Private Sub CmdCuotaMensual_Click()<br />
Dim Total As Double, CuotaMensual As Double, I As Integer<br />
I = CboArticulo.ListIndex<br />
Total = A(I).Precio * (1 + Interes)<br />
CuotaMensual = Total / Plazo<br />
MsgBox “Cuota Mensual US$” & Str(CuotaMensual)<br />
End Sub<br />
Private Sub CmdTotal_Click()<br />
Dim Total As Double, I As Integer<br />
I = CboArticulo.ListIndex<br />
Total = A(I).Precio * (1 + Interes)<br />
MsgBox “Total US$” & Str(Total)<br />
End Sub<br />
Aplicación Nº 3<br />
Se desea elaborar una aplicación que permita controlar el<br />
proceso de matrícula en un curso de computación. Para ello se<br />
deben recabar los siguientes datos: 1) <strong>Curso</strong> en que se<br />
Pág. 277
matricula el alumno, 2) Fecha de matrícula, 3) Apellidos y<br />
nombres, 4) Sexo, 5) Dirección, y 6) Distrito de residencia.<br />
Para el desarrollo de esta aplicación proceda a ubicar los<br />
siguientes controles en el formulario:<br />
4 marcos<br />
6 etiquetas<br />
5 cajas de texto<br />
1 cuadro combinado<br />
2 controles de lista<br />
4 botones de comando<br />
En seguida proceda a establecer las propiedades según se<br />
indica:<br />
Pág. 278
Form1<br />
Frame1<br />
Frame2<br />
Frame3<br />
Frame4<br />
Label1<br />
Label2<br />
Label3<br />
Nombre FrmFichaMatricula<br />
BorderStyle 3-Fixed Dialog<br />
Caption Ficha de matrícula<br />
Nombre FraIngreso<br />
Caption Ingreso de datos:<br />
Nombre FraOpciones<br />
Caption Opciones:<br />
Nombre Fra<strong>Curso</strong>s<br />
Caption <strong>Curso</strong>s:<br />
Nombre FraDistritos<br />
Caption Distritos:<br />
Nombre Lbl<strong>Curso</strong><br />
Caption <strong>Curso</strong>:<br />
Nombre LblFechaMat<br />
Caption Fecha de matrícula:<br />
Nombre LblAlumno<br />
Caption Alumno:<br />
Pág. 279
Label4<br />
Label5<br />
Label6<br />
Combo1<br />
List1<br />
List2<br />
Text1<br />
Text2<br />
Nombre LblSexo<br />
Caption Sexo:<br />
Nombre LblDirección<br />
Caption Dirección:<br />
Nombre LblDistrito<br />
Caption Distrito:<br />
Nombre CboSexo<br />
Text<br />
Nombre Lst<strong>Curso</strong>s<br />
Text<br />
Nombre LstDistrito<br />
Text<br />
Nombre Txt<strong>Curso</strong><br />
Text<br />
Nombre TxtFechaMat<br />
Text<br />
Pág. 280
Text3<br />
Text4<br />
Text5<br />
Command1<br />
Command2<br />
Command3<br />
Command4<br />
Nombre TxtAlumno<br />
Text<br />
Nombre TxtDireccion<br />
Text<br />
Nombre TxtDistrito<br />
Text<br />
Nombre CmdGuardar<br />
Caption &Guardar<br />
Nombre CmdCancelar<br />
Caption &Cancelar<br />
Nombre CmdLimpiar<br />
Caption &Limpiar<br />
Nombre CmdSalir<br />
Caption &Salir<br />
Picture C:\FundVB\Bitmaps\Exit.bmp<br />
Style 1-Graphical<br />
Una vez establecidas las propiedades de la interfaz,<br />
proceda a ingresar el código que se indica a continuación:<br />
Pág. 281
Private Sub Form_Load()<br />
Lst<strong>Curso</strong>s.AddItem “Borland C++ Nivel I”<br />
Lst<strong>Curso</strong>s.AddItem “Borland C++ Nivel II”<br />
Lst<strong>Curso</strong>s.AddItem “Microsoft <strong>Visual</strong> <strong>Basic</strong> Nivel I”<br />
Lst<strong>Curso</strong>s.AddItem “Microsoft <strong>Visual</strong> <strong>Basic</strong> Nivel II”<br />
Lst<strong>Curso</strong>s.AddItem “Microsoft <strong>Visual</strong> FoxPro Nivel I”<br />
Lst<strong>Curso</strong>s.AddItem “Microsoft <strong>Visual</strong> FoxPro Nivel II”<br />
Lst<strong>Curso</strong>s.AddItem “Microsoft <strong>Visual</strong> C++ Nivel I”<br />
Lst<strong>Curso</strong>s.AddItem “Microsoft <strong>Visual</strong> C++ Nivel II”<br />
Lst<strong>Curso</strong>s.AddItem “Microsoft <strong>Visual</strong> J++ Nivel I”<br />
Lst<strong>Curso</strong>s.AddItem “Microsoft <strong>Visual</strong> J++ Nivel II”<br />
Lst<strong>Curso</strong>s.AddItem “Microsoft SQL Server Nivel I”<br />
Lst<strong>Curso</strong>s.AddItem “Microsoft SQL Server Nivel II”<br />
Lst<strong>Curso</strong>s.AddItem “Microsoft Power Builder Nivel I”<br />
Lst<strong>Curso</strong>s.AddItem “Microsoft Power Builder Nivel II”<br />
LstDistrito.AddItem “Callao”<br />
LstDistrito.AddItem “Bellavista”<br />
LstDistrito.AddItem “Carmen de la Legua”<br />
LstDistrito.AddItem “La Perla”<br />
LstDistrito.AddItem “La Punta”<br />
LstDistrito.AddItem “Ventanilla”<br />
LstDistrito.AddItem “Cercado de Lima”<br />
LstDistrito.AddItem “Ancón”<br />
LstDistrito.AddItem “Ate”<br />
LstDistrito.AddItem “Barranco”<br />
LstDistrito.AddItem “Breña”<br />
LstDistrito.AddItem “Carabayllo”<br />
LstDistrito.AddItem “Comas”<br />
LstDistrito.AddItem “Chaclacayo”<br />
LstDistrito.AddItem “Chorrillos”<br />
LstDistrito.AddItem “El Agustino”<br />
LstDistrito.AddItem “Jesús María”<br />
LstDistrito.AddItem “La Molina”<br />
Pág. 282
LstDistrito.AddItem “La Victoria”<br />
LstDistrito.AddItem “Lince”<br />
LstDistrito.AddItem “Lurigancho”<br />
LstDistrito.AddItem “Lurín”<br />
LstDistrito.AddItem “Magdalena del Mar”<br />
LstDistrito.AddItem “Miraflores”<br />
LstDistrito.AddItem “Pachacamac”<br />
LstDistrito.AddItem “Pucusana”<br />
LstDistrito.AddItem “Pueblo Libre”<br />
LstDistrito.AddItem “Puente Piedra”<br />
LstDistrito.AddItem “Punta Negra”<br />
LstDistrito.AddItem “Rimac”<br />
LstDistrito.AddItem “San Bartolo”<br />
LstDistrito.AddItem “San Isidro”<br />
LstDistrito.AddItem “Independencia”<br />
LstDistrito.AddItem “San Juan de Miraflores”<br />
LstDistrito.AddItem “San Luis”<br />
LstDistrito.AddItem “San Martín de Porres”<br />
LstDistrito.AddItem “San Miguel”<br />
LstDistrito.AddItem “Santiago de Surco”<br />
LstDistrito.AddItem “Villa María del Triunfo”<br />
LstDistrito.AddItem “San Juan de Lurigancho”<br />
LstDistrito.AddItem “Santa María del Mar”<br />
LstDistrito.AddItem “Santa Rosa”<br />
LstDistrito.AddItem “Los Olivos”<br />
LstDistrito.AddItem “Cieneguilla”<br />
LstDistrito.AddItem “San Borja”<br />
LstDistrito.AddItem “Villa el Salvador”<br />
LstDistrito.AddItem “Santa Anita”<br />
CboSexo.AddItem “Masculino” : CboSexo.AddItem “Femenino”<br />
End Sub<br />
Private Sub Form_Unload(Cancel As Integer)<br />
If MsgBox(“¿Desea terminar la aplicación?”, _<br />
Pág. 283
vbQuestion + vbYesNo, “Pregunta”) = vbYes Then<br />
End<br />
Else<br />
Cancel = True<br />
Call CmdLimpiar_Click<br />
End If<br />
End Sub<br />
Private Sub Lst<strong>Curso</strong>s_Click()<br />
Txt<strong>Curso</strong>s = Lst<strong>Curso</strong>s<br />
End Sub<br />
Private Sub LstDistrito_Click()<br />
TxtDistrito = LstDistrito<br />
End Sub<br />
Private Sub CmdGuardar_Click()<br />
Lst<strong>Curso</strong>s.Enabled = False<br />
LstDistrito.Enabled = False<br />
Txt<strong>Curso</strong>s.Locked = True<br />
TxtFechaMat.Locked = True<br />
TxtAlumno.Locked = True<br />
CboSexo.Locked = True<br />
TxtDireccion.Locked = True<br />
TxtDistrito.Locked = True<br />
MsgBox “Alumno matriculado”, vbInformation, “Mensaje”<br />
End Sub<br />
Private Sub CmdLimpiar_Click()<br />
Lst<strong>Curso</strong>s.Enabled = True<br />
LstDistrito.Enabled = True<br />
Txt<strong>Curso</strong>s.Locked = False<br />
TxtFechaMat.Locked = False<br />
TxtAlumno.Locked = False<br />
Pág. 284
CboSexo.Locked = False<br />
TxtDireccion.Locked = False<br />
TxtDistrito.Locked = False<br />
Txt<strong>Curso</strong>s = “”<br />
TxtFechaMat = “”<br />
TxtAlumno = “”<br />
CboSexo = “”<br />
TxtDireccion = “”<br />
TxtDistrito = “”<br />
Txt<strong>Curso</strong>s.SetFocus<br />
End Sub<br />
Private Sub CmdCancelar_Click()<br />
If MsgBox(“¿Desea modificar algún dato?”, _<br />
vbQuestion + vbYesNo, “Mensaje”) = vbYes Then<br />
Lst<strong>Curso</strong>s.Enabled = True<br />
LstDistrito.Enabled = True<br />
Txt<strong>Curso</strong>s.Locked = False<br />
TxtFechaMat.Locked = False<br />
TxtAlumno.Locked = False<br />
CboSexo.Locked = False<br />
TxtDireccion.Locked = False<br />
TxtDistrito.Locked = False<br />
End If<br />
End Sub<br />
Private Sub CmdSalir_Click()<br />
Unload Me<br />
End Sub<br />
Aplicación Nº 4<br />
Pág. 285
Desarrollar una aplicación que permita realizar consultas<br />
acerca de un determinado curso, los cuales se mostraran en una<br />
lista. El usuario debe seleccionar un curso y en seguida se<br />
debe presentar el nombre del profesor encargado del curso<br />
(teoría), el nombre del jefe de práctica (laboratorio), así<br />
como los horarios de teoría y de laboratorio. El diseño de la<br />
interfaz deberá ser similar al siguiente:<br />
Pág. 286
GUÍA DE LABORATORIO Nº 5<br />
Objetivos<br />
Microsoft <strong>Visual</strong> <strong>Basic</strong><br />
Luego de completar este laboratorio, el estudiante será<br />
capaz de:<br />
• Crear procedimientos y funciones definidos por el usuario.<br />
• Añadir formularios creados anteriormente a un proyecto.<br />
• Cambiar el formulario de arranque de un proyecto.<br />
• Utilizar formularios MDI.<br />
• Manejar diferentes métodos y propiedades de los formularios.<br />
• Crear y utilizar menús en una aplicación.<br />
Consideraciones<br />
Para el desarrollo del presente laboratorio Ud. deberá<br />
crear una carpeta C:\FundVB\Lab5, para guardar sus trabajos<br />
correspondientes a este laboratorio.<br />
Aplicación Nº 1<br />
Escriba una función que reciba como argumento una cadena<br />
de caracteres y la devuelva en forma inversa, por ejemplo si se<br />
ingresa la cadena CORAZON deberá retornar NOZAROC.<br />
Pág. 287
Para el desarrollo de esta aplicación, proceda a ubicar<br />
los siguientes controles en el formulario:<br />
2 etiquetas<br />
2 cajas de texto<br />
3 botones de comando<br />
En seguida proceda a establecer las propiedades según se<br />
indica:<br />
Form1<br />
Label1<br />
Label2<br />
Text1<br />
Text2<br />
Nombre FrmCadInvertida<br />
Caption Cadena invertida<br />
BorderStyle 3-Fixed Dialog<br />
Nombre LblCadena<br />
Autosize True<br />
Caption Ingresa una cadena:<br />
Nombre LblInvertida<br />
Autosize True<br />
Caption Cadena invertida:<br />
Nombre TxtCadena<br />
Text<br />
Nombre TxtInvertida<br />
Locked<br />
Text<br />
True<br />
Pág. 288
Command1<br />
Command2<br />
Command3<br />
Nombre CmdAceptar<br />
Caption &Aceptar<br />
Nombre CmdLimpiar<br />
Caption &Limpiar<br />
Nombre CmdSalir<br />
Caption &Salir<br />
Una vez establecidas las propiedades de la interfaz,<br />
proceda a ingresar el siguiente código:<br />
Function CadInvertida(Cadena As String) As String<br />
Dim Invertida() As String * 1<br />
Dim I As Integer<br />
Dim J As Integer<br />
N = Len(Cadena)<br />
ReDim Invertida(N)<br />
For I = 1 To N<br />
Invertida(I - 1) = Mid(Cadena, I, 1)<br />
Next I<br />
For J = (N - 1) To 0 Step -1<br />
CadInvertida = CadInvertida & Invertida(J)<br />
Next J<br />
End Function<br />
Private Sub CmdInvertir_Click()<br />
TxtInvertida = CadInvertida(TxtCadena)<br />
End Sub<br />
Pág. 289
Private Sub CmdLimpiar_Click()<br />
TxtCadena = “”<br />
TxtInvertida = “”<br />
TxtCadena.SetFocus<br />
End Sub<br />
Private Sub CmdSalir_Click()<br />
End<br />
End Sub<br />
Aplicación Nº 2<br />
Se desea elaborar una aplicación que permita controlar el<br />
proceso de matrícula en un curso de computación. Para ello se<br />
deben recabar los siguientes datos: 1) <strong>Curso</strong> en que se<br />
matricula el alumno, 2) Fecha de matrícula, 3) Apellidos y<br />
nombres, 4) Sexo, 5) Dirección, y 6) Distrito de residencia. El<br />
diseño de la interfaz debe ser similar a la figura mostrada:<br />
Para seleccionar un curso el usuario deberá hacer click en<br />
el botón punteado que se encuentra al lado de la caja de texto.<br />
En seguida se presentará un menú de selección por realce en el<br />
cual se presenta la relación de todos los cursos disponibles.<br />
Pág. 290
El curso quedará seleccionado al hacer click en el botón<br />
Aceptar.<br />
El mismo tipo de selección deberá realizarse al momento de<br />
ingresar el nombre del distrito.<br />
Para el desarrollo de esta aplicación necesitamos tres<br />
formularios y un módulo. En primer lugar proceda a añadir un<br />
módulo de código al proyecto. Seleccione el Menú Proyecto y<br />
Pág. 291
elija la opción Agregar módulo, se debe presentar un cuadro de<br />
diálogo similar a la siguiente figura:<br />
Del cuadro de diálogo Agregar módulo, en la ficha Nuevo,<br />
haga click en el botón Abrir. Luego ingrese el siguiente código<br />
en la sección de Declaraciones del módulo que acabamos de<br />
añadir:<br />
Public <strong>Curso</strong> As String<br />
Public Distrito As String<br />
En seguida proceda a cambiar el nombre formulario<br />
principal por FrmFichaMatricula. Luego debe añadir los demás<br />
formularios necesarios para construir la aplicación. Para tal<br />
fin, seleccione el menú Proyecto y elija la opción Agregar<br />
formulario. Del cuadro de diálogo Agregar formulario, en la<br />
ficha Nuevo, elija la opción Formulario y haga click en el<br />
botón Abrir. Se debe presentar un cuadro de diálogo similar a<br />
la siguiente figura:<br />
Pág. 292
En ese instante se añadirá un nuevo formulario al<br />
proyecto. Cambie el nombre del nuevo formulario por Frm<strong>Curso</strong>.<br />
Repita el procedimiento anterior para añadir el formulario<br />
FrmDistrito.<br />
A continuación copie los pasos de la pág. 55 a la pág. 62<br />
de la Guía de Laboratorio Nº 4 (Aplicación Nº 3) con los<br />
siguientes cambios:<br />
En la pág. 55, añadir sólo 2 marcos. No añadir ningún<br />
control de lista. En vez de 4 botones de comando, añadir 6<br />
botones de comando. Luego, establecer las siguientes<br />
propiedades para los dos nuevos botones:<br />
Command5<br />
Command6<br />
Nombre Cmd<strong>Curso</strong><br />
Caption . . .<br />
Pág. 293
Nombre CmdDistrito<br />
Caption . . .<br />
En la pág. 59, reemplazar el código del evento Load del<br />
formulario por el siguiente:<br />
Private Sub Form_Load()<br />
CboSexo.AddItem "Masculino"<br />
CboSexo.AddItem "Femenino"<br />
End Sub<br />
En la pág. 61, suprimir el código asociado al evento Click<br />
de los controles de lista Lst<strong>Curso</strong>s y LstDistrito. En su lugar<br />
añadir lo siguiente:<br />
Private Sub Cmd<strong>Curso</strong>_Click()<br />
Load Frm<strong>Curso</strong><br />
Frm<strong>Curso</strong>.Show vbModal<br />
Txt<strong>Curso</strong> = <strong>Curso</strong><br />
End Sub<br />
Private Sub CmdDistrito_Click()<br />
Load FrmDistrito<br />
FrmDistrito.Show vbModal<br />
TxtDistrito = Distrito<br />
End Sub<br />
A continuación active el formulario Frm<strong>Curso</strong>, para ello<br />
haga click sobre el mismo. En seguida proceda a ubicar los<br />
siguientes controles en el formulario:<br />
1 control de lista<br />
1 botones de comando<br />
Pág. 294
indica:<br />
Form2<br />
List1<br />
Command1<br />
Luego proceda a establecer las propiedades según se<br />
Nombre Frm<strong>Curso</strong><br />
BorderStyle 3-Fixed Dialog<br />
Caption <strong>Curso</strong>s<br />
Nombre Lst<strong>Curso</strong>s<br />
Text<br />
Nombre CmdAceptar<br />
Caption &Aceptar<br />
Una vez establecidas las propiedades proceda a ingresar el<br />
código que se indica a continuación:<br />
Private Sub Form_Load()<br />
Lst<strong>Curso</strong>s.AddItem “Borland C++ Nivel I”<br />
Lst<strong>Curso</strong>s.AddItem “Borland C++ Nivel II”<br />
Lst<strong>Curso</strong>s.AddItem “Microsoft <strong>Visual</strong> <strong>Basic</strong> Nivel I”<br />
Lst<strong>Curso</strong>s.AddItem “Microsoft <strong>Visual</strong> <strong>Basic</strong> Nivel II”<br />
Lst<strong>Curso</strong>s.AddItem “Microsoft <strong>Visual</strong> FoxPro Nivel I”<br />
Lst<strong>Curso</strong>s.AddItem “Microsoft <strong>Visual</strong> FoxPro Nivel II”<br />
Lst<strong>Curso</strong>s.AddItem “Microsoft <strong>Visual</strong> C++ Nivel I”<br />
Lst<strong>Curso</strong>s.AddItem “Microsoft <strong>Visual</strong> C++ Nivel II”<br />
Lst<strong>Curso</strong>s.AddItem “Microsoft SQL Server Nivel I”<br />
Lst<strong>Curso</strong>s.AddItem “Microsoft SQL Server Nivel II”<br />
Lst<strong>Curso</strong>s.AddItem “Microsoft Power Builder Nivel I”<br />
Lst<strong>Curso</strong>s.AddItem “Microsoft Power Builder Nivel II”<br />
End Sub<br />
Pág. 295
Private Sub CmdAceptar_Click()<br />
<strong>Curso</strong> = Lst<strong>Curso</strong>s.Text<br />
Frm<strong>Curso</strong>.Hide<br />
End Sub<br />
Por último, proceda Ud. a desarrollar el código respectivo<br />
para el formulario FrmDistrito.<br />
Aplicación Nº 3<br />
Elaborar una aplicación que permita presentar los<br />
diferentes tipos de formularios de <strong>Visual</strong> <strong>Basic</strong>. Utilice como<br />
contenedor principal un formulario MDI, tal como se muestra en<br />
la figura:<br />
Para el desarrollo de esta aplicación necesitamos utilizar<br />
un formulario MDI (interfaz de múltiples documentos). Para ello<br />
seleccione el Menú Proyecto y elija la opción Agregar<br />
formulario MDI, se debe presentar un cuadro de diálogo similar<br />
a la siguiente figura:<br />
Pág. 296
Del cuadro de diálogo Agregar formulario MDI, en la ficha<br />
Nuevo, haga click en el botón Abrir. En seguida cambie el<br />
nombre del formulario MDI por MDIPrincipal.<br />
A continuación proceda a añadir los formularios para las<br />
diferentes opciones del menú. Cambie los nombres de los<br />
formularios según se indica:<br />
Formulario Nombre<br />
Form1 FrmNone<br />
Form2 FrmFixedSingle<br />
Form3 FrmSizable<br />
Form4 FrmFixedDialog<br />
Form5 FrmFixedToolWindow<br />
Form6 FrmSizableToolWindow<br />
Form7 FrmAcercaDe<br />
Pág. 297
Luego proceda a diseñar el menú de opciones. Para ello<br />
haga click derecho sobre el formulario MDI y elija la opción<br />
Editor de menús. Establezca las propiedades según:<br />
Caption Name ShortCut<br />
&Menú Principal MnuPrincipal Ninguno<br />
&0-None MnuNone Ninguno<br />
&1-Fixed Single<br />
MnuFixedSingle Ninguno<br />
&2-Sizable MnuSizable Ninguno<br />
&3-Fixed Dialog<br />
MnuFixedDialog Ninguno<br />
&4-Fixed ToolWindow MnuFixedToolWindow Ninguno<br />
&5-Sizable ToolWindow<br />
MnuSizableToolWindow Ninguno<br />
- MnuLinea Ninguno<br />
&Acerca del autor MnuAcercaDe Ninguno<br />
&Salir MnuSalir Ctrl + X<br />
A continuación haga click en el botón Aceptar del Editor<br />
de menús. Luego proceda a ingresar el siguiente código para el<br />
formulario MDI:<br />
Private Sub MDIForm_Unload(Cancel As Integer)<br />
If MsgBox(“¿Desea terminar la aplicación?”, _<br />
vbQuestion + vbYesNo, “Mensaje”) = vbYes Then<br />
End<br />
Else: Cancel = True<br />
End If<br />
End Sub<br />
Private Sub MnuNone_Click()<br />
Load FrmNone<br />
FrmNone.Show<br />
End Sub<br />
Pág. 298
Private Sub MnuFixedSingle_Click()<br />
Load FrmFixedSingle<br />
FrmFixedSingle.Show<br />
End Sub<br />
Private Sub MnuSizable_Click()<br />
Load FrmSizable<br />
FrmSizable.Show<br />
End Sub<br />
Private Sub MnuFixedDialog_Click()<br />
Load FrmFixedDialog<br />
FrmFixedDialog.Show<br />
End Sub<br />
Private Sub MnuFixedToolWindow_Click()<br />
Load FrmFixedToolWindow<br />
FrmFixedToolWindow.Show<br />
End Sub<br />
Private Sub MnuSizableToolWindow_Click()<br />
Load FrmSizableToolWindow<br />
FrmSizableToolWindow.Show<br />
End Sub<br />
Private Sub MnuAcercaDe_Click()<br />
Load FrmAcercaDe<br />
FrmAcercaDe.Show<br />
End Sub<br />
Private Sub MnuSalir_Click()<br />
Unload Me<br />
End Sub<br />
Pág. 299
A continuación proceda a activar el formulario FrmNone y<br />
ubique un botón de comandos sobre el mismo. En seguida<br />
establezca las propiedades según se indica a continuación:<br />
Form1<br />
Command1<br />
Nombre FrmNone<br />
BorderStyle 0-None<br />
Caption None<br />
MDIChild True<br />
Nombre CmdVolver<br />
Caption &Volver<br />
Una vez establecidas las propiedades, proceda a ingresar<br />
el código que se muestra a continuación:<br />
Private Sub CmdVolver_Click()<br />
Unload Me<br />
End Sub<br />
Repita el procedimiento anterior para los demás tipos de<br />
formularios.<br />
Aplicación Nº 4<br />
Elaborar una aplicación que acepte como entrada la reserva<br />
de agua de un depósito y los litros que se consumen a la<br />
semana. Utilizando una función definida por el usuario<br />
determinar como resultado las cantidades de agua que quedan al<br />
final de cada semana. El proceso finalizará cuando no quede<br />
agua suficiente para una semana. Utilizar otro formulario para<br />
mostrar la salida.<br />
FIN PARTE I<br />
Pág. 300
GUÍA DE LABORATORIO<br />
Parte II<br />
ELABORADO POR<br />
CARLOS CASTILLO PERALTA<br />
cc_peralta@hotmail.com<br />
INTRODUCCIÓN<br />
Pág. 301
La presente Guía de Laboratorio de Microsoft <strong>Visual</strong> <strong>Basic</strong>,<br />
se elaboró con la finalidad de complementar la parte teórica<br />
con la parte práctica del curso. Los problemas presentan un<br />
grado de dificultad gradual, es decir, en cada práctica primero<br />
se comienzan con problemas muy sencillos con la finalidad de<br />
que el estudiante esclarezca dudas y quede claro en los<br />
conceptos asimilados en la teoría, y luego en los problemas<br />
posteriores se va incrementando el nivel de dificultad.<br />
Esta guía explora una gran variedad de materias y contiene<br />
muchos problemas recopilados a lo largo de varios años de<br />
experiencia. Espero que satisfaga las necesidades de los<br />
estudiantes y colegas, ya que ha sido elaborada teniendo en<br />
cuenta los objetivos de aprendizaje del curso.<br />
Si desean compartirla con otros colegas, me agradaría<br />
mucho que lo hicieran, con la única condición de que siempre se<br />
respete el derecho del autor.<br />
Desde ya les deseo la mejor de las suertes en el<br />
aprendizaje de Microsoft <strong>Visual</strong> <strong>Basic</strong>.<br />
Carlos Castillo Peralta<br />
Microsoft <strong>Visual</strong> <strong>Basic</strong><br />
Lima, Diciembre del 2000<br />
Pág. 302
GUÍA DE LABORATORIO Nº 6<br />
Objetivos<br />
Luego de completar este laboratorio, el estudiante será<br />
capaz de:<br />
• Crear y manipular bases de datos utilizando Microsoft Access.<br />
• Adicionar un entorno de datos a un proyecto.<br />
• Conectar un origen de datos a un objeto Connection.<br />
• Utilizar un objeto Command para recuperar registros de un<br />
origen de datos.<br />
• Crear formularios con datos enlazados.<br />
• Realizar consultas utilizando sentencias SQL.<br />
Consideraciones<br />
Para el desarrollo del presente laboratorio Ud. deberá<br />
crear una carpeta C:\FundVB\Lab6, para guardar sus trabajos<br />
correspondientes a este laboratorio.<br />
Creación de la base de datos con Microsoft Access 2000<br />
Para desarrollar nuestras prácticas de laboratorio debemos<br />
crear una base de datos cuyo nombre es <strong>Curso</strong>sLibres.MDB, la<br />
cual contendrá las tablas <strong>Curso</strong> y Laboratorio. La tarea de<br />
crear una base de datos con Microsoft Access 2000 es muy<br />
sencilla. Para tal fin debe realizar lo siguiente:<br />
• Arrancar Microsoft Access 2000.<br />
• Seleccionar la orden Nueva. . . del Menú Archivo.<br />
• Dentro del cuadro de diálogo Nueva, en la ficha General,<br />
seleccionar Base de datos y hacer click en el botón Aceptar.<br />
• Ingresar un nombre para la base de datos, para nuestro caso<br />
ingrese <strong>Curso</strong>sLibres. En seguida se mostrará una ventana<br />
similar a la siguiente:<br />
Pág. 303
• Proceda a crear una nueva tabla. Para ello seleccionar la<br />
opción Tablas y haga doble click en Crear una tabla en vista<br />
Diseño.<br />
• Introducir el nombre, el tipo y las propiedades para cada uno<br />
de los campos. Para nuestro caso ingrese lo siguiente:<br />
Tabla <strong>Curso</strong><br />
Nombre del<br />
Campo<br />
Tipo Ancho Descripción<br />
CurCodigo T 03 Código del curso<br />
CurNombre T 30 Nombre del curso<br />
CurVacantes N 03 Número de vacantes disponibles<br />
CurProfe T 50 Nombre del profesor de teoría<br />
CurSilabo M 50 Sílabo de cada curso<br />
• Luego, debe asignar un nombre a la tabla al momento de<br />
cerrarla. Para nuestro caso asígnele el nombre de <strong>Curso</strong>.<br />
• Por último, proceda a abrir la tabla e introducir datos. Para<br />
nuestro caso, ingrese la siguiente información:<br />
Pág. 304
CurCodigo CurNombre CurProfe<br />
BC1 Borland C++ Nivel I Linares Alarcon, Adams<br />
BC2 Borland C++ Nivel II Córdoba Saavedra, Javier<br />
BC3 Borland C++ Nivel III Castillo Peralta, Carlos<br />
VB1 MS <strong>Visual</strong> <strong>Basic</strong> Nivel I Linares Alarcon, Adams<br />
VB2 MS <strong>Visual</strong> <strong>Basic</strong> Nivel II Linares Alarcon, Adams<br />
VB3 MS <strong>Visual</strong> <strong>Basic</strong> Nivel III Castillo Peralta, Carlos<br />
VC1 MS <strong>Visual</strong> C++ Nivel I Córdoba Saavedra, Javier<br />
VC2 MS <strong>Visual</strong> C++ Nivel II Castillo Peralta, Carlos<br />
VJ1 MS <strong>Visual</strong> J++ Nivel I Castillo Peralta, Carlos<br />
VJ2 MS <strong>Visual</strong> J++ Nivel II Castillo Peralta, Carlos<br />
VF1 MS <strong>Visual</strong> FoxPro Nivel I Linares Alarcon, Adams<br />
VF2 MS <strong>Visual</strong> FoxPro Nivel II Castillo Peralta, Carlos<br />
VF3 MS <strong>Visual</strong> FoxPro Nivel III Castillo Peralta, Carlos<br />
PB1 Power Builder Nivel I Córdoba Saavedra, Javier<br />
PB2 Power Builder Nivel II Córdoba Saavedra, Javier<br />
SQ1 MS SQL Server Nivel I Córdoba Saavedra, Javier<br />
SQ2 MS SQL Server Nivel II Córdoba Saavedra, Javier<br />
WIN MS Windows 98 Montes Tejada, Estela<br />
A menudo, el proceso de diseño de la base de datos es<br />
bastante complejo. Para nosotros ha sido fácil, pues se nos<br />
brinda la estructura de las tablas.<br />
De manera análoga, proceda a crear la siguiente tabla<br />
según se indica a continuación:<br />
Tabla Laboratorio<br />
Nombre del<br />
Campo<br />
Tipo Ancho Descripción<br />
LabCodigo T 03 Código del curso<br />
Pág. 305
LabHora T 08 Horario de laboratorio<br />
LabProfe T 50 Nombre del profesor de laboratorio<br />
Al momento de cerrar la tabla que acaba de crear, asígnele<br />
el nombre de Laboratorio. Luego, proceda a ingresar la<br />
siguiente información:<br />
LabCodigo LabHora LabProfe<br />
BC1 SA 08-10 Castillo Peralta, Carlos<br />
BC2 SA 10-12 Linares Alarcon, Adams<br />
BC3 DO 10-12 Castillo Peralta, Carlos<br />
VB1 SA 08-10 Montes Tejada, Estela<br />
VB2 DO 10-12 Linares Alarcon, Adams<br />
VB3 DO 08-10 Castillo Peralta, Carlos<br />
VC1 DO 08-10 Linares Alarcon, Adams<br />
VC2 DO 10-12 Córdoba Saavedra, Javier<br />
VJ1 SA 16-18 Castillo Peralta, Carlos<br />
VJ2 SA 18-20 Castillo Peralta, Carlos<br />
VF1 SA 08-10 Linares Alarcon, Adams<br />
VF2 DO 08-10 Córdoba Saavedra, Javier<br />
VF3 DO 14-16 Linares Alarcon, Adams<br />
PB1 VI 16-18 Córdoba Saavedra, Javier<br />
PB2 VI 14-16 Córdoba Saavedra, Javier<br />
SQ1 SA 16-18 Córdoba Saavedra, Javier<br />
SQ2 SA 18-20 Córdoba Saavedra, Javier<br />
WIN SA 10-12 Montes Tejada, Estela<br />
Aplicación Nº 1<br />
Elaborar una aplicación que permita realizar el<br />
mantenimiento de la información almacenada en la tabla <strong>Curso</strong> de<br />
Pág. 306
la base de datos <strong>Curso</strong>sLibres.MDB. El diseño de la interfaz<br />
debe ser similar a la figura mostrada:<br />
Los botones ubicados en el marco Navegador (Primero,<br />
Anterior, Siguiente y Ultimo, de izquierda a derecha) permiten<br />
desplazarse a través de la tabla. Los botones ubicados en el<br />
marco Mantenimiento (Nuevo, Editar, Guardar y Eliminar, de<br />
izquierda a derecha) permiten realizar las operaciones básicas<br />
de mantenimiento de la tabla.<br />
Para desarrollar nuestra aplicación, lo primero que<br />
debemos hacer es conectarnos a la base de datos<br />
<strong>Curso</strong>sLibres.MDB. Para ello ingrese a <strong>Visual</strong> <strong>Basic</strong> de manera<br />
habitual, a continuación en el menú Proyecto seleccione la<br />
opción Agregar Data Environment y se creará una nueva conexión<br />
para la que debe establecer propiedades de vínculo de datos. En<br />
la ventana Data Environment cambie el nombre del objeto<br />
DataEnvironment por De<strong>Curso</strong>sLibres y el de la conexión por<br />
Cn<strong>Curso</strong>sLibres. El aspecto de la ventana Data Environment<br />
deberá ser similar a la siguiente figura:<br />
Pág. 307
Luego haga click con el botón derecho del ratón en<br />
Cn<strong>Curso</strong>sLibres y seleccione la opción Propiedades. Deberá<br />
presentarse un cuadro de diálogo similar al siguiente:<br />
En la ficha Proveedor del cuadro de diálogo anterior,<br />
seleccione Microsoft Jet 4.0 OLE DB Provider y haga click en el<br />
Pág. 308
otón Siguiente. En seguida aparecerá un cuadro de diálogo<br />
similar al mostrado:<br />
En la ficha Conexión del cuadro de diálogo Propiedades de<br />
Data Link escriba el nombre de la base de datos<br />
<strong>Curso</strong>sLibres.MDB y haga click en el botón Probar conexión.<br />
Luego si la conexión es satisfactoria haga click en el botón<br />
Aceptar.<br />
En seguida en la barra de herramientas de la ventana Data<br />
Environment haga click en el botón Agregar Comando y denomine<br />
al comando Cm<strong>Curso</strong>. Luego haga click derecho sobre el comando y<br />
seleccione Propiedades:<br />
Pág. 309
Compruebe que este comando utiliza la conexión<br />
Cn<strong>Curso</strong>sLibres, luego establezca el nombre de la tabla a<br />
utilizar, en este caso <strong>Curso</strong> y haga click en el botón Aceptar.<br />
A continuación seleccione el comando Cm<strong>Curso</strong> y arrástrelo<br />
hacia el formulario. Finalmente agregue los siguientes<br />
controles al formulario:<br />
3 marcos<br />
9 botones de comandos<br />
En seguida proceda a establecer las propiedades<br />
requeridas:<br />
Form1<br />
Frame1<br />
Nombre FrmManten<strong>Curso</strong><br />
Caption Mantenimiento de cursos<br />
BorderStyle 3-Fixed Dialog<br />
Pág. 310
Frame2<br />
Frame3<br />
Nombre FraIngreso<br />
Caption<br />
Nombre FraNavegador<br />
Caption Navegador<br />
Nombre FraMantenimiento<br />
Caption Mantenimiento<br />
LblFieldLabel(0)<br />
Nombre LblFieldLabel<br />
Caption Código:<br />
LblFieldLabel(1)<br />
Nombre LblFieldLabel<br />
Caption Nombre:<br />
LblFieldLabel(2)<br />
Nombre LblFieldLabel<br />
Caption Vacantes:<br />
LblFieldLabel(3)<br />
Nombre LblFieldLabel<br />
Caption Profesor:<br />
TxtCurCodigo<br />
Nombre TxtCurCodigo<br />
Locked True<br />
Text<br />
TxtCurNombre<br />
Pág. 311
Nombre TxtCurNombre<br />
Locked True<br />
Text<br />
TxtCurVacantes<br />
Nombre TxtCurVacantes<br />
Locked True<br />
Text<br />
TxtCurProfe<br />
Nombre TxtCurProfe<br />
Locked True<br />
Text<br />
Command1<br />
Command2<br />
Command3<br />
Command4<br />
Nombre CmdPrimero<br />
Caption<br />
Picture C:\FundVB\Bitmaps\First.bmp<br />
Style 1-Graphical<br />
Nombre CmdAnterior<br />
Caption<br />
Picture C:\FundVB\Bitmaps\Previous.bmp<br />
Style 1-Graphical<br />
Nombre CmdSiguiente<br />
Caption<br />
Picture C:\FundVB\Bitmaps\Next.bmp<br />
Style 1-Graphical<br />
Pág. 312
Command5<br />
Command6<br />
Command7<br />
Command8<br />
Command9<br />
Nombre CmdUltimo<br />
Caption<br />
Picture C:\FundVB\Bitmaps\Last.bmp<br />
Style 1-Graphical<br />
Nombre<br />
Caption<br />
CmdNuevo<br />
Picture C:\FundVB\Bitmaps\New.bmp<br />
Style 1-Graphical<br />
Nombre<br />
Caption<br />
CmdEditar<br />
Picture C:\FundVB\Bitmaps\Edit.bmp<br />
Style 1-Graphical<br />
Nombre<br />
Caption<br />
CmdGuardar<br />
Picture C:\FundVB\Bitmaps\Save.bmp<br />
Style 1-Graphical<br />
Nombre<br />
Caption<br />
CmdEliminar<br />
Picture C:\FundVB\Bitmaps\Delete.bmp<br />
Style 1-Graphical<br />
Nombre CmdSalir<br />
Pág. 313
Caption &Salir<br />
Picture C:\FundVB\Bitmaps\Exit.bmp<br />
Style 1-Graphical<br />
El código asociado a la aplicación se muestra a<br />
continuación:<br />
Private Sub CmdPrimero_Click()<br />
De<strong>Curso</strong>sLibres.rsCm<strong>Curso</strong>.MoveFirst<br />
End Sub<br />
Private Sub CmdUltimo_Click()<br />
De<strong>Curso</strong>sLibres.rsCm<strong>Curso</strong>.MoveLast<br />
End Sub<br />
Private Sub CmdAnterior_Click()<br />
De<strong>Curso</strong>sLibres.rsCm<strong>Curso</strong>.MovePrevious<br />
If De<strong>Curso</strong>sLibres.rsCm<strong>Curso</strong>.BOF Then<br />
De<strong>Curso</strong>sLibres.rsCm<strong>Curso</strong>.MoveFirst<br />
MsgBox “Estamos en el primer registro”<br />
End If<br />
End Sub<br />
Private Sub CmdSiguiente_Click()<br />
De<strong>Curso</strong>sLibres.rsCm<strong>Curso</strong>.MoveNext<br />
If De<strong>Curso</strong>sLibres.rsCm<strong>Curso</strong>.EOF Then<br />
De<strong>Curso</strong>sLibres.rsCm<strong>Curso</strong>.MoveLast<br />
MsgBox “Estamos en el último registro”<br />
End If<br />
End Sub<br />
Private Sub CmdNuevo_Click()<br />
De<strong>Curso</strong>sLibres.rsCm<strong>Curso</strong>.AddNew<br />
Pág. 314
ModoEditar True<br />
End Sub<br />
Private Sub CmdEditar_Click()<br />
ModoEditar True<br />
End Sub<br />
Private Sub CmdGuardar_Click()<br />
De<strong>Curso</strong>sLibres.rsCm<strong>Curso</strong>.Update<br />
ModoEditar False<br />
End Sub<br />
Private Sub CmdEliminar_Click()<br />
De<strong>Curso</strong>sLibres.rsCm<strong>Curso</strong>.Delete<br />
De<strong>Curso</strong>sLibres.rsCm<strong>Curso</strong>.MoveNext<br />
If De<strong>Curso</strong>sLibres.rsCm<strong>Curso</strong>.EOF Then<br />
De<strong>Curso</strong>sLibres.rsCm<strong>Curso</strong>.MoveLast<br />
End If<br />
End Sub<br />
Private Sub CmdSalir_Click()<br />
Unload Me<br />
End<br />
Private Sub Form_Unload(Cancel As Integer)<br />
If MsgBox(“¿Desea terminar la aplicación?”, _<br />
vbQuestion + vbYesNo, “Pregunta”) = vbYes Then<br />
End<br />
Else<br />
Cancel = True<br />
End If<br />
End Sub<br />
Private Sub Form_Activate()<br />
ModoEditar False<br />
Pág. 315
End Sub<br />
Private Sub ModoEditar(ByVal Ok As Boolean)<br />
TxtCurCodigo.Locked = Not Ok: TxtCurNombre.Locked = Not Ok<br />
TxtCurVacantes.Locked = Not Ok: TxtCurProfe.Locked = Not Ok<br />
CmdNuevo.Enabled = Not Ok: CmdEditar.Enabled = Not Ok<br />
CmdGuardar.Enabled = Ok: CmdEliminar.Enabled = Not Ok<br />
CmdPrimero.SetFocus: If Ok Then TxtCurCodigo.SetFocus<br />
End Sub<br />
Finalmente antes de ejecutar la aplicación debemos<br />
asegurarnos de elegir el tipo de bloqueo adecuado. Para ello<br />
haga click derecho sobre el comando Cm<strong>Curso</strong> y elija la opción<br />
Propiedades y en la ficha Avanzadas selecciones el tipo de<br />
bloqueo 3-Optimistic, tal como se muestra en la figura<br />
siguiente:<br />
Aplicación Nº 2<br />
Pág. 316
Desarrollar una aplicación que permita mostrar en una<br />
grilla el contenido de la tabla <strong>Curso</strong>. El diseño de la interfaz<br />
se muestra a continuación:<br />
Para desarrollar la aplicación, lo primero que debemos<br />
hacer es conectarnos a la base de datos <strong>Curso</strong>sLibres.MDB.<br />
Luego, añada un Comando y denomínelo CmConsulta<strong>Curso</strong>. Haga<br />
click derecho sobre el comando y seleccione Propiedades:<br />
Compruebe que este comando utiliza la conexión<br />
Cn<strong>Curso</strong>sLibres. Luego seleccione la opción Instrucción SQL<br />
Pág. 317
(Structured Query Language, Lenguaje de Estructuras de<br />
Consultas) e ingrese el siguiente código:<br />
Select CurCodigo As Código, CurNombre As Nombre,<br />
CurVacantes As Vacantes, CurProfe As Profesor From <strong>Curso</strong><br />
Luego, haga click en el botón Aceptar. La ventana<br />
DataEnvironment debe presentar el siguiente aspecto:<br />
A continuación seleccione el comando CmConsulta<strong>Curso</strong> y<br />
arrástrelo con el botón derecho del ratón hacia el formulario.<br />
Del menú desplegable que se presenta, seleccione la opción<br />
Cuadrícula de datos.<br />
Luego, cambie las dimensiones de la grilla de tal forma<br />
que ocupe la totalidad del formulario. Finalmente guarde y<br />
pruebe su aplicación.<br />
Aplicación Nº 3<br />
Pág. 318
Desarrollar una aplicación que permita seleccionar de un<br />
control DataCombo el nombre de un profesor y visualizar los<br />
cursos que dicta dicho profesor.<br />
Lo primero que debe hacer es conectarse a la base de datos<br />
<strong>Curso</strong>sLibres.MDB. En seguida añada un comando y denomínelo<br />
CmConsultaProfe. Luego haga click derecho sobre el comando y<br />
seleccione Propiedades. Compruebe que este comando utiliza la<br />
conexión Cn<strong>Curso</strong>sLibres. Luego seleccione la opción Instrucción<br />
SQL e ingrese el siguiente código:<br />
Select CurCodigo As Código, CurNombre As Nombre,<br />
CurProfe As Profesor From <strong>Curso</strong> Where (CurProfe = ?)<br />
A continuación proceda a añadir otro comando y denomínelo<br />
CmProfe. Compruebe que este comando utiliza la conexión<br />
Cn<strong>Curso</strong>sLibres. Seleccione la opción Instrucción SQL e ingrese<br />
el siguiente código:<br />
Select Distinct CurProfe From <strong>Curso</strong><br />
Luego proceda ha ubicar los siguientes controles en el<br />
formulario:<br />
1 control DataCombo<br />
1 control DataGrid<br />
Pág. 319
1 botón de comandos<br />
En seguida proceda a establecer las propiedades según se<br />
indica:<br />
Form1<br />
DataCombo1<br />
DataGrid1<br />
Command1<br />
Nombre FrmConsultaProfe<br />
Caption Consulta de profesores<br />
BorderStyle 3-Fixed Dialog<br />
Nombre DbcProfe<br />
ListField CurProfe<br />
RowMember CmProfe<br />
RowSource De<strong>Curso</strong>sLibres<br />
Nombre Dbgrd<strong>Curso</strong>s<br />
Font Arial (Negrita 10)<br />
HeadFont Arial (Negrita 10)<br />
Nombre CmdBuscar<br />
Caption &Buscar<br />
A continuación ingrese el siguiente código:<br />
Private Sub CmdBuscar_Click()<br />
If De<strong>Curso</strong>sLibres.rsCmConsultaProfe.State = adStateOpen Then<br />
De<strong>Curso</strong>sLibres.rsCmConsultaProfe.Close<br />
End If<br />
De<strong>Curso</strong>sLibres.CmConsultaProfe (DbcProfe.Text)<br />
Set Dbgrd<strong>Curso</strong>s.DataSource = De<strong>Curso</strong>sLibres.rsCmConsultaProfe<br />
End Sub<br />
Pág. 320
Aplicación Nº 4<br />
Desarrollar una aplicación que permita mostrar el<br />
contenido de la tabla Laboratorio, relacionada con la tabla<br />
<strong>Curso</strong>, tal como se muestra a continuación:<br />
Observar que la tabla Laboratorio sólo cuenta con tres<br />
campos. El campo que contiene el nombre del curso pertenece a<br />
la tabla <strong>Curso</strong>.<br />
La sentencia SQL que permite obtener consultas a partir de<br />
múltiples tablas (para nuestro caso <strong>Curso</strong> y Laboratorio), se<br />
indica a continuación:<br />
Select Laboratorio.LabCodigo As Código,<br />
<strong>Curso</strong>.CurNombre As Nombre,<br />
Laboratorio.LabHora As Horario,<br />
Laboratorio.LabProfe As [Jefe de práctica]<br />
From Laboratorio, <strong>Curso</strong><br />
Where Laboratorio.LabCodigo = <strong>Curso</strong>.CurCodigo<br />
GUÍA DE LABORATORIO Nº 7<br />
Microsoft <strong>Visual</strong> <strong>Basic</strong><br />
Pág. 321
Objetivos<br />
Luego de completar este laboratorio, el estudiante será<br />
capaz de:<br />
• Utilizar el objeto ADO Connection para crear una conexión a<br />
una base de datos.<br />
• Crear un objeto ADO Recordset para recuperar información de<br />
una base de datos.<br />
• Utilizar el método Execute de una conexión para actualizar la<br />
información de una base de datos.<br />
Consideraciones<br />
Para el desarrollo del presente laboratorio Ud. deberá<br />
crear una carpeta C:\FundVB\Lab7, para guardar sus trabajos<br />
correspondientes a este laboratorio.<br />
Aplicación Nº 1<br />
Elaborar una aplicación que permita realizar el<br />
mantenimiento de la información contenida en la tabla <strong>Curso</strong>.<br />
En esta aplicación Ud. debe diseñar la interfaz y luego<br />
escribir código para conectarse y recuperar información de la<br />
base de datos.<br />
Pág. 322
Para el diseño de la interfaz, proceda a ubicar los<br />
siguientes controles en el formulario:<br />
3 marcos<br />
4 etiquetas<br />
4 cajas de texto<br />
8 botones de comando<br />
En seguida proceda a establecer las propiedades según se<br />
indica:<br />
Form1<br />
Frame1<br />
Frame2<br />
Frame3<br />
Label1<br />
Nombre FrmManten<strong>Curso</strong>s<br />
Caption Mantenimiento de cursos<br />
BorderStyle 3-Fixed Dialog<br />
Moveable False<br />
StartUpPosition 2-CenterScreen<br />
Nombre FraIngreso<br />
Caption<br />
Nombre FraNavegador<br />
Caption Navegador<br />
Nombre FraMantenimiento<br />
Caption Mantenimiento<br />
Nombre LblCodigo<br />
Caption Código:<br />
Pág. 323
Label2<br />
Label3<br />
Label4<br />
Text1<br />
Text2<br />
Text3<br />
Text4<br />
Nombre LblNombre<br />
Caption Nombre:<br />
Nombre LblVacantes<br />
Caption Vacantes:<br />
Nombre LblProfesor<br />
Caption Profesor:<br />
Nombre TxtCurCodigo<br />
Locked<br />
Text<br />
True<br />
Nombre TxtCurNombre<br />
Locked<br />
Text<br />
True<br />
Nombre TxtCurVacantes<br />
Locked<br />
Text<br />
True<br />
Nombre TxtCurProfe<br />
Locked True<br />
Pág. 324
Text<br />
Para establecer las propiedades de los botones de comando<br />
Command1, Command2, . . ., Command8, copiar los pasos de la<br />
pág. 87 a la pág. 88 de la Guía de Laboratorio Nº 6 (Aplicación<br />
Nº 1).<br />
Antes de ingresar código a la aplicación, debemos tener en<br />
cuenta que para poder utilizar los objetos ADO es una<br />
aplicación <strong>Visual</strong> <strong>Basic</strong> es necesario cargar la librería<br />
correspondiente. Para ello selecciones el menú Proyecto y elija<br />
la opción Referencias. En el cuadro de diálogo Referencias<br />
seleccione la opción Microsoft ActiveX Data Objects 2.1<br />
Library, tal como se indica en la figura siguiente:<br />
Luego de hacer click en el botón Aceptar estará en<br />
condiciones de utilizar los objetos ADO en su aplicación.<br />
Pág. 325
El código necesario para realizar la conexión y efectuar<br />
el mantenimiento de la tabla se muestra a continuación.<br />
Observar la analogía cuando se utiliza Data Environment.<br />
Dim Cn As ADODB.Connection<br />
Dim Rs As ADODB.Recordset<br />
Private Sub ModoEditar(ByVal Ok As Boolean)<br />
TxtCurCodigo.Locked = Not Ok<br />
TxtCurNombre.Locked = Not Ok<br />
TxtCurVacantes.Locked = Not Ok<br />
TxtCurProfe.Locked = Not Ok<br />
CmdNuevo.Enabled = Not Ok<br />
CmdEditar.Enabled = Not Ok<br />
CmdGuardar.Enabled = Ok<br />
CmdEliminar.Enabled = Not Ok<br />
If Ok Then TxtCurCodigo.SetFocus<br />
End Sub<br />
Private Sub Form_Load()<br />
ModoEditar False<br />
Set Cn = New ADODB.Connection<br />
Set Rs = New ADODB.Recordset<br />
Cn.Open “Provider=Microsoft.Jet.OLEDB.4.0;” & _<br />
“Data Source=C:\FundVB\Data\<strong>Curso</strong>sLibres.MDB;” & _<br />
“Persist Security Info=False”<br />
Rs.ActiveConnection = Cn<br />
Rs.<strong>Curso</strong>rType = adOpenKeyset<br />
Rs.LockType = adLockOptimistic<br />
Rs.Open “Select * From <strong>Curso</strong>”<br />
Set TxtCurCodigo.DataSource = Rs<br />
TxtCurCodigo.DataField = “CurCodigo”<br />
Set TxtCurNombre.DataSource = Rs<br />
Pág. 326
TxtCurNombre.DataField = “CurNombre”<br />
Set TxtCurVacantes.DataSource = Rs<br />
TxtCurVacantes.DataField = “CurVacantes”<br />
Set TxtCurProfe.DataSource = Rs<br />
TxtCurProfe.DataField = “CurProfe”<br />
End Sub<br />
Private Sub CmdPrimero_Click()<br />
Rs.MoveFirst<br />
End Sub<br />
Private Sub CmdAnterior_Click()<br />
Rs.MovePrevious<br />
If Rs.BOF Then<br />
Rs.MoveFirst<br />
MsgBox “Estamos en el primer registro”<br />
End If<br />
End Sub<br />
Private Sub CmdSiguiente_Click()<br />
Rs.MoveNext<br />
If Rs.EOF Then<br />
Rs.MoveLast<br />
MsgBox “Estamos en el último registro”<br />
End If<br />
End Sub<br />
Private Sub CmdUltimo_Click()<br />
Rs.MoveLast<br />
End Sub<br />
Private Sub CmdNuevo_Click()<br />
Rs.AddNew<br />
ModoEditar True<br />
Pág. 327
End Sub<br />
Private Sub CmdEditar_Click()<br />
ModoEditar True<br />
End Sub<br />
Private Sub CmdGuardar_Click()<br />
Rs.Update<br />
ModoEditar False<br />
End Sub<br />
Private Sub CmdEliminar_Click()<br />
Rs.Delete<br />
Rs.MoveNext<br />
If Rs.EOF Then<br />
Rs.MoveLast<br />
End If<br />
End Sub<br />
Private Sub Form_Unload(Cancel As Integer)<br />
Cn.Close<br />
Set Cn = Nothing<br />
End Sub<br />
Aplicación Nº 2<br />
Desarrollar una aplicación que permita realizar una<br />
consulta a la tabla <strong>Curso</strong>. Para ello el usuario debe<br />
seleccionar de un cuadro combinado (combo) el nombre de un<br />
profesor y a continuación se deben visualizar los cursos a su<br />
cargo. El diseño de la interfaz debe ser similar a la figura<br />
mostrada:<br />
Pág. 328
Para el desarrollo de esta aplicación, proceda ha ubicar<br />
los siguientes controles en el formulario:<br />
1 control ComboBox<br />
1 control DataGrid<br />
1 botón de comandos<br />
En seguida proceda a establecer las propiedades según se<br />
indica:<br />
Form1<br />
Combo1<br />
Nombre FrmConsultaProfe<br />
Caption Consulta de profesores<br />
BorderStyle 3-Fixed Dialog<br />
Nombre CboProfe<br />
Text<br />
DataGrid1<br />
Nombre Dbgrd<strong>Curso</strong>s<br />
Font Arial (Negrita 10)<br />
HeadFont Arial (Negrita 10)<br />
Pág. 329
Command1<br />
seguida:<br />
Nombre CmdBuscar<br />
Caption &Buscar<br />
Default True<br />
A continuación debe ingresar el código que se muestra en<br />
Dim Cn As ADODB.Connection<br />
Dim Rs<strong>Curso</strong> As ADODB.Recordset<br />
Dim RsProfe As ADODB.Recordset<br />
Private Sub Form_Load()<br />
Set Cn = New ADODB.Connection<br />
Set RsProfe = New ADODB.Recordset<br />
Cn.Open “Provider=Microsoft.Jet.OLEDB.4.0;” & _<br />
“Data Source=C:\FundVB\Data\<strong>Curso</strong>sLibres.MDB;” & _<br />
“Persist Security Info=False”<br />
RsProfe.ActiveConnection = Cn<br />
RsProfe.<strong>Curso</strong>rType = adOpenStatic<br />
RsProfe.LockType = adLockOptimistic<br />
RsProfe.<strong>Curso</strong>rLocation = adUseClient<br />
RsProfe.Open “Select Distinct CurProfe From <strong>Curso</strong>”<br />
Do While Not RsProfe.EOF()<br />
CboProfe.AddItem RsProfe(“CurProfe”)<br />
RsProfe.MoveNext<br />
Loop<br />
End Sub<br />
Private Sub CmdBuscar_Click()<br />
Set Rs<strong>Curso</strong> = New ADODB.Recordset<br />
Rs<strong>Curso</strong>.ActiveConnection = Cn<br />
Rs<strong>Curso</strong>.<strong>Curso</strong>rType = adOpenStatic<br />
Pág. 330
Rs<strong>Curso</strong>.LockType = adLockReadOnly<br />
Rs<strong>Curso</strong>.<strong>Curso</strong>rLocation = adUseClient<br />
Rs<strong>Curso</strong>.Open “Select CurCodigo As Código, ” & _<br />
“CurNombre As Nombre, CurProfe As Profesor ” & _<br />
“From <strong>Curso</strong> Where CurProfe = '” & CboProfe.Text & “'”<br />
Set Dbgrd<strong>Curso</strong>s.DataSource = Rs<strong>Curso</strong><br />
End Sub<br />
Private Sub Form_Unload(Cancel As Integer)<br />
Cn.Close<br />
Set Cn = Nothing<br />
End Sub<br />
Aplicación Nº 3<br />
Desarrollar una aplicación que permita realizar el<br />
mantenimiento de las tablas de la base de datos<br />
<strong>Curso</strong>sLibres.MDB (estas tablas le serán proporcionadas con<br />
datos suficientes, por el Jefe de Práctica).<br />
El diseño de la interfaz debe ser similar a la siguiente<br />
figura:<br />
Pág. 331
Por ejemplo para realizar el mantenimiento de la tabla<br />
<strong>Curso</strong> debemos preparar los siguientes formularios:<br />
Pág. 332
Para desarrollar nuestra aplicación debe agregar un módulo<br />
de código al proyecto. Luego ingrese lo siguiente:<br />
Public Cn As ADODB.Connection<br />
También será necesario agregar un formulario MDI. Luego,<br />
cambie el nombre del formulario por el de MDI<strong>Curso</strong>sLibres. En<br />
seguida, diseñe el menú para la aplicación según se indica:<br />
Caption Name ShortCut<br />
&Mantenimiento<br />
MnuManten Ninguno<br />
&Alumnos MnuMantenAlumno Ninguno<br />
&Nuevo<br />
MnuMantenAlumnoNuevo Ninguno<br />
&Editar MnuMantenAlumnoEditar Ninguno<br />
&Eliminar<br />
MnuMantenAlumnoEliminar Ninguno<br />
&<strong>Curso</strong>s MnuManten<strong>Curso</strong> Ninguno<br />
&Nuevo<br />
&Editar<br />
&Eliminar<br />
MnuManten<strong>Curso</strong>Nuevo Ninguno<br />
MnuManten<strong>Curso</strong>Editar<br />
Ninguno<br />
MnuManten<strong>Curso</strong>Eliminar Ninguno<br />
&Laboratorio MnuMantenLaboratorio Ninguno<br />
&Nuevo<br />
MnuMantenLaboratorioNuevo Ninguno<br />
&Editar MnuMantenLaboratorioEditar Ninguno<br />
&Eliminar MnuMantenLaboratorioEliminar Ninguno<br />
&Distrito MnuMantenDistrito Ninguno<br />
&Nuevo MnuMantenDistritoNuevo Ninguno<br />
&Editar MnuMantenDistritoEditar Ninguno<br />
&Eliminar MnuMantenDistritoEliminar Ninguno<br />
- MnuMantLinea Ninguno<br />
&Salir MnuMantSalir Ctrl + X<br />
Pág. 333
Luego, haga doble click sobre el formulario e ingrese el<br />
siguiente código:<br />
Private Sub MDIForm_Load()<br />
Set Cn = New ADODB.Connection<br />
End Sub<br />
Cn.Open “Provider=Microsoft.Jet.OLEDB.4.0;” & _<br />
“Data Source=C:\FundVB\Data\<strong>Curso</strong>sLibres.MDB;” & _<br />
“Persist Security Info=False”<br />
Private Sub MnuManten<strong>Curso</strong>sNuevo_Click()<br />
Load FrmNuevo<strong>Curso</strong><br />
FrmNuevo<strong>Curso</strong>.Show<br />
End Sub<br />
Private Sub MnuManten<strong>Curso</strong>sEditar_Click()<br />
Load FrmEditar<strong>Curso</strong><br />
FrmEditar<strong>Curso</strong>.Show<br />
End Sub<br />
Private Sub MnuManten<strong>Curso</strong>sEliminar_Click()<br />
Load FrmEliminar<strong>Curso</strong><br />
FrmEliminar<strong>Curso</strong>.Show<br />
End Sub<br />
Para desarrollar la opción Nuevo de la tabla <strong>Curso</strong>, añada<br />
un nuevo formulario al proyecto. Luego, ubique los siguientes<br />
controles en el formulario:<br />
4 etiquetas<br />
4 cajas de texto<br />
3 botones de comando<br />
Luego<br />
indica:<br />
proceda a establecer las propiedades según se<br />
Pág. 334
Form1<br />
Label1<br />
Label2<br />
Label3<br />
Label4<br />
Text1<br />
Text2<br />
Text3<br />
Nombre FrmManten<strong>Curso</strong>s<br />
Caption Nuevo curso<br />
BorderStyle 3-Fixed Dialog<br />
MDIChild True<br />
Nombre LblCodigo<br />
Caption Código:<br />
Nombre LblNombre<br />
Caption Nombre:<br />
Nombre LblVacantes<br />
Caption Vacantes:<br />
Nombre LblProfesor<br />
Caption Profesor:<br />
Nombre TxtCurCodigo<br />
Text<br />
Nombre TxtCurNombre<br />
Text<br />
Nombre TxtCurVacantes<br />
Text<br />
Pág. 335
Text4<br />
Command1<br />
Command2<br />
Command3<br />
Nombre TxtCurProfe<br />
Text<br />
Nombre CmdGrabar<br />
Caption &Grabar<br />
Nombre CmdNuevo<br />
Caption &Nuevo<br />
Nombre CmdCerrar<br />
Caption &Cerrar<br />
Una vez establecidas las propiedades, proceda a ingresar<br />
el siguiente código:<br />
Private Sub Form_Load()<br />
CmdGrabar.Enabled = True<br />
CmdNuevo.Enabled = False<br />
End Sub<br />
Private Sub CmdGrabar_Click()<br />
Cn.Execute “Insert Into <strong>Curso</strong>(CurCodigo, CurNombre, ” & _<br />
“CurVacantes, CurProfe) Values ('” & TxtCurCodigo & _<br />
“',” & “'” & TxtCurNombre & “',” & _<br />
Val(TxtCurVacantes) & “,” & “'” & TxtCurProfe & “')”<br />
CmdGrabar.Enabled = False<br />
CmdNuevo.Enabled = True<br />
End Sub<br />
Pág. 336
Private Sub CmdNuevo_Click()<br />
TxtCurCodigo = “”<br />
TxtCurNombre = “”<br />
TxtCurVacantes = “”<br />
TxtCurProfe = “”<br />
CmdGrabar.Enabled = True: CmdNuevo.Enabled = False<br />
TxtCurCodigo.SetFocus<br />
End Sub<br />
Private Sub CmdCerrar_Click()<br />
Unload Me<br />
End Sub<br />
Para desarrollar la opción Editar de la tabla <strong>Curso</strong>, añada<br />
un nuevo formulario al proyecto. Luego, ubique los siguientes<br />
controles en el formulario:<br />
1 marco<br />
4 etiquetas<br />
4 cajas de texto<br />
4 botones de comando<br />
En seguida proceda a establecer las propiedades según se<br />
indica:<br />
Form1<br />
Frame1<br />
Nombre FrmManten<strong>Curso</strong>s<br />
Caption Editar curso<br />
BorderStyle 3-Fixed Dialog<br />
MDIChild True<br />
Nombre FraCodigo<br />
Caption<br />
Pág. 337
Label1<br />
Label2<br />
Label3<br />
Label4<br />
Text1<br />
Text2<br />
Text3<br />
Text4<br />
Nombre LblCodigo<br />
Caption Código:<br />
Nombre LblNombre<br />
Caption Nombre:<br />
Nombre LblVacantes<br />
Caption Vacantes:<br />
Nombre LblProfesor<br />
Caption Profesor:<br />
Nombre TxtCurCodigo<br />
Text<br />
Nombre TxtCurNombre<br />
Text<br />
Nombre TxtCurVacantes<br />
Text<br />
Nombre TxtCurProfe<br />
Text<br />
Pág. 338
Command1<br />
Command2<br />
Command3<br />
Command4<br />
Nombre CmdAceptar<br />
Caption &Aceptar<br />
Nombre CmdGrabar<br />
Caption &Grabar<br />
Nombre CmdNuevo<br />
Caption &Nuevo<br />
Nombre CmdCerrar<br />
Caption &Cerrar<br />
Una vez establecidas las propiedades, proceda a ingresar<br />
el siguiente código:<br />
Private Sub Form_Load()<br />
CmdAceptar.Enabled = True<br />
CmdGrabar.Enabled = False<br />
CmdNuevo.Enabled = False<br />
End Sub<br />
Private Sub CmdAceptar_Click()<br />
Dim Rs As New ADODB.Recordset<br />
Set Rs = Cn.Execute(“Select CurNombre, ” & _<br />
“CurVacantes, CurProfe From <strong>Curso</strong> ” & _<br />
“Where CurCodigo = '” & TxtCurCodigo & “'”)<br />
If (Rs.EOF And Rs.BOF) Then<br />
MsgBox “No existe ningún curso con este código”<br />
TxtCurCodigo.SetFocus<br />
Pág. 339
TxtCurCodigo.SelStart = 0<br />
TxtCurCodigo.SelLength = Len(TxtCurCodigo)<br />
Exit Sub<br />
End If<br />
TxtCurNombre = Rs!CurNombre<br />
TxtCurVacantes = Rs!CurVacantes<br />
TxtCurProfe = Rs!CurProfe<br />
Rs.Close<br />
Set Rs = Nothing<br />
TxtCurCodigo.Enabled = False<br />
CmdAceptar.Enabled = False<br />
CmdGrabar.Enabled = True<br />
CmdNuevo.Enabled = True<br />
End Sub<br />
Private Sub CmdGrabar_Click()<br />
End Sub<br />
Cn.Execute “Update <strong>Curso</strong> Set CurNombre = '” & _<br />
TxtCurNombre & “',” & “CurVacantes = ” & _<br />
Val(TxtCurVacantes) & “,” & “CurProfe = '” & _<br />
TxtCurProfe & “'” & “ Where CurCodigo = '” & _<br />
TxtCurCodigo & “'”<br />
Private Sub CmdNuevo_Click()<br />
TxtCurCodigo = “”<br />
TxtCurNombre = “”<br />
TxtCurVacantes = “”<br />
TxtCurProfe = “”<br />
CmdAceptar.Enabled = True<br />
CmdGrabar.Enabled = False<br />
CmdNuevo.Enabled = False<br />
TxtCurCodigo.Enabled = True<br />
TxtCurCodigo.SetFocus<br />
Pág. 340
End Sub<br />
Private Sub CmdCerrar_Click()<br />
Unload Me<br />
End Sub<br />
Para desarrollar la opción Eliminar de la tabla <strong>Curso</strong>s,<br />
añada un nuevo formulario al proyecto. Luego, ubique los<br />
siguientes controles en el formulario:<br />
1 marco<br />
4 etiquetas<br />
4 cajas de texto<br />
4 botones de comando<br />
En seguida proceda a establecer las propiedades según se<br />
indica:<br />
Form1<br />
Frame1<br />
Label1<br />
Label2<br />
Nombre FrmManten<strong>Curso</strong>s<br />
Caption Eliminar curso<br />
BorderStyle 3-Fixed Dialog<br />
MDIChild True<br />
Nombre FraCodigo<br />
Caption<br />
Nombre LblCodigo<br />
Caption Código:<br />
Nombre LblNombre<br />
Pág. 341
Label3<br />
Label4<br />
Text1<br />
Text2<br />
Text3<br />
Text4<br />
Command1<br />
Command2<br />
Caption Nombre:<br />
Nombre LblVacantes<br />
Caption Vacantes:<br />
Nombre LblProfesor<br />
Caption Profesor:<br />
Nombre TxtCurCodigo<br />
Text<br />
Nombre TxtCurNombre<br />
Text<br />
Nombre TxtCurVacantes<br />
Text<br />
Nombre TxtCurProfe<br />
Text<br />
Nombre CmdAceptar<br />
Caption &Aceptar<br />
Nombre CmdEliminar<br />
Pág. 342
Command3<br />
Command4<br />
Caption &Eliminar<br />
Nombre CmdNuevo<br />
Caption &Nuevo<br />
Nombre CmdCerrar<br />
Caption &Cerrar<br />
Una vez establecidas las propiedades, proceda a ingresar<br />
el siguiente código:<br />
Private Sub Form_Load()<br />
CmdAceptar.Enabled = True<br />
CmdEliminar.Enabled = False<br />
CmdNuevo.Enabled = False<br />
End Sub<br />
Private Sub CmdEliminar_Click()<br />
Cn.Execute “Delete From <strong>Curso</strong> ” & _<br />
“Where CurCodigo = '” & TxtCurCodigo & “'”<br />
Call CmdNuevo_Click<br />
End Sub<br />
Private Sub CmdNuevo_Click()<br />
TxtCurCodigo = “”<br />
TxtCurNombre = “”<br />
TxtCurVacantes = “”<br />
TxtCurProfe = “”<br />
CmdAceptar.Enabled = True<br />
CmdEliminar.Enabled = False<br />
CmdNuevo.Enabled = False<br />
Pág. 343
TxtCurCodigo.Enabled = True<br />
TxtCurCodigo.SetFocus<br />
End Sub<br />
Private Sub CmdAceptar_Click()<br />
Dim Rs As New ADODB.Recordset<br />
Set Rs = Cn.Execute(“Select CurNombre, ” & _<br />
“CurVacantes, CurProfe From <strong>Curso</strong> ” & _<br />
“Where CurCodigo = '” & TxtCurCodigo & “'”)<br />
If (Rs.EOF And Rs.BOF) Then<br />
MsgBox “No existe ningún curso con este código”<br />
TxtCurCodigo.SetFocus<br />
TxtCurCodigo.SelStart = 0<br />
TxtCurCodigo.SelLength = Len(TxtCurCodigo)<br />
Exit Sub<br />
End If<br />
TxtCurNombre = Rs!CurNombre<br />
TxtCurVacantes = Rs!CurVacantes<br />
TxtCurProfe = Rs!CurProfe<br />
Rs.Close<br />
Set Rs = Nothing<br />
TxtCurCodigo.Enabled = False<br />
CmdAceptar.Enabled = False<br />
CmdEliminar.Enabled = True<br />
CmdNuevo.Enabled = True<br />
End Sub<br />
Private Sub CmdCerrar_Click()<br />
Unload Me<br />
End Sub<br />
De manera similar proceda a desarrollar el código para los<br />
formularios de mantenimiento de las demás tablas.<br />
Pág. 344
Aplicación Nº 4<br />
Elaborar una aplicación que permita recuperar y mantener<br />
la información de la base de datos <strong>Curso</strong>sLibres.MDB. Para tal<br />
fin debe preparar un formulario que permita establecer la<br />
conexión con el origen de datos. Luego, si la conexión es<br />
satisfactoria el usuario tiene la posibilidad de elegir una de<br />
las tablas de la base de datos para realizar las operaciones<br />
habituales de mantenimiento o simplemente para ejecutar<br />
consultas. El diseño de la interfaz debe ser similar a la<br />
siguiente figura:<br />
Las opciones Mantenimiento y Consulta deben ser análogas a<br />
las realizadas en aplicaciones anteriores.<br />
Microsoft <strong>Visual</strong> <strong>Basic</strong><br />
Pág. 345
GUÍA DE LABORATORIO Nº 8<br />
Objetivos<br />
Luego de completar este laboratorio, el estudiante será<br />
capaz de:<br />
• Usar el diseñador de reportes DataReport.<br />
• Utilizar y controlar la impresora para obtener reportes<br />
impresos.<br />
Consideraciones<br />
Para el desarrollo del presente laboratorio Ud. deberá<br />
crear una carpeta C:\FundVB\Lab8, para guardar sus trabajos<br />
correspondientes a este laboratorio.<br />
Aplicación Nº 1<br />
Diseñar un reporte que muestre la información almacenada<br />
en la tabla <strong>Curso</strong>s. El formato del reporte pedido se muestra a<br />
continuación:<br />
Para diseñar nuestro reporte, lo primero que debemos hacer<br />
es conectarnos a la base de datos <strong>Curso</strong>sLibres.MDB. La conexión<br />
la haremos efectiva mediante el Data Environment. Luego, añada<br />
Pág. 346
un Comando y denomínelo Cm<strong>Curso</strong>. Establezca el nombre de la<br />
tabla a utilizar, para nuestro caso <strong>Curso</strong>. El aspecto de la<br />
ventana Data Environment deberá ser similar a la figura:<br />
Luego, del menú Proyecto seleccionar la opción Agregar<br />
Data Report, lo cual permite agregar el diseñador de reportes:<br />
En seguida del Data Environment seleccionar cada campo que<br />
desee incluir en el reporte y luego arrastre el campo hacia la<br />
sección Detalles del Data Report.<br />
Pág. 347
El diseñador de reportes presenta un conjunto de controles<br />
que permiten mejorar la presentación de nuestro reporte. En<br />
seguida ubicar los siguientes controles:<br />
2 etiquetas en la sección Encabezado de informe<br />
4 etiquetas en la sección Encabezado de página<br />
A continuación proceda a establecer las propiedades según<br />
se indica:<br />
Etiqueta1<br />
Etiqueta2<br />
Etiqueta3<br />
Etiqueta4<br />
Etiqueta5<br />
Nombre RptLblVAB<br />
Caption Instituto de Educación Superior<br />
“Víctor Andrés Belaúnde”<br />
Font Arial (Negrita 09)<br />
Nombre RptLblNombre<br />
Caption Reporte de <strong>Curso</strong>s<br />
Font Arial (Negrita Cursiva 16)<br />
Nombre RptLblCodigo<br />
Caption Código:<br />
Font Arial (Negrita 10)<br />
Nombre RptLblNombre<br />
Caption Nombre:<br />
Font Arial (Negrita 10)<br />
Nombre RptLblVacantes<br />
Caption Vacantes:<br />
Pág. 348
Etiqueta6<br />
Font Arial (Negrita 10)<br />
Nombre RptLblProfesor<br />
Caption Profesor:<br />
Font Arial (Negrita 10)<br />
Para insertar la fecha actual dar un click con el botón<br />
derecho del ratón sobre el diseñador de reportes en la sección<br />
de Encabezado de informe, del menú contextual que se presenta<br />
seleccionar la opción Insertar control, luego Fecha actual<br />
(formato corto). En seguida, cambiar las siguientes<br />
propiedades:<br />
DataReport1<br />
DataMember Cm<strong>Curso</strong><br />
DataSource De<strong>Curso</strong>sLibres<br />
Luego, seleccione del menú Proyecto la opción Propiedades<br />
de Proyecto, y en la ficha General del cuadro de diálogo<br />
Propiedades del proyecto, establecer DataReport1 como objeto<br />
inicial. Haga click en Aceptar y ejecute su aplicación.<br />
Aplicación Nº 2<br />
Diseñar un reporte que permita mostrar un listado de<br />
profesores y los cursos que tienen a su cargo. Tener en cuenta<br />
que la información relacionada con cada profesor debe empezar<br />
en una página nueva. El formato del reporte pedido se muestra a<br />
continuación:<br />
Pág. 349
En esta aplicación explicaremos como crear grupos de<br />
datos. Para ello iniciar un nuevo proyecto. En seguida,<br />
conectarse a la base de datos <strong>Curso</strong>sLibres.MDB mediante el Data<br />
Environment. Luego, añada un Comando y denomínelo CmProfesor.<br />
Establezca el nombre de la tabla a utilizar, para nuestro caso<br />
<strong>Curso</strong>. Para realizar el agrupamiento por profesor seleccionar<br />
la ficha Agrupar del cuadro de diálogo Propiedades de<br />
CmProfesor. A continuación activar la casilla de verificación<br />
Agrupar comando, luego seleccionar de la lista de campos, el<br />
campo por el cual se desea agrupar la información, para nuestro<br />
caso seleccionar CurProfe y dar un click en el botón “ ><br />
”. El<br />
cuadro de diálogo Propiedades de CmProfesor debe presentar un<br />
aspecto similar a la figura siguiente:<br />
Pág. 350
A continuación sobre el diseñador de reportes dar un click<br />
con el botón derecho del ratón y del menú emergente que se<br />
presenta elegir la opción Insertar encabezado o pie de grupo.<br />
Del objeto De<strong>Curso</strong>sLibres arrastrar el campo CurProfe de la<br />
sección Campo de resumen en CmProfesor_Grouping al diseñador de<br />
reportes pero a la sección Encabezado de grupo. Los demás<br />
campos arrastrarlos de la sección Campos de Detalle en<br />
CmProfesor a la sección Detalle del generador de reportes. Por<br />
último proceda a cambiar las siguientes propiedades del objeto<br />
DataReport:<br />
DataReport1<br />
DataMember CmProfesor_Grouping<br />
DataSource De<strong>Curso</strong>sLibres<br />
Aplicación Nº 3<br />
Desarrollar una aplicación que permita crear un reporte<br />
para mostrar la información de la base de datos<br />
<strong>Curso</strong>sLibres.MDB. Para tal fin debe preparar un formulario que<br />
Pág. 351
permita al usuario elegir una tabla, y en seguida se debe<br />
generar el reporte correspondiente. Además el usuario puede<br />
obtener una vista preliminar del reporte o una copia impresa.<br />
El diseño de la interfaz debe ser similar a la figura que se<br />
muestra a continuación:<br />
Para desarrollar nuestra aplicación, proceda a diseñar los<br />
reportes correspondientes según:<br />
Tabla Reporte<br />
Alumno DataReport1<br />
<strong>Curso</strong> DataReport2<br />
Laboratorio DataReport3<br />
Luego,<br />
formulario:<br />
ubique los siguientes controles sobre el<br />
1 marco<br />
3 botones de opción<br />
3 botones de comando<br />
En seguida proceda a establecer las propiedades según se<br />
indica:<br />
Pág. 352
Form1<br />
Frame1<br />
Option1<br />
Option2<br />
Option3<br />
Command1<br />
Nombre FrmReporte<strong>Curso</strong>sLibres<br />
Caption <strong>Curso</strong>s Libres<br />
BorderStyle 3-Fixed Dialog<br />
Nombre FraTablas<br />
Caption<br />
Nombre OptTablaAlumno<br />
Caption Alumno<br />
Value True<br />
Nombre OptTabla<strong>Curso</strong><br />
Caption <strong>Curso</strong><br />
Value False<br />
Nombre OptTablaLaboratorio<br />
Caption Laboratorio<br />
Value False<br />
Nombre CmdVistaPrevia<br />
Caption VistaPrevia<br />
Picture C:\Archivos de programa\Microsoft <strong>Visual</strong><br />
Studio\Common\Graphics\Bitmaps\Win95\<br />
Explorer.bmp<br />
Style 1-Graphical<br />
Pág. 353
Command2<br />
Command3<br />
Nombre CmdImprimir<br />
Caption Imprimir<br />
Picture C:\Archivos de programa\Microsoft <strong>Visual</strong><br />
Studio\Common\Graphics\Bitmaps\Win95\<br />
Printfld.bmp<br />
Style 1-Graphical<br />
Nombre CmdSalir<br />
Caption Salir<br />
Una vez establecidas las propiedades, proceda a ingresar<br />
el siguiente código:<br />
Private Sub CmdImprimir_Click()<br />
If OptTablaAlumno.Value Then<br />
DataReport<strong>1.</strong>PrintReport True<br />
ElseIf OptTabla<strong>Curso</strong>.Value Then<br />
DataReport2.PrintReport True<br />
ElseIf OptTablaLaboratorio.Value Then<br />
DataReport2.PrintReport True<br />
End If<br />
End Sub<br />
Private Sub CmdVistaPrevia_Click()<br />
If OptTablaAlumno.Value Then<br />
DataReport<strong>1.</strong>Show<br />
ElseIf OptTabla<strong>Curso</strong>.Value Then<br />
DataReport2.Show<br />
ElseIf OptTablaLaboratorio.Value Then<br />
DataReport2.Show<br />
End If<br />
End Sub<br />
Pág. 354
Private Sub CmdSalir_Click()<br />
Unload Me<br />
End Sub<br />
Cuando ejecute la aplicación, al dar un click en el botón<br />
Imprimir se visualizará el siguiente cuadro de diálogo, el cual<br />
nos permitirá confirmar o cancelar la impresión:<br />
Aplicación Nº 4<br />
Diseñar un reporte combinando datos de la tabla <strong>Curso</strong> y<br />
Laboratorio. El reporte debe mostrar el código del curso, el<br />
nombre del curso, el nombre del profesor de teoría, el nombre<br />
del jefe de práctica y el horario de laboratorio. Dar formato<br />
al reporte según su criterio.<br />
FIN PARTE II<br />
Pág. 355
GUÍA DE LABORATORIO<br />
Parte III<br />
ELABORADO POR<br />
CARLOS CASTILLO PERALTA<br />
cc_peralta@hotmail.com<br />
INTRODUCCIÓN<br />
Pág. 356
La presente Guía de Laboratorio de Microsoft <strong>Visual</strong> <strong>Basic</strong>,<br />
se elaboró con la finalidad de complementar la parte teórica<br />
con la parte práctica del curso. Los problemas presentan un<br />
grado de dificultad gradual, es decir, en cada práctica primero<br />
se comienzan con problemas muy sencillos con la finalidad de<br />
que el estudiante esclarezca dudas y quede claro en los<br />
conceptos asimilados en la teoría, y luego en los problemas<br />
posteriores se va incrementando el nivel de dificultad.<br />
Esta guía explora una gran variedad de materias y contiene<br />
muchos problemas recopilados a lo largo de varios años de<br />
experiencia. Espero que satisfaga las necesidades de los<br />
estudiantes y colegas, ya que ha sido elaborada teniendo en<br />
cuenta los objetivos de aprendizaje del curso.<br />
Si desean compartirla con otros colegas, me agradaría<br />
mucho que lo hicieran, con la única condición de que siempre se<br />
respete el derecho del autor.<br />
Desde ya les deseo la mejor de las suertes en el<br />
aprendizaje de Microsoft <strong>Visual</strong> <strong>Basic</strong>.<br />
Carlos Castillo Peralta<br />
Microsoft <strong>Visual</strong> <strong>Basic</strong><br />
Lima, Diciembre del 2000<br />
Pág. 357
GUÍA DE LABORATORIO Nº 9<br />
Objetivos<br />
Luego de completar este laboratorio, el estudiante será<br />
capaz de:<br />
• Crear y utilizar clases dentro de una aplicación <strong>Visual</strong><br />
<strong>Basic</strong>.<br />
• Diseñar y utilizar controles ActiveX personalizados.<br />
Consideraciones<br />
Para el desarrollo del presente laboratorio Ud. deberá<br />
crear una carpeta C:\FundVB\Lab9, para guardar sus trabajos<br />
correspondientes a este laboratorio.<br />
Aplicación Nº 1<br />
Implementar una clase denominada Circulo, la cual debe<br />
contar con las propiedades públicas Radio y Area. Para tal fin<br />
seleccione la opción Agregar módulo de clase del Menú Proyecto:<br />
En la ficha Nuevo seleccione la opción Módulo de clase y<br />
haga click en Abrir. En seguida active la ventana de<br />
propiedades y cambie el nombre de la nueva clase por Circulo.<br />
Pág. 358
La ventana de código de la clase debe presentar la siguiente<br />
apariencia:<br />
A continuación proceda a ingresar el siguiente código para<br />
la clase:<br />
Private R As Double<br />
Public Property Get Radio() As Variant<br />
Radio = R<br />
End Property<br />
Public Property Let Radio(ByVal vNewValue As Variant)<br />
If IsNumeric(vNewValue) Then<br />
R = CDbl(vNewValue)<br />
Else<br />
R = 0<br />
End If<br />
End Property<br />
Public Property Get Area() As Variant<br />
Area = 3.141592 * R * R<br />
End Property<br />
Private Sub Class_Initialize()<br />
R = 0<br />
End Sub<br />
Pág. 359
Luego proceda a ubicar los siguientes controles en el<br />
formulario:<br />
2 etiquetas<br />
2 cajas de texto<br />
3 botones de comando<br />
A continuación proceda a establecer las propiedades según<br />
se indica:<br />
Form1<br />
Label1<br />
Label2<br />
Text1<br />
Text2<br />
Nombre FrmEjemClaseCirculo<br />
Caption Ejemplo con la clase Circulo<br />
Nombre LblRadio<br />
Caption Radio:<br />
Nombre LblArea<br />
Caption Area:<br />
Nombre TxtRadio<br />
Text<br />
Nombre TxtArea<br />
Text<br />
Una vez que ha establecido las propiedades indicadas,<br />
proceda a ingrese el siguiente código para el formulario de<br />
prueba:<br />
Pág. 360
Dim A As Circulo<br />
Private Sub Form_Load()<br />
Set A = New Circulo<br />
End Sub<br />
Private Sub Form_Unload(Cancel As Integer)<br />
Set A = Nothing<br />
End Sub<br />
Private Sub TxtRadio_Change()<br />
A.Radio = TxtRadio<br />
TxtArea = A.Area<br />
End Sub<br />
Guarde y pruebe su aplicación. El resultado debe ser<br />
similar a la siguiente figura:<br />
Aplicación Nº 2<br />
Diseñar un control ActiveX que muestre el mensaje<br />
“Bienvenido al Mundo de la Programación con ActiveX”.<br />
Adicionalmente, el control debe permitir al usuario la<br />
posibilidad de cambiar el color del texto.<br />
Para comenzar nuestra aplicación, debe ingresar a <strong>Visual</strong><br />
<strong>Basic</strong> y en la ventana de diálogo Nuevo Proyecto seleccione<br />
Control ActiveX, y luego haga click en el botón Aceptar.<br />
Pág. 361
Con esta opción, podrá crear un Control Active X. Las<br />
diferencias entre una opción y la usual (EXE estándar) las verá<br />
mejor conforme avance en el desarrollo de la presente Práctica<br />
de Laboratorio.<br />
En seguida añada un nuevo proyecto EXE estándar. Esto lo<br />
puede realizar desde el Menú Archivo opción Agregar Proyecto.<br />
Luego establezca las propiedades indicadas a continuación:<br />
Proyecto1<br />
Nombre ActiveXMiControl<br />
UserControl1<br />
Proyecto2<br />
Form1<br />
Nombre MiControl<br />
ToolboxBitmap C:\Archivos de programa\Microsoft <strong>Visual</strong><br />
Studio\Common\Graphics\Bitmaps\Assorted\<br />
Heart.bmp<br />
Nombre VbpMiControl<br />
Pág. 362
Nombre FrmPruebaMiControl<br />
Caption Prueba de Control ActiveX<br />
BorderStyle 3-Fixed Dialog<br />
La ventana del Explorador de proyectos debe presentar la<br />
siguiente apariencia:<br />
En la ventana anterior haga click con el botón derecho del<br />
ratón sobre MiControl y elija la opción Ver código. En el<br />
ComboBox General seleccione UserControl y en el ComboBox<br />
Declaraciones<br />
código:<br />
seleccione Paint. Ahora ingrese el siguiente<br />
Private Sub UserControl_Paint()<br />
Const Msg = “Bienvenido al Mundo de la Programación ” & _<br />
“con ActiveX”<br />
UserControl.Cls<br />
UserControl.Print Msg<br />
End Sub<br />
Luego en el Explorador de proyectos, hacer click con el<br />
botón derecho del ratón sobre la carpeta Controles de usuario y<br />
seleccione la opción Propiedades de ActiveXMiControl. En<br />
seguida se mostrará la ventana Propiedades del proyecto:<br />
Pág. 363
En la ventana anterior, en la ficha General, apartado<br />
Descripción del proyecto, escribir “Este es mi primer Control<br />
ActiveX”, tal como se muestra. Luego pulsar el botón Aceptar.<br />
Cierre todas las ventanas abiertas y haga un sólo click<br />
sobre la carpeta Controles de usuario. A continuación ingrese<br />
al Menú Archivo y seleccione la opción Generar<br />
ActiveXMiControl.ocx,<br />
defecto.<br />
guarde el archivo con su nombre por<br />
Luego, establezca como inicial el formulario<br />
FrmPruebaMiControl y añadir desde el Cuadro de herramientas<br />
nuestro control recientemente creado.<br />
Del Menú Proyecto seleccione la opción Componentes y<br />
veremos la descripción de nuestro control con su casilla de<br />
verificación activada, tal como se muestra a continuación:<br />
Pág. 364
En seguida, guarde y ejecute su aplicación. El resultado<br />
debe ser similar al siguiente:<br />
En este momento, Ud. acaba de terminar el diseño de su<br />
primer control ActiveX. No se preocupe por las diferencias que<br />
puede haber encontrado con respecto a la forma tradicional de<br />
programar. Conforme avancemos en el desarrollo de la práctica<br />
veremos que esta forma de programar en base a componentes es<br />
bastante sencilla.<br />
Pág. 365
Sin embargo, debemos modificar nuestro control, de tal<br />
forma que nos permita cambiar el color de texto de<br />
presentación. Para tal fin, vamos a hacer uso del Asistente<br />
para interfaz de control ActiveX y el Asistente para páginas de<br />
propiedades. Estos complementos deben ser instalados desde el<br />
menú principal Complementos y seleccionar la opción<br />
Administrador<br />
continuación:<br />
de complementos, tal como se indica a<br />
En la ventana anterior debe activar las casillas de<br />
verificación Cargado/Descargado y Cargar al iniciar. Luego haga<br />
click en el botón Aceptar.<br />
En seguida el menú Complementos deberá presentar la<br />
siguiente apariencia:<br />
Pág. 366
Luego, haga click sobre la opción Asistente para interfaz<br />
de control ActiveX. En seguida, aparecerá una ventana de<br />
presentación, haga doble click en el botón Siguiente. Tendremos<br />
entonces una ventana similar a la que se muestra:<br />
Haga click con el ratón sobre el botón . La propiedad ForeColor es la propiedad encargada de<br />
cambiar el color de texto, la cual no está disponible en<br />
nuestro control, por ello debemos asociarla. El aspecto del<br />
Asistente para interfaz de control ActiveX debe ser similar a:<br />
Pág. 367
Pulse, luego el botón Siguiente. En seguida aparecerá otra<br />
ventana, haga nuevamente click en el botón Siguiente.<br />
Pág. 368
Ahora hemos llegado a la ventana en la cual vamos a<br />
asociar a nuestro control la propiedad ForeColor. Seleccione<br />
del ComboBox Control UserControl y del ComboBox Miembro<br />
ForeColor, tal como se indica en la ventana anterior. Pulse el<br />
botón Siguiente y en la siguiente ventana pulse el botón<br />
Finalizar. Aparecerá luego una ventana de información, lea<br />
detenidamente su contenido y luego haga click en el botón<br />
Cerrar. A continuación guarde su aplicación y genere nuevamente<br />
el control.<br />
Para probar el control abra el formulario<br />
FrmPruebaMiControl y añada al Cuadro de herramientas el<br />
componente Microsoft Common Dialog Control 6.0. En seguida<br />
añada al formulario un MiControl, un CommonDialog y un<br />
CommandButton. Cambie el nombre del botón Command1 por<br />
CmdAceptar e ingrese el siguiente código:<br />
Private Sub CmdAceptar_Click()<br />
CommonDialog<strong>1.</strong>ShowColor<br />
MiControl<strong>1.</strong>ForeColor = CommonDialog<strong>1.</strong>Color<br />
MiControl<strong>1.</strong>Visible = False<br />
MiControl<strong>1.</strong>Visible = True<br />
End Sub<br />
Guarde y luego ejecute su aplicación, el resultado será<br />
similar al siguiente:<br />
Pág. 369
Al hacer click sobre el botón Aceptar, se presenta la<br />
siguiente caja de diálogo en la cual podemos elegir el nuevo<br />
color para el texto de bienvenida:<br />
Preste atención en que la propiedad Visible se utiliza<br />
para actualizar el contenido del control y se pueda ver el<br />
cambio de color. No es la mejor forma de hacerlo, deberíamos<br />
hacerlo mediante código dentro del mismo control, pero por el<br />
momento y para probar como asociar una propiedad a un control<br />
es más que suficiente.<br />
Aplicación Nº 3<br />
Diseñar un control ActiveX que presente la forma de un<br />
cuadro de texto, pero que sólo admita números. Es decir, el<br />
usuario sólo podrá escribir en el control números, cualquier<br />
otro carácter que no sea un número, será rechazado por el<br />
control y no se imprimirá en el cuadro de texto.<br />
Al igual que en la aplicación anterior crear el grupo de<br />
proyectos y establezca las propiedades según:<br />
Pág. 370
Proyecto1<br />
Nombre ActiveXNumBox<br />
UserControl1<br />
Proyecto2<br />
Form1<br />
Nombre NumBox<br />
ToolboxBitmap C:\Archivos de programa\Microsoft <strong>Visual</strong><br />
Studio\Common\Graphics\Bitmaps\Assorted\<br />
Diamond.bmp<br />
Nombre VbpNumBox<br />
Nombre FrmPruebaNumBox<br />
Caption Prueba de Control ActiveX<br />
BorderStyle 3-Fixed Dialog<br />
Para diseñar nuestro control utilizaremos un control<br />
TextBox el cual debe insertar en el formulario NumBox<br />
(UserControl). Luego elimine el contenido de la propiedad Text.<br />
Tener cuidado en que el control ha de ser del mismo tamaño del<br />
cuadro de texto. Luego, el cuadro de texto debe redimensionarse<br />
de acuerdo al control en tiempo de diseño, esto es a la hora de<br />
insertar nuestro control en un formulario. Para ello es<br />
necesario ingresar el siguiente código:<br />
Private Sub UserControl_Resize()<br />
Text<strong>1.</strong>Top = 0<br />
Text<strong>1.</strong>Left = 0<br />
Text<strong>1.</strong>Width = UserControl.Width<br />
Text<strong>1.</strong>Height = UserControl.Height<br />
End Sub<br />
Pág. 371
Private Sub UserControl_InitProperties()<br />
Text1 = Extender.Name<br />
End Sub<br />
Private Sub Text1_KeyPress(KeyAscii As Integer)<br />
If Not (KeyAscii = 8 Or _<br />
(KeyAscii >= 48 And KeyAscii
ejemplo 5 de Setiembre de 1752. El control deberá mostrar el<br />
día de la semana correspondiente a la fecha ingresada, tal como<br />
se muestra en la figura siguiente:<br />
El calendario Gregoriano actual obedece a la reforma del<br />
calendario Juliano que ordenó el papa Gregorio XIII en 1752,<br />
para ponerlo de acuerdo con los movimientos de los cuerpos<br />
celestes. Lo cual trajo como consecuencia adelantar las fechas<br />
del 2 de Setiembre al 14 de Setiembre de 1752, es decir las<br />
fechas comprendidas en este intervalo de tiempo nunca<br />
existieron.<br />
Pág. 373
GUÍA DE LABORATORIO Nº 10<br />
Objetivos<br />
Microsoft <strong>Visual</strong> <strong>Basic</strong><br />
Luego de completar este laboratorio, el estudiante será<br />
capaz de:<br />
• Crear documentos ActiveX que se ejecuten directamente en una<br />
página Web.<br />
• Utilizar documentos ActiveX que incorporan hipervínculos.<br />
• Desarrollar documentos ActiveX para interactuar con bases de<br />
datos relacionales.<br />
Consideraciones<br />
Para el desarrollo del presente laboratorio Ud. deberá<br />
crear una carpeta C:\FundVB\Lab10, para guardar sus trabajos<br />
correspondientes a este laboratorio.<br />
Aplicación Nº 1<br />
Como primer ejercicio vamos a desarrollar un documento<br />
ActiveX que permite recuperar información de la base de datos<br />
<strong>Curso</strong>sLibres.MDB.<br />
Un documento ActiveX, es simplemente un formulario que se<br />
puede ejecutar directamente en los exploradores de Internet.<br />
Los documentos ActiveX se diseñan de la misma manera que los<br />
formularios estándar de <strong>Visual</strong> <strong>Basic</strong>. Para comenzar a<br />
desarrollar nuestro documento ActiveX, debe ingresar a <strong>Visual</strong><br />
<strong>Basic</strong> y en la ventana de diálogo Nuevo Proyecto seleccione EXE<br />
de documento ActiveX y luego haga click en el botón Aceptar,<br />
tal como se indica en la figura:<br />
Pág. 374
usuario:<br />
A continuación proceda a diseñar la siguiente interfaz de<br />
Para tal efecto, proceda a ubicar los siguientes controles<br />
en el formulario:<br />
3 etiquetas<br />
Pág. 375
1 cuadro combinado<br />
1 control DataGrid<br />
1 botón de comandos<br />
En seguida proceda a establecer las propiedades según se<br />
indica:<br />
Label1<br />
Label2<br />
Label3<br />
Combo1<br />
Nombre LblTitulo1<br />
AutoSize True<br />
Caption Instituto de Educación Superior<br />
Font Arial (Negrita 12)<br />
ForeColor &H00C00000&<br />
Nombre LblTitulo2<br />
AutoSize True<br />
Caption “Víctor Andrés Belaúnde”<br />
Font Times New Roman (Negrita 24)<br />
ForeColor &H000000FF&<br />
Nombre LblTablas<br />
AutoSize True<br />
Caption Vacantes:<br />
Font Arial (Negrita 10)<br />
Nombre CboTabla<br />
Font Arial (Negrita 10)<br />
Text<br />
DataGrid1<br />
Pág. 376
Command1<br />
Nombre BdgrdTabla<br />
Font Arial (Negrita 10)<br />
HeadFont Arial (Negrita 10)<br />
Nombre CmdAceptar<br />
Caption &Mostrar<br />
Una vez establecidas las propiedades, proceda a ingresar<br />
el siguiente código:<br />
Dim Cn As ADODB.Connection<br />
Dim RsAlumno As ADODB.Recordset<br />
Dim Rs<strong>Curso</strong> As ADODB.Recordset<br />
Dim RsLaboratorio As ADODB.Recordset<br />
Private Sub UserDocument_Initialize()<br />
Set Cn = New ADODB.Connection<br />
Cn.Open “Provider=Microsoft.Jet.OLEDB.4.0;” & _<br />
“Data Source=C:\FundVB\Data\<strong>Curso</strong>sLibres.MDB;” & _<br />
“Persist Security Info=False”<br />
CboTabla.AddItem “Alumno”<br />
CboTabla.AddItem “<strong>Curso</strong>”<br />
CboTabla.AddItem “Laboratorio”<br />
End Sub<br />
Private Sub MostrarAlumno()<br />
Set RsAlumno = New ADODB.Recordset<br />
RsAlumno.ActiveConnection = Cn<br />
RsAlumno.<strong>Curso</strong>rType = adOpenStatic<br />
RsAlumno.LockType = adLockReadOnly<br />
RsAlumno.<strong>Curso</strong>rLocation = adUseClient<br />
RsAlumno.Open “Select AluCodigo As Código, ” & _<br />
Pág. 377
“(AluPaterno + ' ' + AluMaterno) As Apellidos, ” & _<br />
“AluNombres As Nombres From Alumno”<br />
Set DbgrdTabla.DataSource = RsAlumno<br />
End Sub<br />
Private Sub Mostrar<strong>Curso</strong>()<br />
Set Rs<strong>Curso</strong> = New ADODB.Recordset<br />
Rs<strong>Curso</strong>.ActiveConnection = Cn<br />
Rs<strong>Curso</strong>.<strong>Curso</strong>rType = adOpenStatic<br />
Rs<strong>Curso</strong>.LockType = adLockReadOnly<br />
Rs<strong>Curso</strong>.<strong>Curso</strong>rLocation = adUseClient<br />
Rs<strong>Curso</strong>.Open “Select CurCodigo As Código, ” & _<br />
“CurNombre As Nombre, ” & _<br />
“CurVacantes As Vacantes, ” & _<br />
“CurProfe As Profesor From <strong>Curso</strong>”<br />
Set DbgrdTabla.DataSource = Rs<strong>Curso</strong><br />
End Sub<br />
Private Sub MostrarLaboratorio()<br />
Set RsLaboratorio = New ADODB.Recordset<br />
RsLaboratorio.ActiveConnection = Cn<br />
RsLaboratorio.<strong>Curso</strong>rType = adOpenStatic<br />
RsLaboratorio.LockType = adLockReadOnly<br />
RsLaboratorio.<strong>Curso</strong>rLocation = adUseClient<br />
RsLaboratorio.Open “Select LabCodigo As Código, ” & _<br />
“LabHora As Horario, ” & _<br />
“LabProfe As [Jefe de práctica] From Laboratorio”<br />
Set DbgrdTabla.DataSource = RsLaboratorio<br />
End Sub<br />
Private Sub CmdMostrar_Click()<br />
Select Case CboTabla.ListIndex<br />
Pág. 378
Case 0<br />
Call MostrarAlumno<br />
Case 1<br />
Call Mostrar<strong>Curso</strong><br />
Case 2<br />
Call MostrarLaboratorio<br />
End Select<br />
End Sub<br />
Finalmente guarde y pruebe su documento ActiveX. El<br />
resultado debe ser similar a la figura que se muestra a<br />
continuación:<br />
Aplicación Nº 2<br />
Al documento ActiveX desarrollado en el ejercicio<br />
anterior, añadirle un botón Acerca de, que presente la<br />
Pág. 379
información referente al autor (o autores) de la aplicación. El<br />
diseño del formulario debe ser tal como se muestra a<br />
continuación:<br />
En primer lugar proceda a añadir un formulario estándar al<br />
proyecto. Cambie el nombre del formulario por el de FrmAcercaDe<br />
y diseñe la interfaz pedida.<br />
En seguida añada un botón de comandos al documento ActiveX<br />
y cambie su nombre por CmdAcerca. Luego haga doble click sobre<br />
dicho botón e ingrese el siguiente código:<br />
Private Sub CmdAcerca_Click()<br />
Load FrmAcercaDe<br />
FrmAcercaDe.Show vbModal<br />
End Sub<br />
Finalmente guarde y pruebe su aplicación. Como puede<br />
apreciar desarrollar documentos ActiveX no es nada complicado.<br />
Aplicación Nº 3<br />
Al documento ActiveX desarrollado anteriormente añadirle<br />
un botón Ir a, que permita enlazarnos con la dirección que se<br />
Pág. 380
ingrese en el cuadro de texto adjunto. El diseño del documento<br />
se muestra a continuación:<br />
Para lograr lo que se pide, añada un botón de comandos y<br />
un cuadro de texto y cambie sus nombres por CmdURL y TxtURL<br />
respectivamente. Luego ingrese el siguiente código:<br />
Private Sub CmdURL_Click()<br />
UserDocument.Hyperlink.NavigateTo TxtURL<br />
End Sub<br />
Aplicación Nº 4<br />
Elaborar un documento ActiveX que permita mostrar el<br />
contenido de la tabla <strong>Curso</strong> de la base de datos<br />
Pág. 381
<strong>Curso</strong>sLibres.MDB. A continuación el usuario selecciona un curso<br />
y tiene la posibilidad de separar la matrícula o en su defecto<br />
matricularse en el curso de su elección. El diseño de la<br />
aplicación debe ser similar a la siguiente figura:<br />
Sugerencia: Añadir una nueva tabla a la base de datos para<br />
registrar a los alumnos matriculados o con separación de<br />
matrícula.<br />
GUÍA DE LABORATORIO Nº 11<br />
Microsoft <strong>Visual</strong> <strong>Basic</strong><br />
Pág. 382
Objetivos<br />
capaz de:<br />
Luego de completar este laboratorio, el estudiante será<br />
• Diseñar páginas Web dinámicas mediante aplicaciones DHTML.<br />
• Desarrollar aplicaciones DHTML para interactuar con los datos<br />
de un sistema distribuido de bases de datos relacionales.<br />
• Implementar<br />
código HTML.<br />
aplicaciones mediante código <strong>Visual</strong> <strong>Basic</strong> y<br />
• Agregar funcionalidad a sus aplicaciones para explorar Web.<br />
Consideraciones<br />
Para el desarrollo del presente laboratorio Ud. deberá<br />
crear una carpeta C:\FundVB\Lab11, para guardar sus trabajos<br />
correspondientes a este laboratorio.<br />
Aplicación Nº 1<br />
En este ejercicio, vamos a desarrollar una aplicación<br />
DHTML que lea un número entero y muestre su tabla de<br />
multiplicar.<br />
En su forma más sencilla, una aplicación DHTML (Dynamic<br />
HyperText Markup Language) puede consistir de una o más páginas<br />
HTML enlazadas con código <strong>Visual</strong> <strong>Basic</strong> y el modelo de objetos<br />
HTML dinámico.<br />
Para comenzar a desarrollar nuestra aplicación, ingresar a<br />
<strong>Visual</strong> <strong>Basic</strong> y en la ventana de diálogo Nuevo Proyecto<br />
seleccione Aplicación DHTML, y haga click en el botón Aceptar.<br />
Pág. 383
Al observar la ventana del Explorador de proyectos, esta<br />
presentará la siguiente apariencia:<br />
<strong>Visual</strong> <strong>Basic</strong> agrega automáticamente un Diseñador de<br />
páginas DHTML al proyecto. En seguida, haga doble click sobre<br />
DHTMLPage1<br />
indican:<br />
y proceda a establecer las propiedades que se<br />
DHTMLPage1<br />
Nombre DHTMLTablaMultiplicar<br />
Id DHTMLTablaMultiplicar<br />
Pág. 384
Para crear la interfaz de la aplicación DHTML, simplemente<br />
tenemos que ir agregando elementos HTML de la caja de<br />
herramientas. De esa manera, realice el diseño de la página<br />
mostrada en la siguiente figura:<br />
Una vez terminado el proceso de diseño de la página,<br />
seleccione el encabezado Tabla de Multiplicar y haga click en<br />
el cuarto botón de la barra de herramientas del Diseñador<br />
(Ajustar la selección en . . . ). En seguida, sin<br />
dejar de seleccionar el encabezado, active la Ventana de<br />
propiedades y establezca lo siguiente:<br />
Tabla de Multiplicar<br />
Id Titulo<br />
A continuación proceda a establecer las propiedades para<br />
los demás controles según se indica:<br />
Pág. 385
TextField1<br />
Nombre TxtN<br />
Id TxtN<br />
Value<br />
TextArea1<br />
Nombre TxtTabla<br />
Id TxtTabla<br />
Value<br />
En seguida haga doble click sobre el cuadro de texto TxtN<br />
e ingrese lo siguiente:<br />
Private Sub DHTMLPage_Load()<br />
Document.bgColor = “Yellow”<br />
Titulo.Style.Color = “Red”<br />
End Sub<br />
Private Sub Titulo_onmouseout()<br />
Titulo.Style.Color = “Red”<br />
End Sub<br />
Private Sub Titulo_onmouseover()<br />
Titulo.Style.Color = “Blue”<br />
End Sub<br />
Private Sub TxtN_onpropertychange()<br />
If IsNumeric(TxtN.Value) Then<br />
Dim N As Integer, I As Integer, S As String<br />
N = Val(TxtN.Value)<br />
For I = 0 To 12<br />
S = S & N & “ * ” & I & “ = ” & N * I & vbCrLf<br />
Next I<br />
Pág. 386
TxtTabla.Value = S<br />
Else<br />
TxtTabla.Value = “”<br />
End If<br />
End Sub<br />
Finalmente, guarde y pruebe su aplicación DHTML. El<br />
resultado debe ser similar a la figura siguiente:<br />
Aplicación Nº 2<br />
Desarrollar una aplicación DHTML que permita visualizar el<br />
contenido de la tabla <strong>Curso</strong> de la base de datos<br />
<strong>Curso</strong>sLibres.MDB. El diseño de la página debe ser similar al<br />
mostrado:<br />
Pág. 387
Para desarrollar nuestra aplicación, lo primero que debe<br />
de hacer es abrir una nuevo proyecto DHTML. Luego debe crear la<br />
conexión a la base de datos <strong>Curso</strong>sLibres.MDB. Para ello ingrese<br />
al menú Proyecto seleccione la opción Agregar Data Environment.<br />
En la ventana Data Environment cambie el nombre del objeto<br />
DataEnvironment por De<strong>Curso</strong>sLibres y el de la conexión por<br />
Cn<strong>Curso</strong>sLibres. Luego, añada un Comando y denomínelo Cm<strong>Curso</strong>.<br />
Haga click derecho sobre el comando y seleccione Propiedades. A<br />
continuación seleccione la opción Instrucción SQL e ingrese el<br />
siguiente código:<br />
Select CurCodigo, CurNombre, CurVacantes, CurProfe From <strong>Curso</strong><br />
Pág. 388
Luego haga click en el botón Aceptar. El aspecto de la<br />
ventana Data Environment debe ser similar al siguiente:<br />
En seguida proceda a diseñar la página. Para ello digite<br />
los encabezados y etiquetas necesarios. Luego añada los<br />
siguientes controles HTML al diseñador de páginas DHTML:<br />
4 cajas de texto<br />
4 botones de comandos<br />
Pág. 389
A continuación, proceda a establecer las propiedades según<br />
se indica:<br />
“Víctor Andrés Belaúnde”<br />
TextField1<br />
TextField2<br />
TextField3<br />
TextField4<br />
Button1<br />
Id Titulo<br />
Nombre TxtCurCodigo<br />
Id<br />
Value<br />
TxtCurCodigo<br />
Nombre TxtCurNombre<br />
Id<br />
Value<br />
TxtCurNombre<br />
Nombre TxtCurVacantes<br />
Id<br />
Value<br />
TxtCurVacantes<br />
Nombre TxtCurProfe<br />
Id<br />
Value<br />
TxtCurProfe<br />
Nombre CmdPrimero<br />
Id CmdPrimero<br />
Value Primero<br />
Pág. 390
Button2<br />
Button3<br />
Button4<br />
Nombre CmdAnterior<br />
Id CmdAnterior<br />
Value Anterior<br />
Nombre CmdSiguiente<br />
Id CmdSiguiente<br />
Value Siguiente<br />
Nombre CmdUltimo<br />
Id CmdUltimo<br />
Value Ultimo<br />
Mediante el Data Environment, ADO y el objeto<br />
BindingCollection, es posible enlazar elementos de una página<br />
DHTML con un origen de datos cuando se carga la página. Esto le<br />
permite modificar los datos y escribir código para actualizar<br />
un conjunto de registros subyacente o simplemente desplazarse a<br />
través de los mismos. Por ejemplo, puede usar un objeto<br />
BindingCollection con un objeto Recordset de ADO para enlazar<br />
los elementos TextField de la página de código HTML con campos<br />
de la tabla <strong>Curso</strong>.<br />
Para poder utilizar los objetos de la Microsoft Data<br />
Binding Collection es necesario cargar la librería<br />
correspondiente. Selecciones el menú Proyecto y elija la opción<br />
Referencias. En el cuadro de diálogo Referencias seleccione la<br />
opción Microsoft Data Binding Collection, tal como se indica en<br />
la figura:<br />
Pág. 391
A continuación declare una variable de tipo<br />
BindingCollection en la sección de Declaraciones de la página<br />
DHTML y proceda a ingresar el código que se muestra:<br />
Dim ColBind As BindingCollection<br />
Private Sub DHTMLPage_Load()<br />
Document.bgColor = “Yellow”<br />
Titulo.Style.Color = “Blue”<br />
Set ColBind = New BindingCollection<br />
Set ColBind.DataSource = De<strong>Curso</strong>sLibres<br />
ColBind.DataMember = “Cm<strong>Curso</strong>”<br />
ColBind.Add TxtCurCodigo, “Value”, “CurCodigo”<br />
ColBind.Add TxtCurNombre, “Value”, “CurNombre”<br />
ColBind.Add TxtCurVacantes, “Value”, “CurVacantes”<br />
ColBind.Add TxtCurProfe, “Value”, “CurProfe”<br />
End Sub<br />
Private Function CmdPrimero_onclick() As Boolean<br />
Pág. 392
De<strong>Curso</strong>sLibres.rsCm<strong>Curso</strong>.MoveFirst<br />
End Function<br />
Private Function CmdAnterior_onclick() As Boolean<br />
De<strong>Curso</strong>sLibres.rsCm<strong>Curso</strong>.MovePrevious<br />
If De<strong>Curso</strong>sLibres.rsCm<strong>Curso</strong>.BOF Then<br />
De<strong>Curso</strong>sLibres.rsCm<strong>Curso</strong>.MoveFirst<br />
End If<br />
End Function<br />
Private Function CmdSiguiente_onclick() As Boolean<br />
De<strong>Curso</strong>sLibres.rsCm<strong>Curso</strong>.MoveNext<br />
If De<strong>Curso</strong>sLibres.rsCm<strong>Curso</strong>.EOF Then<br />
De<strong>Curso</strong>sLibres.rsCm<strong>Curso</strong>.MoveLast<br />
End If<br />
End Function<br />
Private Function CmdUltimo_onclick() As Boolean<br />
De<strong>Curso</strong>sLibres.rsCm<strong>Curso</strong>.MoveLast<br />
End Function<br />
Finalmente, guarde y pruebe su aplicación.<br />
Aplicación Nº 3<br />
Diseñar una aplicación que permita cargar en una tabla<br />
HTML el contenido de la tabla <strong>Curso</strong>. La tabla HTML se debe<br />
crear dinámicamente de acuerdo al número de registros<br />
existentes.<br />
Para desarrollar nuestra aplicación, añada una nueva<br />
página DHTML al proyecto anterior. Para ello seleccione el menú<br />
Proyecto y elija la opción Agregar DHTML Page. En seguida<br />
proceda a ingresar el siguiente código:<br />
Dim ColBind As BindingCollection<br />
Pág. 393
Private Sub DHTMLPage_Load()<br />
Dim RsResults As ADODB.Recordset<br />
Set ColBind = New BindingCollection<br />
Set ColBind.DataSource = De<strong>Curso</strong>sLibres<br />
ColBind.DataMember = “Cm<strong>Curso</strong>”<br />
Set RsResults = De<strong>Curso</strong>sLibres.rsCm<strong>Curso</strong><br />
Do While Not RsResults.EOF<br />
Document.body.insertAdjacentHTML “BeforeEnd”, _<br />
“” & _<br />
“” & RsResults!CurCodigo & “” & _<br />
“” & RsResults!CurNombre & “” & _<br />
“” & RsResults!CurVacantes & “” & _<br />
“” & RsResults!CurProfe & “” & _<br />
“”<br />
RsResults.MoveNext<br />
Loop<br />
RsResults.MoveFirst<br />
RsResults.Close<br />
End Sub<br />
Finalmente, no olvide cambiar el componente de inicio<br />
antes de ejecutar su aplicación.<br />
Aplicación Nº 4<br />
Diseñar una aplicación DHTML que permita seleccionar de un<br />
control Select (similar a un cuadro combinado), el nombre de un<br />
profesor y a continuación se muestren en una tabla HTML<br />
dinámica los cursos que dicta dicho profesor.<br />
Un elemento Select, es similar a un cuadro combinado. Por<br />
ejemplo, para agregar un elemento Select denominado SelProfe a<br />
una la página HTML, simplemente arrastrar el elemento a la<br />
página. A continuación establecer las siguientes propiedades:<br />
Pág. 394
Seleccion1<br />
Nombre SelProfe<br />
Id SelProfe<br />
Value<br />
Para especificar los elementos de lista que se deben<br />
mostrar en el elemento Select agregar el siguiente código al<br />
procedimiento de evento Load de la página HTML, veamos:<br />
Private Sub DHTMLPage_Load()<br />
Dim SelElement As HTMLSelectElement<br />
Dim Cn As ADODB.Connection<br />
Dim RsProfe As ADODB.Recordset<br />
Set Cn = New ADODB.Connection<br />
Set RsProfe = New ADODB.Recordset<br />
Cn.Open “Provider=Microsoft.Jet.OLEDB.4.0;” & _<br />
“Data Source=C:\FundVB\Data\<strong>Curso</strong>sLibres.MDB;” & _<br />
“Persist Security Info=False”<br />
RsProfe.ActiveConnection = Cn<br />
RsProfe.<strong>Curso</strong>rType = adOpenStatic<br />
RsProfe.LockType = adLockOptimistic<br />
RsProfe.<strong>Curso</strong>rLocation = adUseClient<br />
RsProfe.Open “Select Distinct CurProfe From <strong>Curso</strong>”<br />
Do While Not RsProfe.EOF()<br />
Set SelElement = Document.createElement(“OPTION”)<br />
SelElement.Text = RsProfe!CurProfe<br />
SelProfe.Options.Add SelElement<br />
RsProfe.MoveNext<br />
Loop<br />
End Sub<br />
Al ejecutar su aplicación debe ser similar a la figura<br />
mostrada:<br />
Pág. 395
Finalmente a manera de ejercicio para el estudiante,<br />
proceda a escribir el código necesario para mostrar la<br />
información relacionada con cada profesor.<br />
Pág. 396
GUÍA DE LABORATORIO Nº 12<br />
Objetivos<br />
Microsoft <strong>Visual</strong> <strong>Basic</strong><br />
Luego de completar este laboratorio, el estudiante será<br />
capaz de:<br />
• Utilizar<br />
<strong>Basic</strong>.<br />
funciones API de Windows desde Microsoft <strong>Visual</strong><br />
• Convertir declaraciones de C a <strong>Visual</strong> <strong>Basic</strong>.<br />
• Añadir un sistema de ayuda a una aplicación.<br />
• Usar el asistente para empaquetado y distribución.<br />
• Generar programas de instalación mediante disquetes, carpetas<br />
en una unidad local de red o en una publicación Web.<br />
Consideraciones<br />
Para el desarrollo del presente laboratorio Ud. deberá<br />
crear una carpeta C:\FundVB\Lab12, para guardar sus trabajos<br />
correspondientes a este laboratorio.<br />
Aplicación Nº 1<br />
Un programador de aplicaciones <strong>Visual</strong> <strong>Basic</strong>, además de<br />
conocer su entorno de trabajo, debe conocer su entorno de<br />
programación, conocido generalmente como Interfaz de<br />
Programación de Aplicaciones para Windows (Windows Application<br />
Programming Interface, Windows API).<br />
La API de Windows viene a ser un conjunto de funciones<br />
desarrolladas en lenguaje C. Sin embargo, muchos programadores<br />
de <strong>Visual</strong> <strong>Basic</strong> recurren a estas funciones para conseguir hacer<br />
lo que es imposible (o muy complicado) desde <strong>Visual</strong> <strong>Basic</strong>.<br />
Pág. 397
Las funciones API de Windows no son nada complicadas como<br />
pueden pensar algunos programadores de <strong>Visual</strong> <strong>Basic</strong>.<br />
Como primer ejercicio vamos a escribir una aplicación que<br />
permita modificar el título de un formulario. En la práctica,<br />
siempre se modifican los títulos del formulario con la<br />
propiedad Caption de <strong>Visual</strong> <strong>Basic</strong>, pero este ejercicio ofrece<br />
una manera sencilla de declarar y llamar a una API de Windows.<br />
El primer paso consiste en añadir un módulo de código al<br />
proyecto. En seguida proceda a declarar la función en la<br />
sección de declaraciones del módulo:<br />
Public Declare Function SetWindowText Lib “user32” _<br />
Alias “SetWindowTextA” (ByVal hWnd As Long, _<br />
ByVal lpString As String) As Long<br />
Luego, en el formulario ingrese el código que se muestra a<br />
continuación:<br />
Private Sub Form_Load()<br />
SetWindowText Form<strong>1.</strong>hWnd, “Bienvenidos a la API de Windows”<br />
End Sub<br />
Al ejecutar su aplicación, su resultado debe ser similar a<br />
la siguiente figura:<br />
Pág. 398
Aplicación Nº 2<br />
Desarrollar una aplicación que permita reproducir un<br />
archivo Wav o Midi. Utilizar la función API de Windows<br />
mciExecute para lograr el objetivo deseado.<br />
Como se sabe, el lenguaje C diferencia las letras<br />
mayúsculas de las minúsculas. Por ello, si Ud. comete un error,<br />
por ejemplo utiliza una letra mayúscula en lugar de una<br />
minúscula (o viceversa), la función declarada no será<br />
reconocida y obtendrá un mensaje de error.<br />
Para evitar este tipo de problemas, vamos a utilizar el<br />
Visor API de Windows. En seguida, del menú Complementos elija<br />
la opción Administrador de Complementos. Del cuadro de diálogo<br />
que se presenta cargar la opción Visor de API de VB 6. Al dar<br />
un click en el botón Aceptar, se añadirá en el menú<br />
Complementos la opción Visor de API.<br />
En seguida ingrese al Visor de API. Se debe presentar una<br />
pantalla similar a la siguiente:<br />
Pág. 399
En la pantalla anterior, seleccione el menú Archivo y<br />
elija la opción Cargar archivo de texto. En el cuadro de<br />
diálogo que se presenta elegir el archivo Win32api.Txt y dar un<br />
click en el botón Abrir.<br />
Pág. 400
De la siguiente pantalla Ud. podrá seleccionar la función<br />
que desea, luego active la opción público y dar un click en el<br />
botón Agregar para visualizar el código de declaración de dicha<br />
función.<br />
En seguida haga click en el botón Copiar y pegue dicho<br />
código a su aplicación. Recordar que la declaración de la<br />
función API se debe realizar en un módulo, por lo tanto debe<br />
agregar un nuevo módulo y pegar el siguiente código:<br />
Public Declare Function mciExecute Lib “winmm.dll” _<br />
(ByVal lpstrCommand As String) As Long<br />
Luego proceda a diseñar la interfaz de la aplicación. Para<br />
ello ubique los siguientes controles:<br />
1 control Image<br />
Pág. 401
2 botones de comando<br />
En seguida establezca las propiedades según se indica a<br />
continuación:<br />
Form1<br />
Image1<br />
Command1<br />
Command2<br />
Nombre FrmMultimedia<br />
Caption Hacer sonar un fichero Wav o Midi<br />
BorderStyle 3-Fixed Dialog<br />
Picture C:\Archivos de programa\Microsoft <strong>Visual</strong><br />
Studio\Common\Graphics\Icons\Misc\Mike.ico<br />
Stretch True<br />
Nombre CmdEjecutar<br />
Caption &Ejecutar<br />
Nombre CmdSalir<br />
Caption &Salir<br />
Una vez establecidas las propiedades, proceda a ingresar<br />
el siguiente código:<br />
Private Sub CmdEjecutar_Click()<br />
iResult = mciExecute(“Play c:\vbN2\bmp\34.wav”)<br />
End Sub<br />
Private Sub CmdSalir_Click()<br />
Unload Me<br />
End Sub<br />
Aplicación Nº 3<br />
Pág. 402
Uno de los temas en los que Windows ha creado un estándar<br />
es el sistema de ayuda de las aplicaciones. Para ello incluye<br />
una aplicación denominada WinHelp como motor de ayuda de<br />
Windows.<br />
Los pasos necesarios para crear un sistema de ayuda son<br />
los siguientes:<br />
• Crear un archivo de texto RTF.<br />
• Compilar el archivo RTF mediante el compilador de ayudas Help<br />
Workshop, para obtener el archivo HLP.<br />
• Utilizar el motor de ayuda WinHelp.<br />
En vista de lo anterior, lo primero que necesitamos para<br />
crear nuestro sistema de ayuda, es un archivo con formato RTF<br />
donde se incluirá el texto de la ayuda. Para ello ingrese a<br />
Microsoft Word 2000 y digite lo siguiente:<br />
Profesor Carlos Castillo Peralta<br />
Contenido<br />
• Microsoft <strong>Visual</strong> <strong>Basic</strong> Nivel I<br />
• Microsoft <strong>Visual</strong> <strong>Basic</strong> Nivel II<br />
• Microsoft <strong>Visual</strong> <strong>Basic</strong> Nivel III<br />
Microsoft <strong>Visual</strong> <strong>Basic</strong> 6.0<br />
<strong>Curso</strong> de programación<br />
En seguida ubique el cursor en la última línea de texto y<br />
presione la combinación de teclas Ctrl + Enter, para comenzar<br />
en una nueva página. A continuación digite lo siguiente:<br />
Pág. 403
Profesor Carlos Castillo Peralta<br />
Nivel I<br />
• Conceptos básicos<br />
• Elementos del lenguaje<br />
• Entrada y salida de datos<br />
• Sentencias de control<br />
• Arreglos<br />
• Estructuras<br />
• Archivos de datos<br />
Volver<br />
Microsoft <strong>Visual</strong> <strong>Basic</strong> 6.0<br />
<strong>Curso</strong> de programación<br />
En seguida ubique el cursor en la última línea de texto<br />
que acaba de ingresar y pulse Ctrl + Enter para comenzar a<br />
digitar el siguiente texto en una página diferente:<br />
Profesor Carlos Castillo Peralta<br />
Nivel II<br />
• Creación de bases de datos<br />
• Aplicaciones Cliente Servidor<br />
• Sentencias SQL<br />
• Entorno de datos<br />
• Objetos de Datos ActiveX (ADO)<br />
• Reportes<br />
Volver<br />
Microsoft <strong>Visual</strong> <strong>Basic</strong> 6.0<br />
<strong>Curso</strong> de programación<br />
Pág. 404
De manera análoga a los demás casos, ubique el cursor en<br />
la última línea de texto y presione Ctrl + Enter. En seguida<br />
ingrese el siguiente texto:<br />
Profesor Carlos Castillo Peralta<br />
Nivel III<br />
• Creación componentes<br />
• Lenguaje HTML<br />
• <strong>Visual</strong> <strong>Basic</strong> Script<br />
• Aplicaciones DHTML<br />
• API de Windows<br />
• Creación de archivos de ayuda<br />
• Empaquetado y distribución<br />
Volver<br />
Microsoft <strong>Visual</strong> <strong>Basic</strong> 6.0<br />
<strong>Curso</strong> de programación<br />
Finalmente, debe obtener un archivo de cuatro páginas.<br />
Guarde su archivo como MiAyuda.RTF.<br />
El archivo de ayuda que vamos a construir va a utilizar<br />
más de una página, y en ese caso se requiere especificar un<br />
identificador para cada página.<br />
Ahora procederemos a crear los identificadores de páginas.<br />
Para ello ubicar el cursor en la primera página antes del<br />
encabezado Microsoft <strong>Visual</strong> <strong>Basic</strong> 6.0 y seleccione del menú<br />
Insertar la opción Nota al pie. Luego, ingresar como marca<br />
personal el símbolo # tal como se muestra en la siguiente<br />
figura:<br />
Pág. 405
Al dar click en el botón Aceptar, el cursor se ubicará<br />
automáticamente en el pie de página donde debe digitar VBMain<br />
delante del símbolo #.<br />
En la misma página, ubicar el cursor delante de la palabra<br />
Microsoft <strong>Visual</strong> <strong>Basic</strong> Nivel I y darle el atributo de subrayado<br />
doble. Luego, escribir VB1 inmediatamente después del texto<br />
subrayado y a este identificador darle el atributo de oculto.<br />
Realizar acciones similares para las dos siguientes<br />
líneas, después del texto Microsoft <strong>Visual</strong> <strong>Basic</strong> Nivel II<br />
escribir VB2 y para Microsoft <strong>Visual</strong> <strong>Basic</strong> Nivel III escribir<br />
VB3. No olvidar que estos identificadores deben tener atributo<br />
de oculto.<br />
En la segunda página ubicar el cursor antes del encabezado<br />
Microsoft <strong>Visual</strong> <strong>Basic</strong> 6.0 y seleccione del menú Insertar la<br />
opción Nota al pie. Luego, ingresar como marca personal el<br />
símbolo # y luego digitar en el pie de página VB<strong>1.</strong> Luego en la<br />
misma página, posicionar el cursor delante de la palabra Volver<br />
y darle el atributo de subrayado doble. Escribir VBMain<br />
inmediatamente después del texto subrayado y a este<br />
identificador darle el atributo de oculto.<br />
Pág. 406
Continuar de manera similar con las siguientes páginas. Al<br />
concluir vuelva a guardar su archivo. La primera página debe<br />
presentar una apariencia similar a la siguiente figura:<br />
Continuando con nuestro esquema, ahora debemos generar el<br />
archivo HLP a partir del archivo RTF que acabamos de crear.<br />
Para ello debemos ejecutar la aplicación Microsoft Help<br />
Workshop. Desde el menú Inicio, elija la carpeta Programas,<br />
luego elija la carpeta Microsoft <strong>Visual</strong> Studio 6.0, en seguida<br />
seleccione la carpeta Herramientas de Microsoft <strong>Visual</strong> Studio<br />
6.0, y luego haga clic sobre la aplicación Help Workshop. A<br />
continuación se presentará una ventana similar a la mostrada en<br />
la siguiente figura:<br />
Pág. 407
Seleccione el menú File y elija la opción New. A<br />
continuación<br />
siguiente:<br />
se mostrará un cuadro de diálogo similar al<br />
Seleccione la opción Help Project y dar un click en el<br />
botón OK. En seguida se presentará una ventana en la cual debe<br />
indicar el nombre y la ruta del archivo HLP que desea generar.<br />
Para nuestro caso digite MiAyuda y haga click sobre el botón<br />
Guardar, tal como se indica en la figura que se muestra a<br />
continuación:<br />
Pág. 408
Al hacer click en el botón Guardar, en seguida se<br />
presentará la siguiente pantalla:<br />
Ahora que Ud. ha creado un proyecto de ayuda, necesita<br />
agregar la información sobre su archivo o archivos de ayuda.<br />
Pág. 409
¿Ha creado su archivo de ayuda MiAyuda.RTF? Si Ud. ya lo<br />
ha creado haga click en el botón Files y en seguida aparecerá<br />
la siguiente pantalla:<br />
Luego dar un click en el botón Add. En seguida se<br />
presentará la siguiente ventana en la cual debe especificar el<br />
nombre y la ruta de su archivo de ayuda RTF. Para nuestro<br />
seleccione MiAyuda y haga click en el botón Abrir.<br />
Pág. 410
En seguida se mostrará la siguiente pantalla. Ud. haga<br />
click sobre el botón OK.<br />
A continuación se presentará una pantalla similar a la<br />
figura mostrada:<br />
Pág. 411
A continuación vamos a definir una ventana. Para ello haga<br />
click sobre el botón Windows. En seguida aparecerá un cuadro de<br />
diálogo en el cual debe ingresar el nombre de la ventana. Para<br />
nuestro caso digite Main. Luego haga click en el botón OK.<br />
En seguida se presentará el siguiente cuadro de diálogo.<br />
En la ficha General ingrese el texto que se indica para la<br />
barra de título de la ventana.<br />
Pág. 412
En la ficha Position defina el tamaño inicial de la<br />
ventana de ayuda, para ello haga click en el botón Auto-Sizer.<br />
En seguida se presentará una ventana de prueba similar a<br />
la que se muestra en la figura siguiente. Cambie las<br />
dimensiones de esta ventana según su parecer y haga click en el<br />
botón OK.<br />
Pág. 413
A continuación seleccione la ficha Buttons y active los<br />
botones que Ud. quiere agregar para su ventana.<br />
Luego seleccione la ficha Color. En seguida se presentará<br />
una pantalla similar a la siguiente:<br />
Pág. 414
Para cambiar el color de la zona de no desplazamiento o la<br />
zona de desplazamiento pulse el botón Change al lado de la<br />
ventana de muestra. Escoja el color que Ud. desee y entonces<br />
haga click en el botón Aceptar.<br />
El archivo de proyecto debe presentar una apariencia<br />
similar a la figura mostrada:<br />
Bueno, Ud. acaba de crear su primer proyecto de ayuda<br />
básico. Más adelante si así lo necesitará puede cambiar<br />
cualquiera de estas opciones. Para ello simplemente debe abrir<br />
su archivo de proyecto de ayuda y realizar los cambios que<br />
considere pertinente.<br />
Finalmente guarde y pruebe su proyecto. Para lo cual debe<br />
dar click en el botón Save and Compile. En seguida se<br />
presentará una pantalla similar a la siguiente:<br />
Pág. 415
En seguida ingrese al menú File y elija la opción Run<br />
WinHelp.<br />
mostrada:<br />
Luego, se presentará una pantalla similar a la<br />
Pág. 416
En seguida dar click en el botón View Help. A continuación<br />
se presentará una pantalla similar a la figura siguiente.<br />
Pruebe ingresando a las otras páginas, para ello simplemente<br />
haga click en cualquiera de los tres ítems que se muestran en<br />
la sección Contenido.<br />
¿Sabe Ud. como añadir una imagen de mapa de bits a nuestro<br />
archivo de ayuda? La respuesta es bastante sencilla. Para ello<br />
realice los siguientes pasos:<br />
Ingrese a Microsoft Word 2000 y proceda a abrir el archivo<br />
MiAyuda.RTF. Ubiquese en la primera página y añada el siguiente<br />
texto {BMC CCP.BMP} antes del nombre del profesor. Luego guarde<br />
su archivo.<br />
A continuación cargue el Help Workshop. Luego dar click<br />
sobre el botón Bitmaps. Se presentará una pantalla similar a la<br />
figura siguiente:<br />
Pág. 417
En seguida haga click en el botón Add. A continuación se<br />
presentará una ventana similar a la siguiente figura:<br />
En el cuadro de diálogo anterior seleccione la ruta que se<br />
indica. Luego haga click en el botón OK.<br />
Finalmente, grabe y compile su proyecto de ayuda. Para<br />
ello dar click en el botón View Help.<br />
Pág. 418
A continuación se presentará una ventana similar a la<br />
siguiente figura:<br />
Por último, veremos como utilizar nuestros archivos de<br />
ayuda desde una aplicación <strong>Visual</strong> <strong>Basic</strong>. Para tal fin abra un<br />
nuevo proyecto y añada un botón de comandos al formulario.<br />
Cambie el nombre del botón por CmdAyuda y proceda a ingresar el<br />
siguiente código:<br />
Private Sub CmdAyuda_Click()<br />
Dim Ayuda<br />
Ayuda = Shell(“C:\Windows\WinHelp.exe ” & _<br />
“C:\FundVB\Lab12\MiAyuda.HLP”, 1)<br />
End Sub<br />
Aplicación Nº 4<br />
Pág. 419
Después de crear una aplicación <strong>Visual</strong> <strong>Basic</strong>, por lo<br />
general debemos proporcionársela al usuario final, ya sea en<br />
disquetes, CD, a través de una red local, o bien a través de<br />
una Intranet o Internet. Esto requiere primero empaquetar la<br />
aplicación y después distribuirla.<br />
Como ejemplo, vamos a generar el programa de instalación<br />
para la aplicación creada en el ejercicio anterior. Para ello<br />
es necesario que tenga abierta dicha aplicación.<br />
Primero debemos iniciar el Asistente de empaquetado y<br />
distribución. Para tal fin, del Menú Complementos seleccione la<br />
opción Administrador de complementos y añada la utilidad<br />
Package and Deployment Wizard. Al momento de iniciar el<br />
Asistente se visualizará una ventana similar a la siguiente<br />
figura:<br />
En seguida haga click en el botón Empaquetar. Esto hará<br />
que el Asistente le presente varios cuadros de diálogo que le<br />
Pág. 420
pedirán información referente al proyecto que vamos a<br />
empaquetar y le permitirá elegir qué opciones quiere incorporar<br />
al programa de instalación, el tipo de empaquetado, la carpeta<br />
donde se almacenará el paquete de instalación, qué archivos<br />
desea incluir adicionalmente en el paquete, qué grupos y<br />
elementos de grupo del menú Inicio se deberán crear en el<br />
equipo del usuario final durante la instalación de la<br />
aplicación, etc. A medida que avanza, si necesita más<br />
información consulte al Jefe de Práctica.<br />
Una vez concluido el proceso de empaquetado cierre<br />
Microsoft <strong>Visual</strong> <strong>Basic</strong>. Luego haga click en el menú Inicio y<br />
seleccione la opción Ejecutar. Seguidamente ingrese la ruta de<br />
nuestro programa de instalación y dar click en Aceptar, tal<br />
como se indica en la figura:<br />
En esos instantes se dará inicio a la instalación de<br />
nuestra aplicación. Concluido este proceso, seleccione el menú<br />
Inicio, carpeta Programas y ubique la carpeta que contiene la<br />
aplicación. Finalmente proceda a ejecutar su aplicación.<br />
Fin de las prácticas de laboratorio.<br />
Suerte.<br />
Pág. 421