Está en la página 1de 201

Aprenda Informtica ...

San Sebastin, agosto 1999


Aprenda Informtica ...
San Sebastin, agosto 1999
Escuela Superior de Ingenieros Industriales
Industri Injineruen Goimailako Eskola
UNIVERSIDAD DE NAVARRA -NAFARROAKO UNIBERTSITATEA
Aprenda Visual Basic 6.0
como si estuviera en primero
Javier Garca de Jaln Jos Ignacio Rodrguez Alfonso Brazlez
Aprenda Visual Basic 6.0
como si estuviera en primero
Javier Garca de Jaln
Jos Ignacio Rodrguez
Alfonso Brazlez
Perteneciente a la coleccin : Aprenda , como si estuviera en primero
ndice pgina i
NDICE
1. Introduccin 1
1.1 Programas secuenciales, interactivos y orientados a eventos 1
1.2 Programas para el entorno Windows 2
1.2.1 Modo de Diseo y Modo de Ejecucin 2
1.2.2 Formularios y Controles 2
1.2.3 Objetos y Propiedades 2
1.2.4 Nombres de objetos 3
1.2.5 Eventos 4
1.2.6 Mtodos 4
1.2.7 Proyectos y ficheros 4
1.3 El entorno de programacin Visual Basic 6.0 5
1.4 El Help de Visual Basic 6.0 6
1.5 Ejemplos 6
1.5.1 Ejemplo 1.1: Sencillo programa de colores y posiciones 6
1.5.2 Ejemplo 1.2: Minicalculadora elemental 8
1.5.3 Ejemplo 1.3: Transformacin de unidades de temperatura 9
1.5.4 Ejemplo 1.4: Colores RGB 11
2. Entorno de programacin Visual Basic 6.0 14
2.1 Introduccin: Qu es Visual Basic 6.0? 14
2.2 El entorno de Visual Basic 6.0 14
2.2.1 La barra de mens y las barras de herramientas 14
2.2.2 Las herramientas (toolbox) 16
2.3 Formularios (forms) y mdulos 16
2.4 La ventana de proyecto (project) 17
2.5 La ventana de propiedades (Properties) 17
2.6 Creacin de programas ejecutables 18
2.7 Cmo utilizar el Help 19
2.8 Utilizacin del Code Editor 19
2.9 Utilizacin del Debugger 21
2.9.1 Ejecucin controlada de un programa 21
2.9.2 Ventanas Immediate, Locals y Watches 22
2.9.3 Otras posibilidades del Debugger 23
3. Lenguaje BASIC 24
3.1 Introduccin 24
3.2 Comentarios y otras utilidades en la programacin con visual basic 24
3.3 Proyectos y mdulos 25
3.3.1 mbito de las variables y los procedimientos 25
3.3.1.1 Variables y funciones de mbito local 25
3.3.1.2 Variables y funciones de mbito global 26
3.4 Variables 27
3.4.1 Identificadores 27
3.4.2 Variables y constantes 28
3.4.3 Nombres de variables 28
3.4.4 Tipos de datos 29
3.4.5 Eleccin del tipo de una variable 30
3.4.6 Declaracin explcita de variables 30
3.5 Operadores 31
3.6 Sentencias de control 31
3.6.1 Sentencia IF ... THEN ... ELSE ... 32
3.6.2 Sentencia SELECT CASE 33
3.6.3 Sentencia FOR ... NEXT 34
3.6.4 Sentencia DO ... LOOP 34
3.6.5 Sentencia WHILE WEND 35
3.6.6 Sentencia FOR EACH ... NEXT 35
3.7 Algoritmos 36
3.7.1 Introduccin 36
3.7.2 Representacin de algoritmos 36
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina ii
3.8 Funciones y Procedimientos 37
3.8.1 Conceptos generales sobre funciones 37
3.8.2 Funciones y procedimientos Sub en Visual Basic 6.0 37
3.8.3 Funciones (function) 38
3.8.4 Procedimientos Sub 39
3.8.5 Argumentos por referencia y por valor 40
3.8.6 Procedimientos recursivos 40
3.8.7 Procedimientos con argumentos opcionales 41
3.8.8 Nmero indeterminado de argumentos 41
3.8.9 Utilizacin de argumentos con nombre 41
3.9 Arrays 41
3.9.1 Arrays estticos 42
3.9.2 Arrays dinmicos 42
3.10 Estructuras: Sentencia Type 43
3.11 Funciones para manejo de cadenas de caracteres 45
3.12 Funciones matemticas 46
4. Eventos, Propiedades y Controles 48
4.1 Eventos 48
4.1.1 Eventos generales 48
4.1.1.1 Carga y descarga de formularios 48
4.1.1.2 Paint 50
4.1.1.3 El foco (focus) 50
4.1.1.4 KeyPress, KeyUp y KeyDown 51
4.1.2 Eventos relacionados con el ratn 51
4.1.2.1 Click y DblClick 51
4.1.2.2 MouseDown, MouseUp y MouseMove 52
4.1.2.3 DragOver y DragDrop 52
4.2 Algunas propiedades comunes a varios controles 53
4.3 Controles ms usuales 54
4.3.1 Botn de comando (Command Button) 54
4.3.2 Botones de opcin (Option Button) 55
4.3.3 Botones de seleccin (Check Box) 55
4.3.4 Barras de desplazamiento (Scroll Bars) 55
4.3.5 Etiquetas (Labels) 56
4.3.6 Cajas de texto (Text Box) 56
4.3.7 Listas (List Box) 57
4.3.8 Cajas combinadas (ComboBox) 58
4.3.9 Controles relacionados con ficheros 58
4.3.10 Control Timer 58
4.4 Cajas de dilogo estndar (Controles Common Dialog) 58
4.4.1 Open/Save Dialog Control 60
4.4.2 Print Dialog Control 60
4.4.3 Font Dialog Control 61
4.4.4 Color Dialog Control 61
4.5 Formularios mltiples 61
4.5.1 Apertura de controles en forma modal 62
4.5.2 Formularios MDI (Multiple Document Interface) 62
4.6 Arrays de controles 63
5. Mens 64
5.1 Introduccin a las posibilidades de los mens 64
5.2 El editor de mens (Menu Editor) 65
5.3 Aadir cdigo a los mens 66
5.4 Arrays de mens 66
5.5 Ejemplo: Men para determinar las caractersticas de un texto 67
5.6 Mens contextuales (Popup Menu) 68
6. Grficos en Visual Basic 6.0 69
6.1 Tratamiento del color 69
6.1.1 Representacin hexadecimal de los colores 69
6.1.2 Acceso a los colores del sistema 69
ndice
pgina iii
6.1.3 Funcin RGB
70
6.1.4 Paleta de colores
70
6.2
Formatos grficos 71
6.3
Controles grficos 71
Control Line 71
Control Shape 72
6.3.3 Ejemplo 6.1: Uso de los controles Line y Shape 72
Control Image 72
6.3.5 Control PictureBox
74
6.4
Mtodos grficos 74
6.4.1 Mtodo Print
75
6.4.2 Dibujo de puntos: mtodo PSet
75
6.4.3 Dibujo de lneas y rectngulos: mtodo Line
75
6.4.4 Dibujo de circunferencias, arcos y elipses: mtodo Circle
76
6.4.5 Otros mtodos grficos
77
6.5
Sistemas de coordenadas 77
6.5.1 Mtodo Scale
78
6.6
Eventos y propiedades relacionadas con grficos 79
6.6.1 El evento Paint
79
6.6.2 La propiedad DrawMode
79
6.6.3 Planos de dibujo (Layers)
80
6.6.4 La propiedad AutoRedraw
80
6.6.5 La propiedad ClipControl
81
6.7
Ejemplos 81
6.7.1 Ejemplo 6.1: Grficos y barras de desplazamiento
81
6.7.2 Ejemplo 6.2: Representacin grfica de la solucin de la ecuacin de segundo grado
83
6.8
Barras de Herramientas (Toolbars) 86
7.
Archivos y Entrada/Salida de Datos 87
7.1
Cajas de dilogo InputBox y MsgBox 87
7.2
Mtodo Print 88
7.2.1 Caractersticas generales
88
7.2.2 Funcin Format
89
7.3
Utilizacin de impresoras 90
7.3.1 Mtodo PrintForm
90
7.3.2 Objeto Printer
90
7.4
Controles FileList, DirList y DriveList 91
7.5
Tipos de ficheros 92
7.6
Lectura y escritura en ficheros secuenciales 93
7.6.1 Apertura y cierre de ficheros
93
7.6.2 Lectura y escritura de datos
93
7.6.2.1 Sentencia Input
93
7.6.2.2 Funcin Line Input y funcin Input
94
7.6.2.3 Funcin Print #
94
7.6.2.4 Funcin Write #
95
7.7
Ficheros de acceso aleatorio 95
7.7.1 Abrir y cerrar archivos de acceso aleatorio
95
7.7.2 Leer y escribir en una archivo de acceso aleatorio. Funciones Get y Put
95
7.8
Ficheros de acceso binario 96
8.
ANEXO A: Consideraciones adicionales sobre datos y variables 97
8.1
Caracteres y cdigo ASCII 97
8.2
Nmeros enteros 98
8.3
Nmeros reales 98
8.3.1 Variables tipo Single
98
8.3.2 Variables tipo Double
99
8.4
Sistema binario, octal, decimal y hexadecimal 99
Captulo 1: Introduccin pgina 1
1. INTRODUCCIN
Visual Basic 6.0 es uno de los lenguajes de programacin que ms entusiasmo despiert
an entre los
programadores de PCs, tanto expertos como novatos. En el caso de los programador
es expertos por
la facilidad con la que desarrollan aplicaciones complejas en poqusimo tiempo (co
mparado con lo
que cuesta programar en Visual C++, por ejemplo). En el caso de los programadore
s novatos por el
hecho de ver de lo que son capaces a los pocos minutos de empezar su aprendizaje
. El precio que
hay que pagar por utilizar Visual Basic 6.0 es una menor velocidad o eficiencia
en las aplicaciones.
Visual Basic 6.0 es un lenguaje de programacin visual, tambin llamado lenguaje de
4
generacin. Esto quiere decir que un gran nmero de tareas se realizan sin escribir
cdigo,
simplemente con operaciones grficas realizadas con el ratn sobre la pantalla.
Visual Basic 6.0 es tambin un programa basado en objetos, aunque no orientado a o
bjetos
como C++ o Java. La diferencia est en que Visual Basic 6.0 utiliza objetos con pr
opiedades y
mtodos, pero carece de los mecanismos de herencia y polimorfismo propios de los v
erdaderos
lenguajes orientados a objetos como Java y C++.
En este primer captulo se presentarn las caractersticas generales de Visual Basic 6
.0, junto
con algunos ejemplos sencillos que den idea de la potencia del lenguaje y del mo
do en que se
utiliza.
1.1 PROGRAMAS SECUENCIALES, INTERACTIVOS Y ORIENTADOS A EVENTOS
Existen distintos tipos de programas. En los primeros tiempos de los ordenadores
los programas
eran de tipo secuencial (tambin llamados tipo batch) Un programa secuencial es un
programa que
se arranca, lee los datos que necesita, realiza los clculos e imprime o guarda en
el disco los
resultados. De ordinario, mientras un programa secuencial est ejecutndose no neces
ita ninguna
intervencin del usuario. A este tipo de programas se les llama tambin programas ba
sados u
orientados a procedimientos o a algoritmos (procedural languages). Este tipo de
programas siguen
utilizndose ampliamente en la actualidad, pero la difusin de los PCs ha puesto de
actualidad otros
tipos de programacin.
Los programas interactivos exigen la intervencin del usuario en tiempo de ejecucin
, bien
para suministrar datos, bien para indicar al programa lo que debe hacer por medi
o de mens. Los
programas interactivos limitan y orientan la accin del usuario. Un ejemplo de pro
grama interactivo
podra ser Matlab.
Por su parte los programas orientados a eventos son los programas tpicos de Windo
ws, tales
como Netscape, Word, Excel y PowerPoint. Cuando uno de estos programas ha arranc
ado, lo nico
que hace es quedarse a la espera de las acciones del usuario, que en este caso s
on llamadas eventos.
El usuario dice si quiere abrir y modificar un fichero existente, o bien comenza
r a crear un fichero
desde el principio. Estos programas pasan la mayor parte de su tiempo esperando
las acciones del
usuario (eventos) y respondiendo a ellas. Las acciones que el usuario puede real
izar en un momento
determinado son variadsimas, y exigen un tipo especial de programacin: la programa
cin
orientada a eventos. Este tipo de programacin es sensiblemente ms complicada que l
a secuencial
y la interactiva, pero Visual Basic 6.0 la hace especialmente sencilla y agradab
le.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 2
1.2 PROGRAMAS PARA EL ENTORNO WINDOWS
Visual Basic 6.0 est orientado a la realizacin de programas para Windows, pudiendo
incorporar
todos los elementos de este entorno informtico: ventanas, botones, cajas de dilogo
y de texto,
botones de opcin y de seleccin, barras de desplazamiento, grficos, mens, etc.
Prcticamente todos los elementos de interaccin con el usuario de los que dispone W
indows
95/98/NT pueden ser programados en Visual Basic 6.0 de un modo muy sencillo. En
ocasiones
bastan unas pocas operaciones con el ratn y la introduccin a travs del teclado de a
lgunas
sentencias para disponer de aplicaciones con todas las caractersticas de Windows
95/98/NT. En los
siguientes apartados se introducirn algunos conceptos de este tipo de programacin.

1.2.1 Modo de Diseo y Modo de Ejecucin
La aplicacin Visual Basic de Microsoft puede trabajar de dos modos distintos: en
modo de diseo
y en modo de ejecucin. En modo de diseo el usuario construye interactivamente la a
plicacin,
colocando controles en el formulario, definiendo sus propiedades, y desarrolland
o funciones para
gestionar los eventos.
La aplicacin se prueba en modo de ejecucin. En ese caso el usuario acta sobre el pr
ograma
(introduce eventos) y prueba cmo responde el programa. Hay algunas propiedades de
los controles
que deben establecerse en modo de diseo, pero muchas otras pueden cambiarse en ti
empo de
ejecucin desde el programa escrito en Visual Basic 6.0, en la forma en que ms adel
ante se ver.
Tambin hay propiedades que slo pueden establecerse en modo de ejecucin y que no son
visibles
en modo de diseo.
Todos estos conceptos controles, propiedades, eventos, etc.- se explican en los a
partados
siguientes.
1.2.2 Formularios y Controles
Cada uno de los elementos grficos que pueden formar parte de una aplicacin tpica de
Windows
95/98/NT es un tipo de control: los botones, las cajas de dilogo y de texto, las
cajas de seleccin
desplegables, los botones de opcin y de seleccin, las barras de desplazamiento hor
izontales y
verticales, los grficos, los mens, y muchos otros tipos de elementos son controles
para Visual
Basic 6.0. Cada control debe tener un nombre a travs del cual se puede hacer refe
rencia a l en el
programa. Visual Basic 6.0 proporciona nombres por defecto que el usuario puede
modificar. En el
Apartado 1.2.4 se exponen algunas reglas para dar nombres a los distintos contro
les.
En la terminologa de Visual Basic 6.0 se llama formulario (form) a una ventana. U
n
formulario puede ser considerado como una especie de contenedor para los control
es. Una
aplicacin puede tener varios formularios, pero un nico formulario puede ser sufici
ente para las
aplicaciones ms sencillas. Los formularios deben tambin tener un nombre, que puede
crearse
siguiendo las mismas reglas que para los controles.
1.2.3 Objetos y Propiedades
Los formularios y los distintos tipos de controles son entidades genricas de las
que puede haber
varios ejemplares concretos en cada programa. En programacin orientada a objetos
(ms bien
basada en objetos, habra que decir) se llama clase a estas entidades genricas, mie
ntras que se
llama objeto a cada ejemplar de una clase determinada. Por ejemplo, en un progra
ma puede haber
Captulo 1: Introduccin pgina 3
varios botones, cada uno de los cuales es un objeto del tipo de control command
button, que sera la
clase.
Cada formulario y cada tipo de control tienen un conjunto de propiedades que def
inen su
aspecto grfico (tamao, color, posicin en la ventana, tipo y tamao de letra, etc.) y
su forma de
responder a las acciones del usuario (si est activo o no, por ejemplo). Cada prop
iedad tiene un
nombre que viene ya definido por el lenguaje.
Por lo general, las propiedades de un objeto son datos que tienen valores lgicos
(True, False)
o numricos concretos, propios de ese objeto y distintos de las de otros objetos d
e su clase. As
pues, cada clase, tipo de objeto o control tiene su conjunto de propiedades, y c
ada objeto o control
concreto tiene unos valores determinados para las propiedades de su clase.
Casi todas las propiedades de los objetos pueden establecerse en tiempo de diseo
y tambin
-casi siempre- en tiempo de ejecucin. En este segundo caso se accede a sus valore
s por medio de
las sentencias del programa, en forma anloga a como se accede a cualquier variabl
e en un lenguaje
de programacin. Para ciertas propiedades sta es la nica forma de acceder a ellas. P
or supuesto
Visual Basic 6.0 permite crear distintos tipos de variables, como ms adelante se
ver.
Se puede acceder a una propiedad de un objeto por medio del nombre del objeto a
que
pertenece, seguido de un punto y el nombre de la propiedad, como por ejemplo opt
Color.objName.
En el siguiente apartado se estudiarn las reglas para dar nombres a los objetos.
1.2.4 Nombres de objetos
En principio cada objeto de Visual Basic 6.0 debe tener un nombre, por medio del
cual se hace
referencia a dicho objeto. El nombre puede ser el que el usuario desee, e inclus
o Visual Basic 6.0
proporciona nombres por defecto para los diversos controles. Estos nombres por d
efecto hacen
referencia al tipo de control y van seguidos de un nmero que se incrementa a medi
da que se van
introduciendo ms controles de ese tipo en el formulario (por ejemplo VScroll1, pa
ra una barra de
desplazamiento -scroll bar- vertical, HScroll1, para una barra horizontal, etc.)
.
Los nombres por defecto no son adecuados porque hacen referencia al tipo de cont
rol, pero
no al uso que de dicho control est haciendo el programador. Por ejemplo, si se ut
iliza una barra de
desplazamiento para introducir una temperatura, conviene que su nombre haga refe
rencia a la
palabra temperatura, y as cuando haya que utilizar ese nombre se sabr exactamente
a qu control
corresponde. Un nombre adecuado sera por ejemplo hsbTemp, donde las tres primeras
letras
indican que se trata de una horizontal scroll bar, y las restantes (empezando po
r una mayscula) que
servir para definir una temperatura.
Existe una convencin ampliamente aceptada que es la siguiente: se utilizan siempr
e tres
letras minsculas que indican el tipo de control, seguidas por otras letras (la pr
imera mayscula, a
modo de separacin) libremente escogidas por el usuario, que tienen que hacer refe
rencia al uso
que se va a dar a ese control. La Tabla 1.1 muestra las abreviaturas de los cont
roles ms usuales,
junto con la nomenclatura inglesa de la que derivan. En este mismo captulo se vern
unos cuantos
ejemplos de aplicacin de estas reglas para construir nombres.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 4
Abreviatura Control Abreviatura Control
chk check box cbo combo y drop-list box
cmd command button dir dir list box
drv drive list box fil file list box
frm form fra frame
hsb horizontal scroll bar img image
lbl label lin line
lst list mnu menu
opt option button pct pictureBox
shp shape txt text edit box
tmr timer vsb vertical scroll bar
Tabla 1.1. Abreviaturas para los controles ms usuales.
1.2.5 Eventos
Ya se ha dicho que las acciones del usuario sobre el programa se llaman eventos.
Son eventos
tpicos el clicar sobre un botn, el hacer doble clic sobre el nombre de un fichero
para abrirlo, el
arrastrar un icono, el pulsar una tecla o combinacin de teclas, el elegir una opc
in de un men, el
escribir en una caja de texto, o simplemente mover el ratn. Ms adelante se vern los
distintos
tipos de eventos reconocidos por Windows 95/98/NT y por Visual Basic 6.0.
Cada vez que se produce un evento sobre un determinado tipo de control, Visual B
asic 6.0
arranca una determinada funcin o procedimiento que realiza la accin programada por
el usuario
para ese evento concreto. Estos procedimientos se llaman con un nombre que se fo
rma a partir del
nombre del objeto y el nombre del evento, separados por el carcter (_), como por
ejemplo
txtBox_click, que es el nombre del procedimiento que se ocupar de responder al ev
ento click en el
objeto txtBox.
1.2.6 Mtodos
Los mtodos son funciones que tambin son llamadas desde programa, pero a diferencia
de los
procedimientos no son programadas por el usuario, sino que vienen ya pre-program
adas con el
lenguaje. Los mtodos realizan tareas tpicas, previsibles y comunes para todas las
aplicaciones. De
ah que vengan con el lenguaje y que se libere al usuario de la tarea de programar
los. Cada tipo de
objeto o de control tiene sus propios mtodos.
Por ejemplo, los controles grficos tienen un mtodo llamado Line que se encarga de
dibujar
lneas rectas. De la misma forma existe un mtodo llamado Circle que dibuja circunfe
rencias y
arcos de circunferencia Es obvio que el dibujar lneas rectas o circunferencias es
una tarea comn
para todos los programadores y que Visual Basic 6.0 da ya resuelta.
1.2.7 Proyectos y ficheros
Cada aplicacin que se empieza a desarrollar en Visual Basic 6.0 es un nuevo proye
cto. Un
proyecto comprende otras componentes ms sencillas, como por ejemplo los formulari
os (que son
las ventanas de la interface de usuario de la nueva aplicacin) y los mdulos (que s
on conjuntos de
funciones y procedimientos sin interface grfica de usuario).
Cmo se guarda un proyecto en el disco? Un proyecto se compone siempre de varios
ficheros (al menos de dos) y hay que preocuparse de guardar cada uno de ellos en
el directorio
Captulo 1: Introduccin
pgina 5
adecuado y con el nombre adecuado. Existe siempre un fichero con extensin *.vbp (
Visual Basic
Project) que se crea con el comando File/Save Project As. El fichero del proyect
o contiene toda la
informacin de conjunto. Adems hay que crear un fichero por cada formulario y por c
ada mdulo
que tenga el proyecto. Los ficheros de los formularios se crean con File/Save Fi
lename As teniendo
como extensin *.frm. Los ficheros de cdigo o mdulos se guardan tambin con el comando

File/Save Filename As y tienen como extensin *.bas si se trata de un mdulo estndar
o *.cls si
se trata de un mdulo de clase (class module).
Clicando en el botn Save en la barra de herramientas se actualizan todos los fich
eros del
proyecto. Si no se haban guardado todava en el disco, Visual Basic 6.0 abre cajas
de dilogo Save
As por cada uno de los ficheros que hay que guardar.
1.3 EL ENTORNO DE PROGRAMACIN VISUAL BASIC 6.0
Cuando se arranca Visual Basic 6.0
aparece en la pantalla una configuracin
similar a la mostrada en la Figura 1.1. En
ella se pueden distinguir los siguientes
elementos:
1. La barra de ttulos, la barra de mens y
la barra de herramientas de Visual
Basic 6.0 en modo Diseo (parte
superior de la pantalla).
2.
Caja de herramientas (toolbox) con los
controles disponibles (a la izquierda de
la ventana).
3.
Formulario (form) en gris, en que se
Figura 1.1. Entorno de programacin de Visual Basic 6.0.
pueden ir situando los controles (en el
centro). Est dotado de una rejilla (grid) para facilitar la alineacin de los contr
oles.
4. Ventana de proyecto, que muestra los formularios y otros mdulos de programas q
ue forman
parte de la aplicacin (arriba a la derecha).
5. Ventana de Propiedades, en la que se pueden ver las propiedades del objeto se
leccionado o del
propio formulario (en el centro a la derecha). Si esta ventana no aparece, se pu
ede hacer visible
con la tecla <F4>.
6. Ventana FormLayout, que permite determinar la forma en que se abrir la aplicac
in cuando
comience a ejecutarse (abajo a la derecha).
Existen otras ventanas para edicin de cdigo (Code Editor) y para ver variables en
tiempo de
ejecucin con el depurador o Debugger (ventanas Immediate, Locals y Watch). Todo e
ste conjunto
de herramientas y de ventanas es lo que se llama un entorno integrado de desarro
llo o IDE
(Integrated Development Environment).
Construir aplicaciones con Visual Basic 6.0 es muy sencillo: basta crear los con
troles en el
formulario con ayuda de la toolbox y del ratn, establecer sus propiedades con ayu
da de la ventana
de propiedades y programar el cdigo que realice las acciones adecuadas en respues
ta a los eventos
o acciones que realice el usuario. A continuacin, tras explicar brevemente cmo se
utiliza el Help
de Visual Basic, se presentan algunos ejemplos ilustrativos.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero
pgina 6
1.4 EL HELP DE VISUAL BASIC 6.0
El Help de Visual Basic 6.0 es de los mejores que existen. Adems de que se puede
buscar
cualquier tipo de informacin con la funcin Index, basta seleccionar una propiedad
cualquiera en
la ventana de propiedades o un control cualquiera en el formulario (o el propio
formulario), para que
pulsando la tecla <F1> aparezca una ventana de ayuda muy completa. De cada contr
ol de muestran
las propiedades, mtodos y eventos que soporta, as como ejemplos de aplicacin. Tambin
se
muestra informacin similar o relacionada.
Existe adems un breve pero interesante curso introductorio sobre Visual Basic 6.0
que se
activa con la opcin Help/Contents, seleccionando luego MSDN Contents/Visual Basic
Documen-
tation/Visual Basic Start Page/Getting Started.
1.5 EJEMPLOS
El entorno de programacin de Visual Basic 6.0 ofrece muchas posibilidades de adap
tacin a los
gustos, deseos y preferencias del usuario. Los usuarios expertos tienen siempre
una forma propia de
hacer las cosas, pero para los usuarios noveles conviene ofrecer unas ciertas or
ientaciones al
respecto. Por eso, antes de realizar los ejemplos que siguen se recomienda modif
icar la
configuracin de Visual Basic 6.0 de la siguiente forma:
1.
En el men Tools elegir el comando Options; se abre un cuadro de dilogo con 6 solap
as.
2.
En la solapa Environment elegir Promp to Save Changes en When a Program Starts para
que pregunte antes de cada ejecucin si se desean guardar los cambios realizados.
En la solada
Editor elegir tambin Require Variable Declaration en Code Settings para evitar errore
s al
teclear los nombres de las variables.
3.
En la solapa Editor, en Code Settings, dar a Tab Width un valor de 4 y elegir la o
pcin Auto
Indent (para que ayude a mantener el cdigo legible y ordenado). En Windows Setting
s elegir
Default to Full Module View (para ver todo el cdigo de un formulario en una misma
ventana) y Procedure Separator (para que separe cada funcin de las dems mediante una

lnea horizontal).
1.5.1 Ejemplo 1.1: Sencillo programa de colores
y posiciones
En la Figura 1.2 se muestra el formulario y los
controles de un ejemplo muy sencillo que permite
mover una caja de texto por la pantalla, permitiendo
a su vez representarla con cuatro colores diferentes.
En la Tabla 1.2 se describen los controles
utilizados, as como algunas de sus propiedades ms
importantes (sobre todo las que se separan de los
valores por defecto). Los ficheros de este proyecto
se llamarn Colores0.vbp y Colores0.frm.
Figura 1.2. Formulario y controles del Ejemplo 1.1.
Captulo 1: Introduccin
pgina 7
Control Propiedad Valor Control Propiedad Valor
frmColores0 Name frmColores0 optVerde Name optVerde
Caption Colores Caption Verde
fraColores Name fraColor fraPosicion Name fraPosicion
Caption Colores Caption Posicin
optAzul Name optAzul optArriba Name optArriba
Caption Azul Caption Arriba
optRojo Name optRojo optAbajo Name optAbajo
Caption Rojo Caption Abajo
optAmarillo Name optAmarillo txtCaja Name txtCaja
Caption Amarillo Text
Tabla 1.2. Objetos y propiedades del ejemplo Colores0.
A continuacin se muestra el cdigo correspondiente a los procedimientos de este eje
mplo.
Option Explicit
Private Sub Form_Load()
txtCaja.Top = 0
End Sub
Private Sub optArriba_Click()
txtCaja.Top = 0
End Sub
Private Sub optAbajo_Click()
txtCaja.Top = frmColores0.ScaleHeight - txtCaja.Height
End Sub
Private Sub optAzul_Click()
txtCaja.BackColor = vbBlue
End Sub
Private Sub optRojo_Click()
txtCaja.BackColor = vbRed
End Sub
Private Sub optVerde_Click()
txtCaja.BackColor = vbGreen
End Sub
Private Sub optAmarillo_Click()
txtCaja.BackColor = vbYellow
End Sub
Sobre este primer programa en Visual Basic 6.0 se pueden hacer algunos comentari
os:
1.
El comando Option Explicit sirve para obligar a declarar todas las variables que
se utilicen.
Esto impide el cometer errores en los nombres de las variables (confundir masa c
on mesa, por
ejemplo). En este ejemplo esto no tiene ninguna importancia, pero es conveniente

acostumbrarse a incluir esta opcin. Declarar una variable es crearla con un nombr
e y de un
tipo determinado antes de utilizarla.
2.
Cada una de las partes de cdigo que empieza con un Private Sub y termina con un E
nd Sub
es un procedimiento, esto es, una parte de cdigo independiente y reutilizable. El
nombre de
uno de estos procedimientos, por ejemplo optAzul_Click(), es tpico de Visual Basi
c. La
primera parte es el nombre de un objeto (control); despus va un separador que es
el carcter
de subrayado (_); a continuacin el nombre de un evento -click, en este caso-, y f
inalmente
unos parntesis entre los que iran los argumentos, en caso de que los hubiera.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero
pgina 8
3.
Es tambin interesante ver cmo se accede desde programa a la propiedad backColor de
la
caja de texto que se llama txtCaja: se hace utilizando el punto en la forma txtC
aja.BackColor.
Los colores se podran tambin introducir con notacin hexadecimal (comenzando con &H,

seguidos por dos dgitos entre 00 y FF (es decir, entre 0 y 255 en base 10) para l
os tres colores
fundamentales, es decir para el Red, Green y Blue (RGB), de derecha a izquierda.
Aqu se
han utilizado las constantes simblicas predefinidas en Visual Basic 6.0: vbRed, v
bGreen y
vbBlue (ver Tabla 6.1, en la pgina 69).
4.
Recurdese que si se desea que el cdigo de todos los eventos aparezca en una misma
ventana
hay que activar la opcin Default to Full Module View en la solapa Editor del coma
ndo
Tools/Options. Tambin puede hacerse directamente en la ventana de cdigo con uno de
los
botones que aparecen en la parte inferior izquierda (
).
5.
Es muy importante crear primero el control frame y despus, estando seleccionado,
colocar
los botones de opcin en su interior. No sirve hacerlo a la inversa. Visual Basic
supone que
todos los botones de opcin que estn dentro del mismo frame forman parte del mismo
grupo
y slo permite que uno est seleccionado.
1.5.2 Ejemplo 1.2: Minicalculadora elemental
En este ejemplo se muestra una calculadora elemental
que permite hacer las cuatro operaciones aritmticas
(Figura 1.3). Los ficheros de este proyecto se pueden
llamar minicalc.vbp y minicalc.frm.
El usuario introduce los datos y clica sobre el
botn correspondiente a la operacin que desea
realizar, apareciendo inmediatamente el resultado en la
caja de texto de la derecha.
La Tabla 1.3 muestra los objetos y las propiedades
ms importantes de este ejemplo.
Figura 1.3. Minicalculadora elemental.
Control Propiedad Valor Control Propiedad Valor
frmMinicalc Name frmMinicalc lblEqual Name lblEqual
Caption Minicalculadora Caption =
txtOper1 Name txtOper1 cmdSuma Name cmdSuma
Text Caption +
txtOper2 Name txtOper2 cmdResta Name cmdResta
Text Caption -
txtResult Name txtResult cmdMulti Name cmdProd
Text Caption *
lblOp Name lblOp cmdDivi Name cmdDiv
Caption Caption /
Tabla 1.3. Objetos y propiedades del ejemplo Minicalculadora.
A continuacin se muestra el cdigo correspondiente a los procedimientos que gestion
an los
eventos de este ejemplo.
Option Explicit
Private Sub cmdDiv_Click()
txtResult.Text = Val(txtOper1.Text) / Val(txtOper2.Text)
lblOp.Caption = "/"
End Sub
Captulo 1: Introduccin pgina 9
Private Sub cmdProd_Click()
txtResult.Text = Val(txtOper1.Text) * Val(txtOper2.Text)
lblOp.Caption = "*"
End Sub
Private Sub cmdResta_Click()
txtResult.Text = Val(txtOper1.Text) - Val(txtOper2.Text)
lblOp.Caption = "-"
End Sub
Private Sub cmdSuma_Click()
txtResult.Text = Val(txtOper1.Text) + Val(txtOper2.Text)
lblOp.Caption = "+"
End Sub
En este ejemplo se ha utilizado repetidamente la funcin Val() de Visual Basic. Es
ta funcin
convierte una serie de caracteres numricos (un texto formado por cifras) en el nme
ro entero o de
punto flotante correspondiente. Sin la llamada a la funcin Val() el operador + ap
licado a cadenas
de caracteres las concatena, y como resultado, por ejemplo, 3+4 dara 34. No es lo mis
mo los
caracteres 1 y 2 formando la cadena o string 12 que el nmero 12; la funcin val() convi
te
cadenas de caracteres numricos con los que no se pueden realizar operaciones aritmt
icas- en los
nmeros correspondientes con los que s se puede operar matemticamente-. Visual Basic
6.0
transforma de modo automtico nmeros en cadenas de caracteres y viceversa, pero est
e es un caso
en el que dicha transformacin no funciona porque el operador + tiene sentido tanto
con nmeros
como con cadenas.
1.5.3 Ejemplo 1.3: Transformacin de unidades de temperatura
La Figura 1.4 muestra un programa sencillo que
permite ver la equivalencia entre las escalas de
temperaturas en grados centgrados y grados
Fahrenheit. Los ficheros de este proyecto se pueden
llamar Temperat.vbp y Temperat.frm.
En el centro del formulario aparece una barra
de desplazamiento vertical que permite desplazarse
con incrementos pequeos de 1 C y grandes de 10
C. Como es habitual, tambin puede cambiarse el
valor arrastrando con el ratn el cursor de la barra.
Los valores mximos y mnimo de la barra son 100
C y -100 C.
A ambos lados de la barra aparecen dos
cuadros de texto (color de fondo blanco) donde
aparecen los grados correspondientes a la barra en ambas escalas. Encima aparece
n dos rtulos
(labels) que indican la escala de temperaturas correspondiente. Completan la apl
icacin un botn
Salir que termina la ejecucin y un men File con la nica opcin Exit, que termina asim
ismo la
ejecucin del programa.
La Tabla 1.4 indica los controles utilizados en este ejemplo junto con las propi
edades y los
valores correspondientes.
Figura 1.4. Equivalencia de temperaturas.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero
pgina 10
Control Propiedad Valor Control Propiedad Valor
frmTemp Name frmTemp vsbTemp Name vsbTemp
Caption Conversor de
temperaturas
Min 100
mnuFile Name mnuFile Max -100
Caption &File SmallChange 1
mnuFileExit Name mnuFileExit LargeChange 10
Caption E&xit Value 0
cmdSalir Name cmdSalir lblCent Name lblCent
Caption Salir Caption Grados Centgrados
Font MS Sans Serif, Bold, 14 Font MS Sans Serif, 10
txtCent Name txtCent lblFahr Name lblFahr
text 0 Caption Grados Fahrenheit
txtFahr Name txtFahr Font MS Sans Serif, 10
text 32
Tabla 1.4. Controles y propiedades del Ejemplo 1.3.
Por otra parte, el cdigo con el que este programa responde a los eventos es el co
ntenido en
los siguientes procedimientos:
Option Explicit
Private Sub cmbSalir_Click()
Beep
End
End Sub
Private Sub mnuFileExit_Click()
End
End Sub
Private Sub vsbTemp_Change()
txtCent.Text = vsbTemp.Value
txtFahr.Text = 32 + 1.8 * vsbTemp.Value
End Sub
Sobre este tercer ejemplo se puede comentar lo siguiente:
1.
Se ha utilizado la propiedad Value de la barra de desplazamiento, la cual da el
valor actual de
la misma con respecto a los lmites inferior y superior, previamente establecidos
(-100 y 100).
2.
Mediante el procedimiento cmdSalir_Click, se cierra el programa, gracias a la in
struccin
End. El cometido de Beep no es otro que el de emitir un pitido a travs del altavo
z del
ordenador, que indicar que en efecto se ha salido del programa.
3.
La funcin mnuFileExit_Click() y activa desde el men y termina la ejecucin sin emiti
r
ningn sonido.
4.
Finalmente, la funcin vsbTemp_Change() se activa al cambiar el valor de la barra
de
desplazamiento; su efecto es modificar el valor de la propiedad text en las caja
s de texto que
muestran la temperatura en cada una de las dos escalas.
Captulo 1: Introduccin pgina 11
1.5.4 Ejemplo 1.4: Colores RGB
La Figura 1.5 muestra el formulario y los
controles del proyecto Colores. Los ficheros de
este proyecto se pueden llamar Colores.vbp y
Colores.frm.
En este ejemplo se dispone de tres barras de
desplazamiento con las que pueden controlarse
las componentes RGB del color del fondo y del
color del texto de un control label. Dos botones
de opcin permiten determinar si los valores de
las barras se aplican al fondo o al texto. Cuando
se cambia del texto al fondo o viceversa los
valores de las barras de desplazamiento (y la
posicin de los cursores) cambian de modo
acorde.
A la dcha. de las barras de desplazamiento
tres cajas de texto contienen los valores numricos de los tres colores (entre 0 y
255). A la izda. tres
labels indican los colores de las tres barras. La Tabla 1.5 muestra los controle
s y las propiedades
utilizadas en el este ejemplo.
Figura 1.5. Colores de fondo y de texto.
Control Propiedad Valor Control Propiedad Valor
frmColores Name frmColores hsbColor Name hsbColor
Caption Colores Min 0
lblCuadro Name lblCuadro Max 255
Caption INFORMTICA 1 SmallChange 1
Font MS Sans Serif, Bold, 24 LargeChange 16
cmdSalir Name cmdSalir Index 0,1,2
Caption Salir Value 0
Font MS Sans Serif, Bold, 10 txtColor Name txtColor
optColor Name optColor Text 0
Index 0,1 Locked True
Caption Fondo, Texto Index 0,1,2
Font MS Sans Serif, Bold, 10 lblColor Name lblColor
Caption Rojo,Verde,Azul
Index 0,1,2
Font MS Sans Serif, 10
Tabla 1.5. Objetos y propiedades del ejemplo Colores.
Una caracterstica importante de este ejemplo es que se han utilizado vectores (ar
rays) de
controles. Las tres barras se llaman hsbColor y se diferencian por la propiedad
Index, que toma los
valores 0, 1 y 2. Tambin las tres cajas de texto, las tres labels y los dos boton
es de opcin son
arrays de controles. Para crear un array de controles basta crear el primero de
ellos y luego hacer
Copy y Paste tantas veces como se desee, respondiendo afirmativamente al cuadro
de dilogo que
pregunta si desea crear un array.
El procedimiento Sub que contiene el cdigo que gestiona un evento de un array es n
ico para
todo el array, y recibe como argumento la propiedad Index. De este modo que se p
uede saber
exactamente en qu control del array se ha producido el evento. As pues, una ventaj
a de los arrays
de controles es que pueden compartir el cdigo de los eventos y permitir un tratam
iento conjunto
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero
pgina 12
por medio de bucles for. A continuacin se muestra el cdigo correspondiente a los p
rocedimientos
que tratan los eventos de este ejemplo.
Option Explicit
Public Brojo, Bverde, Bazul As Integer
Public Frojo, Fverde, Fazul As Integer
Private Sub cmdSalir_Click()
End
End Sub
Private Sub Form_Load()
Brojo = 0
Bverde = 0
Bazul = 0
Frojo = 255
Fverde = 255
Fazul = 255
lblCuadro.BackColor = RGB(Brojo, Bverde, Bazul)
lblCuadro.ForeColor = RGB(Frojo, Fverde, Fazul)
End Sub
Private Sub hsbColor_Change(Index As Integer)
If optColor(0).Value = True Then
lblCuadro.BackColor = RGB(hsbColor(0).Value, hsbColor(1).Value, _
hsbColor(2).Value)
Dim i As Integer
For i = 0 To 2
txtColor(i).Text = hsbColor(i).Value
Next i
Else
lblCuadro.ForeColor = RGB(hsbColor(0).Value, hsbColor(1).Value, _
hsbColor(2).Value)
For i = 0 To 2
txtColor(i).Text = hsbColor(i).Value
Next i
End If
End Sub
Private Sub optColor_Click(Index As Integer)
If Index = 0 Then Se pasa a cambiar el fondo
Frojo = hsbColor(0).Value
Fverde = hsbColor(1).Value
Fazul = hsbColor(2).Value
hsbColor(0).Value = Brojo
hsbColor(1).Value = Bverde
hsbColor(2).Value = Bazul
Else Se pasa a cambiar el texto
Brojo = hsbColor(0).Value
Bverde = hsbColor(1).Value
Bazul = hsbColor(2).Value
hsbColor(0).Value = Frojo
hsbColor(1).Value = Fverde
hsbColor(2).Value = Fazul
End If
End Sub
El cdigo de este ejemplo es un poco ms complicado que el de los ejemplos anteriore
s y
requiere unas ciertas explicaciones adicionales adelantando cuestiones que se ve
rn posteriormente:
1.
La funcin RGB() crea un cdigo de color a partir de sus argumentos: las componentes
RGB
(Red, Green and Blue). Estas componentes, cuyo valor se almacena en un byte y pu
ede oscilar
entre 0 y 255, se determinan por medio de las tres barras de desplazamiento.
Captulo 1: Introduccin
pgina 13
2.
El color blanco se obtiene con los tres colores fundamentales a su mxima intensid
ad. El
color negro se obtiene con los tres colores RGB a cero. Tambin se pueden introduc
ir con las
constantes predefinidas vbWhite y vbBlack, respectivamente.
3.
Es importante disponer de unas variables globales que almacenen los colores del
fondo y del
texto, y que permitan tanto guardar los valores anteriores de las barras como ca
mbiar stas a
sus nuevos valores cuando se clica en los botones de opcin. Las variables globale
s, definidas
en la parte de definiciones generales del cdigo, fuera de cualquier procedimiento
, son
visibles desde cualquier parte del programa. Las variables definidas dentro de u
na funcin o
procedimiento slo son visibles desde dentro de dicha funcin o procedimiento (varia
bles
locales).
4.
La funcin hsbColor_Change(Index As Integer) se activa cada vez que se cambia el v
alor en
una cualquiera de las barras de desplazamiento. El argumento Index, que Visual B
asic define
automticamente, indica cul de las barras del array es la que ha cambiado de valor
(la 0, la 1
la 2). En este ejemplo dicho argumento no se ha utilizado, pero est disponible po
r si se
hubiera querido utilizar en el cdigo.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 14
2. ENTORNO DE PROGRAMACIN VISUAL BASIC 6.0
2.1 INTRODUCCIN: QU ES VISUAL BASIC 6.0?
Visual Basic 6.0 es una excelente herramienta de programacin que permite crear ap
licaciones
propias (programas) para Windows 95/98 o Windows NT. Con ella se puede crear des
de una simple
calculadora hasta una hoja de clculo de la talla de Excel (en sus primeras versio
nes...), pasando por
un procesador de textos o cualquier otra aplicacin que se le ocurra al programado
r. Sus
aplicaciones en Ingeniera son casi ilimitadas: representacin de movimientos mecnico
s o de
funciones matemticas, grficas termodinmicas, simulacin de circuitos, etc.
Este programa permite crear ventanas, botones, mens y cualquier otro elemento de
Windows
de una forma fcil e intuitiva. El lenguaje de programacin que se utilizar ser el Bas
ic, que se
describir en el siguiente captulo.
A continuacin se presentarn algunos aspectos del entorno de trabajo de Visual Basi
c 6.0:
mens, opciones, herramientas, propiedades, etc.
2.2 EL ENTORNO DE VISUAL BASIC 6.0
Visual Basic 6.0 tiene todos los elementos que caracterizan a los programas de W
indows e incluso
alguno menos habitual. En cualquier caso, el entorno de Visual Basic 6.0 es muy
lgico y natural, y
adems se puede obtener una descripcin de la mayora de los elementos clicando en ell
os para
seleccionarlos y pulsando luego la tecla <F1>.
2.2.1 La barra de mens y las barras de herramientas
La barra de mens de Visual Basic 6.0 resulta similar a la de cualquier otra aplic
acin de
Windows, tal y como aparece en la Figura 2.2. Bajo dicha barra aparecen las barr
as de
herramientas, con una serie de botones que permiten acceder fcilmente a las opcio
nes ms
importantes de los mens. En Visual Basic 6.0 existen cuatro barras de herramienta
s: Debug, Edit,
Form Editor y Standard. Por defecto slo aparece la barra Standard, aunque en la F
igura 2.2 se
muestran las cuatro. Clicando con el botn derecho sobre cualquiera de las barras
de herramientas
aparece un men contextual con el que se puede hacer aparecer y ocultar cualquiera
de las barras. Al
igual que en otras aplicaciones de Windows 95/98/NT, tambin pueden modificarse la
s barras
aadiendo o eliminando botones (opcin Customize).
En la barra de herramientas Standard tambin se pueden ver a la
derecha dos recuadros con nmeros, que representan cuatro propiedades
del formulario referentes a su posicin y tamao que se vern ms
adelante: Top y Left, que indican la posicin de la esquina superior
izquierda del formulario, y tambin Height y Width, que describen el
tamao del mismo en unas unidades llamadas twips, que se
corresponden con la vigsima parte de un punto (una pulgada tiene 72 Figura 2.1. I
nformacin visual
sobre el tamao de un control.
puntos y 1440 twips). Las dimensiones de un control aparecen tambin
cuando con el ratn se arrastra sobre el formulario, segn se puede ver
en la Figura 2.1. Los botones de la barra de herramientas Standard responden a l
as funciones ms
importantes: abrir y/o guardar nuevos proyectos, aadir formularios, hacer visible
s las distintas
ventanas del entorno de desarrollo, etc. Todos los botones tienen su correspondi
ente comando en
Captulo 2: El entorno de programacin Visual Basic 6.0 pgina 15
alguno de los mens. Son importantes los botones que permiten arrancar y/o parar l
a
ejecucin de un proyecto, pasando de modo diseo a modo de ejecucin y viceversa.
Figura 2.2. Barra de mens y barras de herramientas de Visual Basic 6.0.
El men File tiene pocas novedades. Lo ms importante es la distincin entre proyectos
y
todos los dems ficheros. Como ya se ha dicho, un proyecto rene y organiza todos lo
s ficheros que
componen el programa o aplicacin (hace la funcin de una carpeta que contuviera apu
ntes). Estos
ficheros pueden ser formularios, mdulos, clases, recursos, etc. Visual Basic 6.0
permite tener ms
de un proyecto abierto simultneamente, lo cual puede ser til en ocasiones. Con el
comando
AddProject se aade un nuevo proyecto en la ventana Project Manager. Con los coman
dos Open
Project o New Project se abre o se crea un nuevo proyecto, pero cerrando el o lo
s proyectos que
estuvieran abiertos previamente. En este men est el comando Make ProjectName.exe,
que
permite crear ejecutables de los proyectos.
Tampoco el men Edit aporta cambios importantes sobre lo que es habitual. Por el c
ontrario
el men View, generalmente de poca utilidad, es bastante propio de Visual Basic 6.
0. Este men
permite hacer aparecer en pantalla las distintas ventanas del entorno de desarro
llo, as como acceder
a un formulario o al cdigo relacionado con un control (que tambin aparece si se cl
ica dos veces en
dicho control), y manejar funciones y procedimientos.
El men Project permite aadir distintos tipos de elementos a un proyecto (formulari
os,
mdulos, etc.). Con Project/Properties se puede elegir el tipo de proyecto y deter
minar el
formulario con el que se arrancar la aplicacin (Startup Object). Con el comando Co
mponents se
pueden aadir nuevos controles a la Toolbox que aparece a la izquierda de la panta
lla.
El men Format contiene opciones para controlar el aspecto de la aplicacin (alinear

controles, espaciarlos uniformemente, etc.). Los mens Debug y Run permiten contro
lar la
ejecucin de las aplicaciones. Con Debug se puede ver en detalle cmo funcionan, eje
cutando paso
a paso, yendo hasta una lnea de cdigo determinada, etc. Esto es especialmente til c
uando haya
que encontrar algunos errores ejecutando paso a paso, o viendo resultados interm
edios.
En el men Tools se encuentran los comandos para arrancar el Menu Editor (para cre
ar
mens, como se ver en el Apartado 5, a partir de la pgina 64, dedicado a los Mens) y
para
establecer las opciones del programa. En Tools/Options se encuentran las opcione
s relativas al
proyecto en el que se trabaja. La lengeta Environment determina las propiedades d
el entorno del
proyecto, como las opciones para actualizar o no los ficheros antes de cada ejec
ucin; en General
se establece lo referente a la retcula o grid que aparece en el formulario; Edito
r permite establecer
la necesidad de declarar todas las variables junto con otras opciones de edicin,
como si se quieren
ver o no todos los procedimientos juntos en la misma ventana, y si se quiere ver
una lnea
separadora entre procedimientos; Editor Format permite seleccionar el tipo de le
tra y los cdigos
de color con los que aparecen los distintos elementos del cdigo. La opcin Advanced
hace
referencia entre otras cosas a la opcin de utilizar Visual Basic 6.0 en dos forma
tos SDI (Single
Document Interface) y MDI (Multiple Document Interface descritos en el Apartado
4.5, en la
pgina 61).
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 16
Por ltimo, la ayuda (siempre imprescindible y en el caso de Visual
Basic 6.0 particularmente bien hecha) que se encuentra en el men Help, se
basa fundamentalmente en una clasificacin temtica ordenada de la
informacin disponible (Contents), en una clasificacin alfabtica de la
informacin (Index) y en la bsqueda de informacin sobre algn tema por
el nombre (Search). Como ya se ha mencionado, la tecla <F1> permite una
ayuda directa sensible al contexto, esto es dependiente de donde se haya
clicado con el ratn (o de lo que est seleccionado).
2.2.2 Las herramientas (toolbox)
La Figura 2.3 muestra la caja de herramientas, que incluye los controles
con los que se puede disear la pantalla de la aplicacin. Estos controles
son por ejemplo botones, etiquetas, cajas de texto, zonas grficas, etc. Para
introducir un control en el formulario simplemente hay que clicar en el
icono adecuado de la toolbox y colocarlo en el formulario con la posicin y
el tamao deseado, clicando y arrastrando con el ratn. Clicando dos veces
sobre el icono de un control aparece ste en el centro del formulario y se
puede modificar su tamao y/o trasladar con el ratn como se desee.
El nmero de controles que pueden aparecer en esta ventana vara con
la configuracin del sistema. Para introducir nuevos componentes se utiliza
el comando Components en el men Project, con lo cual se abre el cuadro
de dilogo mostrado en la Figura 2.4.
Figura 2.3. Caja de
componentes (Toolbox).
2.3 FORMULARIOS (FORMS) Y MDULOS
Los formularios son las zonas de la pantalla sobre
las que se disea el programa y sobre las que se
sitan los controles o herramientas de la toolbox.
Al ejecutar el programa, el form se convertir en
la ventana de la aplicacin, donde aparecern los
botones, el texto, los grficos, etc.
Para lograr una mejor presentacin existe
una malla o retcula (grid) que permite alinear los
controles manualmente de una forma precisa
(evitando tener que introducir coordenadas
continuamente). Esta malla slo ser visible en el
proceso de diseo del programa; al ejecutarlo no
se ver. De cualquier forma, se puede desactivar
la malla o cambiar sus caractersticas en el men
Tools/Options/General, cambiando la opcin
Align Controls to Grid.
Exteriormente, los formularios tienen una estructura similar a la de cualquier v
entana. Sin
embargo, tambin poseen un cdigo de programacin que estar escrito en Basic, y que con
trolar
algunos aspectos del formulario, sobre todo en la forma de reaccionar ante las a
cciones del usuario
(eventos). El formulario y los controles en l situados sern el esqueleto o la base
del programa. Una
aplicacin puede tener varios formularios, pero siempre habr uno con el que arranca
r la
aplicacin; este formulario se determina a partir del men Project/Properties, en St
artup Objects.
Figura 2.4. Cuadro de dilogo Components.
Captulo 2: El entorno de programacin Visual Basic 6.0 pgina 17
Resumiendo, cuando se vaya a crear un programa en Visual Basic 6.0 habr que dar d
os
pasos:
1. Disear y preparar la parte grfica (formularios, botones, mens, etc.)
2. Realizar la programacin que gestione la respuesta del programa ante los distin
tos eventos.
2.4 LA VENTANA DE PROYECTO (PROJECT)
Esta ventana, mostrada en la Figura 2.5, permite acceder a
los distintos formularios y mdulos que componen el
proyecto. Desde ella se puede ver el diseo grfico de
dichos formularios (botn View Object ), y tambin
permite editar el cdigo que contienen (botn View Code
). Estos botones estn situados en la parte superior de
la ventana, debajo de la barra de ttulos.
Los mdulos estndar (ficheros *.bas) contienen
slo cdigo que, en general, puede ser utilizado por
distintos formularios y/o controles del proyecto e incluso
por varios proyectos. Por ejemplo puede prepararse un
mdulo estndar de funciones matemticas que sea de
utilidad general. Normalmente contienen siempre algunas
declaraciones de variables globales o Public, que sern
accesibles directamente desde todos los formularios.
Los mdulos de clase (ficheros *.cls) contienen
clases definidas por el usuario. Las clases son como
formularios o controles complejos, sin interface grfica de
usuario.
2.5 LA VENTANA DE PROPIEDADES (PROPERTIES)
Todos los objetos Visual Basic 6.0 tienen unas
propiedades que los definen: su nombre (Name), su
etiqueta o ttulo (Caption), el texto que contiene (Text), su
tamao y posicin, su color, si est activo o no (Enabled),
etc. La Figura 2.6 muestra parcialmente las propiedades
de un formulario. Todas estas propiedades se almacenan
dentro de cada control o formulario en forma de
estructura (similar a las del lenguaje C). Por tanto, si por
ejemplo en algn momento se quiere modificar el nombre
de un botn basta con hacerlo en la ventana de
propiedades (al disear el programa) o en el cdigo en
Basic (durante la ejecucin), mediante el operador punto
(.), en la forma:
Boton1.Name = "NuevoNombre"
Para realizar una modificacin de las propiedades de
un objeto durante el diseo del programa, se activar la
ventana de propiedades (con el men, con el botn de la
Figura 2.5. Ventana de proyecto.
Figura 2.6. Ventana de propiedades.
Figura 2.7. Ventana Form Layout.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 18
barra de herramientas o pulsando <F4>). Esta ventana tiene dos lengetas, que perm
iten ordenar las
propiedades alfabticamente o por categoras. Utilizando la forma que sea ms cmoda se
localizar con ayuda de la barra de desplazamiento la propiedad que se quiera modi
ficar. Al clicar
sobre ella puede activarse un men desplegable con las distintas opciones, o bien
puede modificarse
directamente el valor de la propiedad. Si esta propiedad tiene slo unos valores f
ijos (por ejemplo,
los colores), puede abrirse un cuadro de dilogo para elegir un color, o el tamao y
tipo de letra que
se desee si se trata de una propiedad Font.
La Figura 2.7 muestra la ventana FormLayout, que permite determinar la posicin en
la que
el formulario aparecer sobre la pantalla cuando se haga visible al ejecutar la ap
licacin.
2.6 CREACIN DE PROGRAMAS EJECUTABLES
Una vez finalizada la programacin de la nueva aplicacin, la siguiente tarea suele
consistir en la
creacin de un programa ejecutable para su distribucin e instalacin en cuantos orden
adores se
desee, incluso aunque en ellos no est instalado Visual Basic 6.0.
Para crear un programa ejecutable se utiliza el comando Make nombreProyecto.exe
en el
men File. De esta manera se generar un fichero cuya extensin ser *.exe. Para que est
e programa
funcione en un ordenador solamente se necesita que el fichero MSVBVM60.DLL est in
stalado en
el directorio c:\Windows\System o c:\Winnt\System32. En el caso de proyectos ms c
omplejos en
los que se utilicen muchos controles pueden ser necesarios ms ficheros, la mayora
de ellos con
extensiones *.ocx, *.vbx o *.dll. Para saber en cada caso cules son los ficheros
necesarios se puede
consultar el fichero *.vbp que contiene la descripcin completa del proyecto. Casi
todos esos
ficheros necesarios se instalan automticamente al instalar el compilador de Visua
l Basic 6.0 en el
ordenador.
En el caso de el programa se vaya a utilizar en un ordenador en el que no est ins
talado Visual
Basic o de que en el proyecto se hayan utilizado controles comerciales (como los
Crystal Reports
para la creacin de informes, los Sheridan Data Widgets o los True DBGrid de Apex
para la
gestin de bases de datos, etc.), puede resultar interesante construir unos disque
tes de instalacin
que simplifiquen la tarea de instalar el programa en cualquier ordenador sin ten
er que ver en cada
caso cules son los ficheros que faltan. Visual Basic 6.0 dispone de un Asistente
(Wizard) que,
interactivamente, simplifica enormemente la tarea de creacin de disquetes de inst
alacin. Este
Asistente est en el mismo grupo de programas que Visual Basic 6.0 y se llama Pack
age and
Deployement Wizard.
Captulo 2: El entorno de programacin Visual Basic 6.0 pgina 19
2.7 CMO UTILIZAR EL HELP
Visual Basic 6.0 dispone de un Help
excelente, como la mayora de las
aplicaciones de Microsoft. En esta
nueva versin la ayuda se ofrece a
travs de una interface de usuario
similar a la de Internet Explorer.
Estando seleccionado un control, una
propiedad o un formulario, o estando
seleccionada una palabra clave en una
ventana de cdigo, esta ayuda se
puede utilizar de modo sensible al
contexto pulsando la tecla <F1>.
Tambin se puede ver toda la
informacin disponible de modo
general y ordenado por temas con el Figura 2.8. Ayuda de Visual Basic 6.0.
comando Help/Contents.
Otra forma de acceder a la ayuda
es mediante las opciones del men
Help. As mediante la opcin Index se
puede obtener informacin sobre
muchos trminos relacionados con
Visual Basic 6.0.
Una vez obtenida la ayuda sobre
el trmino solicitado se pueden
encontrar temas relacionados con ese
trmino en la opcin See Also. En el
caso de que se haya solicitado ayuda
sobre un determinado tipo de control
(en la Figura 2.9 se ha hecho con los
botones de comando), se podra Figura 2.9. Ayuda sobre el botn de comando.
acceder tambin a la ayuda sobre
todos y cada uno de sus propiedades, eventos y mtodos con las opciones Properties
, Methods y
Events, respectivamente.
La solapa Contents de la ventana de ayuda sirve para acceder a una pantalla en l
a que la ayuda
est ordenada por temas, la de Index sirve para acceder a una pantalla en la que s
e podr realizar
una bsqueda a partir de un trmino introducido por el usuario, entre una gran lista
de trminos
ordenados alfabticamente. Al teclear las primeras letras del trmino, la lista de p
alabras se va
desplazando de modo automtico en busca de la palabra buscada. El botn Back sirve p
ara regresar
a la pantalla desde la que se ha llegado a la actual y con el botn Print se puede
imprimir el
contenido de la ayuda.
2.8 UTILIZACIN DEL CODE EDITOR
El editor de cdigo o Code Editor de Visual Basic 6.0 es la ventana en la cual se
escriben las
sentencias del programa. Esta ventana presenta algunas caractersticas muy interes
antes que
conviene conocer para sacar el mximo partido a la aplicacin.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 20
Para abrir la ventana del editor de cdigo se elige Code en el men View. Tambin se a
bre
clicando en el botn View Code de la Project Window, o clicando dos veces en el fo
rmulario o en
cualquiera de sus controles. Cada formulario, cada mdulo de clase y cada mdulo estn
dar tienen
su propia ventana de cdigo. La Figura 2.10 muestra un aspecto tpico de la ventana
de cdigo.
Aunque el aspecto de dicha ventana no tiene nada de particular, el Code Editor d
e Visual Basic 6.0
ofrece muchas ayudas al usuario que requieren una explicacin ms detenida.
En primer lugar, el Code Editor utiliza un
cdigo de colores (accesible y modificable en
Tools/Options/Editor Format) para destacar
cada elemento del programa. As, el cdigo
escrito por el usuario aparece en negro, las
palabras clave de Basic en azul, los comentarios
en verde, los errores en rojo, etc. Esta simple
ayuda visual permite detectar y corregir
problemas con ms facilidad.
En la parte superior de esta ventana aparecen
dos listas desplegables. La de la izquierda
corresponde a los distintos elementos del
formulario (la parte General, que es comn a
todo el formulario; el propio formulario y los
distintos controles que estn incluidos en l). La
lista desplegable de la derecha muestra los distintos procedimientos que se corr
esponden con el
elemento seleccionado en la lista de la izquierda. Por ejemplo, si en la izquier
da est seleccionado
un botn de comando, en la lista de la derecha aparecer la lista de todos los posib
les
procedimientos Sub que pueden generar sus posibles eventos. Estas dos listas per
miten localizar
fcilmente el cdigo que se desee programar o modificar.
El cdigo mostrado en la Figura 2.10 contiene en la parte superior una serie de de
claraciones
de variables y la opcin de no permitir utilizar variables no declaradas (Option E
xplicit). sta es la
parte General de cdigo del formulario. En esta parte tambin se pueden definir func
iones y
procedimientos Sub no relacionados con ningn evento o control en particular. A co
ntinuacin
aparecen dos procedimientos Sub (el segundo de ellos incompleto) que se correspo
nden con el
evento Click del botn cmdSalir y con el evento Load del formulario. Estos procedi
mientos estn
separados por una lnea, que se activa con Procedure Separator en Tools/Options/Ed
itor.
Para ver todos los procedimientos del formulario y de sus controles simultneament
e en la
misma ventana (con o sin separador) o ver slo un procedimiento (el seleccionado e
n las listas
desplegables) se pueden utilizar los dos pequeos botones que aparecen en la parte
inferior
izquierda de la ventana. El primero de ellos es el Procedure View y el segundo e
l Full Module
View. Esta opcin est tambin accesible en Tools/Options/Editor.
Otra opcin muy interesante es la de completar automticamente el cdigo (Automatic
Completion Code). La Figura 2.11 muestra cmo al teclear el punto (o alguna letra
inicial de una
propiedad despus del punto) detrs del nombre de un objeto, automticamente se abre u
na lista con
las propiedades de ese objeto. Pulsando la tecla Tab se introduce el nombre comp
leto de la
propiedad seleccionada. A esta caracterstica se le conoce como AutoListMembers.
Por otra parte, la opcin AutoQuickInfo hace que al comenzar a teclear el nombre d
e una
funcin aparezca informacin sobre esa funcin: nombre, argumentos y valor de retorno
(ver Figura
Figura 2.10. Ventana del Code Editor.
Captulo 2: El entorno de programacin Visual Basic 6.0 pgina 21
2.12). Tanto la opcin AutoListMembers como la opcin AutoQuickInfo se activan en el
cuadro de
dilogo que se abre con Tools/Options/Editor.
Figura 2.11. Insercin automtica de propiedades. Figura 2.12. Ayuda para insercin de
funciones.
2.9 UTILIZACIN DEL DEBUGGER
Cualquier programador con un mnimo de experiencia sabe que una parte muy importan
te (muchas
veces la mayor parte) del tiempo destinado a la elaboracin de un programa se dest
ina a la deteccin
y correccin de errores. Casi todos los entornos de desarrollo disponen hoy en da d
e potentes
herramientas que facilitan la depuracin de los programas realizados. La herramien
ta ms utilizada
para ello es el Depurador o Debugger. La caracterstica principal del Debugger es
que permite
ejecutar parcialmente el programa, deteniendo la ejecucin en el punto deseado y e
studiando en
cada momento el valor de cada una de las variables. De esta manera se facilita e
normemente el
descubrimiento de las fuentes de errores.
2.9.1 Ejecucin controlada de un programa
Para ejecutar parcialmente un programa se pueden
utilizar varias formas. Una de ellas consiste en
incluir breakpoints (puntos de parada de la
ejecucin) en determinadas lneas del cdigo. Los
breakpoints se indican con un punto grueso en el
margen y un cambio de color de la lnea, tal como
se ve en la Figura 2.13. En esta figura se muestra
tambin la barra de herramientas Debug. El colocar
un breakpoint en una lnea de cdigo implica que la
ejecucin del programa se detendr al llegar a esa
Figura 2.13. Utilizacin del Debugger.
lnea. Para insertar un breakpoint en una lnea del
cdigo se utiliza la opcin Toggle Breakpoint del men Debug, con el botn del mismo nom
bre
(
) o pulsando la tecla <F9>, estando el cursor posicionado sobre la lnea en cuestin
. Para
borrarlo se repite esa operacin.
Cuando la ejecucin est detenida en una lnea aparece una flecha en el margen izquier
do, tal
como puede verse tambin en la Figura 2.13. En ese momento se puede consultar el v
alor de
cualquier variable que sea accesible desde ese punto en la ventana de depuracin (
Debug Window).
Un poco ms adelante se vern varias formas de hacer esto.
En la Figura 2.13 se puede observar como la ejecucin del programa est detenida en
la lnea
coloreada o recuadrada, con una flecha en el margen izquierdo. Se puede observar
tambin la
variacin del color de fondo de la lnea anterior debido a que en ella hay un breakp
oint.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero
pgina 22
De todos modos no es estrictamente necesaria la utilizacin de breakpoints para la
ejecucin
parcial de un programa. Esto se puede hacer tambin ejecutando el programa paso a
paso (o lnea a
lnea). Para hacer esto hay varias opciones: pulsando la tecla <F8>, seleccionando
la opcin Step
Into del men Run o clicando en el botn correspondiente ( ). Esta instruccin hace qu
e se
ejecute una lnea del cdigo. En el caso de que sta se trate de la llamada a un proce
dimiento o
funcin, la ejecucin se trasladar a la primera lnea de ese procedimiento o funcin. En
el caso de
que se desee ejecutar toda la funcin en un nico paso (por ejemplo porque se tiene
constancia de
que esa funcin funciona correctamente) se puede hacer mediante la opcin Step Over,
pulsando las
teclas <maysculas> y <F8> simultneamente, o clicando en el botn correspondiente ( )
. En
este caso la ejecucin se traslada a la lnea inmediatamente posterior a la llamada
a la funcin. En el
caso de que la lnea a ejecutar no sea la llamada a una funcin ambas opciones (Step
Into y Step
Over) operan idnticamente. El comando y botn Step Out ( ) hace que se salga de la
funcin o
procedimiento que se est ejecutando y que la ejecucin se detenga en la sentencia i
nmediatamente
siguiente a la llamada a dicha funcin o procedimiento.
La utilizacin del Debugger permite tambin otras opciones muy interesantes como la
de
ejecutar el programa hasta la lnea en la que se encuentre posicionado el cursor (
con Step To Cursor
o Ctrl+<F8>); la de continuar con la ejecucin del programa hasta el siguiente bre
akpoint en el
caso de que lo haya o hasta el final del mismo si no hay ninguno (con Continue,
botn

o <F5>);
y la posibilidad de volver a comenzar la ejecucin (con Restart o Maysculas + <F5>)
. Adems de
las ya mencionadas, tambin existe la posibilidad de detener momentneamente la ejec
ucin del
programa mediante el botn Pause ( ) o la combinacin de teclas Ctrl+Pausa.
Figura 2.14. Ventana Immediate.
Figura 2.15. Ventana Locals.
2.9.2 Ventanas Immediate, Locals y Watches
El Debugger de Visual Basic 6.0 dispone de varias formas para consultar el valor
de variables y
propiedades, as como para ejecutar funciones y procedimientos comprobando su corr
ecto
funcionamiento. En ello juegan un papel importante tres tipos de ventanas: Immed
iate, Locals y
Watch.
La ventana Immediate (ver Figura 2.14) permite realizar diversas acciones:
1.
Imprimir el valor de cualquier variable y/o propiedad accesible la funcin o proce
dimiento
que se est ejecutando. Esto se puede hacer utilizando el mtodo Print VarName (o su

equivalente ?VarName) directamente en dicha ventana o introduciendo en el cdigo d
el
programa sentencias del tipo Debug.Print VarName. En este ltimo caso el valor de
la
variable o propiedad se escribe en la ventana Immediate sin necesidad de parar l
a
ejecucin del programa. Adems esas sentencias se guardan con el formulario y no hay

que volver a escribirlas para una nueva ejecucin. Cuando se compila el programa p
ara
producir un ejecutable las sentencias Debug.Print son ignoradas. La utilizacin de
l
mtodo Print se explica en el Apartado 7.2, en la pgina 88.
Captulo 2: El entorno de programacin Visual Basic 6.0
pgina 23
2.
Asignar valores a variables y propiedades cuando la ejecucin est detenida y proseg
uir la
ejecucin con los nuevos valores. Sin embargo, no se pueden crear nuevas variables
.
3.
Ejecutar expresiones y probar funciones y procedimientos incluyendo en la ventan
a
Immediate la llamada correspondiente.
La ventana Locals, mostrada en la Figura 2.15, muestra el valor de todas las var
iables visibles
en el procedimiento en el que est detenida la ejecucin.
Otra opcin que puede resultar til es la
de conocer permanentemente el valor de una
variable sin tener que consultarlo cada vez.
Para conocer inmediatamente el valor de una
variable se puede utilizar la ventana Quick
Watch, mostrada en la Figura 2.16. Para
observar continuamente el valor de una
variable, o expresin hay que aadirla a la
ventana Watches. Esto se hace con la opcin
Add Watch del men Debug. El valor de las
variables incluidas en la ventana Watches (ver
Figura 2.18) se actualiza automticamente,
indicndose tambin cuando no son accesibles
desde el procedimiento que se est ejecutando
(Out of Context).
La ventana Add Watch mostrada en la
Figura 2.17 permite introducir Breaks o
paradas del programa condicionales, cuando se
cumple cierta condicin o cuando el valor de la
variable cambia.
Las capacidades de Visual Basic 6.0 para
vigilar el valor de las variables pueden
activarse desde el men Debug o con algunos
botones en la barra de herramientas Debug
( ).
2.9.3 Otras posibilidades del Debugger
El Debugger de Visual Basic 6.0 permite no
slo saber qu sentencia va a ser la prxima en ejecutarse (con Debug/Show Next Statem
ent), sino
tambin decidir cul va a ser dicha sentencia (con Debug/Set Next Statement), pudien
do cambiar de
esta forma el curso habitual de la ejecucin: saltando sentencias, volviendo a una
sentencia ya
ejecutada, etc.
Visual Basic 6.0 puede dar tambin informacin sobre las llamadas a funciones y
procedimientos. Esto se hace con el comando View/Call Stack o con el botn corresp
ondiente de la
barra Debug ( ). De esta manera puede conocerse qu funcin ha llamado a qu funcin has
ta la
sentencia donde la ejecucin est detenida.
Figura 2.16. Ventana Quick Watch.
Figura 2.17. Ventana Add Watch.
Figura 2.18. Ventana Watches.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 24
3. LENGUAJE BASIC
3.1 INTRODUCCIN
En este captulo se explican los fundamentos del lenguaje de programacin Basic util
izado en el
sistema de desarrollo para Visual Basic 6.0 de Microsoft. En este manual se supo
ne que el lector no
tiene conocimientos previos de programacin.
Un programa en sentido informtico est constituido en un sentido general por variable
s
que contienen los datos con los que se trabaja y por algoritmos que son las sent
encias que operan
sobre estos datos. Estos datos y algoritmos suelen estar incluidos dentro de fun
ciones o
procedimientos.
Un procesador digital nicamente es capaz de entender aquello que est constituido p
or
conjuntos de unos y ceros. A esto se le llama lenguaje de mquina o binario, y es
muy difcil de
manejar. Por ello, desde casi los primeros aos de los ordenadores, se comenzaron
a desarrollar los
llamados lenguajes de alto nivel (tales como el Fortran, el Cobol, etc.), que es
tn mucho ms cerca
del lenguaje natural. Estos lenguajes estn basados en el uso de identificadores,
tanto para los datos
como para las componentes elementales del programa, que en algunos lenguajes se
llaman rutinas,
procedimientos, o funciones. Adems, cada lenguaje dispone de una sintaxis o conju
nto de reglas
con las que se indica de modo inequvoco las operaciones que se quiere realizar.
Los lenguajes de alto nivel son ms o menos comprensibles para el usuario, pero no
para el
procesador. Para que ste pueda ejecutarlos es necesario traducirlos a su propio l
enguaje de
mquina. Al paso del lenguaje de alto nivel al lenguaje de mquina se le denomina co
mpilacin. En
Visual Basic esta etapa no se aprecia tanto como en otros lenguajes donde el pro
gramador tiene que
indicar al ordenador explcitamente que realice dicha compilacin. Los programas de
Visual Basic
se dice que son interpretados y no compilados ya que el cdigo no se convierte a cd
igo mquina
sino que hay otro programa que durante la ejecucin interpreta las lneas de cdigo que
ha escrito
el programador. En general durante la ejecucin de cualquier programa, el cdigo es
cargado por el
sistema operativo en la memoria RAM.
3.2 COMENTARIOS Y OTRAS UTILIDADES EN LA PROGRAMACIN CON VISUAL BASIC
Visual Basic 6.0 interpreta que todo lo que est a la derecha del carcter (') en un
a lnea cualquiera
del programa es un comentario y no lo tiene en cuenta para nada. El comentario p
uede empezar al
comienzo de la lnea o a continuacin de una instruccin que debe ser ejecutada, por e
jemplo:
Esto es un comentario
A = B*x+3.4 ' tambin esto es un comentario
Los comentarios son tremendamente tiles para poder entender el cdigo utilizado, fa
cilitando
de ese modo futuras revisiones y correcciones. En programas que no contengan muc
has lneas de
cdigo puede no parecer demasiado importante, pero cuando se trata de proyectos re
almente
complejos, o desarrollados por varias personas su importancia es tremenda. En el
caso de que el
cdigo no est comentado este trabajo de actualizacin y revisin puede resultar complic
adsimo.
Otro aspecto prctico en la programacin es la posibilidad de escribir una sentencia
en ms
de una lnea. En el caso de sentencias bastante largas es conveniente cortar la lne
a para que entre
en la pantalla. En otro caso la lectura del cdigo se hace mucho ms pesada. Para el
lo es necesario
dejar un espacio en blanco al final de la lnea y escribir el carcter (_) tal y com
o se muestra en el
siguiente ejemplo:
Captulo 3: Lenguaje BASIC pgina 25
str1 = "Londres" : str2 = "Pars" 'Se inicializan las variables
Frase = "Me gustara mucho viajar a " & _
str1 & " y a " & str2
'El contenido de Frase sera: "Me gustara mucho viajar a Londres y a Pars
Una limitacin a los comentarios en el cdigo es que no se pueden introducir en una
lnea en
la que se ha introducido el carcter de continuacin (_).
La sintaxis de Visual Basic 6.0 permite tambin incluir varias sentencias en una m
isma
lnea. Para ello las sentencias deben ir separadas por el carcter dos puntos (:). P
or ejemplo:
m = a : n = b : resto = m Mod n ' Tres sentencias en una lnea
3.3 PROYECTOS Y MDULOS
Un proyecto realizado en Visual Basic 6.0 es el conjunto de todos los ficheros o
mdulos
necesarios para que un programa funcione. La informacin referente a esos ficheros
se almacena en
un fichero del tipo ProjectName.vbp. La extensin *.vbp del fichero hace referenci
a a Visual Basic
Project.
Si se edita este fichero con cualquier editor de texto se comprueba que la infor
macin que
almacena es la localizacin en los discos de los mdulos que conforman ese proyecto,
los controles
utilizados (ficheros con extensin .ocx), etc. En el caso ms simple un proyecto est
formado por un
nico formulario y constar de dos ficheros: el que define el proyecto (*.vbp) y el
que define el
formulario (*.frm).
Los mdulos que forman parte de un proyecto pueden ser de varios tipos: aquellos q
ue estn
asociados a un formulario (*.frm), los que contienen nicamente lneas de cdigo Basic
(*.bas)
llamados mdulos estndar y los que definen agrupaciones de cdigo y datos denominadas
clases
(*.cls), llamados mdulos de clase.
Un mdulo *.frm est constituido por un formulario y toda la informacin referente a l
os
controles (y a sus propiedades) en l contenidos, adems de todo el cdigo programado
en los
eventos de esos controles y, en el caso de que existan, las funciones y procedim
ientos propios de
ese formulario. En general se llama funcin a una porcin de cdigo independiente que
realiza una
determinada actividad. En Visual Basic existen dos tipos de funciones: las llama
das function, que
se caracterizan por tener valor de retorno, y los procedimientos o procedures, q
ue no lo tienen. En
otros lenguajes, como C/C++/Java, las function realizan los dos papeles.
Un mdulo de cdigo estndar *.bas contendr una o varias funciones y/o procedimientos,
adems de las variables que se desee, a los que se podr acceder desde cualquiera de
los mdulos
que forman el proyecto.
3.3.1 mbito de las variables y los procedimientos
Se entiende por mbito de una variable (ver Apartado 3.3.1, en la pgina 25) la part
e de la
aplicacin donde la variable es visible (accesible) y por lo tanto puede ser utili
zada en cualquier
expresin.
3.3.1.1 Variables y funciones de mbito local
Un mdulo puede contener variables y procedimientos o funciones pblicos y privados.
Los
pblicos son aquellos a los que se puede acceder libremente desde cualquier punto
del proyecto.
Para definir una variable, un procedimiento o una funcin como pblico es necesario
preceder a la
definicin de la palabra Public, como por ejemplo:
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 26
Public Variable1 As Integer
Public Sub Procedimiento1 (Parametro1 As Integer, )
Public Function Funcion1 (Parametro1 As Integer, ) As Integer
Para utilizar una variable Public o llamar a una funcin Public definidas en un fo
rmulario
desde otro mdulo se debe preceder el nombre de la variable o procedimiento con el
nombre del
formulario al que pertenece, como por ejemplo:
Modulo1.Variable1
Call Modulo1.Procedimiento1(Parametro1, )
Retorno = Modulo1.Funcion1(Parametro1, )
Sin embargo si el mdulo al que pertenecen la variable o el procedimiento Public e
s un
mdulo estndar (*.bas) no es necesario poner el nombre del mdulo ms que si hay coinci
dencia
de nombres con los de otro mdulo tambin estndar. Una variable Private, por el contr
ario, no es
accesible desde ningn otro mdulo distinto de aqul en el que se haya declarado.
Se llama variable local a una variable definida dentro de un procedimiento o fun
cin. Las
variables locales no son accesibles ms que en el procedimiento o funcin en que estn
definidas.
Una variable local es reinicializada (a cero, por defecto) cada vez que se entra
en el
procedimiento. Es decir, una variable local no conserva su valor entre una llama
da al procedimiento
y la siguiente. Para hacer que el valor de la variable se conserve hay que decla
rar la variable como
static (como por ejemplo: Static n As Integer). Visual Basic inicializa una vari
able esttica
solamente la primera vez que se llama al procedimiento. Para declarar una variab
le esttica, se
utiliza la palabra Static en lugar de Dim. Un poco ms adelante se ver que Dim es u
na palabra
utilizada para crear variables. Si un procedimiento se declara Static todss sus
variables locales
tienen carcter Static.
3.3.1.2 Variables y funciones de mbito global
Se puede acceder a una variable o funcin global desde cualquier parte de la aplic
acin. Para hacer
que una variable sea global, hay que declararla en la parte general de un mdulo *
.bas o de un
formulario de la aplicacin. Para declarar una variable global se utiliza la palab
ra Public. Por
ejemplo:
Public var1_global As Double, var2_global As String
De esta forma se podr acceder a las variables var1_global, var2_global desde todo
s los
formularios. La Tabla 3.1 muestra la accesibilidad de las variable en funcin de dn
de y cmo se
hayan declarado1.
La diferencia entre las variables y/o procedimientos Public de los formularios y
de los
mdulos estndar est en que las de los procedimientos deben ser cualificadas (precedi
das) por el
nombre del formulario cuando se llaman desde otro mdulo distinto, mientras que la
s de un mdulo
estndar (*.bas) slo necesitan ser cualificadas si hay colisin o coincidencia de nom
bres.
Las palabras Global y Dim proceden de versiones antiguas de Visual Basic y debe
preferirse la utilizacin de las
palabras clave Public y Private, que expresan mejor su significado.
Captulo 3: Lenguaje BASIC pgina 27
Tipo de variable Lugar de declaracin Accesibilidad
Global o Public Declaraciones de *.bas Desde todos los formularios
Dim o Private Declaraciones de *.bas Desde todas las funciones de ese
mdulo
Public Declaraciones de *.frm Desde cualquier procedimiento
del propio formulario y desde
otros precedida del nombre del
modulo en el que se ha declarado
Dim o Private Declaraciones de *.frm Desde cualquier procedimiento
del propio formulario
Dim Cualquier procedimiento de
un mdulo
Desde el propio procedimiento
Tabla 3.1. Accesibilidad de las variables.
3.4 VARIABLES
3.4.1 Identificadores
La memoria de un computador consta de un conjunto enorme de bits (1 y 0), en la
que se almacenan
datos y programas. Las necesidades de memoria de cada tipo de dato no son homogne
as (por
ejemplo, un carcter alfanumrico ocupa un byte (8 bits), mientras que un nmero real
con 16 cifras
ocupa 8 bytes), y tampoco lo son las de los programas. Adems, el uso de la memori
a cambia a lo
largo del tiempo dentro incluso de una misma sesin de trabajo, ya que el sistema
reserva o libera
memoria a medida que la va necesitando.
Cada posicin de memoria en la que un dato est almacenado (ocupando un conjunto de
bits)
puede identificarse mediante un nmero o una direccin, y ste es el modo ms bsico de re
ferirse a
una determinada informacin. No es, sin embargo, un sistema cmodo o prctico, por la
nula
relacin nemotcnica que una direccin de memoria suele tener con el dato contenido, y
porque
como se ha dicho antes la direccin fsica de un dato cambia de ejecucin a ejecucin, o
incluso en
el transcurso de una misma ejecucin del programa. Lo mismo ocurre con partes conc
retas de un
programa determinado.
Dadas las citadas dificultades para referirse a un dato por medio de su direccin
en memoria,
se ha hecho habitual el uso de identificadores. Un identificador es un nombre si
mblico que se
refiere a un dato o programa determinado. Es muy fcil elegir identificadores cuyo
nombre guarde
estrecha relacin con el sentido fsico, matemtico o real del dato que representan. A
s por ejemplo,
es lgico utilizar un identificador llamado salario_bruto o salarioBruto para repr
esentar el coste
anual de un empleado. El usuario no tiene nunca que preocuparse de direcciones fs
icas de
memoria: el sistema se preocupa por l por medio de una tabla, en la que se relaci
ona cada
identificador con el tipo de dato que representa y la posicin de memoria en la qu
e est almacenado.
Visual Basic 6.0, como todos los dems lenguajes de programacin, tiene sus propias
reglas
para elegir los identificadores. Los usuarios pueden elegir con gran libertad lo
s nombres de sus
variables y funciones, teniendo siempre cuidado de respetar las reglas del lengu
aje y de no utilizar
un conjunto de palabras reservadas (keywords), que son utilizadas por el propio
lenguaje. En el
Apartado 3.4.3, en la pgina 28, se explicarn las reglas para elegir nombres y cules
son las
palabras reservadas del lenguaje Visual Basic 6.0.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 28
3.4.2 Variables y constantes
Una variable es un nombre que designa a una zona de memoria (se trata por tanto
de un
identificador), que contiene un valor de un tipo de informacin.
Tal y como su nombre indica, las variables
pueden cambiar su valor a lo largo de la ejecucin de
un programa. Completando a las variables existe lo
que se denomina constantes las cuales son
identificadores pero con la particularidad de que el
valor que se encuentra en ese lugar de la memoria
slo puede ser asignado una nica vez. El
tratamiento y tipos de datos es igual al de las
variables.
Para declarar un dato como constante
nicamente es necesario utilizar la palabra Const en
la declaracin de la variable. Si durante la ejecucin
se intenta variar su valor se producir un error.
Ejemplos:
Const MyVar = 459 Las constantes son privadas por defecto.
Public Const MyString = "HELP" ' Declaracin de una constante pblica.
Private Const MyInt As Integer = 5 ' Declaracin de un entero constante.
Const Str = "Hi", PI As Double = 3.14 ' Mltiples constantes en una lnea.
Visual Basic 6.0 tiene sus propias constantes, muy tiles por cierto. Algunas ya s
e han visto al
hablar de los colores. En general estas constantes empiezan por ciertos caracter
es como vb (u otros
similares que indican a que grupo pertenecen) y van seguidas de una o ms palabras
que indican su
significado. Para ver las constantes disponibles se puede utilizar el comando Vi
ew/Object Browser,
tal como se muestra en la Figura 3.1.
3.4.3 Nombres de variables
El nombre de una variable (o de una constante) tiene que comenzar siempre por un
a letra y puede
tener una longitud hasta 255 caracteres. No se admiten espacios o caracteres en
blanco, ni puntos (.),
ni otros caracteres especiales.
Los caracteres pueden ser letras, dgitos, el carcter de subrayado (_) y los caract
eres de
declaracin del tipo de la variable (%, &, #, !, @, y $ ). El nombre de una variab
le no puede ser una
palabra reservada del lenguaje (For, If, Loop, Next, Val, Hide, Caption, And, ..
.). Para saber
cules son las palabras reservadas en Visual Basic 6.0 puede utilizarse el Help de
dicho programa,
buscando la referencia Reserved Words. De ordinario las palabras reservadas del
lenguaje aparecen
de color azul en el editor de cdigo, lo que hace ms fcil saber si una palabra es re
servada o no.
A diferencia de C, Matlab, Maple y otros lenguajes de programacin, Visual Basic 6
.0 no
distingue entre minsculas y maysculas. Por tanto, las variables LongitudTotal y lo
ngitudtotal
son consideradas como idnticas (la misma variable). En Visual Basic 6.0 es habitu
al utilizar las
letras maysculas para separar las distintas palabras que estn unidas en el nombre
de una variable,
como se ha hecho anteriormente en la variable LongitudTotal. La declaracin de una
variable o la
primera vez que se utiliza determnan cmo se escribe en el resto del programa.
Tambin es habitual entre los programadores, aunque no obligado, el utilizar nombr
es con
todo maysculas para los nombres de las constantes simblicas, como por ejemplo PI.
Figura 3.1. Constantes de color predefinidas.
Captulo 3: Lenguaje BASIC pgina 29
3.4.4 Tipos de datos
Al igual que C y otros lenguajes de programacin, Visual Basic dispone de distinto
s tipos de datos,
aplicables tanto para constantes como para variables. La Tabla 3.2 muestra los t
ipos de datos
disponibles en Visual Basic.
Tipo Descripcin Carcter de
declaracin
Rango
Boolean Binario True o False
Byte Entero corto 0 a 255
Integer Entero (2 bytes) % -32768 a 32767
Long Entero largo (4 bytes) & -2147483648 a 2147483647
Single Real simple precisin (4 bytes ) ! -3.40E+38 a 3.40E+38
Double Real doble precisin ( 8 bytes) # -1.79D+308 a 1.79D+308
Currency Nmero con punto decimal fijo (8 bytes) @ -9.22E+14 a 9.22E+14
String Cadena de caracteres (4 bytes + 1
byte/car hasta 64 K)
$ 0 a 65500 caracteres.
Date Fecha (8 bytes) 1 de enero de 100 a 31 de diciembre de
9999. Indica tambin la hora, desde 0:00:00
a 23:59:59.
Variant Fecha/hora;
nmeros enteros, reales, o caracteres
(16 bytes + 1 byte/car. en cadenas de
caracteres)
ninguno F/h: como Date
nmeros: mismo rango que el tipo de valor
almacenado
User-defined Cualquier tipo de dato o estructura de
datos. Se crean utilizando la sentencia
Type (Ver Apartado 3.10)
ninguno
Tabla 3.2. Tipos de datos en Visual Basic 6.0.
En el lenguaje Visual Basic 6.0 existen dos formas de agrupar varios valores baj
o un mismo
nombre. La primera de ellas son los arrays (vectores y matrices), que agrupan da
tos de tipo
homogneo. La segunda son las estructuras, que agrupan informacin heterognea o de di
stinto
tipo. En Visual Basic 6.0 las estructuras son verdaderos tipos de datos definibl
es por el usuario.
Para declarar las variables se utiliza la sentencia siguiente:
Dim NombreVariable As TipoVariable
cuyo empleo se muestra en los ejemplos siguientes:
Dim Radio As Double, Superficie as Single
Dim Nombre As String
Dim Etiqueta As String * 10
Dim Francos As Currency
Dim Longitud As Long, X As Currency
Es importante evitar declaraciones del tipo:
Dim i, j As Integer
pues contra lo que podra parecer a simple vista no se crean dos variables Integer
, sino una Integer
(j) y otra Variant (i).
En Visual Basic 6.0 no es estrictamente necesario declarar todas las variables q
ue se van a
utilizar (a no ser que se elija la opcin Option Explicit que hace obligatorio el
declararlas), y hay
otra forma de declarar las variables anteriores, utilizando los caracteres espec
iales vistos
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 30
anteriormente. As por ejemplo, el tipo de las variables del ejemplo anterior se p
uede declarar al
utilizarlas en las distintas expresiones, ponindoles a continuacin el carcter que y
a se indic en la
Tabla 3.2, en la forma:
Radio# doble precisin
Nombre$ cadena de caracteres
Francos@ unidades monetarias
Longitud& entero largo
Esta forma de indicar el tipo de dato no es la ms conveniente. Se mantiene en las
sucesivas
versiones de Visual Basic por la compatibilidad con cdigos anteriores. Es preferi
ble utilizar la
notacin donde se escribe directamente el tipo de dato.
3.4.5 Eleccin del tipo de una variable
Si en el cdigo del programa se utiliza una variable que no ha sido declarada, se
considera que esta
variable es de tipo Variant. Las variables de este tipo se adaptan al tipo de in
formacin o dato que
se les asigna en cada momento. Por ejemplo, una variable tipo Variant puede cont
ener al principio
del programa un string de caracteres, despus una variable de doble precisin, y fin
almente un
nmero entero. Son pues variables muy flexibles, pero su uso debe restringirse por
que ocupan ms
memoria (almacenan el tipo de dato que contienen, adems del propio valor de dicho
dato) y
requieren ms tiempo de CPU que los restantes tipos de variables.
En general es el tipo de dato (los valores que puede tener en la realidad) lo qu
e determina qu
tipo de variable se debe utilizar. A continuacin se muestran algunos ejemplos:
Integer para numerar las filas y columnas de una matriz no muy grande
Long para numerar los habitantes de una ciudad o los nmeros de telfonos
Boolean para una variable con slo dos posibles valores (s o no)
Single para variables fsicas con decimales que no exijan precisin
Double para variables fsicas con decimales que exijan precisin
Currency para cantidades grandes de dinero
Es muy importante tener en cuenta que se debe utilizar el tipo de dato ms sencill
o que
represente correctamente el dato real ya que en otro caso se ocupar ms memoria y l
a ejecucin
de los programas o funciones ser ms lenta.
3.4.6 Declaracin explcita de variables
Una variable que se utiliza sin haber sido declarada toma por defecto el tipo Va
riant. Puede ocurrir
que durante la programacin, se cometa un error y se escriba mal el nombre de una
variable. Por
ejemplo, se puede tener una variable " declarada como entera, y al programar ref
erirse a ella por
error como "; Visual Basic supondra que sta es una nueva variable de tipo Variant.

Para evitar este tipo de errores, se puede indicar a Visual Basic que genere un
mensaje de
error siempre que encuentre una variable no declarada previamente. Para ello lo
ms prctico es
establecer una opcin por defecto, utilizando el comando Environment del men Tools/
Options; en
el cuadro que se abre se debe poner Yes en la opcin Require Variable Declaration.
Tambin se
puede hacer esto escribiendo la sentencia siguiente en la seccin de declaraciones
de cada
formulario y de cada mdulo:
Option Explicit
Captulo 3: Lenguaje BASIC pgina 31
3.5 OPERADORES
La Tabla 3.3 presenta el conjunto de operadores que soporta Visual Basic 6.0.
Tipo Operacin Operador en Vbasic
Aritmtico Exponenciacin ^
Cambio de signo (operador unario) -
Multiplicacin, divisin *, /
Divisin entera \
Resto de una divisin entera Mod
Suma y resta +, -
Concatenacin Concatenar o enlazar & +
Relacional Igual a =
Distinto <>
Menor que / menor o igual que < <=
Mayor que / mayor o igual que > >=
Otros Comparar dos expresiones de caracteres Like
Comparar dos referencias a objetos Is
Lgico Negacin Not
And And
Or inclusivo Or
Or exclusivo Xor
Equivalencia (opuesto a Xor) Eqv
Implicacin (False si el primer operando es True
y el segundo operando es False)
Imp
Tabla 3.3. Operadores de Visual Basic 6.0.
Cuando en una expresin aritmtica intervienen operandos de diferentes tipos, el res
ultado se
expresa, generalmente, en la misma precisin que la del operando que la tiene ms al
ta. El orden, de
menor a mayor, segn la precisin es Integer, Long, Single, Double y Currency.
Los operadores relacionales, tambin conocidos como operadores de comparacin, compa
ran
dos expresiones dando un resultado True (verdadero), False (falso) o Null (no vli
do).
El operador & realiza la concatenacin de dos operandos. Para el caso particular d
e que
ambos operandos sean cadenas de caracteres, puede utilizarse tambin el operador +
. No obstante,
para evitar ambigedades (sobre todo con variables de tipo Variant) es mejor utili
zar &.
El operador Like sirve para comparar dos cadenas de caracteres. La sintaxis para
este operador
es la siguiente:
Respuesta = Cadena1 Like Cadena2
donde la variable Respuesta ser True si la Cadena1 coincide con la Cadena2, False
si no
coinciden y Null si Cadena1 y/o Cadena2 son Null.
Para obtener ms informacin se puede consultar el Help de Visual Basic.
3.6 SENTENCIAS DE CONTROL
Las sentencias de control, denominadas tambin estructuras de control, permiten to
mar decisiones
y realizar un proceso repetidas veces. Son los denominados bifurcaciones y bucle
s. Este tipo de
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 32
estructuras son comunes en cuanto a concepto en la mayora de los lenguajes de pro
gramacin,
aunque su sintaxis puede variar de un lenguaje de programacin a otro. Se trata de
unas estructuras
muy importantes ya que son las encargadas de controlar el flujo de un programa s
egn los
requerimientos del mismo. Visual Basic 6.0 dispone de las siguientes estructuras
de control:
If ... Then ... Else
Select Case
For ... Next
Do ... Loop
While Wend
For Each Next
3.6.1 Sentencia IF ... THEN ... ELSE ...
Esta estructura permite ejecutar condicionalmente una o ms sentencias y puede esc
ribirse de dos
formas. La primera ocupa slo una lnea y tiene la forma siguiente:
If condicion Then sentencia1 [Else sentencia2]
La segunda es ms general y se muestra a continuacin:
If condicion Then
sentencia(s)
[Else
sentencia(s)]
End If
Si condicion es True (verdadera), se ejecutan las sentencias que estn a continuac
in de
Then, y si condicion es False (falsa), se ejecutan las sentencias que estn a cont
inuacin de Else, si
esta clusula ha sido especificada (pues es opcional). Para indicar que se quiere
ejecutar uno de
varios bloques de sentencias dependientes cada uno de ellos de una condicin, la e
structura
adecuada es la siguiente:
If condicion1 Then
sentencias1
ElseIf condicion2 Then
sentencias2
Else
sentencia-n
End If
Si se cumple la condicion1 se ejecutan las sentencias1, y si no se cumple, se ex
aminan
secuencialmente las condiciones siguientes hasta Else, ejecutndose las sentencias
correspondientes
al primer ElseIf cuya condicin se cumpla. Si todas las condiciones son falsas, se
ejecutan las
sentencias-n correspondientes a Else, que es la opcin por defecto. La Figura 3.2
presenta
esquemticamente ambas formas de representar estas sentencias:
Captulo 3: Lenguaje BASIC pgina 33
condicin
Bloque 1 de
sentencias
Bloque 2 de
sentencias
True
False
condicin 1
Bloque 1
True
condicin 2
Bloque 3
Bloque 2
False
False
True
Figura 3.2. Bifurcaciones If e If...Else.
Por ejemplo,
Numero = 53 Se inicializa la variable.
If Numero < 10 Then
Digitos = 1
ElseIf Numero < 100 Then
' En este caso la condicin se cumple (True) luego se ejecuta lo siguiente.
Digitos = 2
Else 'En el caso en que no se cumplan los dos anteriores se asigna 3
Digitos = 3
End If
3.6.2 Sentencia SELECT CASE
Esta sentencia permite ejecutar una de entre varias acciones en funcin del valor
de una expresin.
Es una alternativa a If ... Then ... ElseIf cuando se compara la misma expresin c
on diferentes
valores. Su forma general es la siguiente:
Select Case expresion
Case etiq1
[sentencias1]
Case etiq2
[sentencias2]
Case Else
sentenciasn
End Select
donde expresion es una expresin numrica o alfanumrica, y etiq1, etiq2, ... pueden a
doptar las
formas siguientes:
1. expresion
2. expresion To expresion
3. Is operador-de-relacin expresion
4. combinacin de las anteriores separadas por comas
Por ejemplo,
Numero = 8 Se inicializan las variable.
Select Case Numero Se va a evaluar la variable Numero.
Case 1 To 5 ' Numero est entre 1 y 5.
Resultado = "Se encuentra entre 1 y 5"
' Lo siguiente se ejecuta si es True la expresin.
Case 6, 7, 8 ' Numero es uno de los tres valores.
Resultado = "Se encuentra entre 6 y 8"
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 34
Case Is = 9 , Is = 10 ' Numero es 9 10.
Resultado = "El valor es 9 o 10"
Case Else ' Resto de valores.
Resultado = "El nmero no se encuentra entre 1 y 10"
End Select
Cuando se utiliza la forma expresion To expresion, el valor ms pequeo debe aparece
r en
primer lugar.
Cuando se ejecuta una sentencia Select Case, Visual Basic evala la expresion y el
control
del programa se transfiere a la sentencia cuya etiqueta tenga el mismo valor que
la expresin
evaluada, ejecutando a continuacin el correspondiente bloque de sentencias. Si no
existe un valor
igual a la expresion entonces se ejecutan las sentencias a continuacin de Case El
se.
3.6.3 Sentencia FOR ... NEXT
La sentencia For da lugar a un lazo o bucle, y permite ejecutar un conjunto de s
entencias cierto
nmero de veces. Su forma general es:
For variable = expresion1 To expresion2 [Step expresion3]
[sentencias]
Exit For
[sentencias]
Next [variable]
Cuando se ejecuta una sentencia For, primero se asigna el valor de la expresion1
a la variable
y se comprueba si su valor es mayor o menor que la expresion2. En caso de ser me
nor se ejecutan
las sentencias, y en caso de ser mayor el control del programa salta a las lneas
a continuacin de
Next. Todo esto sucede en caso de ser la expresion3 positiva. En caso contrario
se ejecutarn las
sentencias cuando la variable sea mayor que expresion2. Una vez ejecutadas las s
entencias, la
variable se incrementa en el valor de la expresion3, o en 1 si Step no se especi
fica, volvindose a
efectuar la comparacin entre la variable y la expresion2, y as sucesivamente.
La sentencia Exit For es opcional y permite salir de un bucle For ... Next antes
de que ste
finalice. Por ejemplo,
MyString="Informtica "
For Words = 3 To 1 Step -1 ' 3 veces decrementando de 1 en 1.
For Chars = Words To Words+4 '5 veces.
MyString = MyString & Chars ' Se aade el nmero Chars al string.
Next Chars ' Se incrementa el contador
MyString = MyString & " " ' Se aade un espacio.
Next Words
'El valor de MyString es: Informtica 34567 23456 12345
3.6.4 Sentencia DO ... LOOP
Un Loop (bucle) repite la ejecucin de un conjunto de sentencias mientras una cond
icin dada sea
cierta, o hasta que una condicin dada sea cierta. La condicin puede ser verificada
antes o despus
de ejecutarse el conjunto de sentencias. Sus posibles formas son las siguientes:

Formato 1:
Do [{While/Until} condicion]
[sentencias]
[Exit Do]
[sentencias]
Loop
Captulo 3: Lenguaje BASIC pgina 35
Formato 2:
Do
[sentencias]
[Exit Do]
[sentencias]
Loop [{While/Until}condicion]
La sentencia opcional Exit Do permite salir de una bucle Do ... Loop antes de qu
e finalice
ste. Por ejemplo,
Check = True Se inicializan las variables.
Counts = 0
Do ' Empieza sin comprobar ninguna condicin.
Do While Counts < 20 ' Bucle que acaba si Counts>=20 o con Exit Do.
Counts = Counts + 1 ' Se incrementa Counts.
If Counts = 10 Then ' Si Counts es 10.
Check = False ' Se asigna a Check el valor False.
Exit Do ' Se acaba el segundo Do.
End If
Loop
Loop Until Check = False ' Salir del "loop" si Check es False.
En el ejemplo mostrado, se sale de los bucles siempre con Counts = 10. Es necesa
rio fijarse
que si se inicializa Counts con un nmero mayor o igual a 10 se entrara en un bucle
infinito (el
primer bucle acabara con Counts = 20 pero el segundo no finalizara nunca, bloquendo
se el
programa y a veces el ordenador).
3.6.5 Sentencia WHILE WEND
Esta sentencia es otra forma de generar bucles que se recorren mientras se cumpl
a la condicin
inicial. Su estructura es la siguiente:
While condicion
[sentencias]
Wend
Por ejemplo,
Counts = 0 Se inicializa la variable.
While Counts < 20 Se comprueba el valor de Counts.
Counts = Counts + 1 Se incrementa el valor de Counts.
Wend Se acaba el bucle cuando Counts > 19.
En cualquier caso se recuerda que la mejor forma de mirar y aprender el funciona
miento de
todas estas sentencias es mediante el uso del Help de Visual Basic. Ofrece una e
xplicacin de cada
comando con ejemplos de utilizacin.
3.6.6 Sentencia FOR EACH ... NEXT
Esta construccin es similar al bucle For, con la diferencia de que la variable qu
e controla la
repeticin del bucle no toma valores entre un mnimo y un mximo, sino a partir de los
elementos
de un array (o de una coleccin de objetos). La forma general es la siguiente:
For Each variable In grupo
[sentencias]
Next variable
Con arrays variable tiene que ser de tipo Variant. Con colecciones variable pued
e ser Variant
o una variable de tipo Object. Esta construccin es muy til cuando no se sabe el nme
ro de
elementos que tiene el array o la coleccin de objetos.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero
pgina 36
3.7 ALGORITMOS
3.7.1 Introduccin
Un algoritmo es en un sentido amplio una secuencia de pasos o etapas que conducen
a la
realizacin de una tarea. Los primeros algoritmos nacieron para resolver problemas
matemticos.
Antes de escribir un programa de ordenador, hay que tener muy claro el algoritmo
, es decir, cmo se
va a resolver el problema considerado. Es importante desarrollar buenos algoritm
os (correctos y
eficientes). Una vez que el algoritmo est desarrollado, el problema se puede reso
lver incluso sin
entenderlo.
Ejemplo: Algoritmo de Euclides para calcular el m.c.d. de dos nmeros enteros A y
B
1.
Asignar a M el valor de A, y a N el valor de B.
2.
Dividir M por N, y llamar R al resto.
3.
Si R distinto de 0, asignar a M el valor de N, asignar a N el valor de R,volver
a comenzar
la etapa 2.
4.
Si R = 0, N es el m.c.d. de los nmeros originales
Es muy fcil pasar a Visual Basic este algoritmo:
Dim a, b As Integer
a = 45: b = 63 Estos son los valores M y N
If a < b Then
Se permutan a y b
temp = a : a = b : b = temp
End If
m = a : n = b : resto = m Mod n Mod devuelve el valor del resto
While resto <> 0 Mientras el resto sea distinto de 0
m = n: n = resto:
resto = m Mod n
Wend
' La solucin es la variable n. En este caso el resultado es 9
Si son necesarios, deben existir criterios de terminacin claros (por ejemplo, par
a calcular
seno(x) por desarrollo en serie se deber indicar el nmero de trminos de la serie).
No puede haber
etapas imposibles (por ejemplo: "imprimir el conjunto de todos los nmeros enteros
").
3.7.2 Representacin de algoritmos
Existen diversas formas de representar algoritmos. A continuacin se presentan alg
unas de ellas:

Detallada: Se trata de escribir el algoritmo en un determinado lenguaje de progr
amacin
(lenguaje de mquina, ensamblador, fortran, basic, pascal, C, Matlab, Visual Basic
, ...).

Simblica: Las etapas son descritas con lenguaje prximo al natural, con el grado de
detalle
adecuado a la etapa de desarrollo del programa.

Grfica: por medio de diagramas de flujo.
La sintaxis (el modo de escribir) debe representar correctamente la semntica (el
contenido).
La sintaxis debe ser clara, sencilla y accesible.
En cualquier caso e independientemente del tipo de representacin utilizada lo imp
ortante es
tener muy claro el algoritmo a realizar y ponerlo por escrito en forma de esquem
a antes de ponerse a
programarlo. Merece la pena pasar unos minutos realizando un esquema sobre papel
antes de
ponerse a teclear el cdigo sobre un teclado de ordenador.
Captulo 3: Lenguaje BASIC
pgina 37
3.8 FUNCIONES Y PROCEDIMIENTOS
3.8.1 Conceptos generales sobre funciones
Las aplicaciones informticas que habitualmente se utilizan, incluso a nivel de in
formtica personal,
suelen contener decenas y an cientos de miles de lneas de cdigo fuente. A medida qu
e los
programas se van desarrollando y aumentan de tamao, se convertiran rpidamente en si
stemas
poco manejables si no fuera por la modularizacin, que es el proceso consistente e
n dividir un
programa muy grande en una serie de mdulos mucho ms pequeos y manejables. A estos md
ulos
se les suele denominar de distintas formas (subprogramas, subrutinas, procedimie
ntos, funciones,
etc.) segn los distintos lenguajes. Sea cual sea la nomenclatura, la idea es sin
embargo siempre la
misma: dividir un programa grande en un conjunto de subprogramas o funciones ms p
equeas que
son llamadas por el programa principal; stas a su vez llaman a otras funciones ms
especficas y as
sucesivamente.
La divisin de un programa en unidades ms pequeas o funciones presenta entre otras las

ventajas siguientes:
1.
Modularizacin. Cada funcin tiene una misin muy concreta, de modo que nunca tiene un

nmero de lneas excesivo y siempre se mantiene dentro de un tamao manejable. Adems,
una misma funcin (por ejemplo, un producto de matrices, una resolucin de un sistem
a de
ecuaciones lineales, ...) puede ser llamada muchas veces en un mismo programa, e
incluso
puede ser reutilizada por otros programas. Cada funcin puede ser desarrollada y c
omprobada
por separado.
2.
Ahorro de memoria y tiempo de desarrollo. En la medida en que una misma funcin es

utilizada muchas veces, el nmero total de lneas de cdigo del programa disminuye, y
tambin lo hace la probabilidad de introducir errores en el programa.
3.
Independencia de datos y ocultamiento de informacin. Una de las fuentes ms comunes
de
errores en los programas de computador son los efectos colaterales o perturbacio
nes que se
pueden producir entre distintas partes del programa. Es muy frecuente que al hac
er una
modificacin para aadir una funcionalidad o corregir un error, se introduzcan nuevo
s errores
en partes del programa que antes funcionaban correctamente. Una funcin es capaz d
e
mantener una gran independencia con el resto del programa, manteniendo sus propi
os datos y
definiendo muy claramente la interfaz o comunicacin con la funcin que la ha llamad
o y con
las funciones a las que llama, y no teniendo ninguna posibilidad de acceso a la
informacin
que no le compete.
3.8.2 Funciones y procedimientos Sub en Visual Basic 6.0
En Visual Basic 6.0 se distingue entre funciones y procedimientos Sub. En ocasio
nes se utiliza la
palabra genrica procedimiento para ambos. La fundamental diferencia entre un proc
edimiento Sub
y una funcin es que sta ltima puede ser utilizada en una expresin porque tiene un va
lor de
retorno. El valor de retorno ocupa el lugar de la llamada a la funcin donde esta
aparece. Por
ejemplo, si en una expresin aparece sin(x) se calcula el seno de la variable x y
el resultado es el
valor de retorno que sustituye a sin(x) en la expresin en la que apareca. Por tant
o, las funciones
devuelven valores, a diferencia de los procedimientos que no devuelven ningn valo
r, y por tanto no
pueden ser utilizadas en expresiones. Un procedimiento Sub es un segmento de cdig
o
independiente del resto, que una vez llamado por el programa, ejecuta un nmero de
terminado de
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 38
instrucciones, sin necesidad de devolver ningn valor al mismo (puede dar resultad
os modificando
los argumentos), mientras que una funcin siempre tendr un valor de retorno.
Los nombres de los procedimientos tienen reglas de visibilidad parecidas a las d
e las
variables. Para llamar desde un formulario a un procedimiento Public definido en
otro formulario es
necesario preceder su nombre por el del formulario en que est definido. Sin embar
go, si se desea
llamar a un procedimiento definido en un mdulo estndar (*.bas) no es necesario pre
cederlo del
nombre del mdulo ms que si hay coincidencia de nombre con otro procedimiento de ot
ro mdulo
estndar.
3.8.3 Funciones (function)
La sintaxis correspondiente a una funcin es la siguiente:
[Static] [Private] Function nombre ([parmetros]) [As tipo]
[sentencias]
[nombre = expresion]
[Exit Function]
[sentencias]
[nombre = expresion]
End Function
donde nombre es el nombre de la funcin. Ser de un tipo u otro dependiendo del dato
que
devuelva. Para especificar el tipo se utiliza la clusula As Tipo (Integer, Long,
Single, Double,
Currency, String o Variant). parmetros son los argumentos que son pasados cuando
se llama a la
funcin. Visual Basic asigna el valor de cada argumento en la llamada al parmetro q
ue ocupa su
misma posicin. Si no se indica un tipo determinado los argumentos son Variant por
defecto. Como
se ver en un apartado posterior, los argumentos pueden ser pasados por referencia
o por valor.
El nombre de la funcin, que es el valor de retorno, acta como una variable dentro
del
cuerpo de la funcin. El valor de la variable expresion es almacenado en el propio
nombre de la
funcin. Si no se efecta esta asignacin, el resultado devuelto ser 0 si la funcin es n
umrica, nulo
("") si la funcin es de caracteres, o Empty si la funcin es Variant.
Exit Function permite salir de una funcin antes de que sta finalice y devolver as e
l control
del programa a la sentencia inmediatamente a continuacin de la que efectu la llama
da a la
funcin.
La sentencia End Function marca el final del cdigo de la funcin y, al igual que la
Exit
Function, devuelve el control del programa a la sentencia siguiente a la que efe
ctu la llamada,
pero lgicamente una vez finalizada la funcin.
La llamada a una funcin se hace de diversas formas. Por ejemplo, una de las ms usu
ales es
la siguiente:
variable = nombre([argumentos])
donde argumentos son un lista de constantes, variables o expresiones separadas p
or comas que son
pasadas a la funcin. En principio, el nmero de argumentos debe ser igual al nmero d
e parmetros
de la funcin. Los tipos de los argumentos deben coincidir con los tipos de sus co
rrespondientes
parmetros, de lo contrario puede haber fallos importantes en la ejecucin del progr
ama. Esta regla
no rige si los argumentos se pasan por valor (concepto que se ver ms adelante).
En cada llamada a una funcin hay que incluir los parntesis, aunque sta no tenga
argumentos.
Captulo 3: Lenguaje BASIC pgina 39
El siguiente ejemplo corresponde a una funcin que devuelve como resultado la raz c
uadrada
de un nmero N:
Function Raiz (N As Double) As Double
If N < 0 Then
Exit Function
Else
Raiz = Sqr(N)
End Function
La llamada a esta funcin se hace de la forma siguiente:
Cuadrada = Raiz(Num)
A diferencia de C y C++ en Visual Basic 6.0 no es necesario devolver explcitament
e el valor
de retorno, pues el nombre de la funcin ya contiene el valor que se desea devolve
r. Tampoco es
necesario declarar las funciones antes de llamarlas.
3.8.4 Procedimientos Sub
La sintaxis que define un procedimiento Sub es la siguiente:
[Static] [Private] Sub nombre [(parmetros)]
[sentencias]
[Exit Sub]
[sentencias]
End Sub
La explicacin es anloga a la dada para funciones.
La llamada a un procedimiento Sub puede ser de alguna de las dos formas siguient
es:
Call nombre[(argumentos)]
o bien, sin pasar los argumentos entre parntesis, sino ponindolos a continuacin del
nombre
simplemente separados por comas:
nombre [argumentos]
A diferencia de una funcin, un procedimiento Sub no puede ser utilizado en una ex
presin
pues no devuelve ningn valor. Por supuesto una funcin puede ser llamada al modo de
un
procedimiento Sub, pero en esta caso no se hace nada con el valor devuelto por l
a funcin.
El siguiente ejemplo corresponde a un procedimiento Sub que devuelve una variabl
e F que es
la raz cuadrada de un nmero N.
Sub Raiz (N As Double, F As Double)
If N < 0 Then
Exit Sub 'Se mandara un mensaje de error
Else
F = Sqr(N)
End If
End Sub
La llamada a este procedimiento Sub puede ser de cualquiera de las dos formas si
guientes:
Raiz N, F
Call Raiz(N, F)
En el ejemplo anterior, el resultado obtenido al extraer la raz cuadrada al nmero
N se
devuelve en la variable F pasada como argumento, debido a que como se ha mencion
ado
anteriormente, un procedimiento Sub no puede ser utilizado en una expresin.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 40
3.8.5 Argumentos por referencia y por valor
En las funciones (Function) y en los procedimientos Sub de Visual Basic, por def
ecto los
argumentos se pasan por referencia2; de este modo, cualquier cambio de valor que
sufra un
parmetro dentro de la funcin o del procedimiento Sub tambin se produce en el argume
nto
correspondiente de la llamada a la funcin o al procedimiento Sub.
Cuando se llama a una funcin o a un procedimiento Sub, se podr especificar que el
valor de
una argumento no sea cambiado por la funcin o por el procedimiento, poniendo dich
o argumento
entre parntesis en la llamada. Un argumento entre parntesis en la llamada es un ar
gumento
pasado por valor. Por ejemplo,
Raiz ((Num)) ' En el caso de la funcin
Raiz (Num), F ' En el caso del procedimiento
El argumento Num es pasado por valor. Significa que lo que se pasa es una copia
de Num. Si
el procedimiento cambia ese valor, el cambio afecta slo a la copia y no a la prop
ia variable Num.
Otra forma de especificar que un argumento ser siempre pasado por valor es antepo
niendo la
palabra ByVal a la declaracin del parmetro en la cabecera del procedimiento (Sub o
Function).
Por ejemplo,
Function Raiz (ByVal N As Double)
Sub Raiz (ByVal N As Double, F As Double)
Pasar argumentos por valor evita modificaciones accidentales, pero tiene un cost
e en tiempo y
memoria que puede ser significativo cuando se pasan grandes volmenes de informacin
, como
sucede con vectores, matrices y estructuras.
3.8.6 Procedimientos recursivos
Se dice que una funcin (Function) es recursiva o que un procedimiento Sub es recu
rsivo si se
llaman a s mismos.
A continuacin se presenta una ejemplo de una funcin que calcula el factorial de un
nmero
programada de forma recursiva.
Function Factorial (N As Integer) As Long
If N = 0 Then
Factorial = 1 'Condicin de final
Else
Factorial = N * Factorial (N - 1)
End If
End Function
En este ejemplo, si la variable N que se le pasa a la funcin vale 0, significar qu
e se ha
llegado al final del proceso, y por tanto se le asigna el valor 1 al valor del f
actorial (recordar que 0!
= 1). Si es distinto de 0, la funcin se llama a ella misma, pero variando el argu
mento a (N-1), hasta
llegar al punto en el que N-1=0, finalizndose el proceso.
Pasar un argumento por referencia implica que en realidad se pasa a la funcin la
variable original, de modo que la
funcin puede modificar su valor. Pasar por valor implica crear una nueva variable
dentro de la funcin y pasarle
una copia del valor de la variable externa. Si se modifica el valor de la variab
le copia, la variable original queda
inalterada. Cuando en la llamada a una funcin se ponen como argumentos constantes
numricas o expresiones los
valores se pasan por valor.
Captulo 3: Lenguaje BASIC pgina 41
3.8.7 Procedimientos con argumentos opcionales
Puede haber procedimientos en los que algunos de los argumentos incluidos en su
definicin sean
opcionales, de forma que el programador pueda o no incluirlos en la llamada de d
ichos
procedimientos. La forma de incluir un argumento opcional es incluir la palabra
Optional antes de
dicho argumento en la definicin del procedimiento. Si un argumento es opcional, t
odos los
argumentos que vienen a continuacin deben tambin ser opcionales.
Cuando un argumento es opcional y en la llamada es omitido, el valor que se le p
asa es un
Variant con valor Empty. A los argumentos opcionales se les puede dar en la defi
nicin del
procedimiento un valor por defecto para el caso en que sean omitidos en la llama
da, como por
ejemplo:
Private Sub miProc(x as Double, Optional n=3 As Integer)
sentencias
End Sub
3.8.8 Nmero indeterminado de argumentos
Este caso es similar pero diferente del anterior. En este caso no es que haya ar
gumentos opcionales
que puedan omitirse en la llamada, sino que realmente no se sabe con cuntos argum
entos va a
llamarse la funcin; unas veces se llamar con 2, otras con 3 y otras con 8. En este
caso los
argumentos se pasan al procedimiento por medio de un array, especificndolo con la
palabra
ParamArray en la definicin del procedimiento, como por ejemplo:
Public Function maximo(ParamArray numeros())
For Each x in numeros
sentencias
maximo = x
Next x
End Function
3.8.9 Utilizacin de argumentos con nombre
Visual Basic 6.0 ofrece tambien la posibilidad de llamar a las funciones y proced
imientos Sub de
una forma ms libre y menos formal, pasando los argumentos en la llamada al proced
imiento con un
orden arbitrario. Esto se consigue incluyendo el nombre de los argumentos en la
llamada y
asignndoles un valor por medio de una construccin del tipo miArgumento:=unValor. U
nos
argumentos se separan de otros por medio de comas (,). Considrese el siguiente ej
emplo:
Public Sub EnviarCarta(direccion As String, destinatario As String)
sentencias
End Sub
que se puede llamar en la forma:
EnviarCarta destinatario:="Mike Tyson", direccion:="Las Vegas"
No todas las funciones que se pueden llamar en Visual Basic 6.0 admiten argument
os con
nombre. Con AutoQuickInfo puede obtenerse ms informacin al respecto.
3.9 ARRAYS
Un array permite referirse a una serie de elementos del mismo tipo con un mismo
nombre, y hace
referencia un nico elemento de la serie utilizando uno o ms ndices, como un vector
o una matriz
en lgebra.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero
pgina 42
Visual Basic 6.0 permite definir arrays de variables de una o ms dimensiones (has
ta 60) y de
cualquier tipo de datos (tipos fundamentales y definidos por el usuario). Pero a
dems Visual Basic
introduce una nueva clase de arrays, los arrays de controles (esto es, arrays de
botones, de etiquetas,
de paneles, etc.) que permiten una programacin ms breve y clara. En este apartado
slo se tratarn
los arrays de variables.
Todos los elementos de un array deben ser del mismo tipo y estn almacenados de fo
rma
contigua en la memoria. Por supuesto, si el array es de tipo Variant cada elemen
to puede contener
un dato de tipo diferente, e incluso puede contener otro array.
Entre los arrays de variables cabe distinguir dos tipos fundamentales, dependien
do de que
nmero de elementos sea constante o pueda variar durante la ejecucin del programa.
1.
Arrays estticos, cuya dimensin es siempre la misma.
2.
Arrays dinmicos, cuya dimensin se puede modificar durante la ejecucin del
programa.
3.9.1 Arrays estticos
La declaracin de un array esttico depender de su mbito.

La declaracin de un array pblico se hace en la seccin de declaraciones de un mdulo
utilizando la sentencia Public.

La declaracin de un array a nivel del mdulo o del formulario se hace en la seccin d
e
declaraciones del mdulo o del formulario utilizando la sentencia Dim o Private.

Para declarar un array local a un procedimiento, se utiliza la sentencia Dim, Pr
ivate o Static
dentro del propio procedimiento.
A continuacin se presentan algunos ejemplos:
Dim vector(19) As Double
Este ejemplo declara un array de una dimensin, llamado vector, con veinte element
os,
vector(0), vector(1), ... , vector(19), cada uno de los cuales permite almacenar
un Double. Salvo que
se indique otra cosa, los ndices se empiezan a contar en cero.
Dim matriz(3, 1 To 6) As Integer
Este ejemplo declara un array de dos dimensiones, llamado matriz, con 4x6 elemen
tos,
matriz(0,1), ... matriz(3,6), de tipo entero.
Public cadena(1 To 12) As String
El ejemplo anterior declara un array de una dimensin, cadena, con doce elementos,

caract(1), ... , caract(12), cada uno de los cules permite almacenar una cadena d
e caracteres.
La declaracin de los arrays estticos es bastante cmoda. Se declaran una vez. Sin em
bargo
tienen el inconveniente que en la mayora de los casos estn sobredimensionados y ut
ilizan ms
memoria de la que realmente necesitan. Esto implica que se est malgastando memori
a. Para
solucionar este problema se utilizan los arrays dinmicos.
3.9.2 Arrays dinmicos
El espacio necesario para un array esttico se asigna al iniciarse el programa y p
ermanece fijo
durante su ejecucin. El espacio para un array dinmico se asigna durante la ejecucin
del
Captulo 3: Lenguaje BASIC pgina 43
programa. Un array dinmico, puede ser redimensionado en cualquier momento de la e
jecucin. La
forma mejor de redimensionar los arrays es mediante variables que contienen los
valores adecuados.
Para crear un array dinmico primero hay que declararlo como si fuera una array es
ttico, pero
sin darle dimensin. Es decir, se deja la lista -entre parntesis- vaca sin ponerle n
ingn nmero.
Esto se hace con la sentencia Public si se quiere que sea global, con Dim o Priv
ate si se quiere a
nivel de mdulo o con Static, Dim o Private si se quiere que sea local.
Para asignar el nmero actual de elementos del array se utiliza la sentencia ReDim
. La
sentencia ReDim puede aparecer solamente en un procedimiento y permite cambiar e
l nmero de
elementos del array y sus lmites inferior y superior, pero no el nmero de dimensio
nes. Esto quiere
decir que, por ejemplo, no se puede trasformar un vector en una matriz.
A continuacin se presenta un ejemplo de cmo se declaran arrays dinmicos en Visual B
asic.
Si se declara el array Matriz a nivel del formulario,
Dim Matriz( ) As Integer
y ms tarde, un procedimiento Calculo puede asignar espacio para el array, como se
indica a
continuacin:
Sub Calculo( )
...
ReDim Matriz(F, C)
...
End Sub
Cada vez que se ejecuta la sentencia ReDim, todos los valores almacenados en el
array se
pierden (si son Variant se ponen a Empty; si son numricos a cero y si son cadenas
de caracteres a
la cadena vaca). Cuando interese cambiar el tamao del array conservando los valore
s del array,
hay que ejecutar ReDim con la palabra clave Preserve. Por ejemplo, supngase un ar
ray A de dos
dimensiones. La sentencia,
ReDim Preserve A(D1, UBound(A, 2) + 2)
incrementa el tamao del array en dos columnas ms. Cuando se utiliza la palabra Pre
serve no
puede cambiarse el ndice inferior del array (s el superior). La funcin UBound utili
zada en este
ejemplo es una funcin que devuelve el valor ms alto de la segunda dimensin de la ma
triz (ver el
Help para ms informacin).
3.10 ESTRUCTURAS: SENTENCIA TYPE
Una estructura (segn la nomenclatura tpica del lenguaje C) es un nuevo tipo de dat
os, un tipo
definido por el usuario, que puede ser manipulado de la misma forma que los tipo
s predefinidos
(Int, Double, String, ...). Una estructura puede definirse como una coleccin o ag
rupacin de datos
de diferentes tipos evidentemente relacionados entre s.
Para crear una estructura con Visual Basic 6.0 hay que utilizar la sentencia Typ
e ... End Type.
Esta sentencia solamente puede aparecer en la seccin General o de declaraciones d
e un mdulo.
Pueden crearse como Public o como Private en un mdulo estndar o de clase y slo como
Private
en un formulario. Dim equivale a Public. Vase el siguiente ejemplo,
Public Type Alumno
Nombre As String
Direccion As String *40
Telefono As Long
DNI As Long
End Type
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 44
Este ejemplo declara un tipo de datos denominado Alumno que consta de cuatro mie
mbros o
campos, denominados Nombre, Direccion, Telefono y DNI.
Una vez definido un nuevo tipo de datos, en un mdulo estndar o de clase se pueden
declarar
variables Public o Private de ese tipo (en un formulario slo Private), como por e
jemplo:
Public Mikel as Alumno
Para referirse a un determinado miembro de una estructura se utiliza la notacin
variable.miembro. Por ejemplo,
Mikel.DNI = 34103315
A su vez, un miembro de una estructura puede ser otra estructura, es decir un ti
po definido por
el usuario. Por ejemplo,
Type Fecha
Dia As Integer
Mes As Integer
Anio As Integer
End Type
Type Alumno
Alta As Fecha
Nombre As String
Direccion As String * 40
Telefono AS Long
DNI As Long
End Type
Dentro de una estructura puede haber arrays tanto estticos como dinmicos.
En Visual Basic 6.0 se pueden definir arrays de estructuras. La declaracin de un
array de
estructuras se har con la palabra Public, Private o Static, dependiendo de su mbit
o. La forma de
hacerlo es la siguiente:
Public grupoA (1 To 100) As Alumno
Private grupoB (1 To 100) As Alumno
Static grupoC (1 To 100) As Alumno
En Visual Basic 6.0, a la hora de declarar arrays de estructuras, sucede lo mism
o que al
declarar arrays de cualquier tipo de variables. Con GrupoA(1 To 100), se crea un
vector de
estructuras de 100 elementos de tipo Alumno (grupoA(1), grupoA(2), ..., grupoA(1
00)). Con
grupoB(100), se creara un vector de estructuras de 101 elementos (grupoB(0), grup
oB(1), ...
grupoB(100)).
Es posible asignar una estructura a otra del mismo tipo. En este caso se realiza
una copia
miembro a miembro. Vase el siguiente ejemplo:
GrupoA(1) = delegado
Las estructuras pueden ser tambin argumentos en las llamadas a funciones y proced
imientos
Sub. Siempre son pasados por referencia, lo cual implica que pueden ser modifica
dos dentro del
procedimiento y esas modificaciones permenecen en el entorno de llamada al proce
dimiento. En el
caso de las funciones, las estructuras pueden ser tambin valores de retorno.
Captulo 3: Lenguaje BASIC pgina 45
3.11 FUNCIONES PARA MANEJO DE CADENAS DE CARACTERES
Existen varias funciones tiles para el manejo de cadenas de caracteres (Strings).
Estas funciones
se utilizan para la evaluacin, manipulacin o conversin de cadenas de caracteres. Al
gunas de ellas
se muestran en la Tabla 3.4.
Utilidad Funcin en
Visual Basic 6.0
Comentarios
Nmero de caracteres de una cadena Len(string | varname)
Conversin a minsculas o a maysculas LCase(x), UCase(x)
Conversin de cadenas a nmeros y de
nmeros a cadenas
Str(n), CStr(n),
Val(string)
Extraccin de un n de caracteres en un
rango, de la parte derecha o izquierda de
una cadena
Mid(string, ini[, n]),
Right(string, length),
Left(string, length)
el parmetro n de Mid es opcional
e indica el nmero de caracteres a
extraer a partir de "ini"
Extraccin de sub-cadenas Split(string, [[delim], n]) devuelve un array con las n
(-1 para
todas) subcadenas separadas por
delim (por defecto, el espacio)
Unin de sub-cadenas Join(string, [delim])
Comparacin de cadenas de caracteres strComp(str1, str2) devuelve -1, 0, 1 segn str
1 sea
menor, igual o mayor que str2
Hallar si una cadena es parte de otra
(est contenida como sub-cadena)
InStr([n], str1, str2) devuelve la posicin de str2 en str1
buscando a partir del carcter n
Hallar una cadena en otra a partir del
final (reverse order)
InstrRev(str1, str2, [n]) devuelve la posicin de str2 en str1
buscando a partir del carcter n
Buscar y reemplazar una subcadena por
otra en una cadena
Replace(string, substring,
replacewith)
reemplaza substring por
replacewith
Tabla 3.4. Funciones de manejo de cadenas de caracteres en Visual Basic 6.0.
Es necesario tener presente que cuando se quieren comparar dos cadenas de caract
eres, dicha
comparacin se realiza por defecto en funcin del cdigo ASCII asociado a cada letra (
ver Anexo
8.1). Esto significa que por ejemplo caa es posterior a casa debido a que la letr
a tiene un cdigo
ASCII asociado superior a la letra s ( es el 164; s es el 115). Esto mismo ocurre
con las vocales
acentuadas. Si se desea conseguir una comparacin alfabtica lgica es necesario inclu
ir al
comienzo del fichero de cdigo la sentencia Option Compare Text (frente a Option C
ompare
Binary establecida por defecto). La funcin strComp() admite un tercer argumento q
ue permite
especificar el tipo de comparacin (constantes vbBinaryCompare o vbTextCompare).
Ejemplos:
MyDouble = 437.324 MyDouble es un Double.
MyString = CStr(MyDouble) MyString contiene "437.324".
MyValue = Val("2457") Devuelve 2457.
MyValue = Val(" 2 45 7") Devuelve 2457.
MyValue = Val("24 and 57") Devuelve 24.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 46
AnyString = "Hello World" Se define el string.
MyStr = Right(AnyString, 6) Devuelve " World".
MyStr = Left(AnyString, 7) Devuelve "Hello W".
MyStr = Right(AnyString, 20) Devuelve "Hello World".
i = StrComp("casa", "caa") ' Devuelve 1 por defecto y 1 con Option
Compare Text
MyString = "Mid Function Demo" ' Se crea un nuevo string.
LastWord = Mid(MyString, 14, 4) ' Devuelve "Demo".
MidWords = Mid(MyString, 5) ' Devuelve "Function Demo".
El operador Like permite comparar dos cadenas de caracteres. Si son iguales devu
elve True
y si no lo son, False. Tngase en cuenta que Like es un operador, no una funcin.
Existe adems el operador de concatenacin & que puede ser utilizado con cadenas de
caracteres. Se utiliza para poner una cadena a continuacin de otra. Por ejemplo:
str1 = "My first string" Se inicializan los strings
str2 = "My second string"
TextoFinal = str1 & str2 TextoFinal vale "My first stringMy second string"
El operador "+" opera de forma anloga, pero su uso se desaconseja pues en ciertas

ocasiones convierte las cadenas en nmeros y realiza la suma.
Para obtener ms informacin sobre cada una de las funciones buscar Strings en el He
lp de
Visual Basic 6.0.
3.12 FUNCIONES MATEMTICAS
Al igual que las funciones vistas para el manejo de cadenas de caracteres, exist
e una serie de
funciones matemticas las cuales permiten realizar clculos dentro de un programa de
Visual Basic.
Dichas funciones se muestran en la Tabla 3.5:
Funcin
matemtica
Funcin en
Visual Basic
Funcin
matemtica
Funcin en
Visual Basic
Valor absoluto Abs(x) N aleatorio Rnd
Arco tangente Atn(x) Seno y coseno Sin(x), Cos(x)
Exponencial Exp(x) Tangente Tan(x)
Parte entera Int(x), Fix(x) Raz cuadrada Sqr(x)
Logaritmo Log(x) Signo (1, 0, -1) Sgn(x)
Redondeo Round(x, ndec)
Tabla 3.5. Funciones matemticas en Visual Basic 6.0.
Ejemplos:
MyNumber = Abs(50.3) Devuelve 50.3.
MyNumber = Abs(-50.3) Devuelve 50.3.
MyAngle = 1.3 ' El ngulo debe estar en radianes.
MySecant = 1 / Cos(MyAngle) ' Calcula la secante.
MySqr = Sqr(4) ' Devuelve 2.
MySqr = Sqr(23) ' Devuelve 4.79583152331272.
MyVar1 = 12: MyVar2 = -2.4: MyVar3 = 0 'Declaracin de las variables
MySign = Sgn(MyVar1) ' Devuelve 1.
MySign = Sgn(MyVar2) ' Devuelve -1.
MySign = Sgn(MyVar3) ' Devuelve 0.
Captulo 3: Lenguaje BASIC pgina 47
Las funciones trigonomtricas de Visual Basic utilizan radianes para medir los ngul
os.
Con el fin de completar estas funciones, se ofrece a continuacin una relacin de fu
nciones
que son derivadas de las anteriores. El alumno podra programar dichas funciones e
n un fichero
*.bas y as poderlas utilizar posteriormente en cualquier programa. Dichas funcion
es se muestran en
la Tabla 3.6:
Funcin matemtica Expresin equivalente
Secante Sec(X) = 1 / Cos(X)
Cosecante Cosec(X) = 1 / Sin(X)
Cotangente Cotan(X) = 1 / Tan(X)
Arcoseno Arcsin(X) = Atn(X / Sqr(-X * X + 1))
Arcocoseno Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
Arcosecante Arcsec(X) = Atn(X / Sqr(X * X 1)) + Sgn((X) -1) * (2 * Atn(1))
Arcocosecante Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) - 1) * (2 * Atn(1)
)
Arcocotangente Arccotan(X) = Atn(X) + 2 * Atn(1)
Seno Hiperblico HSin(X) = (Exp(X) - Exp(-X)) / 2
Coseno Hiperblico Hcos(X) = (Exp(X) + Exp(-X)) / 2
Tangente Hiperblica Htan(X) = (Exp(X) - Exp(-X)) / (Exp(X) + Exp(-X))
Secante Hiperblica HSec(X) = 2 / (Exp(X) + Exp(-X))
Cosecante Hiperblica Hcosec(X) = 2 / (Exp(X) - Exp(-X))
Cotangente Hiperblica Hcotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) - Exp(-X))
Arcoseno Hiperblico Harcsin(X) = Log(X + Sqr(X * X + 1))
Arcocoseno Hiperblico Harccos(X) = Log(X + Sqr(X * X - 1))
Arcotangente Hiperblica Harctan(X) = Log((1 + X) / (1 - X)) / 2
Arcosecante Hiperblica Harcsec(X) = Log((Sqr(-X * X + 1) + 1) / X)
Arcocosecante Hiperblica Harccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) +1) / X)
Arcocotangente Hiperblica Harccotan(X) = Log((X + 1) / (X 1)) / 2
Logaritmo en base N LogN(X) = Log(X) / Log(N)
Tabla 3.6. Funciones auxiliares matemticas (no las tiene Visual Basic 6.0).
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero
pgina 48
4. EVENTOS, PROPIEDADES Y CONTROLES
En este captulo se pretende recoger de una manera ms sistemtica y general los event
os y
controles ms habituales de Visual Basic 6.0. Hay que sealar que en ningn momento se
pretende
abandonar el carcter introductorio de este manual, y que Visual Basic 6.0 tiene m
uchas ms
posibilidades de las que aqu se muestran. Por ejemplo, muchos de los controles y
eventos de Visual
Basic 6.0 estn relacionados con el acceso a bases de datos. Estos aspectos no se
citarn en estos
apuntes. Para una informacin ms detallada se puede acudir a un buen libro de refer
encia o al Help
del programa.
La programacin en Visual Basic 6.0 (al menos para ejemplos sencillos) suele proce
der del
siguiente modo:
1.
Se definen interactivamente sobre el
formulario los controles que van a
constituir la aplicacin.
2.
Se define para cada control el cdigo
con el que se va a responder a cada
uno de los eventos. Para ello basta
clicar dos veces sobre el control y se
abre una ventana de cdigo como la
mostrada en la Figura 4.1. En ella
Visual Basic 6.0 ha preparado ya el
inicio y el final de la funcin con la
que se va a responder al evento. El nombre del evento forma parte del nombre de
la
funcin, junto al nombre del control. En el ejemplo del la Figura 4.1 est preparada
la
funcin para escribir el cdigo que se ejecutar al producirse el evento Click sobre e
l
control cmbSalir.
En el resto de este captulo se vern con un cierto detalle los eventos, controles y
propiedades
ms habituales en Visual Basic 6.0.
4.1 EVENTOS
A continuacin se presentan brevemente los eventos ms normales que reconoce Visual
Basic 6.0.
Es importante tener una visin general de los eventos que existen en Windows 95/98
/NT porque
cada control de los que se vern ms adelante tiene su propio conjunto de eventos qu
e reconoce, y
otros que no reconoce. Cualquier usuario de las aplicaciones escritas para Windo
ws 95/98/NT hace
uso continuo e intuitivo de los eventos, pero es posible que nunca se haya deten
ido a pensar en ello.
Para saber qu eventos puede recibir un control determinado basta seleccionarlo y
pulsar
<F1>. De esta forma se abre una ventana del Help que explica el control y permit
e acceder a los
eventos que soporta.
4.1.1 Eventos generales
4.1.1.1 Carga y descarga de formularios
Cuando se arranca una aplicacin, o ms en concreto cuando se visualiza por primera
vez un
formulario se producen varios eventos consecutivos: Initialize, Load, Activate y
Paint. Cada uno de
Figura 4.1. Cdigo que gestionar el evento Click sobre
el control de nombre cmbSalir.
Captulo 4: Eventos, Propiedades y Controles pgina 49
estos eventos se puede aprovechar para realizar ciertas operaciones por medio de
la funcin
correspondiente.
Al ocultar, cerrar o eliminar un formulario se producen otra serie de eventos: D
eactivate,
QueryUnload, Unload y Terminate que se vern en un prximo ejemplo.
Para inicializar las variables definidas a nivel de mdulo se suele utilizar el ev
ento Initialize,
que tiene lugar antes que el Load. El evento Load se activa al cargar un formula
rio. Con el
formulario principal esto sucede al arrancar la ejecucin de un programa; con el r
esto de los
formularios al mandarlos cargar desde cualquier procedimiento o al hacer referen
cia a alguna
propiedad o control de un formulario que no est cargado. Al descargar un formular
io se produce el
evento Unload. Si se detiene el programa desde el botn Stop de Visual Basic 6.0 (
o del men
correspondiente) o con un End, no se pasa por el evento Unload. Para pasar por e
l evento Unload
es necesario cerrar la ventana con el botn de cerrar o llamarlo explcitamente. El
evento
QueryUnload se produce antes del evento Unload y permite por ejemplo enviar un m
ensaje de
confirmacin.
El evento Load de un formulario se suele utilizar para ejecutar una funcin que d v
alor a sus
propiedades y a las de los controles que dependen de dicho formulario. No se pue
de utilizar para
dibujar o imprimir sobre el formulario, pues en el momento en que se produce est
e evento el
formulario todava no est disponible para dichas operaciones. Por ejemplo, si en el
formulario debe
aparecer la salida del mtodo Print o de los mtodos grficos Pset, Line y Circle (que
se estudian en
el Captulo 6 de este manual) puede utilizarse el evento Paint u otro posterior (p
or ejemplo, el
evento GotFocus del primer control) pero no puede utilizarse el evento Load.
Se puede ocultar un formulario sin descargarlo con el mtodo Hide o haciendo la pr
opiedad
Visible = False. Esto hace que el formulario desaparezca de la ventana, aunque s
us variables y
propiedades sigan estando accesibles y conservando sus valores. Para hacer visib
le un formulario
oculto pero ya cargado se utiliza el mtodo Show, que equivale a hacer la propieda
d Visible = True,
y que genera los eventos Activate y Paint. Si el formulario no haba sido cargado
previamente, el
mtodo Show genera los cuatro eventos mencionados.
Cuando un formulario pasa a ser la ventana activa se produce el evento Activate
y al dejar de
serlo el evento Deactivate. En el caso de que el formulario que va a ser activo
no estuviera cargado
ya, primero sucederan los eventos Initialize, Load y luego los eventos Activate y
Paint.
Todo esto se puede ver y entender con un simple ejemplo, mostrado en la Figura 4
.2. Se han
de crear dos formularios (frmPrincipal y frmSecundario). El primero de ellos con
tendr dos
botones (cmdVerSec y cmdSalir) y el segundo tres (cmdHide, cmdUnload y cmdTermin
ate). El
formulario principal ser el primero que aparece, y slo se ver el segundo si se clic
a en el botn
Cargar Formulario. Cuando as se haga, a medida que los eventos antes mencionados
se vayan
sucediendo, irn apareciendo en pantalla unas cajas de mensajes que tendrn como tex
to el nombre
del evento que se acaba de producir. Segn con cual de los tres botones se haga de
saparecer el
segundo formulario, al volverlo a ver se producirn unos eventos u otros, segn se p
uede ver por los
mensajes que van apareciendo con cada evento.
' cdigo del form. principal
Private Sub cmdCargar_Click()
frmSecundario.Show
End Sub
' cdigo del form. secundario
Private Sub cmdHide_Click()
Hide
End Sub
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 50
Private Sub cmdUnload_Click()
Unload Me
End Sub
Private Sub cmdTerminate_Click()
Hide
Set Form2 = Nothing
End Sub
Private Sub Form_Activate()
MsgBox ("Evento Activate")
End Sub
Private Sub Form_Deactivate()
MsgBox ("Evento Deactivate")
End Sub
Private Sub Form_Initialize()
MsgBox ("Evento Initialize")
End Sub
Private Sub Form_Load()
MsgBox ("Evento Load")
End Sub
Private Sub Form_Paint()
MsgBox ("Evento Paint")
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
MsgBox ("Evento QueryUnload")
End Sub
Private Sub Form_Terminate()
MsgBox ("Evento Terminate")
End Sub
Private Sub Form_Unload(Cancel As Integer)
MsgBox ("Evento Unload")
End Sub
Es muy interesante realizar este ejemplo y seguir la secuencia de eventos que se
producen al
hacer aparecer y desaparecer los formularios.
4.1.1.2 Paint
El evento Paint sucede cuando hay que redibujar un formulario o PictureBox. Esto
sucede cuando
esos objetos se hacen visibles por primera vez y tambin cuando vuelven a ser visi
bles despus de
haber estado tapados por otros, tras haber sido movidos o tras haber sido modifi
cados de tamao.
4.1.1.3 El foco (focus)
En todas las aplicaciones de Windows, en cualquiera de sus versiones, siempre ha
y un nico
control, formulario o ventana que puede recibir entradas desde teclado. En cada
momento ese
control, ventana o formulario es el que dispone del foco (focus). El objeto que po
see el foco est
caracterizado por estar resaltado con letra negrita, con un contorno ms vivo o te
niendo
parpadeando el cursor en l. Este foco puede ser trasladado de un objeto a otro po
r cdigo o por
interacciones del usuario, como por ejemplo clicando con el ratn en distintos pun
tos de la pantalla
o pulsando la tecla Tab. Cada vez que un objeto pierde el foco se produce su eve
nto LostFocus y,
posteriormente, el evento GotFocus del objeto que ha recibido el foco.
Figura 4.2. Resultado del ejemplo de carga de formularios.
Captulo 4: Eventos, Propiedades y Controles
pgina 51
El mtodo SetFocus permite dar el focus al objeto al que se aplica.
Dos propiedades de muchos controles relacionadas con el foco son TabIndex y TabS
top.
TabStop determina si el foco se va o no a posar en el objeto al pulsar la tecla
Tab (si TabStop est a
False no se puede obtener el foco mediante el tabulador) y TabIndex determina el
orden en el que
esto va a suceder. As al cargar un formulario, el foco estar en aquel objeto cuyo
TabIndex sea 0.
Al pulsar la tecla Tab el foco ir al objeto que tenga TabIndex = 1 y as sucesivame
nte. Para
retroceder en esta lista se pulsa Maysculas+Tab. La propiedad TabIndex se puede d
eterminar en
tiempo de diseo por medio de la caja de propiedades de un control, del modo habit
ual.
Cuando a un control se le asigna un determinado valor de TabIndex, Visual Basic
ajusta
automticamente los valores de los dems controles (si tiene que desplazarlos hacia
arriba o hacia
abajo, lo hace de modo que siempre tengan nmeros consecutivos). Para que un formu
lario reciba
el foco es necesario que no haya en l ningn control que sea capaz de recibirlo.
Un grupo de botones de opcin tiene un nico TabIndex, es decir, se comporta como si
fuera
un nico control. Para elegir una u otra de las opciones se utilizan las flechas d
el teclado ( y ).
4.1.1.4 KeyPress, KeyUp y KeyDown
El evento KeyPress sucede cuando el usuario pulsa y suelta determinada tecla. En
el procedimiento
asociado con este evento el nico argumento KeyAscii es necesario para conocer cul
es el cdigo
ASCII de la tecla pulsada. El evento KeyDown se produce cuando el usuario pulsa
determinada
tecla y el evento KeyUp al soltar una tecla.
Los eventos KeyUp y KeyDown tienen un segundo argumento llamado Shift que permit
en
determinar si esa tecla se ha pulsado estando pulsadas a la vez cualquier combin
acin de las teclas
Shift, Alt y Ctrl. En un apartado prximo se explica cmo se identifican las teclas
pulsadas a partir
del argumento Shift.
4.1.2 Eventos relacionados con el ratn
4.1.2.1 Click y DblClick
El evento Click se activa cuando el usuario pulsa y suelta rpidamente uno de los
botones del ratn.
Tambin puede activarse desde cdigo (sin tocar el ratn) variando la propiedad Value
de alguno de
los controles. En el caso de un formulario este evento se activa cuando el usuar
io clica sobre una
zona del formulario en la que no haya ningn control o sobre un control que en ese
momento est
inhabilitado (propiedad Enabled = False). En el caso de un control, el evento se
activa cuando el
usuario realiza una de las siguientes operaciones:

Clicar sobre un control con el botn derecho o izquierdo del ratn. En el caso de un
botn
de comando, de un botn de seleccin o de un botn de opcin, el evento sucede solamente

al clicar con el botn izquierdo.

Seleccionar un registro de alguno de los varios tipos listas desplegables que di
spone Visual
Basic.

Pulsar la barra espaciadora cuando el foco est en un botn de comando, en un botn de

seleccin o en un botn de opcin.

Pulsar la tecla Return cuando en un formulario hay un botn que tiene su propiedad

Default = True.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero
pgina 52

Pulsar la tecla Esc cuando en un formulario hay un botn que tiene su propiedad Ca
ncel =
True.

Pulsar una combinacin de teclas aceleradoras (Alt + otra tecla, como por ejemplo
cuando
de despliega el men File de Word con Alt+F) definidas para activar un determinado

control de un formulario.
Tambin se puede activar el evento Click desde cdigo realizando una de las siguient
es
operaciones:

Hacer que la propiedad Value de un botn de comando valga True.

Hacer que la propiedad Value de un botn de opcin valga True

Modificar la propiedad Value de un botn de seleccin.
El evento DblClick sucede al clicar dos veces seguidas sobre un control o formul
ario con el
botn izquierdo del ratn.
4.1.2.2 MouseDown, MouseUp y MouseMove
El evento MouseDown sucede cuando el usuario pulsa cualquiera de los botones del
ratn, mientras
que el evento MouseUp sucede al soltar un botn que haba sido pulsado. El evento Mo
useMove
sucede al mover el ratn sobre un control o formulario.
Los eventos MouseUp y MouseDown tienen algunos argumentos que merecen ser
comentados. El argumento Button indica cul de los botones del ratn ha sido pulsado
o soltado, y
el argumento Shift indica si adems alguna de las teclas alt, shift o ctrl est tamb
in pulsada. La
lista con todos los posibles valores de estos argumentos se muestra en la Tabla
4.1:
Cte simblica Valor Accin Cte simblica Valor Accin
vbLeftButton 1 Botn izdo pulsado o soltado vbShiftMask 1 Tecla SHIFT pulsada
vbRightButton 2 Botn dcho pulsado o soltado vbCtrlMask 2 Tecla CTRL pulsada
vbMiddleButton 4 Botn central pulsado o soltado vbAltMask 4 Tecla ALT pulsada
Tabla 4.1. Valores de los argumentos de los eventos MouseUp y MouseDown.
Con estos valores se aplica la aritmtica booleana, lo cual quiere decir que si se
pulsan
simultneamente los botones izquierdo y derecho del ratn el argumento Button valdr 3
(1+2) y si
se pulsan las tres teclas shift, ctrl y alt simultneamente el argumento Shift val
dr 7 (1+2+4). Con
esta forma de combinar los valores se resuelven todas las indeterminaciones posi
bles.
4.1.2.3 DragOver y DragDrop
El evento DragOver sucede mientras se est arrastrando un objeto sobre un control.
Suele utilizarse
para variar la forma del cursor que se mueve con el ratn dependiendo de si el obj
eto sobre el que se
encuentra el cursor en ese momento es vlido para soltar o no. El evento DragDrop
sucede al
concluir una operacin de arrastrar y soltar. El evento DragOver requiere de los a
rgumentos que se
muestran a continuacin:
Private Sub Text1_DragOver(Source As Control, _
X As Single, Y As Single, State As Integer)
...
End Sub
Captulo 4: Eventos, Propiedades y Controles
pgina 53
Los argumentos de este evento son Source que contiene el objeto que est siendo ar
rastrado,
X e Y que indican la posicin del objeto arrastrado dentro del sistema de coordena
das del objeto
sobre el que se est arrastrando y State (que es propio del DragOver, pero no apar
ece en el
DragDrop) que vale 0, 1 2 segn se est entrando, saliendo o permaneciendo dentro de
l mismo
objeto, respectivamente. Es importante sealar que el evento DragOver pertenece al
objeto sobre el
que se arrastra, no al objeto que es arrastrado.
En el Help se puede encontrar informacin sobre la propiedad DragMode, que puede t
omar
dos valores (vbManual y vbAutomatic). Esta constante determina cmo comienza una o
paracin de
arrastre de un objeto. En modo manual se debe comenzar llamando al mtodo Drag par
a el objeto a
arrastrar. En modo automtico basta clicar sobre el objeto a arrastrar, pero puede
que en esta caso
dicho objeto no responda del modo habitual a otros eventos.
4.2 ALGUNAS PROPIEDADES COMUNES A VARIOS CONTROLES
Hay algunas propiedades que son comunes a muchos controles. A continuacin se hace
una lista con
las utilizadas ms habitualmente:

Appearance: Establece si un objeto tiene un aspecto plano (valor 0) o tridimensi
onal (valor
1).

BackColor: Establece el color de fondo de un objeto.

Caption: Establece el texto que aparece dentro o junto al objeto. Tiene el papel
de un
ttulo.

Enabled: Establece si un objeto es accesible y modificable o no.

Font: Establece las caractersticas del tipo de letra del objeto.

ForeColor: Establece el color del texto y/o grficos de un objeto.

Height y Width: Establecen la altura y achura de un objeto.

Left y Top: Establecen la distancia horizontal y vertical entre el origen del co
ntrol y el
origen del objeto que lo contiene, que puede ser un formulario, un marco (frame)
, etc.

MousePointer: Establece la forma que adoptar el puntero del ratn al posicionarse s
obre
el objeto. Esta forma puede elegirse dentro de una lista en las que aparecen las
habituales
del puntero del ratn o creando iconos propios. Algunas constantes de significado
inmediato que definen la forma del cursor son las siguientes: vbDefault, vbArrow
,
vbCrosshair, vbIbeam, vbSizePointer, vbUpArrow, vbHourglass, etc. Para ms informa
cin
puede consultarse el Help de MousePointer.

Name: Nombre del objeto. Todos los objetos incluidos en un formulario deben tene
r un
nombre con el que poder referirse a l a la hora de programar la forma en que debe
actuar.
Existen unas reglas para definir los nombre de los controles, que ya se vieron e
n el
Captulo 1.

Visible: Establece si el objeto es visible o invisible.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 54
Figura 4.3. Algunos de los controles ms habituales de Visual Basic.
4.3 CONTROLES MS USUALES
En la Figura 4.3 se muestran algunos de los controles ms habituales en Visual Bas
ic 6.0. Estos
controles se explican a continuacin con ms detalle.
4.3.1 Botn de comando (Command Button)
La propiedades ms importantes del botn de comando son su Caption,
que es lo que aparece escrito en l, las referentes a su posicin (Left y
Top) y apariencia externa (Height, Width y tipo de letra) y la propiedad
Enabled, que determina si en un momento dado puede ser pulsado o no.
No hay que confundir la propiedad Caption con la propiedad Name. La
primera define a un texto que aparecer escrito en el control, mientras que
las segunda define el nombre interno con el que se puede hacer referencia al cit
ado objeto.
Si en la propiedad Caption se pone el carcter (&) antes de una de sus letras, dic
ha letra
aparece subrayyada en el botn (como la x en el botn Exit de la figura anexa). Esto q
uiere decir
que, como es habitual en Windows, dicho botn puede activarse con el teclado por m
edio de la
combinacin Alt+letra subrayada. Esta caracterstica es comn a muchos de los controle
s que
tienen propiedad Caption.
El evento que siempre suelen tener programado los botones de comandos es el even
to Click.
Captulo 4: Eventos, Propiedades y Controles pgina 55
4.3.2 Botones de opcin (Option Button)
Adems de las mencionadas para el caso anterior estos botones tienen la
propiedad Value, que en un determinado momento slo puede ser True en
uno de los botones del grupo ya que se trata de opciones que se excluyen
mutuamente.
Para agrupar botones se coloca primero un marco o frame en el
formulario y, estando seleccionado, se colocan despus cuantos botones de
opcin se desee. En un mismo formulario se pueden colocar cuantos grupos de botone
s de opcin se
quiera, cada uno de ellos agrupado dentro de su propio marco. Es muy importante
colocar primero
el frame y despus los botones de opcin. Con esto se consigue que los botones de op
cin estn
agrupados, de modo que slo uno de ellos pueda estar activado. Si no se coloca nin
gn frame todos
los botones de opcin de un mismo formulario forman un nico grupo. Si los botones y
a existen y
se quieren introducir un un frame se seleccionan, se hace Cut y luego Paste dent
ro del frame
seleccionado.
Slo un grupo de botones de opcin puede recibir el focus, no cada botn por separado.

Cuando el grupo tiene el focus, con las flechas del teclado ( y ) se puede activar
una u otra opcin
sin necesidad de usar el ratn. Tambin se puede utilizar Alt+carcter introduciendo a
ntes de dicho
carcter un (&) en el Caption del botn de opcin.
4.3.3 Botones de seleccin (Check Box)
La nica diferencia entre estos botones y los anteriores es que en los
botones de seleccin puede haber ms de uno con la propiedad Value a
True. Estos botones no forman grupo aunque estn dentro de un frame, y
reciben el focus individualmente. Se puede tambin utilizar el carcter (&)
en el Caption para activarlos con el teclado.
El usuario debe decidir qu tipo de botones se ajustan mejor a sus
necesidades: en el caso de la edad, est claro que no se puede ser de dos
edades diferentes; s es posible sin embargo conocer varios lenguajes de programac
in.
4.3.4 Barras de desplazamiento (Scroll Bars)
En este tipo de control las propiedades ms importantes son Max y Min, que
determinan el rango en el que est incluido su valor, LargeChange y SmallChange
que determinan lo que se modifica su valor al clicar en la barra o en el botn con
la
flecha respectivamente y Value que determina el valor actual de la barra de
desplazamiento. Las barras de desplazamiento no tienen propiedad Caption.
El evento que se programa habitualmente es Change, que se activa cuando la
barra de desplazamiento modifica su valor. Todo lo comentado en este apartado es

comn para las barras de desplazamiento verticales y horizontales.
Adems de las Scroll Bars horizontal y vertical, Visual Basic 6.0 dispone tambin de
l control
Slider, utilizado en los paneles de control de Windows, que tiene una funcin simi
lar.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 56
4.3.5 Etiquetas (Labels)
En las etiquetas o labels la propiedad ms importante es Caption, que contiene
el texto que aparece sobre este control. Esta propiedad puede ser modificada
desde programa, pero no interactivamente clicando sobre ella (a diferencia de
las cajas de texto, que se vern a continuacin). Puede controlarse su tamao,
posicin, color de fondo y una especie de borde 3-D. Habitualmente las labels
no suelen recibir eventos ni contener cdigo.
Las Labels tienen las propiedades AutoSize y WordWrap. La primera, cuando est a T
rue,
ajusta el tamao del control al del texto en l contenido. La segunda hace que el te
xto se distribuya
en varias lneas cuando no cabe en una sola.
4.3.6 Cajas de texto (Text Box)
La propiedad ms importante de las cajas de texto es Text, que almacena el
texto contenido en ellas. Tambin se suelen controlar las que hacen
referencia a su tamao, posicin y apariencia. En algn momento se puede
desear impedir el acceso a la caja de texto, por lo que se establecer su
propiedad Enabled como False. La propiedad Locked como True hace que
la caja de texto sea de slo lectura. La propiedad MultiLine, que slo se
aplica a las cajas de texto, determina si en una de ellas se pueden incluir ms de
una lnea o si se
ignoran los saltos de lnea. La justificacin o centrado del texto se controla con l
a propiedad
Alignment. La propiedad ScrollBars permite controlar el que aparezca ninguna, un
a o las dos barras
de desplazamiento de la caja.
En una caja de texto no se pueden introducir Intros con el teclado en modo de di
seo. En
modo de ejecucin se deben introducir como caracteres ASCII (el 13 seguido del 10,
esto Carriage
Return y Line Feed). Afortunadamente Visual Basic 6.0 dispone de la constante vb
CrLf, que realiza
esta misin de modo automtico.
Otras propiedades importantes hacen referencia a la seleccin de texto dentro de l
a caja, que
slo estn disponibles en tiempo de ejecucin. La propiedad SelStart sirve para posici
onar el cursor
al comienzo del texto que se desea seleccionar (el primer carcter es el cero); Se
lLength indica el
nmero de caracteres o longitud de la seleccin; SelText es una cadena de caracteres
que representa
el texto seleccionado. Para hacer Paste con otro texto sustituyendo al seleccion
ado basta asignarle a
esta propiedad ese otro texto (si no hay ningn texto seleccionado, el texto de Se
lText se inserta en
la posicin del cursor); para entresacar el texto seleccionado basta utilizar esta
propiedad en alguna
expresin.
Los eventos que se programan son Change, cuando se quiere realizar alguna accin a
l modificar
el contenido de la caja, Click y DblClick y en algunos casos especiales KeyPress
para controlar
los caracteres que se introducen. Por ejemplo, se puede chequear la introduccin d
el cdigo ASCII
13 (Intro) para detectar que ya se finalizado con la introduccin de datos. Tambin
se utiliza la
propiedad MaxLength para determinar el nmero mximo de caracteres que pueden introd
ucirse en
la caja de texto.
En aquellos casos en los que se utilice una caja de texto como entrada de datos
(es el control
que se utiliza la mayora de las veces con esta finalidad), puede ser interesante
utilizar el mtodo
SetFocus para enviar el foco a la caja cuando se considere oportuno.
Otras propiedades de las cajas de texto hacen referencia a los tipos de letra y
al estilo. As la
propiedad FontName es una cadena que contiene el nombre del Font (Courier New, T
imes New
Captulo 4: Eventos, Propiedades y Controles pgina 57
Roman, etc.), FontSize es un tipo Short que contiene el tamao de la letra, y Font
Bold, FontItalic,
FontUnderline y FontStrikethrough son propiedades tipo Boolean que indican si el
texto va a
tener esa caracterstica o no.
4.3.7 Listas (List Box)
Una lista es un control en el que se pueden mostrar varios registros
o lneas, teniendo uno o varios de ellos seleccionado(s). Si en la
lista hay ms registros de los que se pueden mostrar al mismo
tiempo, se aade automticamente una scrollBar.
Para aadir o eliminar registros de la lista en modo de
ejecucin se utilizan los mtodos AddItem y RemoveItem. Las
listas se suelen inicializar desde el evento Form_Load.
La propiedad List es un array que permite definir el contenido
de la lista en modo de diseo a travs de la ventana de propiedades.
List permite tambin acceder a los elementos de la lista en tiempo de ejecucin, par
a utilizar y/o
cambiar su valor. Para ello se pone en ndice del elemento entre parntesis (empezan
do a contar por
cero) a continuacin de List, como se muestra a continuacin por ejemplo, para cambi
ar el tercer
elemento:
lstName.List(2) = "Tercero"
Para aadir un registro en tiempo de ejecucin se utiliza AddItem:
lstName.AddItem Registro_Aadido, posicion
donde posicion es un argumento opcional que permite especificar la posicin en que
se debe aadir.
Si se omite el registro se aade al final de la lista. Lo anterior es vlido si la p
ropiedad Sorted est a
False; si est a True el nuevo registro se aade en la posicin ordenada que le corres
ponde. Para
eliminar un registro,
lstName.RemoveItem Posicin_del_registro_en_la_lista
En el caso de que se quiera vaciar completamente el contenido de una lista se pu
ede utilizar el
mtodo Clear.
Dos propiedades interesantes de las listas son ListCount y ListIndex. La primera
contiene el
nmero total de registros incluidos en la lista. La segunda permite acceder a una
posicin concreta
de la lista para aadir un registro nuevo en esa posicin, borrar uno ya existente,
seleccionarlo, etc.
Hay que recordar una vez ms que los elementos de la lista se empiezan a numerar p
or cero. El
valor de propiedad ListIndex en cada momento coincide con el registro selecciona
do y en el caso de
no haber ninguno seleccionado esta propiedad vale -1.
Es interesante saber que al seleccionar uno de los registros de la lista se acti
va el evento Click
de dicha lista.
Las listas permiten selecionar ms de un elemento poniendo la propiedad MultiSelec
t a valor
1-Simple o 2-Extended. En el primer caso los elementos se seleccionan o se elimi
na la seleccin
simplemente clicando sobre ellos. En el segundo caso la forma de hacer seleccion
es mltiples es la
tpica de Windows, utilizando las teclas Ctrl y Shift. Con seleccin mltile la propie
dad SelCount
indica el nmero de elementos seleccionados, mientras que la propiedad Selected()
es un array de
valores boolean que indica si cada uno de los elementos de la lista est seleccion
ado o no.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero
pgina 58
4.3.8 Cajas combinadas (ComboBox)
Un ComboBox tiene muchas cosas en comn con una lista. Por ejemplo los
mtodos AddItem, RemoveItem o Clear y las propiedades List, ListIndex o
ListCount.
La diferencia principal es que en un ComboBox tiene una propiedad llamada
Style, que puede adoptar tres valores (1,2 3) que corresponden con tres distinta
s
formas de presentar una lista:
1.
Style=0 Style=vbComboDropDown (Dropdown Combo), ste es el valor
ms habitual y corresponde con el caso en el que slo se muestra el registro
seleccionado, que es editable por el usuario, permaneciendo el resto oculto hast
a que el
usuario despliega la lista completa clicando sobre el botn-flecha.
2.
Style=1 Style=vbComboSimple (Simple Combo). En este caso el registro seleccionad
o
tambin es editable, y se muestra una lista no desplegable dotada si es necesario
de una
scrollbar.
3.
Style=2 Style=vbComboDropDownList (DropDown List). En este ltimo caso el registro

seleccionado no es editable y la lista es desplegable.
En una caja combinada, al igual que en una caja de texto sencilla, est permitido
escribir con
el teclado en tiempo de ejecucin, si la propiedad Enabled vale True. En una lista
esto no es
posible.
La propiedad Text corresponde con lo que aparece en la parte de caja de texto de
l control
ComboBox, bien sea porque el usuario lo ha introducido, bien porque lo haya sele
ccionado.
4.3.9 Controles relacionados con ficheros
Trabajando en un entorno Windows 95/98/NT es habitual tener que abrir y cerrar
ficheros parar leer datos, guardar un documento, etc. Hay tres controles bsicos q
ue resultan de
suma utilidad en esta tarea. Son la lista de unidades lgicas o discos (Drive List
Box), la lista de
directorios (Dir ListBox) y la lista de ficheros (File ListBox). Estos controles
se tratan con ms
detalle en el Captulo 7.
4.3.10 Control Timer
Si se desea que una accin suceda con cierta periodicidad se puede utilizar un con
trol Timer.
Este control produce de modo automtico un evento cada cierto nmero de milisegundos
y es
de fundamental importancia para crear animaciones o aplicaciones con movimiento
de objetos. La
propiedad ms importante de un objeto de este tipo es Interval, que determina, pre
cisamente, el
intervalo en milisegundos entre eventos consecutivos. La accin que se desea activ
ar debe
programarse en el evento Timer de ese mismo control.
Si en algn momento se desea detener momentneamente la accin peridica es suficiente c
on
hacer False la propiedad Enabled del control Timer y para arrancarla de nuevo vo
lver a hacer True
esa propiedad. Haciendo 0 la propiedad Interval tambin se consigue inhabilitar el
Timer.
4.4 CAJAS DE DILOGO ESTNDAR (CONTROLES COMMON DIALOG)
El control de cuadro de dilogo estndar de Windows 95/NT (Common Dialog) ofrece una
forma
sencilla y eficiente de realizar algunas de las tareas ms comunes de un programa,
tales como la
Captulo 4: Eventos, Propiedades y Controles pgina 59
seleccin de un fichero para lectura/escritura, la impresin de un fichero o la sele
ccin de un tipo de
letra o un color.
Lo primero que hay que hacer es ubicar el control en el formulario. El control s
e representar
como un icono de tamao invariable. No es posible especificar la ubicacin que tendr
la caja de
dilogo cuando se abra en la pantalla, ya que se trata de una propiedad no accesib
le por el usuario.
Un nico cuadro de dilogo estndar puede bastar para realizar todas las funciones que
se
deseen, es decir, no es necesario insertar un cuadro de dilogo para imprimir un t
exto y otro para
guardarlo, sino que ambos pueden compartir el mismo cuadro de dilogo simplemente
invocando a
uno u otro tipo en tiempo de ejecucin (no es posible indicarlo en tiempo de diseo)
. Para ello se
dispone de los mtodos siguientes: ShowColor, ShowFont, ShowHelp, ShowOpen, ShowPr
inter y
ShowSave. En ocasiones interesar introducir varios controles diferentes por motiv
os de claridad o
para que ciertas propiedades sean distintas.
Figura 4.4. Controles Common Dialog.
En la Figura 4.4 se pueden observar distintos tipos de control Common Dialog. Po
r ejemplo,
si se desea visualizar un cuadro de dilogo para abrir un fichero, habr que escribi
r:
dlgAbrir.ShowOpen
donde dlgAbrir es el nombre asignado al control Common Dialog.
Las principales propiedades de este control en cada una de sus variantes se expl
ican en los
apartados siguientes. La propiedad Flag existe para todos los controles y determ
ina algunas de sus
caractersticas ms importantes.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero
pgina 60
4.4.1 Open/Save Dialog Control
Las propiedades ms importantes de este control son:

DefaultExt: Es la extensin por defecto a utilizar para abrir/salvar archivos. Con
Save, si el
nombre del fichero se teclea sin extensin, se aade esta extensin por defecto.

DialogTitle: Devuelve o da valor al ttulo de la caja de dilogo (cadena de caracter
es).

FileName: Nombre completo del archivo a abrir/salvar, incluyendo el path.

FileTitle: Nombre del archivo a abrir/salvar pero sin la ruta de acceso correspo
ndiente.

Filter: Contiene los filtros de seleccin que aparecern indicados en la parte infer
ior de la
pantalla en la lista de tipos de archivo. Pueden indicarse mltiples tipos de arch
ivo,
separndolos mediante un barra vertical ( Alt Gr +< 1> ). Su sintaxis es la siguie
nte:
Objeto.Filter = "(descripcin a aparecer en la listbox)|filtro"
Por ejemplo:
"Texto (*.txt)|*.txt|Imgenes(*.bmp;*.ico)|*.bmp;*.ico"

FilterIndex: Indica el ndice (con respecto a la lista de tipos) del filtro por de
fecto. Se
empiezan a numerar por "1".

InitDir: Contiene el nombre del directorio por defecto. Si no se especifica, se
utiliza el
directorio actual.

Flags: Esta propiedad puede tomar muchos valores con objeto de fijar los detalle
s
concretos de este control (por ejemplo, abrir un fichero en modo read only, avis
ar antes de
escribir sobre un fichero ya existente, etc.). Estos valores estn definidos por c
onstantes de
Visual Basic 6.0 cuyos nombres empiezan con las letras cdl. Para ms informacin en
el
Help de Common Dialog Control buscar Properties, Flags Properties (Open, Save As

Dialogs). Por ejemplo, el valor definido por la constante cdlOFNOverwritePrompt
hace
que antes de escribir en un fichero ya existente se pida confirmacin al usuario.
Para
establecer varias opciones a la vez se le asigna a Flags la suma de las constant
es
correspondientes. Las distintas constantes disponibles se pueden encontrar en el
Help
buscando Constants/CommonDialog Control.
4.4.2 Print Dialog Control
Las propiedades ms importantes de este control son:

Copies: Determina el nmero de copias a realizar por la impresora.

FromPage: Selecciona el nmero de pgina a partir del cual comienza el rango de
impresin.

ToPage: Selecciona el nmero de pgina hasta la cual llega el rango de impresin.

PrinterDefault: Cuando es True se imprime en el objeto Visual Basic Printer. Ade
ms las
opciones actuales de impresin que se cambien sern asignadas como las opciones de
impresin por defecto del sistema.

Flags: Ver con ayuda del Help los posibles valores de esta propiedad.
Captulo 4: Eventos, Propiedades y Controles
pgina 61
4.4.3 Font Dialog Control
Las propiedades ms importantes de este control son:

Color: Color de impresin. Para usar esta propiedad hace falta establecer la propi
edad
Flags al valor de la constante cdlCFEffects.

FontBold, FontItalic, FontStrikethru, FontUnderline: Devuelve o asigna los valor
es de
los estilos de la fuente actual.

FontName: Devuelve o asigna el nombre de la fuente en uso.

FontSize: Devuelve o asigna el tamao de la fuente en uso.

Min y Max: Asigna o lee los valores del tamao de fuente mnimo y mximo
respectivamente que aparecern en la lista de seleccin de tamaos de la fuente.

Flags: Indica si los tipos de letra que se van a mostrar son los de la pantalla
(cdlCFScreenFonts), los de la impresora (cdlCFPrinterFonts) o ambos (cdlCFBoth).
Con
la constante cdlCFEffects se puede indicar que se permite cambiar efectos como e
l color,
subrayado y cruzado con una lnea. Si Flags vale 0 da un error en tiempo de ejecuc
in
inndicando que no hay fonts instaladas.
4.4.4 Color Dialog Control
Las propiedades ms importantes de este control son:

Color: Devuelve o asigna el valor del color actual.

Flags: Ver con ayuda del Help los posibles valores de esta propiedad. Por ejempl
o, con el
valor cdlCCFullOpen muestra el cuadro de dilogo completo, mientras que el valor
cdlCCPreventFullOpen muestra slo los colores predefinidos, impidiendo definir otr
os
nuevos. Con el valor cdlCCRGBInit se establece el color inicial para el cuadro d
e dilogo.
4.5 FORMULARIOS MLTIPLES
Un programa puede contener ms de un formulario. De hecho, habitualmente los progr
amas
contienen mltiples formularios. Recurdese que el formulario es la ventana de mximo
nivel en la
que aparecen los distintos controles.
Sin embargo, un programa siempre debe tener un formulario principal, que es el q
ue aparece
al arrancar el programa. Se puede indicar cul debe ser el formulario principal en
el men
Project/Project Properties, en la lengeta General, en la seccin Startup Form. Por
defecto, el
programa considera como formulario principal el primero que se haya creado. El r
esto de
formularios que se incluyan en el programa sern cargados en su momento, a lo larg
o de la
ejecucin del programa.
Para aadir en tiempo de diseo nuevos formularios al programa, hay que acudir al me
n
Project/Add Form. La forma de cargar y descargar estos formularios se ha explica
do con
anterioridad. Es importante sin embargo recordar que conviene descargar aquellos
sub-formularios
que ya no sean de utilidad, ya que as se ahorran recursos al sistema.
Para activar en tiempo de ejecucin un formulario distinto del inicial (o del que
est activo en
ese momento), se utiliza el mtodo Show (frmName.Show). El mtodo Hide oculta el for
mulario,
pero lo deja cargado; el mtodo Activate lo vuelve a mostrar. El mtodo Unload elimi
na los
elementos grficos del formulario, pero no las variables y el cdigo. El mtodo Unload
Me descarga
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 62
el propio formulario que lo llama. Para eliminar completamente un formulario se
puede utilizar el
comando:
Set frmName = NOTHING
que llama al evento Terminate (hay que utilizar tambin los mtodos Hide o Unload pa
ra que
desaparezca de la pantalla).
Para referirse desde un formulario a los objetos y variables de otro formulario
se utiliza el
operador punto (frmName.Object.Property).
4.5.1 Apertura de controles en forma modal
En ciertas ocasiones se desea que el programa no realice ninguna accin hasta que
el usuario cierre
una ventana o formulario en la que se le pregunta algo o en la que tiene que tom
ar alguna decisin.
En esos casos, al utilizar el mtodo Show, es necesario utilizar el argumento Styl
e con valor 1. A
esto se le llama mostrar una ventana en forma modal. Esto quiere decir que no se
permitir al
usuario hacer activa ninguna pantalla hasta que el usuario cierre esa ventana mo
dal. Esto se hace
as:
frmName.Show 1
o bien,
frmName.Show vbModal
4.5.2 Formularios MDI (Multiple Document Interface)
En algunos casos puede ser
interesante establecer una jerarqua
entre las ventanas o formularios
que van apareciendo sucesivamente
en la pantalla del ordenador,
de tal manera que al cerrar una que
se haya establecido como principal,
se cierren tambin todas las
que se han abierto desde ella y
dentro de ella. De esta forma una
misma aplicacin puede tener
varios documentos abiertos, uno en
cada ventana hija. As trabajan por
ejemplo Word y Excel, que pueden
tener varios documentos abiertos
dentro de la ventana principal de la aplicacin. En el mundo de las Windows de Mic
rosoft a esto se
llama MDI (Multiple Document Interface). La Figura 4.5 muestra un ejemplo de for
mulario MDI.
En Visual Basic 6.0 estos formularios que tienen sub-formularios hijos se conoce
n como
MDIForms. Los formularios MDI se crean desde el men de Visual Basic 6.0 con el co
mando
Project/Add MDI Form. En una aplicacin slo puede haber un formulario MDI, pero ste
puede
tener varios hijos. Si se quiere que un formulario sea Child, debe tener su prop
iedad MDIChild
como True.
Si al iniciar una aplicacin el formulario que se carga en primer lugar es un form
ulario Child,
el formulario MDI se carga al mismo tiempo. Al cerrar un formulario MDIForm se c
ierran todos
sus formularios Child; por ejemplo, al cerrar Word tambin se cierran todos los do
cumentos que
Figura 4.5. Formularios MDI (Multiple Document Interface).
Captulo 4: Eventos, Propiedades y Controles pgina 63
estuvieran abiertos. Los formularios Child se minimizan y maximizan dentro de lo
s lmites del
formulario MDI. Cuando estn maximizados, su Caption aparece junto al Caption del
formulario
MDI. Los formularios Child no tienen mens propios, sino que sus mens aparecen en l
a barra de
mens del formulario MDI.
En una aplicacin con un formulario MDI y uno o ms formularios Child, puede haber o
tros
formularios que no sean Child y que se abren fuera de los lmites del formulario M
DI cuando son
requeridos.
4.6 ARRAYS DE CONTROLES
Un array de controles esta formado por controles del mismo tipo que comparten el
nombre y los
procedimientos o funciones para gestionar los eventos. Para identificar a cada u
no de los controles
pertenecientes al array se utiliza Index o ndice, que es una propiedad ms de cada
control.
Suponiendo que el sistema tenga memoria suficiente un array en Windows 95/98/NT
podra llegar a
tener hasta 32767 elementos.
La utilidad principal de los arrays se presenta en aquellos casos en los que el
programa debe
responder de forma semejante a un mismo evento sobre varios controles del mismo
tipo. Los
ejemplos ms claros son los botones de opcin y los mens. En estos casos el programa
responde de
manera semejante independientemente de cul es la opcin seleccionada. Los arrays de
controles
comparten cdigo, lo cual quiere decir que slo hay que programar una funcin para res
ponder a un
evento de un determinado tipo sobre cualquier control del array. Las funciones q
ue gestionan los
eventos de un array tienen siempre u argumento adicional del tipo Index As Integ
er que indica qu
control del array ha recibido el evento.
Una opcin avanzada de Visual Basic 6.0 permite crear objetos en tiempo de ejecucin
,
siempre que sean elementos de un array ya existente, con la instruccin Load. De f
orma anloga se
pueden destruir con Unload.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero
pgina 64
5. MENS
Entre las capacidades de Visual Basic 6.0 no poda
faltar la de construir mens con gran facilidad. Sin
embargo, hay algunas diferencias respecto al modo el
que se construyen los controles. Para crear mens
Visual Basic dispone de una herramienta especial que se
activa mediante el comando Menu Editor del men
Tools. El cuadro de dilogo que se abre se nuestra en la
Figura 5.1. Ms adelante se ver cmo se utiliza esta
herramienta; antes, conviene recordar brevemente las
caractersticas ms importantes de los mens de
Windows 95/98/NT.
Los mens presentan sobre los dems controles la
ventaja de que ocupan menos espacio en pantalla, pero
tienen el inconveniente de que sus posibilidades no
estn a la vista ms que cuando se despliegan.
5.1 INTRODUCCIN A LAS POSIBILIDADES DE LOS
MENS
La mayor parte de las aplicaciones de Windows 95
utilizan mens. Aunque todo el mundo est
familiarizado con sus funciones ms bsicas, conviene
ver algunas posibilidades menos usuales. Se utilizarn
para ello unas aplicaciones tan conocidas como Word y
Excel.
La Figura 5.2 recoge el aspecto del men View de
Word 97, en el que conviene destacar las siguientes
caractersticas:
1.
Lo primero que llama la atencin es que los mens
aparecen divididos en grupos de opciones
separados por lneas horizontales.
2.
Algunos items como Page Layout tienen un icono
resaltado a su izquierda. Esto quiere decir que ese
tem es la opcin elegida entre los cuatro items de
su grupo. En este sentido los mens se parecen a
los controles OptionButton. Visual Basic 6.0 no
permite hacer esto directamente, pero lo puede
simular.
3.
Otros items como Ruler tienen una marca de
seleccin a su izquierda. En este caso el men
realiza la funcin de las cajas de seleccin (CheckBox).
4.
Todas las opciones del men tienen una letra subrayada. La finalidad es poder desp
legar y
activar los mens desde teclado, sin ayuda del ratn (con Alt y la letra subrayada).

Figura 5.1. Editor de mens de Visual Basic.
Figura 5.2. El men View de Word 97.
Figura 5.3. El men Format/Sheet de Excel 97.
Captulo 5: Mens
pgina 65
5.
Tambin se observa que el tem Comments aparece en gris claro. Esto quiere decir que
en este
momento no est activo y por tanto no es seleccionable.
6.
Otros items como Toolbars estn seguidos por un pequeo tringulo. Eso quiere decir qu
e
existe un men secundario con ms opciones. Otros items como Zoom aparecen seguidos
por
puntos suspensivos (...). Este es un convenio utilizado para indicar que eligien
do esa opcin se
abrir un cuadro de dilogo en el que habr que tomar otras decisiones.
Por lo que respecta al men de Excel 97 que aparece en la Figura 5.3 la caractersti
ca ms
importante es que tiene sub-mens (sealados mediante un pequeo tringulo a su derecha)
, que se
abren al colocar el cursor sobre el tem correspondiente. Estos mens se suelen llam
ar mens en
cascada, y son muy frecuentes en Windows 95/98/NT.
Otra caracterstica de los mens, que no aparece en la Figura 5.2 ni en la Figura 5.
3, es la
posibilidad de definir combinaciones de teclas que realizan la misma funcin que u
na opcin del
men. Por ejemplo, en muchas aplicaciones Ctrl+C equivale a Edit/Copy y Ctrl+V a E
dit/Paste.
Estas combinaciones de teclas se llaman accesos rpidos (shortcut) y hay que disti
nguirlas de
acceder a los mens mediante la tecla Alt y las letras subrayadas de los nombres.
5.2 EL EDITOR DE MENS (MENU EDITOR)
En la Figura 5.4 se vuelve a recoger -a
mayor tamao y con algunos
elementos ya definidos- el editor de
mens mostrado en la Figura 5.1, que
se abre con Tools/Menu Editor o
clicando en el botn correspondiente
de la barra de herramientas.
Se llama ttulo a cada elemento
que aparece en la barra de mens y
lnea o tem a cada elemento que
aparece al desplegarse un ttulo. Para
introducir un nuevo ttulo en la barra
de mens hay que definir, en la caja de
texto Caption de la Figura 5.4, el
nombre con el que se quiere que
aparezca. Si se desea acceder a dicho
ttulo mediante teclado (Alt+letra), la
letra que se desea utilizar deber ir
precedida por el carcter (&). Adems,
y al igual que todos los controles de
Visual Basic 6.0, conviene que el
ttulo tenga un nombre (caja de texto
Name) para que se pueda acceder a l desde programa. Los nombres de los ttulos de l
os mens
suelen comenzar por las letras mnu, como por ejemplo mnuFile, mnuEdit o mnuHelp.

En la Figura 5.4 la caja de texto Index hace referencia a la posibilidad de crea
r arrays de
mens. Se puede definir tambin un shortcut en la caja de texto correspondiente. En
esta figura
aparecen cuatro checkButtons (Enabled, Checked, Visible y WindowList) con los qu
e se pueden
especificar algunas propiedades iniciales del men, como por ejemplo que est activa
do o que sea
visible.
Figura 5.4. Definicin de mens con Menu Editor.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero
pgina 66
Se pueden introducir items subordinados a un ttulo por medio
de la flecha hacia la derecha. Para ello basta definirlos del modo
habitual y luego clicar sobre dicha flecha. El resultado es que
aparecen unos puntos a la izquierda del caption correspondiente. Por
ejemplo, en el men definido en la Figura 5.4, Exit es una lnea
subordinada del men File, mientras que Undo, Repeat, Cut, Copy y
Paste son items subordinados del men Edit. En este ltimo caso se
ha introducido una lnea de separacin entre Repeat y Cut; para ello
basta introducir un tem ms cuyo caption sea el carcter menos (-).
La Figura 5.5 muestra el resultado de ejecutar la aplicacin
cuyos mens estn definidos en el Menu Editor de la Figura 5.4. Obsrvese la lnea horiz
ontal de
separacin, los shortcuts y las letras subrayadas para poder abrir el men desde tec
lado.
Respecto a los nombres de los items, lo habitual es seguir la nomenclatura que y
a se muestra
en la Figura 5.4 para Undo: primero se ponen las tres letras mnu, y despus los no
mbres del ttulo y
del tem comenzando por mayscula: mnuEditUndo. Caso que haya mens en cascada, se pon
en
los distintos nombres siguiendo estas mismas normas. De esta forma siempre queda
claro a partir
del nombre a qu elemento del men se est haciendo referencia.
La Figura 5.4 es bastante auto-explicativa respecto a cmo se debe proceder para e
structurar
un men, aadiendo, borrando o cambiando de posicin los distintos elementos. De forma

resumida, se pueden establecer las siguientes normas generales:
1.
Para insertar un ttulo o tem basta seleccionar la lnea por encima de la cual se qui
ere insertar
y clicar en el botn Insert. Para aadir un nuevo tem al final de la lista se selecci
ona el ltimo
elemento introducido y se clica en el botn Next. Para borrar un elemento, se sele
cciona y se
clica en el botn Delete.
2.
Se puede cambiar de posicin un ttulo o tem seleccionndolo y clicando en los botones
que
muestran las flechas hacia arriba y hacia abajo. Para convertir un ttulo en tem o
para cambiar
el nivel de un tem se selecciona y se utilizan las flechas hacia la derecha y hac
ia la izquierda.
Conviene recordar que los nombres de los items (por ejemplo mnuEditCopy) deben e
star
siempre de acuerdo con su posicin, segn las normas explicadas anteriormente.
5.3 AADIR CDIGO A LOS MENS
Los items de los mens admiten un nico evento: el evento click, que consiste en ser
seleccionados
por medio del ratn o del teclado. Para aadir el cdigo correspondiente basta elegir
en el men,
estando en modo diseo, el tem correspondiente para que se abra la ventana de cdigo
en el
procedimiento ligado a ese evento. Tambin puede buscarse directamente el objeto y
el evento
correspondiente en las listas desplegables de la ventana de cdigo.
En ocasiones habr que cambiar las propiedades checked, active y visible desde los

procedimientos. A estas propiedades se accede del modo habitual, con el nombre d
el tem y el
operador punto (.)
5.4 ARRAYS DE MENS
De la misma manera que pueden definirse arrays de controles, tambin pueden defini
rse arrays de
items (y de ttulos) en un men. La ventaja de definir arrays de items es que basta
definir un nico
procedimiento que se haga cargo del evento click de todos los items del array. E
ste procedimiento
Figura 5.5. Men Edit sencillo.
Captulo 5: Mens pgina 67
recibe como parmetro la variable entera Index, que indica que tem del array ha sid
o seleccionado
por el usuario. Dentro de este procedimiento se podr utilizar por ejemplo la sent
encia Select Case
para tratar de forma adecuada cada uno de los casos.
5.5 EJEMPLO: MEN PARA DETERMINAR LAS CARACTERSTICAS DE UN TEXTO
La Figura 5.6 muestra un formulario que
contiene una caja de texto con una frase
(Visual Basic es el lenguaje de programacin
que hace ms fcil el desarrollar aplicaciones
para Windows 95) a la que se puede dar
formato desde el men Text. El men Text
tiene tres submens: Font, Size y Style. El
men File slo tiene la opcin Exit, que
termina la ejecucin.
El sub-men Font tiene tres opciones:
Arial, Courier New y Times New Roman. El
sub-men Size tiene 5 opciones: 10, 11, 12, 13,
y 14. El sub-men Style tiene 2 opciones: Bold
e Italic. Los tipos de letra y los tamaos deben
actuar como los Option Buttons: slo una opcin puede estar seleccionada para el tex
to de la caja.
Sin embargo, los estilos Bold e Italic actan como Checked Boxes: el texto puede s
er a la vez Bold
e Italic, y puede no ser ninguna de las dos cosas.
Para los tamaos de letra se debe utilizar un array de mens con cinco elementos (pr
opiedad
Index de 0 a 4). Se deja al usuario que ponga los nombres que desee a los contro
les de la Figura 5.6,
o que utilice los del cdigo del programa que se muestra a continuacin. Ntese que co
n los mens
que se comportan como Option Buttons la propiedad Checked se pone a False en tod
as las opciones
antes de poner a True la que el usuario ha elegido. Con el men que se comporta co
mo Checked
Box simplemente se cambia la propiedad Checked de True a False o viceversa, cuan
do el usuario la
elige. El cdigo se muestra a continuacin:
Option Explicit
Private Sub Form_Load()
txtBox.Text = "Visual Basic es el lenguaje de programacin " & _
"que hace ms fcil el desarrollar aplicaciones para Windows 95"
txtBox.Font.Name = "Arial"
mnuTextFontArial.Checked = True
txtBox.Font.Size = 10
mnuTextSizeA(0).Checked = True
txtBox.Font.Bold = False
txtBox.Font.Italic = False
End Sub
Private Sub mnuFileExit_Click()
End
End Sub
Private Sub mnuTextFontArial_Click()
mnuTextFontCou.Checked = False
mnuTextFontTimes.Checked = False
txtBox.Font.Name = "Arial"
mnuTextFontArial.Checked = True
End Sub
Figura 5.6. Caja de texto con formatos desde men.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 68
Private Sub mnuTextFontCou_Click()
mnuTextFontArial.Checked = False
mnuTextFontTimes.Checked = False
txtBox.Font.Name = "Courier New"
mnuTextFontCou.Checked = True
End Sub
Private Sub mnuTextFontTimes_Click()
mnuTextFontArial.Checked = False
mnuTextFontCou.Checked = False
txtBox.Font.Name = "Times New Roman"
mnuTextFontTimes.Checked = True
End Sub
Private Sub mnuTextSizeA_Click(Index As Integer)
Dim i As Integer
For i = 0 To 4
mnuTextSizeA(i).Checked = False
Next i
Select Case Index
Case 0
txtBox.Font.Size = 10
Case 1
txtBox.Font.Size = 11
Case 2
txtBox.Font.Size = 12
Case 3
txtBox.Font.Size = 13
Case 4
txtBox.Font.Size = 14
End Select
mnuTextSizeA(Index).Checked = True
End Sub
Private Sub mnuTextStyleBold_Click()
txtBox.Font.Bold = Not txtBox.Font.Bold
mnuTextStyleBold.Checked = Not mnuTextStyleBold.Checked
End Sub
Private Sub mnuTextStyleItalic_Click()
txtBox.Font.Italic = Not txtBox.Font.Italic
mnuTextStyleItalic.Checked = Not mnuTextStyleItalic.Checked
End Sub
5.6 MENS CONTEXTUALES (POPUP MENU)
Los mens contextuales aparecen cuando el usuario clica con el botn derecho sobre u
n elemento
de la aplicacin. El programa debe reconocer el evento MouseUp o MouseDown, ver si
el usuario
ha clicado con el botn derecho (argumento Button igual a 2) y llamar al mtodo Popu
pMenu, que
tiene la siguiente forma general:
PopupMenu menuName [,flags[,x[,y]]]
donde menuName ee el nombre de un men (con al menos un elemento), x e y son las c
oordenadas
base para hacer aparecer el men contextual, y flags son unas constantes que deter
minan ms en
concreto dnde y cmo se muestra el men. Las constantes que determinan dnde aparece el
men
son: vbPopupMenuLeftAlign (default), vbPopupMenuCenterAlign y vbPopupMenuRightAl
ign. Por
otra parte vbPopupMenuLeftButton (default) y vbPopupMenuRightButton determinan s
i el comando
se activa con el botn izquierdo o con cualquiera de los dos botones. Las constant
es se combina con
el operador Or. El nombre del men que aparece en el mtodo PopupMenu debe haber sid
o creado
con el Menu Editor, aunque puede tener la propiedad Visible a False, si no se de
sea que se vea.
Captulo 6: Grficos en Visual Basic 6.0 pgina 69
6. GRFICOS EN VISUAL BASIC 6.0
Visual Basic 6.0, adems de hacer fcil la construccin de interfaces grficas de usuari
o, tiene
tambin grandes posibilidades grficas en lo que se refiere a dibujo de lneas y forma
s geomtricas,
as como en lo referente a la introduccin de grficos y figuras realizados con otras
aplicaciones. En
este captulo se presentarn brevemente las posibilidades grficas ms importantes de Vi
sual Basic
6.0.
6.1 TRATAMIENTO DEL COLOR
Antes de ver cmo se dibuja en Visual Basic 6.0 se ver cmo se definen los colores. A
l igual que
en tantas aplicaciones informticas, los colores de Visual Basic se definen por me
dio de las
componentes fundamentales RGB (Red, Green and Blue). La intensidad de cada color
fundamental
se define con un byte, es decir con un nmero entero entre 0 y 255. Se utilizan pu
es tres bytes para
definir los tres colores. Visual Basic 6.0 utiliza un entero long (32 bits, 4 by
tes) para guardar un
color, lo cual quiere decir que existe un byte adicional donde se podr guardar al
guna otra
informacin (ver Apartado 6.1.2).
6.1.1 Representacin hexadecimal de los colores
Para los nmeros enteros entre 0 y 255 se utilizan dos
dgitos hexadecimales. Con esta notacin el cero es el
00 y el 255 el FF. El nmero que indica el color va
precedido por el carcter & y la letra H. As, el
color verde se define en la forma: &H00FF00. Con esta
notacin es posible prescindir de los ceros situados a la
izquierda. Por ejemplo, el color rojo se puede escribir
como &H0000FF y como &HFF.
Visual Basic 6.0 dispone tambin de nombres
para los colores fundamentales y los que son
Tabla 6.1. Nombres de colores.
Nombre Cdigo HEX Color
vbBlack &H000000 Negro
vbRed &H0000FF Rojo.
vbGreen &H00FF00 Verde.
vbYellow &H00FFFF Amarillo.
vbBlue &HFF0000 Azul.
vbMagenta &HFF00FF Magenta.
vbCyan &HFFFF00 Cyan.
vbWhite &HFFFFFF Blanco.
combinacin de los colores fundamentales, segn
puede verse en la Tabla 6.1.
6.1.2 Acceso a los colores del sistema
El cuarto byte (en el entero long que contiene el color) puede utilizarse para h
acer referencia a los
colores del sistema. Los colores del sistema son aquellos colores con los que Wi
ndows 95/98/NT
representa las ventanas y sus bordes, las barras de desplazamiento, etc. Dichos
colores se eligen en
el panel de control Display/Appearance, y Visual Basic 6.0 permite acceder a ell
os a travs de su
nombre o de su valor hexadecimal, que empieza por &H8 y utiliza el cuarto byte. La
Tabla 6.2
muestra algunos de estos valores. Para una descripcin completa buscar Color Const
ants en el Help
de Visual Basic 6.0.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 70
Nombre Valor Descripcin
vbScrollBars &H80000000 Scroll bar color.
vbDesktop &H80000001 Desktop color.
vbActiveTitleBar &H80000002 Color of the title bar for the active window.
vbInactiveTitleBar &H80000003 Color of the title bar for the inactive window.
vbMenuBar &H80000004 Menu background color.
vbWindowBackground &H80000005 Window background color.
vbWindowFrame &H80000006 Window frame color.
vbMenuText &H80000007 Color of text on menus.
vbWindowText &H80000008 Color of text in windows.
vbTitleBarText &H80000009 Color of text in caption, size box, and scroll arrow.
... ... ...
Tabla 6.2. Colores del sistema.
6.1.3 Funcin RGB
Esta funcin devuelve un nmero que representa un color a partir de tres argumentos
enteros entre 0
y 255, que son sus componentes RGB. Como ejemplo de uso:
form1.BackColor = RGB(127, 127, 64)
Si alguno de los argumentos tiene un valor mayor que 255, se toma como 255.
6.1.4 Paleta de colores
Elegir adecuadamente un color a partir de sus componentes
RGB no es una tarea fcil. Por eso Visual Basic 6.0
proporciona una paleta de 64 colores predefinidos, 16 de los
Figura 6.1. Paleta de colores.
cuales pueden ser definidos a medida por el usuario. La
Figura 6.1 muestra la paleta de colores, que aparece con
View/Color Palette.
La Figura 6.2 muestra el cuadro de dilogo que se abre
al pulsar el botn Define Colors... en la parte inferior dcha.
de la Figura 6.1. Para elegir un color se pueden introducir
directamente los valores RGB, pero tambin se puede clicar
en el mapa de colores de la parte superior izda. y luego
mover el cursor de la parte superior dcha. Finalmente,
clicando en el botn Add Color. El color seleccionado se
aade en la parte inferior de la paleta de colores (Figura
6.1).
Por supuesto es necesario tener en cuenta el nmero
de colores soportado por la tarjeta grfica del PC en el que
se est trabajando. Lo ms frecuente es que los PCs estn
configurados para soportar 256 colores (8 bits por pixel),
65.536 colores (16 bits por pixel) o 16.777.216 colores (24
bits por pixel). Si la tarjeta grfica soporta 65.536 colores se
elige el color ms cercano al que el usuario ha querido
Figura 6.2. Creacin de colores a medida.
Captulo 6: Grficos en Visual Basic 6.0 pgina 71
representar, con la funcin RGB por ejemplo. Si la tarjeta grfica soporta slo 256 co
lores se utiliza
el dithering, que consiste en mezclar pixels de distintos colores con objeto de
obtener un efecto lo
ms parecido posible al color solicitado.
Una vez aadidos los colores a la paleta, al clicar en el pequeo
tringulo que aparece en cualquier propiedad de color en la ventana
Properties aparecern una ventana donde es posible elegir entre los
colores de la paleta y los denominados colores del sistema (Figura
6.3).
El Ejemplo 1.5.4 (Colores RGB), mostrado en la pgina 11 de
este manual, es un buen ejemplo de la utilizacin de los colores en
Visual Basic 6.0.
6.2 FORMATOS GRFICOS
En un formulario de Visual Basic 6.0 -y en los controles Image y PictureBox- es
posible insertar
grficos, tanto de tipo bitmap (los producidos por aplicaciones como Paint, Paintb
rush, Paint Shop
Pro, etc.), como de tipo vectorial (los producidos por las herramientas grficas d
e Word y
PowerPoint).
Visual Basic 6.0 admite varios formatos de ficheros grficos: los ficheros *.bmp y
*.ico para
los grficos de tipo bitmap, los ficheros *.wmf (Windows Meta File) y *.emf (Enhan
ced Meta File)
para los grficos de tipo vectorial y *.jpg (JPEG o Joint Photographic Experts Gro
up) y *.gif
(Graphic Interchange Format). Los ficheros *.ico son ficheros bitmap de pequeo ta
mao (32 por
32) destinados a contener iconos. Los ficheros JPEG y GIF son formatos grficos co
mprimidos que
soportan respectivamente color de 24 bit (~16 millones de colores) y 8 bit (256
colores). Ambos
formatos son los utilizados en Internet para mostrar imgenes.
Si se desea insertar ficheros grficos que estn en otros formatos, habr que converti
rlos
previamente a uno de estos formatos usando el programa adecuado.
6.3 CONTROLES GRFICOS
Visual Basic 6.0 dispone de varios controles con los que insertar grficos en un f
ormulario.
Algunos tienen ms posibilidades que otros y es necesario conocerlos bien. A conti
nuacin se vern
los controles Line, Shape, Image y PictureBox.
6.3.1 Control Line
Es el control grfico ms elemental, ya que carece de propiedades como Text, Caption
y Value.
Adems no reconoce ningn evento, por lo que su misin es casi exclusivamente decorati
va.
El control Line permite dibujar lneas en un formulario o en un control PictureBox
. Las
propiedades ms importantes son las coordenadas de los puntos extremos (X1, Y1, X2
e Y2), la
anchura en pixels (BorderWidth), el estilo de la lnea (BorderStyle) -continua, a
trazos, etc.- que
slo est activo cuando la anchura es 1 pixel, el color (BorderColor) y el nombre (N
ame). La lnea
puede estar visible o no (Visible), y existe la propiedad Index, que permite cre
ar arrays de lneas.
Figura 6.3. Colores de sistema
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 72
6.3.2 Control Shape
Este control es en muchos aspectos similar al control Line: tampoco tiene las pr
opiedades text,
Caption y Value, ni reconoce eventos. Se diferencia en que admite formas geomtric
as ms
complejas, que vienen definidas por la propiedad Shape, que admite los valores s
iguientes:
cuadrado (Square), rectngulo (Rectangle), crculo (Circle), elipse (Oval), cuadrado
redondeado
(Rounded Square) y rectngulo redondeado (Rounded Rectangle).
Adems de las propiedades correspondientes al tamao y posicin, las propiedades ms
interesantes del control Shape son las siguientes: BackColor, BackStyle, BorderC
olor, BorderStyle,
BorderWidth, FillColor, FillStyle, DrawMode. Un control Shape puede estar visibl
e o no (Visible),
y existe la propiedad Index, que permite crear arrays de Shapes.
6.3.3 Ejemplo 6.1: Uso de los controles Line y Shape
La Figura 6.4 muestra un formulario en el que se han
dibujado tres controles Line y dos controles Shape.
Las tres lneas se han dibujado con la propiedad
BorderWidth=1, pues si no la propiedad
BorderStyle no surte efecto. La propiedad
BorderStyle es 2-Dash para la segunda lnea y 3-Dot
para la tercera.
Despus se han dibujado dos controles Shape
llamados shpRect y shpRRec, cuyas propiedades
Shape estn respectivamente a 0-Rectangle y a
4-Rounded Rectangle. La propiedad BackColor est
en amarillo para shpRect y en blanco para shpRRect.
En ambos casos BackStyle est en 1-Opaque, pues si no el color de fondo no surte e
fecto. La
propiedad FillColor (que determina el color de las lneas de rayado) est en rojo pa
ra shpRect y en
negro para shpRRect. Finalmente, la propiedad FillStyle que determina el tipo de
rayado est en
5-Downward Diagonal para shpRect y en 6-Cross para shpRRect. Como la propiedad D
rawMode
est en 13-Copy Pen para ambos controles, shpRRect se superpone sobre shpRect porq
ue ha sido
creada sobre l con posterioridad.
6.3.4 Control Image
El control Image es un contenedor de grficos bitmap, iconos, metafile, enhanced m
etafile, GIF y
JPEG. Este control admite ya una amplia coleccin de eventos, por lo que es ya un
control con un
papel mucho ms activo que los anteriores.
Las propiedades ms propias e importantes de este control son las propiedades Pict
ure y
Stretch. La propiedad Picture sirve para relacionar este control con el fichero
que contiene el
grfico que se desea representar, a travs del cuadro de dilogo Load Picture que perm
ite elegir el
fichero a insertar. El fichero deber ser de uno de los tipos admitidos. Segn el fi
chero elegido, la
propiedad Picture tendr uno de los tres valores siguientes: icon (ficheros cur, i
co), bitmap (bmp,
gif, jpg) o metafile (wmf, emf).
La propiedad Stretch indica cmo se comporta el control Image al introducir en l el

contenido del fichero grfico. Por defecto, cuando se crea un control Image arrast
rando en el
formulario con el ratn esta propiedad tiene el valor False. Estando la propiedad
Stretch en False el
tamao del control se ajusta al tamao del bitmap o del metafile que se introduce en
dicho control.
Figura 6.4. Controles Line y Shape.
Captulo 6: Grficos en Visual Basic 6.0 pgina 73
Por el contrario, si dicha propiedad est en True el grfico que proviene del ficher
o se adapta al
tamao de control.
Se puede tratar de modificar el tamao del grfico en modo de diseo (con el ratn o
cambiando las propiedades de tamao del control). Si el grfico es un bitmap y la pr
opiedad Stretch
est en False, el tamao de la imagen no cambia aunque cambie el del control (quedan
do en la
esquina superior izquierda si el control se hace ms grande, o quedando parcialmen
te oculta si
alguna de las dimensiones del control se hace ms pequea que la del bitmap. Si la p
ropiedad
Stretch est en True, el bitmap se adapta al tamao del control y su tamao se cambia
con el de
ste. Los grficos metafile siempre se pueden cambiar de tamao en modo de diseo, tanto
si
Stretch est en True como si est en False.
Existen otras formas de cargar un grfico en un control Image, adems de utilizar la

propiedad Picture en modo de diseo, como se ha visto anteriormente. Una segunda f
orma,
utilizable tambin en modo de diseo, es hacer Copy y Paste a partir de un grfico con
tenido en otra
aplicacin como Paint Shop Pro o Excel.
En modo de ejecucin se puede copiar el contenido de un control Image en otro cont
rol del
mismo tipo por medio de una sentencia de asignacin en la forma:
imgCuadro.picture = imgCaja.picture
y se puede tambin cargar una imagen de un fichero utilizando el procedimiento Loa
dPicture, por
ejemplo en la forma siguiente (habr que estar seguro de que existe el fichero):
imgCuadro.picture = LoadPicture("G:\graficos\pc.wmf")
Aunque el control Image admite algunos eventos (Click, DblClick, DragDrop, DragO
ver,
MouseUp, MouseDown, MouseMove), sus posibilidades son tambin limitadas. Por la fo
rma en que
se dibuja, el control Image no puede estar sobre otro control, como por ejemplo
un botn (ver los
layers, ms adelante en este captulo). Tampoco puede contener otros controles en su
interior: slo
puede contener grficos. Finalmente, este control no puede obtener el focus y por
tanto no puede
responder a acciones desde el teclado. El control PictureBox, que se ver a contin
uacin, resuelve
estas limitaciones aunque presenta la desventaja de ser ms lento en dibujar que e
l control Image.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 74
6.3.5 Control PictureBox
Este es el control grfico ( ) ms
potente y general de Visual Basic
6.0. Se trata de una especie de
formulario reducido, pues puede
contener imgenes y otros tipos de
controles tales como botones,
shapes, labels, cajas de texto, etc.
Con respecto a los bitmaps, el
control PictureBox se comporta de
modo diferente que el control
Image. El control PictureBox no
tiene propiedad Stretch, con lo cual
al cargar un icono o un bitmap
siempre aparecen con su tamao
natural (tal y como se puede
observar en la Figura 6.5). Sin
embargo el control PictureBox tiene
la propiedad AutoSize, que por
defecto est en False. Cuando se carga un bitmap con AutoSize en False el grfico ap
arece en la
esquina superior izquierda del control; sin embargo, si AutoSize est en True el c
ontrol PictureBox
adapta su tamao al del bitmap que es cargado. La Figura 6.5 muestra los resultado
s de introducir
un icono en un control Image (Stretch: False y True) y en un control PictureBox
(AutoSize: False
y True).
Los grficos metafile se comportan de un modo diferente, segn puede verse en la Fig
ura 6.6.
En el control Image se cargan con su verdadero tamao si la propiedad Stretch es F
alse, mientras
que se adaptan al tamao del control si dicha propiedad es True. Con el control Pi
ctureBox se
adaptan al tamao del control si AutoSize es False, mientras que se cargan con su
propio tamao si
es AutoSize es True.
En el control PictureBox (al igual que en los formularios) son importantes las c
uatro
propiedades relacionadas con el color: BackColor, ForeColor, FillColor y FillSty
le. La propiedad
BackColor controla el color de fondo del control. La propiedad ForeColor control
a el color del
texto que se escribe en el control (con el mtodo Print, por ejemplo, como luego s
e ver). Las
propiedades FillColor y FillStyle no afectan directamente al control sino a los
elementos grficos
que se dibujen sobre l con mtodos tales como Line y Circle, que se vern a continuac
in.
FillStyle determina el tipo de relleno o pattern (lneas horizontales, verticales,
inclinadas, cruzadas,
...), mientras que FillColor determina el color de estas lneas del relleno.
6.4 MTODOS GRFICOS
Slo los formularios y los controles PictureBox pueden albergar otros tipos de con
troles. Adems
es posible escribir texto y dibujar directamente sobre ellos por medio de cierto
s mtodos3 de Visual
Basic. Por defecto estos mtodos actan sobre el formulario activo. Si se desea que
acten sobre un
control PictureBox hay que precederlos por el nombre del control y el operador p
unto.
Los mtodos son procedimientos que Visual Basic ofrece ya programados. El usuario
slo tiene que llamarlos
pasndoles los argumentos apropiados.
Figura 6.5. Comparacin entre Image y PictureBox con bitmaps.
Figura 6.6. Comparacin entre Image y PictureBox con metafiles.
Captulo 6: Grficos en Visual Basic 6.0 pgina 75
6.4.1 Mtodo Print
En tiempo de ejecucin se puede escribir texto en un formulario o en un control Pi
ctureBox por
medio del mtodo Print. La forma general de este mtodo es la siguiente:
objeto.Print {spc(n)|tab(n)} expresion poschar
donde spc(n) es opcional y sirve para insertar n caracteres en la salida; tab(n)
es tambin opcional y
sirve para posicionar la salida en una posicin absoluta determinada por n con un
tabulador. Si tab
se utiliza sin argumentos lleva al comienzo de la siguiente regin de salida4; exp
resion representa
cualquier expresin cuyo resultado sea un nmero o una cadena de caracteres. poschar
indica dnde
se imprimir el siguiente carcter. Si es un punto y coma (;) la impresin se hace a c
ontinuacin del
ltimo carcter impreso; si es un tab(n) o un tab tiene el efecto antes descrito; si
se omite, la
impresin comienza en una nueva lnea.
El color, la fuente y el tamao del texto se toman de las correspondientes propied
ades del
formulario o control PictureBox.
6.4.2 Dibujo de puntos: mtodo PSet
El mtodo PSet sirve para dibujar puntos en un formulario o en un control PictureB
ox. Su forma
general es la siguiente:
object.PSet Step (x, y), color
donde:
object es opcional y representa el objeto (form o PictureBox) en el que se va a
dibujar el
punto. Si se omite, el punto se dibuja en el formulario activo (el que tiene el
focus).
Step es opcional. Si se introduce las coordenadas que le siguen son relativas re
specto a las
propiedades CurrentX y CurrentY de la PictureBox. Al dibujar un punto, estas
propiedades se actualizan a las coordenadas de dicho punto.
(x, y) son las coordenadas absolutas o relativas del punto a dibujar (expresione
s, variables o
constantes single). Tanto las coordenadas como la coma, como los parntesis son
obligatorios. Las unidades dependen de la propiedad ScaleMode del objeto en que
se
dibuja.
Color es opcional y es un nombre de color (vbRed, vbBlue, etc.) o un long conten
iendo el
cdigo de color hexadecimal (puede ser el valor de retorno de la funcin RGB). Si se

omite, se utiliza la propiedad ForeColor del objeto en el que se dibuja.
El tamao del punto viene determinado por la propiedad DrawWidth del objeto en que
se
dibuja. Si el tamao es mayor que uno, el punto se dibuja centrado en las coordena
das suministradas
a PSet. Si se desea eliminar un punto previamente dibujado es necesario volver a
pintar ese punto
con el color de fondo del objeto (BackColor).
6.4.3 Dibujo de lneas y rectngulos: mtodo Line
El mtodo Line dibuja lneas y -en ciertas condiciones- cajas rectangulares de lados
horizontales y
verticales. Su forma general es la siguiente:
object.Line Step (x1, y1) - Step (x2, y2), color, BF
En Visual Basic se comienza una regin de salida cada 14 caracteres, si se utiliza
un tipo de letra de anchura
constante. Con otros tipos de letra esta medida es slo aproximada.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero
pgina 76
donde object, step y color tienen el mismo significado que en PSet, y
(x1, y1) son opcionales y son las coordenadas del punto inicial de la lnea. Si se
omiten la lnea
comienza en las coordenadas definidas por CurrentX y CurrentY.
(x2, y2) son obligados y contienen las coordenadas del punto final de la lnea.
B es un carcter opcional. Si se incluye se dibuja un rectngulo (Box) con los punto
s dados
como extremos de una de sus diagonales.
F es tambin un carcter opcional, que slo se puede incluir si se ha incluido B. Si s
e
incluye, la caja rectangular se rellena (Fill) con el mismo color del contorno.
Si se omite
la caja se rellena con las propiedades FillColor y FillStyle del objeto en el qu
e se
dibuja.
Despus de ejecutarse este
mtodo las propiedades CurrentX y
CurrentY tienen el valor del punto
final de la lnea. Es necesario
introducir el carcter (-), aunque se
omita el primero de los puntos que
definen la lnea.
Las propiedades DrawWidth y
DrawStyle determinan cmo se
dibujan las lneas rectas o curvas en
Visual Basic 6.0. Ms en concreto, la Tabla 6.3. Valores de DrawStyle.
propiedad DrawWidth determina el
grosor en pixels, mientras que DrawStyle determina el tipo de lnea. La Tabla 6.3
considera los
posibles valores de la propiedad DrawStyle.
Valor Nombre Estilo de lnea
0 vbSolid continua (valor por defecto)
1 vbDash trazos (continua si w>1)
2 vbDot puntos (continua si w>1)
3 vbDashDot raya-pto (continua si w>1)
4 vbDashDotDot raya-pto-pto (continua si w>1)
5 vbInvisible transparente (continua si w>1)
6 vbInsideSolid continua interna
Los tipos de raya discontinua no permiten que el grosor sea mayor que 1 pixel. S
i el grosor es
superior, la lnea se dibuja de modo continuo.
Ejemplo:
Line (0 ,0 )-(100 , 0) ' Lnea del punto (0,0) al (100,0)
Line -(100 , 100) ' Lnea del punto (100,0) al (100,100)
Line -Step (20 , 80) ' Lnea del punto (100,100) al (120,180)
Line (100,100)-(200 , 200), vbRed, BF ' Rectngulo rojo del punto
' (100,100) al (200,200)
6.4.4 Dibujo de circunferencias, arcos y elipses: mtodo Circle
El mtodo Circle permite dibujar circunferencias, elipses y arcos. Su forma genera
l es la siguiente:
object.Circle Step (x, y), radius, color, start, end, aspect
donde object, step y color tienen el mismo significado que en PSet y Line, y:
(x, y)
son obligatorias, y contienen las coordenadas del centro de la circunferencia.
Radius
es obligatoria y define el radio de la circunferencia.
Start, end
son opcionales, y permiten definir arcos por medio del ngulo inicial (start) y fi
nal
(end). Los ngulos se miden siempre en radianes y en sentido contrario a las aguja
s
del reloj. Sus valores deben estar entre -2p y 2p. En principio se dibuja solame
nte el
arco, pero si uno o ambos valores son negativos se tratan como positivos, pero s
e
Captulo 6: Grficos en Visual Basic 6.0
pgina 77
dibuja una lnea que une el centro de la circunferencia con el origen o el extremo
del
arco.
Aspect
es tambin opcional y se utiliza para dibujar elipses. Es la relacin entre el dimetr
o
vertical y el horizontal. El valor por defecto es 1.0, lo que corresponde a una
circunferencia. Cuando aspect es distinto de 1.0, el parmetro radius define el ma
yor
de los dos dimetros.
Slo las figuras cerradas (no los arcos sin lneas que unan los extremos con el cent
ro) pueden
ser rellenadas con el color determinado por las propiedades FillColor y FillStyl
e del objeto en que
se dibuja). El grosor y estilo de las lneas se determina con las propiedades Draw
Width y
DrawStyle. Despus de ejecutarse este mtodo, las propiedades CurrentX y CurrentY ti
enen el
valor del centro de la circunferencia. Si se omite algn argumento (excepto los qu
e van al final),
deben respetarse las comas de separacin entre argumentos.
6.4.5 Otros mtodos grficos
Existen algunos otros mtodos grficos de inters. Por ejemplo, el mtodo Cls cuya forma
general
es
object.Cls
borra del formulario o control PictureBox todos los resultados de los mtodos grfic
os y del mtodo
Print, al mismo tiempo que pone las propiedades CurrentX y CurrentY a cero. No a
fecta a los
grficos introducidos en modo de diseo (por ejemplo con la propiedad Picture). Tamp
oco se
borran con este mtodo el texto y grficos que se hayan creado con la propiedad Auto
Redraw en
True, si dicha propiedad se pone a False antes de llamar al mtodo Cls. De esta fo
rma se pueden
realizar borrados selectivos.
El mtodo Point devuelve, como entero long, el color (RGB) del punto especificado
en un
formulario o control PictureBox. Su forma general es:
object.Point(x, y)
Si se desea, el entero long devuelto por Point puede convertirse a la notacin hex
adecimal que
se usa para los colores utilizando la funcin Hex.
6.5 SISTEMAS DE COORDENADAS
Un punto de particular importancia con
Visual Basic 6.0 es el que hace
referencia a la posicin y tamao de los
formularios y de los dems controles,
as como a las unidades en que se
expresan y determinan.
Visual Basic 6.0 permite elegir
entre distintas unidades, e incluso
utilizar distintas unidades para distintos
elementos de la aplicacin. Las
unidades se especifican con la
propiedad ScaleMode, que es propia de Tabla 6.4. Valores de ScaleMode.
los formularios y controles PictureBox.
Valor Nombre Unidades
0 vbUser definidas por el usuario
1 vbTwips twips (1440 por pulgada)
2 vbPoints puntos (72 por pulgada)
3 vbPixels pixels
4 vbCharacters caracteres (120x240 twips)
5 vbInches pulgadas
6 vbMillimeters milmetros
7 vbCentimeters centmetros
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 78
La Tabla 6.4 especifica los posibles valores de esta propiedad. La unidad por de
fecto es el twip, que
es la vigsima parte del punto o pixel.
En un formulario las propiedades relacionadas con la escala y las dimensiones, a
grupadas de
cuatro en cuatro, son las siguientes: (top, left, height y width) y (scaleTop, s
caleLeft, scaleHeight y
scaleWidth). Su significado de explica a continuacin con ayuda de la Figura 6.7.
En esta figura se muestra la pantalla y un formulario. La posicin y dimensiones d
el
formulario vienen dadas por las propiedades (top, left, height y width). Para un
formulario, estas
propiedades se definen siempre en twips. Obsrvese que se miden a partir de la esq
uina superior
izquierda.
Sin embargo, el formulario puede tener su propio sistema de coordenadas interno,
definido
por las propiedades (scaleTop, scaleLeft, scaleHeight y scaleWidth), para lo cua
l su propiedad
ScaleMode debe estar puesta a cero. Las propiedades scaleLeft y scaleTop determi
nan las
coordenadas de la esquina superior izquierda en el propio sistema de coordenadas
, mientras que
scaleWidth y scaleHeight determinan su anchura y altura en dichas coordenadas. E
n realidad estas
propiedades determinan indirectamente la posicin del origen de coordenadas y la e
scala y
orientacin de los ejes. Si scaleHeight es positiva el eje de ordenadas va hacia a
bajo, mientras que
si es negativa estar orientado hacia arriba. El eje horizontal va hacia la derech
a si scaleWidth es
positiva, y hacia la izquierda si es negativa.
El mtodo Scale permite establecer las cuatro propiedades (scaleTop, scaleLeft, sc
aleHeight
y scaleWidth) conjuntamente, como se ver en el siguiente apartado. Slo los formula
rios y los
controles PictureBox pueden tener las propiedades scaleTop, scaleLeft, scaleHeig
ht y scaleWidth.
Si las propiedades (top, left,
height y width) no se aplican a un
formulario sino a un control, ya no
pantalla
es obligatorio medirlas en twips,
form
sino que se miden en las unidades
determinadas por la propiedad
scaleMode del formulario o pictureBox
que las contiene. Cuando
estas propiedades se utilizan sin
anteponerles el nombre de un
objeto se aplican al formulario
activo. Para que se apliquen a un
objeto cualquiera basta anteponer-
Figura 6.7. Posicin y tamao de una caja PictureBox.
les el nombre del objeto separado
por el operador punto (.).
6.5.1 Mtodo Scale
El mtodo Scale permite definir las cuatro propiedades (scaleTop, scaleLeft, scale
Height y
scaleWidth) de un formulario o PictureBox simultneamente. Su forma general es:
object.Scale (x1, y1) - (x2, y2)
width height
left
top
(scaleLeft, scaleTop)
scaleHeight
scaleWidth
Captulo 6: Grficos en Visual Basic 6.0 pgina 79
donde object es el nombre del control PictureBox (si se omite, el mtodo se aplica
al formulario
activo). Las coordenadas (x1, y1) son las coordenadas del vrtice superior izquier
do del formulario
o PictureBox, mientras que (x2, y2) corresponden al vrtice inferior derecho. Por
ejemplo, el
siguiente mtodo:
pctCaja.Scale (-100, 100) - (100, -100)
(-100,100)
establece unos ejes en el centro de la PictureBox, con los
sentidos ordinarios, que varan entre -100 y 100, tal como puede
(0,0)
verse en la Figura 6.8. Este mtodo equivale establecer las
cuatro propiedades siguientes:
(100,-100)
pctCaja.scaleTop = 100
pctCaja.scaleLeft = -100
Figura 6.8. Mtodo Scale.
pctCaja.scaleHeight = -100
pctCaja.scaleWidth = 100
6.6 EVENTOS Y PROPIEDADES RELACIONADAS CON GRFICOS
6.6.1 El evento Paint
El evento Paint se ejecuta cuando un objeto -de tipo form o PictureBox- se hace
visible. Su
finalidad es que el resultado de los mtodos grficos y del mtodo Print aparezcan en
el objeto
correspondiente. Hay que tener en cuenta que si se introducen mtodos grficos en el
procedimiento
Form_load su resultado no aparece al hacerse visible el formulario (es como si s
e dibujara sobre el
formulario antes de que ste existiera). Para que el resultados de Print y de los
mtodos grficos
aparezcan al hacerse visible el formulario, deben introducirse en el procedimien
to Paint_form.
Tambin los controles pictureBox tienen evento Paint, que se ejecuta al hacerse vi
sibles.
El evento Paint tiene mucha importancia en relacin con el refresco de los grficos
y con la
velocidad de ejecucin de los mismos. En los apartados siguientes se completar la e
xplicacin de
este tema.
6.6.2 La propiedad DrawMode
Esta es una propiedad bastante importante y difcil de manejar, sobre todo si se q
uieren realizar
cierto tipo de acciones con los mtodos grficos. La opcin por defecto es la n 13: Cop
y Pen.
La propiedad DrawMode controla cmo se dibujan los controles Line y Shape, as como
los
resultados de los mtodos grficos PSet, Line y Circle. La opcin por defecto hace que
cada
elemento grfico se dibuje con el color correspondiente (por defecto el foreColor)
sobre lo dibujado
anteriormente. En ocasiones esto no es lo ms adecuado pues, por ejemplo, si se su
perponen dos
figuras del mismo color o si se dibuja con el backColor, los grficos resultan ind
istinguibles.
Para entender cmo funciona DrawMode es necesario tener claros los conceptos de co
lor
complementario y combinacin de dos colores. El color complementario de un color e
s el color
que sumado con l da el blanco (&HFFFFFF&). Por ejemplo, el color complementario d
el rojo
(&H0000FF&) es el cyan (&HFFFF00&).
El color complementario se puede obtener mediante la simple resta del color blan
co menos el
color original. Por su parte la combinacin de dos colores es el color que resulta
de aplicar el
operador lgico Or: el color resultante tiene sus bits a 1 si alguno o los dos de
los colores originales
tiene a 1 el bit correspondiente. La explicacin de los distintos valores de la pr
opiedad DrawMode
que se obtiene del Help es la siguiente:
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero
pgina 80
Constant Setting Description
VbBlackness 1 Blackness.
VbNotMergePen 2 Not Merge Pen Inverse of setting 15 (Merge Pen).
VbMaskNotPen 3
Mask Not Pen Combination of the colors common to the
background color and the inverse of the pen.
VbNotCopyPen 4 Not Copy Pen Inverse of setting 13 (Copy Pen).
VbMaskPenNot 5
Mask Pen Not Combination of the colors common to both the
pen and the inverse of the display.
VbInvert 6 Invert Inverse of the display color.
VbXorPen 7
Xor Pen Combination of the colors in the pen and in the display
color, but not in both.
VbNotMaskPen 8 Not Mask Pen Inverse of setting 9 (Mask Pen).
VbMaskPen 9
Mask Pen Combination of the colors common to both the pen
and the display.
VbNotXorPen 10 Not Xor Pen Inverse of setting 7 (Xor Pen).
VbNop 11
Nop No operation output remains unchanged. In effect, this
setting turns drawing off.
VbMergeNotPen 12
Merge Not Pen Combination of the display color and the inverse
of the pen color.
VbCopyPen 13 Copy Pen (Default) Color specified by the ForeColor property.
VbMergePenNot 14
Merge Pen Not Combination of the pen color and the inverse of
the display color.
VbMergePen 15 Merge Pen Combination of the pen color and the display color.
VbWhiteness 16 Whiteness.
El explicar ms a fondo las distintas aplicaciones de esta propiedad esta fuera de
l alcance de
este manual introductorio.
6.6.3 Planos de dibujo (Layers)
Visual Basic 6.0 considera tres planos superpuestos (layers): el plano frontal,
el plano intermedio
y el plano de fondo. Es importante saber en qu plano se introduce cada elemento g
rfico para
entender cundo unos elementos se superpondrn a otros en la pantalla. En principio,
los tres planos
se utilizan del siguiente modo:
1.
En el plano frontal (Front) se dibujan todos los controles, excepto los controle
s grficos y las
labels.
2.
En el plano intermedio se representan los controles grficos y labels.
3.
En el plano de fondo se representa el color de fondo y el resultado de los mtodos
grficos.
Estas reglas tienen excepciones que dependen de la propiedad AutoRedraw, de la p
ropiedad
ClipControl y de si los mtodos grficos se utilizan o no asociados al evento Paint.

6.6.4 La propiedad AutoRedraw
Esta propiedad tiene una gran importancia. En principio, todas las aplicaciones
de Windows
permiten superponer ventanas y/u otros elementos grficos, recuperando completamen
te el
contenido de cualquier ventana cuando sta se selecciona de nuevo y viene a primer
plano (es la
ventana activa). A esto se llama redibujar (redraw) la ventana. Cualquier aplica
cin que se
desarrolle en Visual Basic 6.0 debe ser capaz de redibujarse correctamente, pero
para ello el
programador debe conocer algo de la propiedad AutoRedraw.
Captulo 6: Grficos en Visual Basic 6.0
pgina 81
Por defecto, Visual Basic 6.0 redibuja siempre los controles que aparecen en un
formulario.
Esto no sucede sin embargo con el resultado de los mtodos grficos y de Print. Para
que la salida
de estos mtodos se redibuje es necesario adoptar uno de los dos mtodos siguientes:

1. Si en el form o pictureBox la propiedad AutoRedraw est en False:

Si los mtodos grficos y Print estn en el procedimiento correspondiente al evento Pa
int
se redibujan en el plano de fondo (los mtodos vuelven a ejecutarse, por lo que el
proceso
puede ser lento en ciertos casos).

Si los mtodos grficos y Print estn fuera del evento Paint no se redibujan.
2. Si en el form o pictureBox la propiedad AutoRedraw est en True:

Si los mtodos grficos y Print estn en el evento Paint se ignoran.

Si los mtodos grficos y Print estn fuera del evento Paint se redibujan guardando en

memoria una copia de la zona de pantalla a refrescar. Este es la forma ms rpida de

conseguir que los grficos y el texto se redibujen. Tiene el inconveniente de nece
sitar ms
memoria.
La propiedad AutoRedraw de los forms y de las pictureBox es independiente, por l
o que las
dos formas anteriores de conseguir que los grficos se redibujen se pueden utiliza
r conjuntamente,
por ejemplo una en el formulario y otra en las pictureBox.
6.6.5 La propiedad ClipControl
Por defecto esta propiedad de las forms y pixtureBox est en True. En este caso lo
s controles estn
siempre por encima de la salida de los mtodos grficos, por lo que nunca por ejempl
o una lnea se
dibujar sobre un botn o una barra de desplazamiento (los controles estn siempre en
el plano
frontal o en el plano intermedio, segn se ha explicado antes).
Cuando la propiedad ClipControl se pone a False se produce una doble circunstanc
ia:

Los mtodos grficos situados en un evento Paint siempre se dibujan en el plano de f
ondo
y por tanto respetan los controles.

Los mtodos grficos situados fuera de un evento Paint se dibujan sobre cualquier
elemento que est en la pantalla, incluidos los controles.
6.7 EJEMPLOS
A continuacin se muestra dos ejemplos que hacen
uso de algunos de los controles y mtodos grficos
explicados previamente.
6.7.1 Ejemplo 6.1: Grficos y barras de
desplazamiento
Este primer programa, cuyo formulario se muestra
en la Figura 6.9, es un ejemplo sencillo que permite
utilizar algunas de las herramientas grficas de
Visual Basic. Para ello se han utilizado dos barras
de desplazamiento que, junto a otras dos cajas de
Figura 6.9. Movimiento de un punto con PSet.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 82
texto, modificarn y visualizarn las coordenadas del punto a dibujar.
La Tabla 6.5 muestra los objetos y las propiedades a considerar en este ejemplo.

Control Propiedad Valor Control Propiedad Valor
Hscrollbar Name HScroll1 TextBox Name txtCaja2
LargeChange 5 Text 0
Max 100 TextBox Name txtCaja3
Min 0 Text 0
SmallChange 1 PictureBox Name PctBox
VScrollbar Name VScroll1 BackColor &H00FFFFFF&
LargeChange 5 CommandButton Name Command1
Max 100 Caption Salir
Min 0
SmallChange 1
Tabla 6.5. Controles y propiedades del Ejemplo 6.2.
Se presenta a continuacin el cdigo del programa:
Private Sub cmdSalir_Click()
End
End Sub
Private Sub Form_Load()
pctBox.Scale (0, 0)-(100, 100)
End Sub
Private Sub hsbX_Change()
txtCaja3.Text = Format(hsbX.Value)
pctBox.PSet (hsbX.Value, vsbY.Value), vbRed
End Sub
Private Sub txtCaja2_KeyPress(KeyAscii As Integer)
Dim valor As Integer
valor = Val(txtCaja2.Text)
If KeyAscii = 13 Then
If valor <= vsbY.Max And valor >= vsbY.Min Then
vsbY.Value = valor
ElseIf valor > vsbY.Max Then
vsbY.Value = vsbY.Max
Else
vsbY.Value = vsbY.Min
End If
End If
End Sub
Private Sub txtCaja3_KeyPress(KeyAscii As Integer)
Dim valor As Integer
valor = Val(txtCaja3.Text)
If KeyAscii = 13 Then
If valor <= hsbX.Max And valor >= hsbX.Min Then
hsbX.Value = valor
ElseIf valor > hsbX.Max Then
hsbX.Value = hsbX.Max
Else
hsbX.Value = hsbX.Min
End If
End If
End Sub
Captulo 6: Grficos en Visual Basic 6.0 pgina 83
Private Sub vsbY_Change()
txtCaja2.Text = Format(vsbY.Value)
pctBox.PSet (hsbX.Value, vsbY.Value), vbRed
End Sub
6.7.2 Ejemplo 6.2: Representacin grfica de la solucin de la ecuacin de segundo grado

En este segundo ejemplo, cuyo formulario se
muestra en la Figura 6.10, se representa el lugar de
races de la ecuacin de segundo grado en funcin de
los coeficientes, o ms en concreto en funcin de los
cocientes B/A y C/A. El valor de estas relaciones se
cambia interactivamente por medio de dos barras de
desplazamiento.
El programa permite adems la posibilidad de
mantener dibujadas las soluciones anteriores de la
ecuacin, o borrarlas y dibujar slo las ltimas races
calculadas borrando las anteriores. Para finalizar el
programa basta presionar el botn Salir.
La Tabla 6.6 muestra los nombres y los valores de las principales propiedades de
los objetos
que aparecen en la Figura 6.10.
Figura 6.10. Races de una ecuacin de 2 grado.
Control Propiedad Valor Control Propiedad Valor
Frame Name fraDib Label Name
Caption
Label2
C/A
Caption Dibujo Label Name
Caption
Label3
B
Frame Name fraEjes Label Name
Caption
Label4
C
Caption Divisiones Ejes Label Name
Caption
Label5
X1/XR
HScrollBar Name hsbBA Label Name
Caption
Label6
X2/XI
LargeChange 10 CommandButton Name CmdSalir
Max 1000 Caption Salir
Min -1000 Label Name lblBA, lblCA,
lblX1, lblB2
SmallChange 1 BackColor &H00C0FFFF&
HScrollBar Name hsbCA Option Name optD1
LargeChange 10 Caption Borrar
Max 100 Option Name optD2
Min -100 Caption Mantener
SmallChange 1 Option Name OptNo
PictureBox Name pctBox Caption No
BackColor &H00FFFFFF& Option Name OptSi
Label Name
Caption
Label1
B/A
Caption Si
Tabla 6.6. Controles y propiedades del Ejemplo 6.3.
Todas las labels que aparecen tienen la propiedad BorderStyle igual a 1- Fixed S
ingle.
El cdigo del programa es el siguiente:
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 84
Option Explicit
Dim a, b, c As Double
Dim x1, x2, dis, xr, xi As Double
Private Sub divisiones(nx As Integer, ny As Integer)
Dim i As Integer
Dim x, xinc, y, yinc As Single
pctBox.DrawWidth = 1
xinc = 20 / (nx - 1)
x = -10
For i = 1 To nx
pctBox.Line (x, 0)-(x, -1)
x = x + xinc
Next i
yinc = 10 / (ny - 1)
y = -5
For i = 1 To ny
pctBox.Line (-1, y)-(0, y)
y = y + yinc
Next i
pctBox.DrawWidth = 2
End Sub
Private Sub cmdSalir_Click()
End
End Sub
Private Sub Form_Load()
pctBox.Scale (-10, 5)-(10, -5)
End Sub
Private Sub hsbBA_Change()
a = 1
b = hsbBA.Value / 10#
c = hsbCA.Value / 10#
lblBA.Caption = b
lblCA.Caption = c
dis = b ^ 2 - 4 * a * c
If optD2.Value = True Then mantener
pctBox.AutoRedraw = True
Else borrar
pctBox.AutoRedraw = False
pctBox.Cls
End If
If dis > 0 Then
x1 = (-b + Sqr(dis)) / (2 * a)
x2 = (-b - Sqr(dis)) / (2 * a)
lblX1.Caption = Format(x1, "###0.000")
lblX2.Caption = Format(x2, "###0.000")
pctBox.PSet (x1, 0), vbRed
pctBox.PSet (x2, 0), vbRed
ElseIf dis = 0 Then
x1 = -b / (2 * a)
x2 = x1
lblX1.Caption = Format(x1, "###0.000")
lblX2.Caption = ""
pctBox.PSet (x1, 0), vbGreen
Else
xr = -b / (2 * a)
xi = Sqr(-dis) / (2 * a)
lblX1.Caption = Format(xr, "###0.000")
lblX2.Caption = Format(xi, "###0.000")
pctBox.PSet (xr, xi), vbBlue
pctBox.PSet (xr, -xi), vbBlue
End If
Captulo 6: Grficos en Visual Basic 6.0 pgina 85
If optSi = True Then
Call divisiones(10, 5)
End If
End Sub
Private Sub hsbCA_Change()
a = 1
b = hsbBA.Value / 10#
c = hsbCA.Value / 10#
lblBA.Caption = b
lblCA.Caption = c
dis = b ^ 2 - 4 * a * c
If optD2.Value = True Then mantener
pctBox.AutoRedraw = True
Else borrar
pctBox.AutoRedraw = False
pctBox.Cls
End If
If dis > 0 Then
x1 = (-b + Sqr(dis)) / (2 * a)
x2 = (-b - Sqr(dis)) / (2 * a)
lblX1.Caption = Format(x1, "###0.000")
lblX2.Caption = Format(x2, "###0.000")
pctBox.PSet (x1, 0), vbRed
pctBox.PSet (x2, 0), vbRed
ElseIf dis = 0 Then
x1 = -b / (2 * a)
x2 = x1
lblX1.Caption = Format(x1, "###0.000")
lblX2.Caption = ""
pctBox.PSet (x1, 0), vbGreen
Else
xr = -b / (2 * a)
xi = Sqr(-dis) / (2 * a)
lblX1.Caption = Format(xr, "###0.000")
lblX2.Caption = Format(xi, "###0.000")
pctBox.PSet (xr, xi), vbBlue
pctBox.PSet (xr, -xi), vbBlue
End If
If optSi = True Then
Call divisiones(10, 5)
End If
End Sub
Private Sub optD1_Click()
pctBox.AutoRedraw = True
pctBox.Cls
pctBox.DrawWidth = 1
pctBox.Line (-90, 0)-(90, 0), vbBlack
pctBox.Line (0, -45)-(0, 45), vbBlack
pctBox.DrawWidth = 2
End Sub
Private Sub pctBox_Paint()
pctBox.AutoRedraw = True
pctBox.Line (-90, 0)-(90, 0), vbBlack
pctBox.Line (0, -45)-(0, 45), vbBlack
pctBox.DrawWidth = 2
End Sub
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 86
6.8 BARRAS DE HERRAMIENTAS (TOOLBARS)
JGJCon Visual Basic 6.0 es fcil crear barras de herramientas constituidas por bot
ones clicables,
al estilo de las aplicaciones de Windows. De ordinario las barras de herramienta
s dan acceso a las
funciones o comandos ms comunes de los mens de la aplicacin.
Se puede crear una barra de herramientas por medio de un PictureBox colocado en
un
formulario. En este PictureBox se pueden colocar controles CommandButton o Image
en los que
se programa el evento click. La propiedad Picture del control Image puede conten
er la direccin de
alguno de los iconos estndar que vienen con Visual Basic (extensin *.ico) o la de
un icono
construido por el programador.
En el caso de los formularios MDI se puede colocar una barra de herramientas en
el
MDIform, que automticamente adquiere la anchura del formulario.
Captulo 7: Archivos y Entrada/Salida de Datos pgina 87
7. ARCHIVOS Y ENTRADA/SALIDA DE DATOS
En este captulo se van a describir varias formas de introducir informacin en el pr
ograma, as como
de obtener resultados en forma impresa o mediante escritura en un fichero. Se va
a presentar una
nueva forma interactiva de comunicarse con el usuario, como son las cajas de dilo
go MsgBox e
InputBox. Particular inters tiene la lectura y escritura de datos en el disco, lo
cual es necesario
tanto cuando el volumen de informacin es muy importante (la memoria RAM est siempr
e ms
limitada que el espacio en disco), como cuando se desea que los datos no desapar
ezcan al terminar
la ejecucin del programa. Los ficheros en disco resuelven ambos problemas.
Tambin se ver en este captulo cmo obtener resultados alfanumricos y grficos por la
impresora.
7.1 CAJAS DE DILOGO INPUTBOX Y MSGBOX
Estas cajas de dilogo son similares a las que se utilizan en muchas aplicaciones
de Windows. La
caja de mensajes o MsgBox abre una ventana a travs de la cual se enva un mensaje a
l usuario y se
le pide una respuesta, por ejemplo en forma de clicar un botn O.K./Cancel, o Yes/
No. Este tipo de
mensajes son muy utilizados para confirmar acciones y para decisiones sencillas.
La caja de dilogo
InputBox pide al usuario que teclee una frase, por ejemplo su nombre, un ttulo, e
tc.
La forma general de la funcin MsgBox es la siguiente:
respuesta = MsgBox("texto para el usuario", tiposBotones, "titulo")
donde respuesta es la variable donde se almacena el valor de retorno, que es un
nmero indicativo
del botn clicado por el usuario, de acuerdo con los valores de la Tabla 7.1. La c
onstante simblica
que representa el valor de retorno indica claramente el botn clicado. Los otros d
os argumentos son
opcionales. El parmetro tiposBotones es un entero que indica la combinacin de boto
nes deseada
por el usuario; sus posibles valores se muestran en la Tabla 7.2. Tambin en este
caso la constante
simblica correspondiente es suficientemente explcita. Si este argumento se omite s
e muestra slo
el botn O.K. El parmetro titulo contiene un texto que aparece como ttulo de la vent
ana; si se
omite, se muestra en su lugar el nombre de la aplicacin.
Valor de retorno Constante simblica
1 vbOK
2 vbCancel
3 vbAbort
4 vbRetry
5 vbIgnore
6 vbYes
7 vbNo
Valor tiposBotones Constante simblica
0 vbOKOnly
1 vbOKCancel
2 vbAbortRetryIgnore
3 vbYesNoCancel
4 vbYesNo
5 vbRetryCancel
Tabla 7.1. Botn clicado por el usuario. Tabla 7.2. Botones mostrados en MsgBox.
Se puede modificar el valor de tiposBotones de modo que el botn que se activa por
defecto
cuando se pulsa la tecla Intro (el botn que tiene el focus) sea cualquiera de los
botones de la caja.
Para ello basta sumar a tiposBotones otra constante que puede tomar uno de los t
res valores
siguientes: 0 (vbDefaulButton1, que representa el primer botn), 256 (vbDefaulButt
on2, que
representa el segundo botn) y 512 (vbDefaulButton3, que representa el tercer botn)
.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 88
Figura 7.1. Ejemplo de caja MsgBox. Figura 7.2. Ejemplo de caja de InputBox.
Finalmente, se puede incluir en el mensaje un icono ad-hoc por el mismo procedim
iento de
sumarle al argumento tiposBotones una nueva constante numrica con los siguientes
valores y
significados definidos por la constante simblica apropiada: 16 (vbCritical), 32 (
vbQuestion), 48
(vbExclamation) y 64 (vbInformation). Es obvio que, por los propios valores cons
iderados, al sumar
estas constantes o las anteriores al argumento tiposBotones, la informacin origin
al descrita en la
Tabla 7.2 no se pierde. La Figura 7.1 muestra un ejemplo de caja MsgBox resultad
o de ejecutar el
comando siguiente:
lblBox.Caption = MsgBox("Pulse un botn: ", 2 + 256 + 48, _
"Caja de mensajes")
donde el 2 indica que deben aparecer los botones Abort, Retry y Cancel, el 256 indic
a que el
botn por defecto es el segundo (Retry) y el 48 indica que debe aparecer el icono de
exclamacin.
Por otra parte, la forma general de la funcin InputBox es la siguiente:
texto = InputBox("texto para el usuario", "titulo", "default", left, top)
donde texto es la variable donde se almacena el valor de retorno, que es el text
o tecleado por el
usuario. Los parmetros "texto para el usuario" y titulo tienen el mismo significa
do que en
MsgBox. El parmetro default es un texto por defecto que aparece en la caja de tex
to y que el
usuario puede aceptar, modificar o sustituir; el contenido de esta caja es lo qu
e en definitiva esta
funcin devuelve como valor de retorno. Finalmente, left y top son las coordenadas
de la esquina
superior izquierda de la InputBox; si se omiten, Visual Basic 6.0 dibuja esta ca
ja centrada en
horizontal y algo por encima de la mitad de la pantalla en vertical. La Figura 7
.2 muestra un ejemplo
de caja InputBox resultado de ejecutar el comando siguiente:
lblBox.Caption = InputBox("Escriba su nombre: ", _
"Caja de entrada", "Miguel Indurain")
donde el nombre que aparece por defecto es el del mejor ciclista de los ltimos ti
empos. Este
nombre aparece seleccionado y puede ser sustituido por otro que teclee el usuari
o.
7.2 MTODO PRINT
Este mtodo permite escribir texto en formularios, cajas pictureBox y en un objeto
llamado Printer
que se ver un poco ms adelante, en el Apartado 7.3.
7.2.1 Caractersticas generales
La forma general del mtodo Print se explica mejor con algunos ejemplos como los s
iguientes:
pctBox.Print "La distancia es: "; Dist; " km."
pctBox.Print 123; 456; "San"; "Sebastin"
Captulo 7: Archivos y Entrada/Salida de Datos
pgina 89
pctBox.Print 123, 456, "San", "Sebastin"
pctBox.Print -123; -456
cuyo
resultado se puede ver en la Figura 7.3 (puede
variar dependiendo del tipo y tamao de las letras):
De estos ejemplos se pueden ya sacar algunas
conclusiones:
1.
El mtodo Print recibe como datos una lista de
variables y/o cadenas de caracteres. Las cadenas
son impresas y las variables se sustituyen por su
valor.
2.
Hay dos tipos bsicos de separadores para los
elementos de la lista. El carcter punto y coma (;)
hace que se escriba inmediatamente a continuacin de lo anterior. La coma (,) hace
que se
vaya al comienzo de la siguiente rea de salida. Con letra de paso constante como
la Courier
las reas de salida empiezan cada 14 caracteres, es decir en las columnas 1, 15, 2
9, etc. Con
letras de paso variable esto se hace slo de modo aproximado.
3.
Las constantes numricas positivas van precedidas por un espacio en blanco y separ
adas entre
s por otro espacio en blanco. Si son negativas el segundo espacio es ocupado por
el signo
menos (-).
4.
El tipo y tamao de letra que se utiliza depende de la propiedad Font del formular
io, objeto
PictureBox u objeto Printer en que se est escribiendo.
Existen otros separadores tales como Tab(n) y Spc(n). El primero de ellos lleva
el punto de
insercin de texto a la columna n, mientras que el segundo deja n espacios en blan
co antes de seguir
escribiendo. Tab sin argumento equivale a la coma (,). Estos espaciadores se uti
lizan en
combinacin con el punto y coma (;), para separarlos de los dems argumentos.
Por defecto, la salida de cada mtodo Print se escribe en una nueva lnea, pero si s
e coloca un
punto y coma al final de un mtodo Print, el resultado del siguiente Print se escr
ibe en la misma
lnea.
Puede controlarse el lugar del formulario o control donde se imprime la salida d
el mtodo
Print. Esta salida se imprime en el lugar indicado por las propiedades CurrentX
y CurrentY del
formulario o control donde se imprime. Cambiando estas propiedades se modifica e
l lugar de
impresin, que por defecto es la esquina superior izquierda. Existen unas funcione
s llamadas
TextWidth(string) y TextHeight(string) que devuelven la anchura y la altura de u
na cadena de
caracteres pasada como argumento. Estas funciones pueden ayudar a calcular los v
alores ms
adecuados para las propiedades CurrentX y CurrentY.
La funcin str(valor_numrico) convierte un nmero en cadena de caracteres para facili
tar su
impresin. En realidad, es lo que Visual Basic 6.0 ha hecho de modo implcito en los
ejemplos
anteriores. En versiones anteriores del programa era necesario que el usuario re
alizase la conversin
de modo explcito.
7.2.2
Funcin Format
La funcin Format realiza las conversiones necesarias para que ciertos datos numric
os o de otro
tipo puedan ser impresos con Print. Como se ha visto, en el caso de las variable
s numricas esto no
es imprescindible, pero la funcin Format permite controlar el nmero de espacios, e
l nmero de
decimales, etc. En el caso de su aplicacin a objetos tipo fecha (date) y hora (ti
me) la aplicacin de
Figura 7.3: Ejemplo del mtodo Print.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 90
Format es imprescindible, pues Print no los escribe directamente. La forma gener
al de esta funcin
es la siguiente:
Format(expresion, formato)
donde expresion es una variable o expresin y formato -que es opcional- describe e
l formato
deseado para el resultado. El valor de retorno es una cadena de caracteres direc
tamente utilizable en
Print. Para fechas existen formatos predefinidos tales como General Date, Long Date,

Medium Date y Short Date; para la hora los formatos predefinidos son Long Time,
Medium Time y Short Time. Adems existe la posibilidad de que el usuario defina sus pr
opios
formatos (ver User-Defined Date/Time Formats (Format Function), en el Help del p
rograma). El
usuario tambin puede definir sus propios formatos numricos y de cadenas de caracte
res.
A diferencia de la funcin Str, la funcin Format no deja espacio en blanco para el
signo de
los nmeros positivos.
7.3 UTILIZACIN DE IMPRESORAS
Visual Basic 6.0 permite obtener por la impresora grficos y texto similares a los
que se pueden
obtener por la pantalla, aunque con algunas diferencias de cierta importancia. E
xisten dos formas de
imprimir: la primera mediante el mtodo PrintForm, y la segunda utilizando el obje
to Printer, que
es un objeto similar al objeto PictureBox. Ambos mtodos tienen puntos fuertes y db
iles que se
comentarn a continuacin.
7.3.1 Mtodo PrintForm
El mtodo PrintForm permite imprimir un formulario con sus controles y con los res
ultados de los
mtodos grficos (PSet, Line y Circle) y del mtodo Print. Para ello la propiedad Auto
Redraw del
formulario tiene que estar puesta a True, y los mtodos citados tienen que estar l
lamados desde un
evento distinto del Paint. Lo nico que no se dibuja del formulario es la barra de
ttulo.
Este sistema de impresin es muy sencillo de utilizar, pero tiene el inconveniente
de que el
resultado se imprime con la misma resolucin de la pantalla (entre 50 y 100 puntos
por pulgada), no
aprovechando por tanto la mayor resolucin que suelen tener las impresoras (300, 6
00 ms puntos
por pulgada).
7.3.2 Objeto Printer
Este segundo sistema tiene la ventaja de que permite aprovechar plenamente la re
solucin de la
impresora, pero no permite dibujar controles sino slo los mtodos grficos habituales
(PSet, Line
y Circle), el mtodo Print y un mtodo no visto hasta ahora que es PaintPicture.
Para Visual Basic 6.0 la impresora es un objeto grfico ms, similar a los formulari
os y a las
cajas grficas PictureBox. Como tal objeto grfico tiene sus propiedades generales (
DrawStyle,
BackColor, ForeColor, etc.), adems de otras propiedades especficas de la impresora
, como
DeviceName, DriverName, Orientation, Copies, etc. Para ms informacin puede utiliza
rse el Help,
buscando Printer object. En principio se utiliza la impresora por defecto del PC
, pero Visual Basic
mantiene una Printers Collection, que es algo as como un array de impresoras disp
onibles. A partir
de esta Printers Collection se puede cambiar a la impresora que se desee.
El objeto Printer tiene un mtodo llamado EndDoc para enviar realmente a la impres
ora el
resultado de los mtodos grficos. El mtodo PaintPicture permite incorporar el conten
ido de
ficheros grficos a un formulario, PictureBox o Printer. Su forma general es:
Captulo 7: Archivos y Entrada/Salida de Datos
pgina 91
object.PaintPicture pictProp X, Y, Width, Height
donde pictProp indica el grfico (coincide con la propiedad Picture de PictureBox)
, X e Y indican
las coordenadas de insercin y los dos ltimos parmetros las dimensiones (opcionales)
.
7.4 CONTROLES FILELIST, DIRLIST Y DRIVELIST
Uno de los problemas que hay que
resolver para leer o escribir en ficheros
de disco es ser capaces de localizar
interactivamente los correspondientes
ficheros, de modo anlogo a como se
realiza con los comandos File/Open o
File/Save As de Word, Excel o de
cualquier otra aplicacin. Este tipo de
operaciones se pueden hacer mucho
ms fcilmente con los Common
Dialog Controls vistos en el Apartado
4.4, en la pgina 58, aconsejando por
lo tanto su uso. A pesar de ello, aqu se
van a explicar los controles especficos
de que dispone Visual Basic 6.0.
Visual Basic 6.0 dispone de tres controles que facilitan el recorrer el rbol de f
icheros y de
directorios, localizando o creando interactivamente un fichero determinado. Esto
s controles son el
FileListBox (para ficheros), el DirListBox (para directorios) y el DriveListBox
(para unidades de
disco). La Figura 7.4 muestra estos tres controles, junto con unas etiquetas que
los identifican. Los
dos primeros son listas, mientras que el tercero es una caja de tipo ComboBox.
En principio estos controles, cuando se colocan en un formulario tal como se mue
stra en la
Figura 7.4, estn desconectados. Quiere esto decir que al cambiar la unidad de dis
co (drive) no se
muestran en la caja dirListBox los directorios correspondientes a la nueva unida
d de disco. Por otra
parte, al cambiar de directorio tendrn que cambiar de modo acorde los ficheros en
la caja
fileListBox. La dificultad de conectar estas cajas no es grande, pero s hay que s
aber cmo se hace
pues depende de propiedades de estas cajas que no aparecen en la ventana de prop
iedades (ventana
Properties) en modo de diseo, y que slo estn accesibles en modo de ejecucin. De entr
e estas
propiedades las ms importantes son las siguientes:
1.
La DriveListBox tiene una propiedad llamada Drive que recoge la unidad seleccion
ada por el
usuario (puede ser una unidad fsica como el disco c:\ o una unidad lgica asignada
por el
usuario a otro disco o directorio en un servidor o en otro ordenador de la red).

2.
La propiedad path de la caja DirListBox determina el drive seleccionado y por ta
nto qu
directorios se muestran en dicha caja.
3.
Finalmente, una propiedad tambin llamada path de la caja FileListBox determina el

directorio que contiene los ficheros mostrados.
Para enlazar correctamente las cajas de discos, directorios y ficheros se puede
utilizar el
evento Change, de tal forma que cada vez que el usuario cambia la unidad de disc
o se cambia el
path del directorio y cada vez que se cambia el directorio se cambia el path de
los ficheros. Esto
puede hacerse con el cdigo siguiente:
Figura 7.4. Cajas DriveListBox, DirListBox y FileListBox.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero
pgina 92
Private Sub dirPrueba_Change()
filPrueba.Path = dirPrueba.Path
End Sub
Private Sub drvPrueba_Change()
dirPrueba.Path = drvPrueba.Drive
End Sub
La caja FileListBox tiene una propiedad llamada FileName que contiene el nombre
del
fichero seleccionado por el usuario. Para tener el path completo del fichero bas
ta anteponerle la
propiedad Path de la fileListBox, que incluye el directorio y el drive, y la bar
ra invertida (\). Si el
usuario introduce FileName incluyendo el path, Visual Basic actualiza tambin de m
odo
automtico la propiedad Path de FileListBox. El usuario se debe preocupar de utili
zar el evento
Change para actualizar el Path de la caja DirListBox y la propiedad Drive de Dri
veListBox.
Otra propiedad importante es la propiedad Pattern, que indica los tipos de fiche
ros que se
mostrarn en la caja. El valor por defecto es *.*, lo cual hace que se muestren todo
s los ficheros.
Si su valor fuese *.doc slo se mostraran los ficheros con esta extensin. La propiedad
Pattern
admite varias opciones separadas por untos y coma (*.doc; *.dot).
7.5 TIPOS DE FICHEROS
Tanto en Windows como en Visual Basic 6.0 existen, principalmente, dos tipos de
archivos:
1.
Ficheros ASCII o ficheros de texto. Contienen caracteres codificados segn el cdigo
ASCII
y se pueden leer con cualquier editor de texto como Notepad. Suelen tener extens
in *.txt o
*.bat, pero tambin otras como *.m para los programas de Matlab, *.c para los fich
eros fuente
de C, *.cpp para los ficheros fuente de C++ y *.java para los de Java.
2.
Ficheros binarios: Son ficheros imagen de los datos o programas tal como estn en
la
memoria del ordenador. No son legibles directamente por el usuario. Tienen la ve
ntaja de que
ocupan menos espacio en disco y que no se pierde tiempo y precisin cambindolos a f
ormato
ASCII al escribirlos y al leerlos en el disco.
Con Visual Basic 6.0 se pueden leer tanto ficheros ASCII como ficheros binarios.
Adems el
acceso a un fichero puede ser de tres formas principales.
1.
Acceso secuencial. Se leen y escriben los datos como si se tratara de un libro:
siempre a
continuacin del anterior y sin posibilidad de volver atrs o saltar datos. Si se qu
iere acceder a
un dato que est hacia la mitad de un fichero, habr que pasar primero por todos los
datos
anteriores. Los ficheros de texto tienen acceso secuencial.
2.
Acceso aleatorio (random): Permiten acceder directamente a un dato sin tener que
pasar por
todos los dems, y pueden acceder a la informacin en cualquier orden. Tienen la lim
itacin
de que los datos estn almacenados en unas unidades o bloques que se llaman regist
ros, y que
todos los registros que se almacenan en un fichero deben ser del mismo tamao. Los
ficheros
de acceso aleatorio son ficheros binarios.
3.
Acceso binario. Son como los de acceso aleatorio, pero el acceso no se hace por
registros sino
por bytes.
Antes de poder leer o escribir en un fichero hay que abrirlo por medio de la sen
tencia Open.
En esta sentencia hay que especificar qu tipo de acceso se desea tener, distingui
endo tambin si es
para lectura (input), escritura (output) o escritura aadida (append).
Captulo 7: Archivos y Entrada/Salida de Datos pgina 93
7.6 LECTURA Y ESCRITURA EN FICHEROS SECUENCIALES
7.6.1 Apertura y cierre de ficheros
Para poder leer o escribir en un fichero antes debe ser abierto con la sentencia
Open, cuya forma
general es la siguiente:
Open filename For modo As # fileNo
donde:
filename es el nombre del fichero a abrir. Ser una variable string o un nombre en
tre dobles
comillas ( ).
modo Para acceso secuencial existen tres posibilidades: Input para leer, Output
para
escribir al comienzo de un fichero y Append para escribir al final de un fichero
ya
existente. Si se intenta abrir en modo Input un fichero que no existe, se produc
e un
error. Si se abre para escritura en modo Output un fichero que no existe se crea
, y si
ya exista se borra su contenido y se comienza a escribir desde el principio. El m
odo
Append es similar al modo Output, pero respeta siempre el contenido previo del
fichero escribiendo a continuacin de lo ltimo que haya sido escrito anteriormente.

fileNo es un nmero entero (o una variable con un valor entero) que se asigna a ca
da fichero
que se abre. En todas las operaciones sucesivas de lectura y/o escritura se har
referencia a este fichero por medio de este nmero. No puede haber dos ficheros
abiertos con el mismo nmero. Visual Basic dispone de una funcin llamada
FreeFile que devuelve un nmero no ocupado por ningn fichero.
A continuacin puede verse un ejemplo de fichero abierto para lectura:
Open "C:\usuarios\PRUEBA1.txt" For Input as #1
Despus de terminar de leer o escribir en un fichero hay que cerrarlo. Para ello,
se utilizara el
comando Close, que tiene la siguiente forma:
Close # fileNo
donde el fileNo es el nmero que se la haba asignado al abrirlo con la instruccin Op
en.
7.6.2 Lectura y escritura de datos
7.6.2.1 Sentencia Input
Existen varias formas de leer en un fichero de acceso secuencial. Por ejemplo, p
ara leer el valor de
una o ms variables se utiliza la sentencia Input:
Input # fileNo, varName1, varName2, varName3, ...
donde el fileNo es el nmero asignado al archivo al abrirlo y varName1, varName2,
... son los
nombres de las variables donde se guardarn los valores ledos en el fichero. Debe h
aber una
correspondencia entre el orden y los tipos de las variables en la lista, con los
datos almacenados en
el fichero. No se pueden leer directamente vectores, matrices o estructuras. Si
los datos del disco
han de ser escritos por el propio programa, conviene utilizar la sentencia write
(mejor que Print)
para garantizar que los valores estn convenientemente separados. La sentencia Wri
te se ver
posteriormente.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 94
7.6.2.2 Funcin Line Input y funcin Input
La funcin Line Input # lee una lnea completa del archivo y devuelve su contenido c
omo valor de
retorno. Su forma general es:
varString = Line Input #fileNo
Conviene recordar que en los ficheros de texto se suele utilizar el carcter retur
n (o Intro)
para delimitar las distintas lneas. Este es el carcter ASCII n 13, que por no ser u
n carcter
imprimible se representa en Visual Basic 6.0 como chr(13). En muchas ocasiones (
como herencia
del MS-DOS) se utiliza como delimitador de lneas una combinacin de los caracteres
return y
linefeed, representada en Visual Basic 6.0 como chr(13)+chr(10). En la cadena de
caracteres que
devuelve Line no se incluye el carcter de terminacin de la lnea.
Para leer todas las lneas de un fichero se utiliza un bucle for o while. Visual B
asic 6.0
dispone de la funcin EOF (End of File) que devuelve True cuando se ha llegado al
final del
fichero. Vase el siguiente ejemplo:
Do While Not EOF(fileNo)
miLinea = Line Input #fileNo
...
Loop
Tambin se puede utilizar la funcin Input, que tiene la siguiente forma general:
varString = Input(nchars, #fileNo)
donde nchars es el nmero de caracteres que se quieren leer y varString es la vari
able donde se
almacenan los caracteres ledos por la funcin. Esta funcin lee y devuelve todos los
caracteres que
encuentra, incluidos los intro y linefeed. Para ayudar a utilizar esta funcin exi
ste la funcin LOF
(fileNo), que devuelve el n total de caracteres del fichero. Por ejemplo, para le
er todo el contenido
de un fichero y escribirlo en una caja de texto se puede utilizar:
txtCaja.text = Input(LOF(fileNo), #fileNo)
7.6.2.3 Funcin Print #
Para escribir el valor de unas ciertas variables en un fichero previamente abier
to en modo Output o
Append se utiliza la instruccin Print #, que tiene la siguiente forma:
Print #fileNo, var1, var2, var2, ...
donde var1, var2,... pueden ser variables, expresiones que dan un resultado numri
co o
alfanumrico, o cadenas de caracteres entre dobles comillas, tales como El valor de
x es....
Considrese el siguiente ejemplo:
Print #1, "El valor de la variable I es: ", I
donde I es una variable con un cierto valor que se escribe a continuacin de la ca
dena. Las reglas
para determinar el formato de la funcin Print # son las mismas que las del mtodo P
rint visto
previamente.
Captulo 7: Archivos y Entrada/Salida de Datos pgina 95
7.6.2.4 Funcin Write #
A diferencia de Print #, la funcin Write # introduce comas entre las variables y/
o cadenas de
caracteres de la lista, adems encierra entre dobles comillas las cadenas de carac
teres antes de
escribirlas en el fichero. La funcin Write # introduce un carcter newline, esto es
, un return o un
return+linefeed despus del ltimo carcter de las lista de variables. Los ficheros es
critos con
Write # son siempre legibles con Input #, cosa que no se puede decir de Print #.
Vase el siguiente
ejemplo:
Se abre el fichero para escritura
Open "C:\Temp\TestFile.txt" For Output As #1
Write #1, "Hello World", 234 Datos separados por comas
MyBool = False: MyDate = #2/12/1969# Valores de tipo boolean y Date
Write #1, MyBool; " is a Boolean value"
Write #1, MyDate; " is a date"
Close #1 Se cierra el fichero
El fichero TestFile.txt guardado en C:\Temp contendr:
"Hello World",234
#FALSE#," is a Boolean value"
#1969-02-12#," is a date"
7.7 FICHEROS DE ACCESO ALEATORIO
Los ficheros de acceso aleatorio se caracterizan porque en ellos se puede leer e
n cualquier orden.
Los ficheros de acceso aleatorio son ficheros binarios. Cuando se abre un ficher
o se debe escribir
For Random, al especificar el modo de apertura (si el fichero se abre For Binary
el acceso es
similar, pero no por registros sino por bytes; este modo es mucho menos utilizad
o).
7.7.1 Abrir y cerrar archivos de acceso aleatorio
Estos archivos se abren tambin con la sentencia Open, pero con modo Random. Al fi
nal se aade
la sentencia Len=longitudRegistro, en bytes. Vase el siguiente ejemplo:
fileNo = FreeFile
size = Len(unObjeto)
Open filename For Random as #fileNo Len = size
donde filename es una variable que almacena el nombre del archivo. Se recuerda q
ue la funcin
FreeFile devuelve un nmero entero vlido (esto es que no est siendo utilizado) para
poder abrir
un fichero. El ltimo parmetro informa de la longitud de los registros (todos deben
tener la misma
longitud). Visual Basic 6.0 dispone de la funcin Len(objetoName), que permite cal
cular la
dimensin en bytes de cualquier objeto perteneciente a una clase o estructura.
De ordinario los ficheros de acceso directo se utilizan para leer o escribir de
una vez todo un
bloque de datos. Este bloque suele ser un objeto de una estructura, con varias v
ariables miembro.
Los ficheros abiertos para acceso directo se cierran con Close, igual que los se
cuenciales.
7.7.2 Leer y escribir en una archivo de acceso aleatorio. Funciones Get y Put
Se utilizan las funciones Get y Put. Su sintaxis es la siguiente:
Get #fileNo, registroNo, variableObjeto
Put #fileNo, registroNo, variableObjeto
La instruccin Get lee un registro del fichero y almacena los datos ledos en una va
riable, que
puede ser un objeto de una determinada clase o estructura. La instruccin Put escr
ibe el contenido
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero pgina 96
de la variable en la posicin determinada del fichero. Si se omite el nmero de regi
stro se lee
(escribe) a continuacin del registro ledo (escrito) anteriormente. Vase el siguient
e ejemplo:
FileNo=FreeFile
size=Len(unObjeto)
Open filename for Random as #fileNo Len=size
Get #fileNo, 3, size
Con este ejemplo, se ha abierto el fichero filename de la misma forma que se rea
liz en el
ejemplo anterior, pero ahora, adems se ha ledo un registro de longitud size, y ms e
n concreto, el
tercer registro. Si se quisiera modificar el valor de este registro, no habra ms q
ue asignarle el valor
que se quisiera, para a continuacin introducirlo en el fichero mediante la senten
cia siguiente:
Put #fileNo, 3, size
7.8 FICHEROS DE ACCESO BINARIO
La tcnica a emplear es bsicamente la misma que con los ficheros de acceso aleatori
o, con la
salvedad de que en lugar de manejar registros, en los ficheros de acceso binario
se trabaja con bytes.
Vase el siguiente ejemplo:
FileNo=FreeFile
Open filename for Binary as #fileNo
Get #1, 4, dato
dato = 7
Put #1, 4, dato
Close #1
En el anterior ejemplo se puede observar como primero se introduce en la variabl
e dato el
valor del cuarto byte del fichero filename, para posteriormente asignarle el val
or 7, e introducirlo de
nuevo en el cuarto byte de filename.
ANEXO A: Consideraciones adicionales sobre datos y variables pgina 97
8. ANEXO A: CONSIDERACIONES ADICIONALES SOBRE DATOS Y VARIABLES
En este Anexo se incluyen algunas consideraciones de inters para personas que no
han programado
antes en otros lenguajes. A continuacin se explican las posibilidades y la forma
de almacenar los
distintos tipos de variables.
8.1 CARACTERES Y CDIGO ASCII
Las variables string (cadenas de caracteres) contienen un conjunto de caracteres
que se almacenan
en bytes de memoria. Cada carcter es almacenado en un byte (8 bits). En un bit se
pueden
almacenar dos valores (0 y 1); con dos bits se pueden almacenar 22 = 4 valores (
00, 01, 10, 11 en
binario; 0, 1 2, 3 en decimal). Con 8 bits se podrn almacenar 28 = 256 valores di
ferentes
(normalmente entre 0 y 255; con ciertos compiladores entre -128 y 127).
En realidad, cada letra se guarda en un solo byte como un nmero entero, el corres
pondiente a
esa letra en el cdigo ASCII (una correspondencia entre nmeros enteros y caracteres
, ampliamente
utilizada en informtica), que se muestra en la Tabla 8.1 para los caracteres estnd
ar (existe un
cdigo ASCII extendido que utiliza los 256 valores y que contiene caracteres espec
iales y caracteres
especficos de los alfabetos de diversos pases, como por ejemplo las vocales acentu
adas y la letra
para el castellano).
0 1 2 3 4 5 6 7 8 9
0 nul soh stx etx eot enq ack bel bs ht
1 nl vt np cr so si dle dc1 dc2 dc3
2 dc4 nak syn etb can em sub esc fs gs
3 rs us sp ! # $ % &
4 ( ) * + , -. / 0 1
5 2 3 4 5 6 7 8 9 : ;
6 < = > ? @ A B C D E
7 F G H I J K L M N O
8 P Q R S T U V W X Y
9 Z [ \ ] ^ _ ` a b c
10 d e f g h i j k l m
11 n o p q r s t u v w
12 x y z { | } ~ del
Tabla 8.1. Cdigo ASCII estndar.
Esta tabla se utiliza de la siguiente forma. La primera cifra (las dos primeras
cifras, en el caso
de los nmeros mayores o iguales que 100) del nmero ASCII correspondiente a un carct
er
determinado figura en la primera columna de la Tabla 8.1, y la ltima cifra en la
primera fila de
dicha Tabla. Sabiendo la fila y la columna en la que est un determinado carcter pu
ede componerse
el nmero ASCII correspondiente. Por ejemplo, la letra A est en la fila 6 y la colu
mna 5. Su
nmero ASCII es por tanto el 65. El carcter % est en la fila 3 y la columna 7, por l
o que su
representacin ASCII ser el 37. Obsrvese que el cdigo ASCII asocia nmeros consecutivos
con
las letras maysculas y minsculas ordenadas alfabticamente. Esto simplifica notablem
ente ciertas
operaciones de ordenacin alfabtica de nombres. Ntese que todas las maysculas tienen
cdigo
ASCII anterior a cualquier minscula.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero
pgina 98
En la Tabla 8.1 aparecen muchos caracteres no imprimibles (todos aquellos que se
expresan
con 2 3 letras). Por ejemplo, el ht es el tabulador horizontal, el nl es el carct
er nueva lnea, etc.
En realidad la Versin 6.0 de Visual Basic no utiliza para representar caracteres
el cdigo
ASCII sino el Unicode, que utiliza dos bytes por carcter, con lo cual tiene capac
idad para
representar 65536 caracteres, pudindose adaptar a las lenguas orientales. Para lo
s caracteres latinos
el byte ms significativo coincide con el del cdigo ASCII, mientras que el segundo
byte est a cero.
8.2 NMEROS ENTEROS
Los nmeros enteros en Visual Basic 6.0 se guardan en 1, 2 4 bytes.

Con 8 bits (1 byte) se podran guardar 28 nmeros: desde 0 hasta 255.

Con 16 bits (2 bytes) se podran guardar 216 nmeros: desde 0 hasta 65.535. Si se re
serva
un bit para el signo se tendran 215 nmeros: desde -32768 hasta 32767

Con 32 bits (4 bytes) se podran guardar 232 nmeros: desde 0 hasta 4.294.967.295. S
i se
reserva un bit para el signo se tendran 231: desde -2.147.483.648 hasta 2.147.483
.647
8.3 NMEROS REALES
En muchas aplicaciones hacen falta variables reales, capaces de representar magn
itudes que
contengan una parte entera y una parte fraccionaria o decimal. Estas variables s
e llaman tambin
de punto flotante. De ordinario, en base 10 y con notacin cientfica, estas variabl
es se representan
por medio de la mantisa, que es un nmero mayor o igual que 0.1 y menor que 1.0, y
un exponente
que representa la potencia de 10 por la que hay que multiplicar la mantisa para
obtener el nmero
considerado. Por ejemplo, el nmero p se representa como 0.3141592654101. Tanto la
mantisa
como el exponente pueden ser positivos y negativos.
8.3.1 Variables tipo Single
Los computadores trabajan en base 2. Por eso un nmero con decimales de tipo Singl
e se almacena
en 4 bytes (32 bits), utilizando 24 bits para la mantisa (1 para el signo y 23 p
ara el valor) y 8 bits
para el exponente (1 para el signo y 7 para el valor). Es interesante ver qu clas
e de nmeros de
punto flotante pueden representarse de esta forma. En este caso hay que distingu
ir el rango de la
precisin. La precisin hace referencia al nmero de cifras con las que se representa
la mantisa: con
23 bits el nmero ms grande que se puede representar es,
223
= 8.388.608
lo cual quiere decir que se pueden representar todos los nmeros decimales de 6 ci
fras y la mayor
parte aunque no todos de los de 7 cifras (por ejemplo, el nmero 9.213.456 no se pue
de
representar con 23 bits). Por eso se dice que las variables tipo Single tienen e
ntre 6 y 7 cifras
decimales equivalentes de precisin.
Respecto al exponente de dos por el que hay que multiplicar la mantisa en base 2
, con 7 bits el
nmero ms grande que se puede representar es 127. El rango vendr definido por la pot
encia,
2127
= 1.7014 1038
lo cual indica el orden de magnitud del nmero ms grande representable de esta form
a.
En el caso de los nmeros Single (4 bytes) el rango es: desde -3.402823E38 a -1.40
1298E-45
para los valores negativos y desde 1.401298E-45 a 3.402823E38 para los valores p
ositivos.
ANEXO A: Consideraciones adicionales sobre datos y variables pgina 99
8.3.2 Variables tipo Double
As pues, las variables tipo Single tienen un rango y sobre todo una precisin muy lim
itada,
insuficiente para la mayor parte de los clculos tcnicos y cientficos. Este problema
se soluciona
con el tipo Double, que utiliza 8 bytes (64 bits) para almacenar una variable. S
e utilizan 53 bits para
la mantisa (1 para el signo y 52 para el valor) y 11 para el exponente (1 para e
l signo y 10 para el
valor). La precisin es en este caso,
252
= 4.503.599.627.370.496
lo cual representa entre 15 y 16 cifras decimales equivalentes. Con respecto al
rango, con un
exponente de 10 bits el nmero ms grande que se puede representar ser del orden de 2
elevado a 2
elevado a 10 (que es 1024):
21024
= 1.7977 10308
Si se considera el caso de los nmeros declarados como Double (8 bytes) el rango v
a desde
-1.79769313486232E308 a -4.94065645841247E-324 para los valores negativos y desd
e
4.94065645841247E-324 a 1.79769313486232E308 para los valores positivos.
8.4 SISTEMA BINARIO, OCTAL, DECIMAL Y HEXADECIMAL
A contnuacin se presentan los primeros nmeros naturales expresados en distintos si
stemas de
numeracin (bases 10, 2, 8 y 16). Para expresar los nmeros en base 16 se utilizan l
as seis primeras
letras del abecedario (A, B, C, D, E y F) para representar los nmeros decimales 1
0, 11, 12, 13, 14 y
15. La calculadora que se incluye como accesorio en Windows 95 ofrece posibilida
des de expresar
un nmero en distintos sistemas de numeracin.
Decimal Binario Octal Hexadecimal
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F
16 10000 20 10
17 10001 21 11
Tabla 3.4 Expresin de un nmero en los distintos sistemas.

También podría gustarte