Upload
leminh
View
226
Download
0
Embed Size (px)
Citation preview
Manual del Alumno
1
INSTITUTO SUPERIOR TECNOLÓGICO
NORBERT WIENER
Manual del Alumno
ASIGNATURA: Lenguaje de Programación I (Visual Basic I)
PROGRAMA: S3C
Lima-Perú
Manual del Alumno
2
Índice General
Pag N°
1. Algoritmos, programas y conceptos fundamentales.................................................. 2
2. Instrucciones básicas de programación, operadores y expresiones .......................... 4
3. Introducción, Entorno de programación Visual Basic.............................................. 8
4. Características del Lenguaje Visual Basic................................................................ 44
5. Estructuras de Control condicional .......................................................................... 50
6. Funciones incorporadas ............................................................................................ 56
7. Estructuras Repetitivas con Condicion...................................................................... 57
8. Manejo de Listas(ListBox, ComboBox).................................................................... 58
9. Empleo de controles avanzados y personalizados......................................................63
10. Formularios múltiples................................................................................................ 69
11. Diseño de Menus........................................................................................................70
12. Funciones y procedimientos(Módulos)......................................................................78
13. Array de variables......................................................................................................86
14. Funciones Api‟s.........................................................................................................91
Manual del Alumno
3
ALGORITMOS, PROGRAMAS Y CONCEPTOS
FUNDAMENTALES
Algoritmos
Algoritmos.- Vienen a ser una serie de pasos a realizar en forma lógica y secuencial para
resolver un problema o realizar una tarea.
Diagramas De Flujo
Definición.- Un diagrama de flujo es la forma como se plasma la lógica de un programa en
forma gráfica. Atendiendo a un convencionalismo internacional permite que otro analista o
programador, independientemente de su nacionalidad, idioma y lógica personal, sea capaz de
visualizar e interpretar el exacto contenido de un programa, si funcionará o no, etc.
CONVENCIONES DE DIAGRAMACION :
El convencionalismo internacional se corresponde con el cuadro siguiente:
Un diagrama de flujo puede interpretarse como un rompecabezas o puzzle con el cual hay que
armar una secuencia lógica de procesos que guíen los pasos a seguir por el ordenador para la
consecución del funcionamiento del programa.
Pseudocódigo.- Es una secuencia lógica de los pasos a seguir para plasmar las tareas que hará
un determinado programa para resolver un problema, el pseudocódigo se da en forma escrita
con palabras del idioma común del programador.
Tomemos por ejemplo un programa que muestre en pantalla una lista telefónica.
Manual del Alumno
4
El ordenador deberá seguir la siguiente secuencia:
Pseudocódigo
Inicio
Abrir archivo de Listín telefónico
Repetir mientras no sea fin de archivo
Leer el nombre y teléfono
Mostrarlo en pantalla
Pasar a siguiente registro
Fin de Repetir
Cerrar el archivo
Terminar
Todo el proceso se traduciría en el diagrama que a continuación se muestra.
Codificación.- Consiste en traducir el Pseudocódigo o Diagrama de Flujo a sentencias o
instrucciones de programación de un determinado lenguaje o paquete de programación.
Manual del Alumno
5
INSTRUCCIONES BÁSICAS DE PROGRAMACIÓN,
OPERADORES Y EXPRESIONES
Operadores
Los operadores son símbolos que representan a una operación y que a su vez permiten
realizar dicha operación.
Operadores Matemáticos.- se usan para realizar las operaciones aritméticas.
Operación Operador Prioridad o Precedencia
Potencia
Producto
División
División Entera
Módulo o Resto
Suma
Resta
^
*
/
\
Mod
+
-
7
6
6
5
5
4
4
Las operaciones se realizan de mayor a menor prioridad y en operaciones de igual prioridad
estas se ejecutan de izquierda a derecha, para alterar la prioridad se usan los paréntesis (),
con lo cual en primer lugar se ejecutan las operaciones que están entre paréntesis.
Operadores de Relación o Comparación.- permiten comparar dos o más expresiones y
dan un resultado de verdad(True) o falsedad(False), Para realizar una relación o
Comparación siempre deben haber 2 elementos o una pareja de elementos.
Relación o Comparación Operador
Mayor que
Menor que
Igual que
Diferente de
Mayor o Igual que
Menor o Igual que
Comparar 2 cadenas
Comparar 2 objetos
>
<
=
<>
>=
<=
Like
Is
Operadores Lógicos.- permiten evaluar 2 o más expresiones lógicas.
Conjunción (And).- Se utiliza para evaluar 2 o más expresiones lógicas y da un resultado
de verdad si todas las expresiones a evaluar son verdaderas en caso contrario da un resultado
de falsedad.
Disyunción (Or).- Se utiliza para evaluar 2 o más expresiones lógicas y da un resultado de
verdad si una de las expresiones a evaluar es verdadera en el caso de que todas las
expresiones a evaluar sean falsas da un resultado de falsedad.
Manual del Alumno
6
Negación (Not).- Se usa para negar una expresión lógica, si la expresión es verdadera su
negación da un resultado de falsedad y si la expresión es falsa su negación da un resultado
de verdad.
TABLAS DE VERDAD
Conjunción
Disyunción
Negación
Visual Basic utiliza otros operadores lógicos que se emplean muy poco como son:
Disyunción Exclusiva - Xor (Se utiliza para realizar una exclusión lógica entre dos
expresiones), Equivalencia - Eqv (Se utiliza para efectuar una equivalencia lógica de dos
expresiones) y Implicación – Imp (Se utiliza para efectuar una implicación lógica de dos
expresiones).
Operadores de concatenación.- Se emplean para concatenar 2 o más cadenas de caracteres,
para lo cual se emplea el signo del Ampersand (&) o el signo (+); tener mucho cuidado de
emplear el signo + porque puede ocasionar errores de tipos de datos.
Manual del Alumno
7
TIPOS DE DATOS
Los Tipos de datos vienen a ser el tipo de dato que se utilizará para guardar determinada
información o dato, también podemos decir que el tipo de dato de una variable determina
cómo se almacenan los bits que representan esos valores en la memoria del equipo. Cuando
declare una variable, también puede proporcionarle un tipo de dato. Todas las variables
tienen un tipo de dato que determina la clase de datos que pueden almacenar.
La tabla siguiente muestra los tipos de datos de Visual Basic, incluyendo el tamaño de
almacenamiento y el intervalo.
Tipo Definición
Byte Representa a un valor entero corto entre 0 a 255, se almacena en 1 byte.
Integer Representa a un número entero entre -32,768 a 32,767, se almacena en 2 bytes
Long Representa a un número entero largo entre -2,147‟483,648 a 2,147‟483,647, se
almacena en 4 bytes
Single Representa a un número de simple precisión entre -3,4028E38 a -1,4012E-45
para valores negativos; 1,4012E-45 a 3,4028E38 para valores positivos, se
almacena en 4 bytes
Double Representa a un número de doble precisión entre -1,79769313E308 a
-4,94065645E-324 para valores negativos; 4,94065645E-324 a
1,7976931348E308 para valores positivos, se almacena en 8 bytes.
Decimal Representa a un número decimal +/-79.228.162.514.264.337.593.543.950.335
sin punto decimal; +/-7,9228162514264337593543950335 con 28 posiciones a
la derecha del signo decimal; el número más pequeño distinto de cero es
+/-0,0000000000000000000000000001, se almacena en 14 bytes.
Currency Representa a un número de tipo monetario entre –922‟‟337,203‟685,477.5808
a 922‟‟337,203‟685,477.5807, se almacena en 8 bytes.
Date Representa a una fecha entre el 1 de enero de 100 a 31 de diciembre de 9999,
se almacena en 8 bytes.
Boolean Representa a un dato de tipo lógico o booleano(True o False), se almacena en
2 bytes.
Object Representa a una referencia a un objeto, se almacena en 4 bytes.
String Representa a una cadena de caracteres si es (longitud variable), se almacena en
10 bytes + longitud de la cadena, desde 0 a 2.000 millones; si es (longitud
fija) va desde 1 a 65.400 caracteres aproximadamente.
Variant Es un tipo de datos especial que puede contener cualquier clase de datos
excepto datos tipo String de longitud fija y tipos definidos por el usuario.
Variant también puede contener los valores especiales Empty, Error, Nothing
y Null. Puede determinar la forma en que desea tratar los datos tipo Variant
utilizando las funciones VarType o TypeName. Las variables no definidas
toman automáticamente el tipo de dato Variant.
Tipos de
datos de
Usuario
Son tipos de datos definidos por el usuario empleando la Instrucción
Type_EndType, se conocen también como datos de tipo Registro.
Manual del Alumno
8
Variables Vienen a ser zonas de memoria que almacenan un dato, que puede ser modificado durante la
ejecución de la aplicación o programa. Las variables tienen un nombre (la palabra que se
utiliza para referirse al valor que contiene la variable) y un tipo de dato (que determina la
clase de datos que la variable puede almacenar). Puede considerar una variable como un
marcador de posición en memoria de un valor desconocido.
El nombre de una variable:
Debe comenzar con una letra.
No puede incluir un punto o un carácter de declaración de tipo.
No debe exceder de 255 caracteres.
Debe ser única en el mismo ámbito, que es el intervalo desde el que se puede hacer
referencia a la variable: un procedimiento, formulario, etc.
Constantes
Una constante es un nombre significativo que sustituye a un número o una cadena que no
varía. Aunque una constante recuerda ligeramente a una variable, no puede modificar una
constante o asignarle un valor nuevo como ocurre con una variable. A menudo verá que el
código contiene valores constantes que reaparecen una y otra vez. O puede que el código
dependa de ciertos números que resulten difíciles de recordar (números que, por sí mismos,
no tienen un significado obvio).
Manual del Alumno
9
EL ENTORNO DE PROGRAMACION VISUAL
BASIC
INTRODUCCION
¿Qué es Visual Basic? La palabra "Visual" hace referencia al método que se utiliza para
crear la interfaz gráfica de usuario (GUI). En lugar de escribir numerosas líneas de código
para describir la apariencia y la ubicación de los elementos de la interfaz, simplemente
puede arrastrar y colocar objetos prefabricados en su lugar dentro de la pantalla. Si ha
utilizado alguna vez un programa de dibujo como Paint, ya tiene la mayor parte de las
habilidades necesarias para crear una interfaz de usuario efectiva.
La palabra "Basic" hace referencia al lenguaje BASIC (Beginners All-Purpose Symbolic
Instruction Code), un lenguaje utilizado por más programadores que ningún otro lenguaje
en la historia de la informática o computación. Visual Basic ha evolucionado a partir del
lenguaje BASIC original y ahora contiene centenares de instrucciones, funciones y
palabras clave, muchas de las cuales están directamente relacionadas con la interfaz
gráfica de Windows. Los principiantes pueden crear aplicaciones útiles con sólo aprender
unas pocas palabras clave, pero, al mismo tiempo, la eficacia del lenguaje permite a los
profesionales realizar cualquier tarea que pueda alcanzarse mediante cualquier otro
lenguaje de programación de Windows.
Caracteristicas
Acceso a datos .- Permite crear bases de datos y aplicaciones cliente para los formatos
de las bases de datos más conocidas, incluidos Microsoft SQL Server y otras bases de
datos de ámbito empresarial.
Tecnologías Activex .- Permite utilizar la funcionalidad proporcionada por otras
aplicaciones, como el procesador de textos Microsoft Word, la hoja de cálculo
Microsoft Excel y otras aplicaciones Windows. Puede incluso automatizar las
aplicaciones y los objetos creados con la Edición profesional o la Edición empresarial
de Visual Basic.
Capacidade de Internet .- Facilita el acceso a documentos y aplicaciones a través de
Internet desde su propia aplicación.
Aplicación Ejecutable .- Es un auténtico archivo .exe que utiliza una biblioteca de
vínculos dinámicos (DLL) en tiempo de ejecución que puede distribuir con toda
libertad.
Ediciones de Visual Basic
Manual del Alumno
10
Visual Basic se encuentra disponible en tres versiones, cada una de las cuales está
orientada a unos requisitos de programación específicos.
La Edición de aprendizaje de Visual Basic permite a los programadores crear robustas
aplicaciones para Microsoft Windows 95 y Windows NT®. Incluye todos los controles
intrínsecos, además de los controles de cuadrícula, de fichas y los controles enlazados
a datos.
La Edición profesional proporciona a los profesionales un completo conjunto de
herramientas para desarrollar soluciones para terceros. Incluye todas las características
de la Edición de aprendizaje, así como controles ActiveX adicionales, incluidos
controles para Internet y el Generador de informes de Crystal Reports.
La Edición empresarial permite a los profesionales crear sólidas aplicaciones
distribuidas en un entorno de equipo. Incluye todas las características de la Edición
profesional, asi como el Administrador de automatización, la Galería de objetos, las
herramientas de administración de bases de datos, el sistema de control de versiones
orientado a proyectos Microsoft Visual SourceSafe, etc.
Programación orientada a objetos.
1- Objeto
Un objeto es una entidad que tiene asociado un conjunto de métodos, eventos y propiedades.
Ejemplo : Una caja de texto (TextBox) en la cual podemos escribir cualquier línea es un
objeto.
2- Propiedades
Son las características que posee un objeto o un formulario (ventana de Windows).
Ejemplo : Color de fondo del formulario, Fuente de texto de un TextBox, ….
3- Métodos
Los métodos son funciones internas de un determinado objeto que permite realizar funciones
sobre él o sobre otro objeto.
Ejemplo : Mostrar en la ventana del formulario "Hola mundo", por tanto pondremos el
método -> form1.Print "Hola mundo"
4- Eventos
Manual del Alumno
11
Los eventos son acciones que se pueden realizar en cualquier control: click, doble click,
movimiento del ratón. A estos eventos se les puede asociar código para que se ejecute al
producir el evento.
Un programa Visual Basic es un POE (Programa orientado a eventos).
Todo lo que hacemos en un programa Visual Basic está generado por medio de eventos
5- Explicación integrada y ejemplo de Objetos, Propiedades, Métodos y Eventos.
Los formularios y controles de Visual Basic son objetos que exponen sus propios
métodos, propiedades y eventos. Las propiedades se pueden considerar como atributos de
un objeto, los métodos como sus acciones y los eventos como sus respuestas.
Un objeto de uso diario como el globo de un niño tiene también propiedades, métodos y
eventos. Entre las propiedades de un globo se incluyen atributos visibles como el peso, el
diámetro y el color. Otras propiedades describen su estado (inflado o desinflado) o
atributos que no son visibles, como su edad. Por definición, todos los globos tienen estas
propiedades; lo que varía de un globo a otros son los valores de estas propiedades.
Un globo tiene también métodos o acciones inherentes que puede efectuar. Tiene un
método inflar (la acción de llenarlo de helio) o un método desinflar (expeler su contenido)
y un método elevarse (si se deja escapar). De nuevo, todos los globos pueden efectuar
estos métodos.
Los globos tienen además respuestas predefinidas a ciertos eventos externos. Por ejemplo,
un globo respondería al evento de pincharlo desinflándose o al evento de soltarlo
elevándose en el aire.
Los objetos tienen propiedades, responden a eventos y ejecutan métodos:
Si se pudiera programar un globo, el código de Visual Basic podría ser como el siguiente.
Para establecer las propiedades del globo:
Globo.Color = Rojo
Globo.Diámetro = 10
Globo.Inflado = True
Observe la sintaxis del código: el objeto (Globo) seguido de la propiedad (Color) seguida
de la asignación del valor (Rojo). Podría modificar el color del globo desde el código si
repitiera esta instrucción y sustituyera el valor por otro diferente. Las propiedades
Manual del Alumno
12
también se pueden establecer en la ventana Propiedades mientras se está diseñando la
aplicación.
Los métodos de un globo se invocan de esta forma:
Globo.Inflar
Globo.Desinflar
Globo.Elevar 5
La sintaxis es similar a la sintaxis de las propiedades: el objeto (un nombre) seguido de un
método (un verbo). En el tercer ejemplo hay un elemento adicional, llamado argumento,
que indica la distancia que se eleva. Algunos métodos tendrán uno o más argumentos para
describir más a fondo la acción que se va a ejecutar.
El globo puede responder a un evento como se muestra a continuación:
Sub Globo_Pinchazo()
Globo.Desinflar
Globo.HacerRuido "Bang"
Globo.Inflado = False
Globo.Diámetro = 1
End Sub
En este caso, el código describe el comportamiento del globo cuando se produce un
evento Pinchazo: invoca el método Desinflar y luego invoca el método HacerRuido con
un argumento “Bang” (el tipo de ruido que se va a hacer). Como el globo ya no está
inflado, la propiedad Inflado tiene el valor False y la propiedad Diámetro adopta un nuevo
valor.
Si bien no puede programar un globo, sí puede programar un formulario o un control de
Visual Basic. Como programador, tiene el control: decide qué propiedades se deben
modificar, qué métodos se deben invocar o a qué eventos hay que responder para conseguir
la apariencia y el comportamiento deseados
Comprobación de los requisitos minimos de hardware y del sistema
Para ejecutar Visual Basic, tiene que disponer de cierto hardware y software instalado en su
equipo. Entre los requisitos del sistema cabe citar los siguientes:
Microsoft Windows NT 4.0 o posterior, o Microsoft Windows 95 – 98-2000.
Microprocesador Pentium de 166 o superior.
Un disco duro con un mínimo de 80 megabytes de espacio libre.
Una unidad de CD-ROM.
Pantalla VGA o de mayor resolución, compatible con Microsoft Windows.
32 MB de RAM o superior.
Proyecto de visual Basic.
Un proyecto es una colección de archivos que se usan para generar una aplicación.
Manual del Alumno
13
Cuando desarrolla un aplicación, trabaja con un archivo de proyecto para administrar
todos los diferentes archivos que crea. Un proyecto consta de lo siguiente:
Un archivo de proyecto que realiza el seguimiento de todos los componentes (.vbp)
Un archivo para cada formulario (.frm).
Un archivo de datos binario para cada formulario que contenga datos sobre
propiedades de controles del formulario (.frx). Estos archivos no se pueden modificar
y los genera automáticamente cualquier archivo .frm que tenga propiedades en
formato binario, como Picture o Icon.
Opcionalmente, un archivo para cada módulo de clase (.cls).
Opcionalmente, un archivo para cada módulo estándar (.bas).
Opcionalmente, uno o más archivos con controles ActiveX (.ocx).
Opcionalmente, un único archivo de recursos (.res).
El archivo de proyecto es simplemente una lista de todos los archivos y objetos asociados
con el proyecto, así como información sobre las opciones de entorno establecidas. Esta
información se actualiza cada vez que guarda el proyecto. Todos los archivos y objetos
también se pueden compartir con otros proyectos.
Cuando ha completado todos los archivos del proyecto puede convertir el proyecto en un
archivo ejecutable (.exe): en el menú Archivo, elija el comando Generar proyecto.exe.
Formularios.
Un formulario es una ventana. La ventana Windows de cualquier aplicación.
Podemos abrir tantas ventanas como queramos en nuestro proyecto, pero el nombre de las
ventanas debe ser distinto. Los formularios posee extensión *.frm
Módulos de clase.
Los módulos de clase (extensión *.cls) no tiene interfaz de usuario visible. Puede usar
módulos de clase para crear sus propios objetos, incluyendo código para métodos y
propiedades.
Módulos estándar.
Un módulo es un archivo Visual Basic donde se escribe parte del código del programa,
ademas del codigo existente en el formulario.
Las rutinas incluidas dentro de los módulos pueden ser ejecutadas desde los formularios de
la aplicación.
Los módulos estándar (extensión *.bas) pueden contener declaraciones públicas o a nivel
de módulo de tipos, constantes, variables, procedimientos externos y procedimientos
públicos.
Archivos de Recursos.
Los archivos de recursos (extensión *.res) contienen mapas de bits, cadenas de texto y
otros datos. Un proyecto sólo puede contener un archivo de recursos.
Manual del Alumno
14
Controles Active X.
Los controles ActiveX (extensión *.ocx) son controles opcionales que se pueden agregar
al cuadro de herramientas y se pueden usar en formularios. Existen controles ActiveX
adicionales disponibles en diversas fuentes. También puede crear sus propios controles
mediante las ediciones Profesional y Empresarial de Visual Basic.
EL ENTORNO DE DESARROLLO DE VISUAL BASIC
Inicio de Visual Basic
En cuanto termine el procedimiento de instalación, puede iniciar Visual Basic haciendo:
1. clic botón Inicio
2. clic en Programas
3. clic en Microsoft Visual Studio
4. clic en Visual Basic 6.0.
La Primera Pantalla que aparece nos indica el tipo de Proyecto a crear si es uno nuevo o se
va a abrir uno ya existente, para lo cual lo único que debemos hacer es seleccionar el tipo de
Proyecto a usar y clic en Botón Abrir.
Luego de ingresa al IDE (Entorno Integrado de Desarrollo) de Visual Basic, que
viene a ser el entorno de trabajo de Visual Basic, el cual integra muchas funciones
diferentes como el diseño, modificación, compilación y depuración en un entorno
común. En las herramientas de desarrollo más tradicionales, cada una de esas funciones
funcionaría como un programa diferente, cada una con su propia interfaz; pero en Visual
Basic es un solo conjunto, el IDE que consta de los siguientes elementos:
Manual del Alumno
15
Visual Basic proporciona un alto grado de flexibilidad, permitiéndole configurar el entorno
de trabajo que mejor se adapte a su propio estilo. Puede elegir entre una interfaz de
documentos simple o múltiple, y puede ajustar el tamaño y la posición de varios elementos
del Entorno integrado de desarrollo (IDE).
Ventana Explorador de Proyectos
Enumera los formularios y módulos del proyecto actual. Un Proyecto es la colección de
archivos que usa para generar una aplicación puede tener Formularios, Módulos, Módulos
de Clase, etc. Posee tres botones que permiten hacer lo siguiente:
Barra de Herramientas Estandar o ToolBar
Cuadro de
Herramientas
o ToolBox
Ventana
Posición de l
Formulario
Ventana de
Propiedades
Ventana
Explora
dor Proy
ect
o
Ventana
Formulario
Barra de Menú
Manual del Alumno
16
Botón Alternar carpetas
Permite cambiar la
presentación del proyecto
entre elementos separados
por tipo(carpetas) o todos
juntos.
Botón Ver objeto
Permite mostrar en pantalla
el elemento seleccionado en
la ventana del Explorador de
Proyectos.
Botón Ver código
Permite pasar a la ventana de
código del elemento
seleccionado en la ventana
del Explorador de Proyectos.
Ventana Propiedades
Enumera los valores de las propiedades del control o formulario seleccionado. Una
propiedad es una característica de un objeto, como su tamaño, título o color.
Examinador de objetos
Enumera los objetos disponibles que puede usar en su proyecto y le proporciona una manera
rápida de desplazarse a través del código. Puede usar el Examinador de objetos para
explorar objetos en Visual Basic y otras aplicaciones, ver qué métodos y propiedades están
disponibles para esos objetos, y pegar código de procedimientos en su aplicación.
Ventana Formulario(Diseñador)
Funciona como una ventana en la que se personaliza el diseño de la interfaz de su
aplicación. Agregue controles, gráficos e imágenes a un formulario para crear la apariencia
que desee. Cada formulario de la aplicación tiene su propia ventana diseñador de formulario.
Ventana Editor de código
Funciona como un editor para escribir el código de la aplicación. Se crea una ventana editor
de código diferente para cada formulario o módulo del código de la aplicación.
Manual del Alumno
17
Ventana Posición del formulario
La ventana Posición del formulario le permite colocar los formularios de su aplicación en
determinada posición de la pantalla, utilizando una pequeña representación gráfica de la
pantalla.
Ventanas Inmediato, Locales e Inspección
Estas ventanas adicionales se proporcionan para la depuración de la aplicación. Sólo están
disponibles cuando ejecuta la aplicación dentro del IDE.
Nota También puede agregar características a la interfaz de Visual Basic mediante un
programa llamado complemento. Los complementos, disponibles en Microsoft y otros
desarrolladores, pueden proporcionar características como el control de código de origen,
que permite mantener proyectos de desarrollo en grupo.
FORMULARIO Y CONTROLES BASICOS
Los controles vienen a ser una serie de objetos que utiliza el VB para crear la interfaz
gráfica de usuario estos controles tienen propiedades, métodos, y eventos ante los cuales
reaccionan, Nadie puede dominar a Visual Basic sin antes dominar a los controles y sus
propiedades, así tenemos que Ud. Trabaja con un formulario como contenedor de controles
y al hacerlo tiene que darles un nombre, ubicarlos en determinada posición dentro del
formulario, ajustar su tamaño, establecer sus propiedades en tiempo de diseño y para tiempo
Manual del Alumno
18
de ejecución y programar sus eventos para terminar realizando una aplicación o proyecto
Visual Basic.
Nota. Las propiedades de los controles serán definidas en cada control y si la misma
propiedad la tienen otros controles entonces no se volverán a definir salvo que se empleen
en forma diferente.
Dentro de Visual Basic tenemos en primer al Formulario tomado como un control mas, y a
los controles estándar.
Formulario
El formulario es un control también dentro de Visual Basic , es así que tiene propiedades,
métodos y eventos propios que lo controlan, permite crear ventanas, cuadros de diálogo y es
un contenedor de controles que permite la creación de la Interface Gráfica de Usuario dentro
la Aplicación o Proyecto. Los controles se dibujan y se ven en un formulario mientras está
diseñando un formulario:
Las ventanas Formulario tienen los botones Maximizar, Minimizar y Cerrar.
Puede crear formularios fijos o móviles. El formulario que diseña tendrá las mismas
características en tiempo de diseño y en tiempo de ejecución, a menos que especifique lo
contrario en las propiedades del formulario.
Utilice los botones del Cuadro de herramientas para dibujar los controles en el formulario.
Utilice el comando Ventana Posición del formulario, del menú Ver, para obtener una vista
previa de la distribución del formulario.
Teclas para Ventana Formulario
Utilice estas combinaciones de teclas en la ventana Formulario:
Presione Para
F7 Abrir la ventana Código para el objeto seleccionado.
CTRL+C Copiar los controles seleccionados al Portapapeles.
CTRL+X Cortar los controles seleccionados al Portapapeles.
SUPR Eliminar los controles seleccionados sin colocarlos en el
Manual del Alumno
19
Portapapeles.
CTRL+V Pegar el contenido del Portapapeles en el formulario.
CTRL+Z Deshacer una eliminación de controles.
TAB Recorrer hacia adelante los controles en el orden de tabulación.
SHIFT+TAB Recorrer hacia atrás por los controles en el orden de tabulación.
CTRL+CLIC Agregar o quitar un control de la selección.
CLIC+ARRASTRAR Seleccionar múltiples controles.
SHIFT+CLIC Seleccionar múltiples controles.
CTRL+E Mostrar el menú Edición (sólo en tiempo de diseño).
F4 Mostrar la ventana Propiedades (sólo en tiempo de diseño).
CTRL+J Traer al frente (afecta al solapamiento de los controles sólo en
tiempo de diseño).
CTRL+K Enviar atrás (afecta al solapamiento de controles sólo en tiempo
de diseño).
PROPIEDADES.
Name Nombre
Define al objeto durante la ejecución del programa. Se introduce en tiempo de diseño
y no se puede variar durante la ejecución. Nombre por defecto: Form1 (Form2 y
sucesivos) Este nombre por defecto debe cambiarse, (debería cambiarse por norma
en el momento de introducir el formulario), ya que de no hacerlo corremos el riesgo
de borrar el código existente de otro formulario del mismo nombre en el momento de
guardar la aplicación.
Caption Título
Es el texto que aparecerá en la barra de Título cada vez que aparezca en pantalla este
formulario. No tiene otra función dentro del programa. El programa no accede a este
formulario por el título, sino por el nombre. Puede cambiarse en tiempo de
ejecución.
NOTA.- No confundir Nombre (Name) con Título (Caption)
Control Box Control “menos” del Formulario Valor por defecto : True
Propiedad booleana que admite los valores de true (verdadero) o False (Falso). Si
esta propiedad es True, aparecerá en la esquina superior izquierda el "menos" para
desplegar el menú de control de este formulario. Si esta propiedad se pone como
False, no existirá dicho "menos" y por tanto no se puede desplegar dicho menú.
MinButton
MaxButton Valor por defecto: True
Manual del Alumno
20
Botones (flechas) de minimizar y maximizar este formulario. Son igualmente
propiedades booleanas, que admiten el valor True o False. Si están en true, aparecerá
la flecha correspondiente. Si están en False, no aparecerá dicha flecha. Deben
configurarse de una u otra forma, dependiendo si se quiere minimizar / maximizar
este formulario durante la ejecución.
Nota. En los formularios MDI child, es necesario poner a true las propiedades
ControlBox, MinButton y MaxButton para poder maximizar el formulario hijo. De no
ponerlas a true, sí se pretende maximizar el formulario hijo, (Propiedad WindowState=2)
el formulario no aparece.
BorderStyle Tipo de borde
Define el tipo de borde que tendrá el formulario durante la ejecución. No se puede
cambiar en tiempo de ejecución.
Admite los siguientes valores:
0 - None El formulario no tiene borde alrededor
1 - Fixed Single
El formulario tendrá un borde fino, y no podrá cambiarse su tamaño
durante el tiempo de ejecución. Con este valor, el formulario puede
tener un menú de control, barra de título y botones de maximizar y
minimizar. Solo podrá cambiarse de tamaño utilizando estos botones.
2-Sizable
El formulario tendrá borde grueso, y se podrá cambiar su tamaño en
tiempo de ejecución mediante los botones de maximizar y minimizar,
y mediante el arrastre de uno de los bordes con el ratón.
3 - Fixed Dialog
El formulario tendrá borde grueso, y no se podrá redimensionar
durante la ejecución. No puede tener los botones de maximizar ni
minimizar.
4 - Fixed ToolWindow
En las versiones de 16 bits de Windows y Windows NT 3.51 y
anteriores se comporta como Fixed Single. No puede cambiar de
tamaño. En Windows 95 muestra el botón Cerrar, y el texto de la
barra de titulo aparece con un tamaño de fuente reducido. El
formulario no aparece en la barra de tareas de W95.
5 - Sizable ToolWindow
Manual del Alumno
21
En las versiones de 16 bits se comporta como Sizable. En W95
muestra el botón Cerrar y el texto de la barra de titulo aparece con un
tamaño de fuente reducido. El formulario no aparece en la barra de
tareas de W95.
Valor por defecto: 2 . Sizable
Nota: Al cambiar a determinados valores, las propiedades MaxButton
y MinButton se ponen a False. Pueden cambiarse a True
posteriormente.
Appearance Apariencia Valor por defecto: 3D
Admite los valores 0 (=Flat, plano) y 1 (=3D) Si tiene el valor 1 (3D), el
formulario aparecerá con cierto efecto tridimensional, y los controles que le
introduzcamos a este formulario aparecerán como esculpidos dentro de él. Con valor
0 (Flat) en esta propiedad, el formulario aparecerá durante la ejecución como una
superficie plana. El color de fondo se ve afectado al cambiar esta propiedad. Si se
cambia a 3D, el fondo (Backcolor) toma el color definido en Windows en el Panel de
Control. Si se cambia a Flat, toma el color blanco
Autoredraw Valor por defecto: False
Propiedad booleana. Esta propiedad, estando en True, permite actualizar el contenido
del formulario y de sus controles incluso cuando no están visibles. Imaginemos que
en este formulario existe un texto, una etiqueta (Label) o caja de texto (Text Box)
cuyo texto se haya cambiado, bien por programa, bien por una entrada, mientras este
formulario no estaba visible. Lo mismo podemos decir de las propiedades de
cualquier otro control. Si esta propiedad Autoredraw está en False, al hacer visible
este formulario, aparecerá igual que cuando se ocultó. Si esta propiedad está en True,
aparecerá actualizado.
Backcolor Color del fondo
Establece el color del fondo del formulario. Puede cambiarse en tiempo de ejecución.
Valor por defecto: El establecido en el Panel de Control de Windows.
ClipControls Valor por defecto: False
Propiedad Booleana. Establece si un evento Paint vuelve a dibujar el objeto entero (True) o
si solamente dibujan las partes que han sufrido cambios (False)
DrawMode
Establece un valor que determina el aspecto de la salida de un método gráfico o el aspecto
de un control Shape o Line. Verá mas adelante los efectos de esta propiedad.
DrawStile Valor por defecto : 0
Establece el estilo de línea de la salida de métodos gráficos:
Manual del Alumno
22
Valores: 0 - Línea continua
1 - Rayas
2 - Puntos
3 - Raya-Punto
4 - Raya - Punto - Punto
5 - Transparente
6 - Continuo interior.
DrawWidth Valor por defecto: 1
Establece el ancho de una línea dibujada. El valor debe expresarse en pixeles.
Enabled Activado Valor por defecto: True
Propiedad booleana. Si está en True, el formulario está activado y se puede interactuar con
él. Si está en False, se desactiva el formulario, impidiendo de esta forma, que se pueda
trabajar con él.
ForeColor Valor por defecto: Negro
Establece el color del primer plano del formulario. Es el color que tendrán las letras si
escribimos en él, o los dibujos, si lo que hacemos es dibujar. En tiempo de diseño, determina
el color de la rejilla,.
FillStyle Tipo de relleno Valor por defecto: 2
Establece el modo de rellenar controles Shape, o figuras (círculos o cuadrados) creados con
los métodos gráficos Circle y Line.
Valores: 0 - Continuo
1 - Transparente
2 - Línea Horizontal
3 - Línea Vertical
4 - Diagonal hacia arriba
5 - Diagonal hacia abajo
6 - Cruzado
7 - Diagonal cruzada
FillColor Color de relleno
Especifica el color del relleno contemplado en FillStyle.
Font Tipo de letra Valor por defecto: El determinado en la personalización.
Especifica el tipo y tamaño de la letra que se usará en el formulario. Al seleccionar
esta propiedad en la ventana de propiedades, aparece un cuadro de dialogo donde se
eligen ambos parámetros.
Cuando introduzca nuevos controles en el Formulario, la propiedad Font de estos
controles tomará el valor que tenga esta propiedad en el Formulario. Puede servirle
Manual del Alumno
23
este pequeño truco para utilizar en todos los controles una determinada fuente sin
tener que teclearla para cada control.
FontTranparent Texto Transparente Valor por defecto: True
Establece si el texto o gráfico de fondo del formulario se muestra (True) o no se
muestra entre los caracteres de texto escritos en el propio formulario.
FontSize Tamaño de letra
Establece el tamaño de la letra. Esta propiedad, que puede variarse en tiempo de
ejecución, varía solamente el tamaño, y no el tipo de letra. El tamaño debe
expresarse en puntos. Máximo, 2160 puntos.
FontBold, FontItalic, FontStrikethru, FontUnderline
Permiten, en tiempo de ejecución, cambiar un texto a negrita, cursiva, tachado y
subrayado. Son propiedades booleanas True / False
Height Altura Valor por defecto: No existe
Define la altura del formulario. El valor de esta propiedad no se introduce
normalmente como un dato numérico, sino que toma el valor automáticamente,
dependiendo de las dimensiones del formulario durante el tiempo de diseño. Puede
cambiarse durante el tiempo de ejecución.
HelpContextID Valor por defecto: 0
Establece un número de contexto asociado para este formulario. Este número se
aplica para determinar la ayuda interactiva asociada a este formulario. Vea mas
adelante, el tema Ayuda de Windows.
Puede tomar los siguientes valores : 0 - No se especifica número de contexto
>0 Un entero que especifique un contexto
válido.
Icon Icono
Esta propiedad define el icono que va a representar a este formulario cuando esté
minimizado. Si el formulario es el formulario padre o formulario de inicio de una
aplicación, este icono es el que toma el Asistente de Instalación para colocarlo como
icono de apertura del programa en el grupo de programas Windows correspondiente.
Como valor de esta propiedad se le puede asignar directamente el icono o el nombre
de un archivo (con su path correspondiente) que lo contiene, haciéndolo
directamente sobre la caja de propiedades.
Valor por defecto: el icono que se le haya programado en la personalización.
Manual del Alumno
24
KeyPreview Valor por defecto: False
Propiedad Booleana. Cuando un formulario tiene dentro de sí varios controles, uno de ellos
es el que está activo. En estas condiciones, si se pulsa una tecla, esa pulsación la recibe en
primer lugar el control que esté activo, y si éste no la procesa, pasa esa pulsación al
formulario. Para hacer que esa pulsación pase directamente al formulario, debe ponerse esta
propiedad en True.
Left Borde Izquierdo Valor por defecto: No existe
Indica la posición del borde izquierdo del formulario. Normalmente no se introduce
como valor numérico, sino que lo toma automáticamente de la posición que tenga el
formulario en el tiempo de diseño. Puede cambiarse en tiempo de ejecución,
para mover el formulario.
LinkMode Valor por defecto: 0
Permite que una aplicación destino inicie una conversación DDE con el formulario
(origen de datos). Puede tomar los siguiente valores:
0 - No hay interacción DDE
1 - Source. Indica que este Formulario es origen de una comunicación DDE.
El dato que se va a traspasar en esa comunicación DDE estará en un
TextBox, en un Label o en un PictureBox de este Formulario.
LinkTopic
Establece el tema al que este formulario va a responder a una conversación DDE,
cuando funciona como origen. Es por este tema por el que se debe llamar a este
formulario cuando actúa de origen en una conversación DDE
MDIChild Valor por defecto: False
Establece que este formulario es un formulario Hijo dentro de un formulario MDI.
No se puede cambiar en tiempo de ejecución. Es una propiedad booleana
True = es formulario hijo False =No lo es
MouseIcon Valor por defecto: ninguno
Establece un icono personalizado para el puntero del ratón cuando esté encima de
este Formulario. Este icono puede ser un bit-map de los existentes en el directorio
Icons de Visual Basic o cualquiera que tengamos. Si se pone 99 como valor de la
propiedad MousePointer (siguiente), cada vez que el puntero del ratón pase por este
Formulario, cambiará su forma y adoptará la del icono elegido.
MousePointer Valor por defecto: flecha
Determina la forma del puntero del ratón cuando se coloca encima del formulario.
Puede elegirse uno de los punteros preestablecidos (15 en total) o el personalizado
Manual del Alumno
25
visto en la propiedad anterior. Para elegir ese icono personalizado, debemos poner en
esta propiedad el valor 99.
Picture Gráfico Valor por defecto: No existe
Mediante esta propiedad podemos poner un gráfico como fondo del formulario. El
gráfico puede ser un bit-map o un fichero .ICO
ScaleHeight, ScaleWidth, ScaleMode,
Indican la unidad de medida de dimensión de altura y anchura del Formulario.
ScaleMode indica en qué unidades de medida se van a medir esas dimensiones.
Acepta Twips (1), Point(2), Pixel (3), Character (4), Pulgadas (Inch) (5), Milímetros
(6), Centímetros (7). Si colocamos la propiedad ScaleMode en cualquiera de estos
valores, las propiedades ScaleHeight y ScaleWidth nos vendrán dadas
automáticamente dependiendo del ancho del Formulario, y no se extrañe si encuentra
para estas propiedades valores tan peregrinos como 4815 y 7423. Al haber elegido
la unidad de medida, los valores de ancho (ScaleWidth) y alto (ScaleHeight) serán
los que tengan que ser, medidos en la unidad que hemos elegido. Podemos elegir una
cifra para el ancho y el alto del Formulario de forma que podamos controlar mejor
las distintas posiciones que van a ocupar en él los controles, los textos o los dibujos.
Podemos poner, por ejemplo, que el Formulario mida 400 de ancho (ScaleWidth =
400) y 300 de alto (ScaleHeight = 300) forzándole estas propiedades, bien en tiempo
de diseño en la caja de propiedades, o en tiempo de ejecución mediante código.
Entonces sabemos que el formulario, independientemente de las dimensiones físicas
que tenga sobre la pantalla, medirá 400 de ancho y 300 de alto, y si en estas
condiciones queremos colocar un control o un dibujo justo en el medio del
Formulario, sabemos que tenemos que colocarle en las coordenadas 200, 150. ¿Que
unidad de medida estaremos utilizando entonces en el Formulario ? Unas definidas
por el usuario (distintas para el ancho y el alto) que serán las necesarias para que el
Formulario mida de ancho lo que le hayamos puesto en la propiedad ScaleWidth y
de alto lo que le hayamos puesto en la propiedad ScaleHeight. Observe que la
propiedad ScaleMode se ha cambiado automáticamente a User (0) al introducir las
dimensiones de ancho y alto que nosotros queremos.
Estas unidades de medida afectarán a los controles que metamos en este Formulario.
Se medirán en su ancho y alto con la unidad de medida definida para el ancho y alto
del Formulario. Lógicamente también afectará a las propiedades Left y Top de los
controles, pero estas propiedades se verán afectadas además por las propiedades
ScaleLeft y ScaleTop del Formulario que se verán a continuación.
ScaleLeft, ScaleTop
Estas propiedades, medidas en la unidad de medida elegida para el ancho y alto
mediante las propiedades ScaleMode, ScaleWidth y ScaleHeight anteriores,
expresan las coordenadas iniciales de la parte izquierda y de la parte superior
respectivamente del Formulario. Estas propiedades no afectan a la posición del
Formulario en la pantalla (Si está maximizado seguirá ocupando toda la pantalla, si
Manual del Alumno
26
está en “Normal” ocupará el mismo sitio que se dio en tiempo de diseño).
Supongamos que se le asigna a un Formulario, las propiedades ScaleWidth = 400, y
ScaleHeight = 300. Si colocamos un control justamente en el centro del Formulario
tendrá sus propiedades Top =150 y Left=200. Si ponemos ahora las propiedades del
Formulario ScaleLeft a 30 y ScaleTop a 10, ese control, para seguir en el centro del
Formulario deberá tener sus propiedades Top a 160 (150 + 10) y Left a 230 (200 +
30).
Recuerde que las medidas de un formulario crecen, desde la esquina superior
izquierda, según avanzamos hacia abajo y hacia la derecha.
Como aclaración de las relaciones entre distintas unidades de medida, puede ver en
la siguiente table la correspondencia entre cada una de ellas y la unidad imaginaria
Twip.
1 Point=20 Twips ; 1Pixel=15 Twips : 1 Charecter=240 Twips ; 1 Inch (pulgada) =1440
Twips 1mm=56,52 Twips 1 cm=566 Twips
Tag Valor por defecto: No existe
Esta propiedad no la usa directamente Visual-Basic. Sirve para asociar al formulario
información adicional para fines externos a la programación. Pero también le puede
servir para almacenar en ella una variable para que la use un código ajeno al
formulario. El autor de estos apuntes tiene por costumbre utilizar la propiedad Tag
del formulario inicial para guardar el parámetro que se le pasa a algunos programas
para acceder a ellos con unos determinados privilegios. Resumiendo, está ahí para lo
que el programador quiere.
Top Posición del borde superior Valor por defecto: No existe
Esta propiedad establece la posición del borde superior del formulario. Normalmente
no se introduce como valor numérico sino que lo toma automáticamente de la
posición que tenga el Formulario durante el tiempo de diseño Este valor puede
cambiarse durante la ejecución para, conjuntamente con Left, variar la posición del
Formulario. Los valores de Top y Left definen la esquina superior izquierda del
Formulario.
Visible Valor por defecto: True
Propiedad Booleana. Asignándole el valor True la pantalla es visible, y asignándole
el valor False, no se ve. Este valor puede cambiarse durante el tiempo de ejecución
para ocultar y hacer visible el formulario.
Width Ancho Valor por defecto: No existe
Define la anchura del formulario. Normalmente no se introduce como valor
numérico sino que lo toma automáticamente del tamaño que tenga el formulario
durante el tiempo de diseño. Juntamente con Height define el tamaño del formulario.
Puede cambiarse durante el tiempo de ejecución.
WindowState
Manual del Alumno
27
Establece el estado en el que aparecerá el formulario cuando se activa y presenta en
pantalla. Admite tres opciones:
0 - Normal El formulario recupera la posición y tamaño que tenía en el
tiempo de diseño.
1 - Minimizado El formulario aparece minimizado, representado por su
icono.
2 - Maximizado El formulario aparece maximizado, ocupando toda la
pantalla.
PROCEDIMIENTOS
Activate Activación
Click Click
DblClick Doble clic
Deactivate Desactivación
DragDrop Arrastrar y soltar
DragOver Arrastrar por encima
GotFocus Obtener el foco
KeyDown Mantener pulsada una tecla
KeyPress Pulsar una tecla
KeyUp Soltar una tecla
LinkError Error de enlace
LinkExecute Ejecución de un enlace de datos
LinkOpen Romper el enlace
Load Cargar el formulario
LostFocus Perder el foco
MouseDown Pulsar una tecla del ratón
MouseMove Mover el ratón (Detecta la posición del ratón sobre el formulario)
MouseUp Soltar una tecla del ratón
Paint Pintar
QueryUnload Confirmación de descarga
Resize Cambio de tamaño
Unload Descargar el formulario
Un Formulario sirve, fundamentalmente, de contenedor de controles. Es la ventana de
Windows de nuestra aplicación. Una aplicación puede tener varios Formularios y dentro de
cada uno de ellos, los controles necesarios para cada paso o estado de la aplicación.
Un Formulario puede servir también como soporte de textos o dibujos.
CONTROLES
Una vez introducido un Formulario, se pueden colocar los objetos (controles) que forman
parte de la aplicación. Estos controles se irán viendo en próximos capítulos.
Los controles, lo mismo que el Formulario, tienen Propiedades y Procedimientos.
Las Propiedades definen las características del Control. Los Procedimientos definen la
forma de actuar (la forma de proceder) de un control frente a un evento.
Tanto las propiedades como los procedimientos deben ser definidos por el programador. Las
propiedades dejan un pequeño margen de actuación, los procedimientos son en su totalidad,
definidos por el programador. Estos procedimientos forman parte del programa. Podría
Manual del Alumno
28
incluso hacerse una aplicación que no tuviese mas código que el introducido en los
procedimientos.
Para colocar un control en un Formulario, basta con “tomarlo” de la caja de herramientas
existente en la parte izquierda de la pantalla de VB y llevarlo al Formulario. Si no existiese
el control deseado en la caja de herramientas, deberemos ir a “cogerlo” a Controles
personalizados que está en el menú desplegable Herramientas de la barra de Menú de VB.
Se elige el nuevo control, marcando la caja de opción a la izquierda de su nombre, y
haciendo click en ACEPTAR. Este control ya pasa a la caja de herramientas.
COMMAND BUTTON BOTON DE COMANDO
_______________________________________
El Command Button es un objeto que sirve para introducir datos a través de la pantalla. El
Botón de Comando tiene la siguiente forma:
El botón de comando puede usarse para la entrada de datos con el ratón, o para validar
cualquier operación. El tamaño puede cambiarse a voluntad, pero la forma siempre es
rectangular. En la figura anterior vemos dos botones de comando, uno de ellos (el
Command2) marcado con unos puntos en su contorno. Estos puntos nos permiten variar su
tamaño en tiempo de diseño. También puede cambiarse su tamaño y posición en tiempo de
ejecución.
PROPIEDADES
Name Nombre
Es el nombre que define a este objeto durante la ejecución del
programa. No se puede cambiar en tiempo de ejecución. El nombre
por defecto es Command1, Command2, etc. Estos nombres por
defecto deberían cambiarse por otros que nos indiquen algo respecto a
este control, aunque en este caso no es tan imprescindible como para
los formularios.
Caption Título
Es el texto que aparece en el botón. Puede cambiarse en tiempo de
ejecución. No tiene otra función dentro del programa.
NOTA.- No confundir Nombre (Name) con Título (Caption)
Appearance Apariencia
Determina la forma del botón. Admite los valores de Flat (Plano) y
3D. No se aprecia en gran medida la diferencia.
Backcolor Color de fondo
Es el color de un pequeño cuadrado que aparece rodeando el título,
NO el color del botón, que es invariable. Puede cambiarse en tiempo
Manual del Alumno
29
de ejecución.
Cancel
Establece un valor que indica si un botón de comando es el botón
Cancelar de un formulario. Es una propiedad booleana, y admite los
valores True o False. Puede utilizar la propiedad Cancel para dar al
usuario la opción de cancelar los cambios que no se han hecho
efectivos y devolver el formulario a su estado anterior. En un
formulario sólo puede haber un botón de comando con la propiedad
Cancel = True.
Default
Establece un valor que determina el control CommandButton que es
el botón de comando predeterminado de un formulario. Sólo un botón
de comando de un formulario puede ser el botón de comando
predeterminado. Cuando Default se define a True para un botón de
comando, se define automáticamente a False para el resto de los
botones de comando del formulario. Cuando la propiedad Default del
botón de comando está establecida a True y su formulario primario
está activo, el usuario puede elegir el botón de comando (invocando
su evento Click) presionando ENTRAR. Cualquier otro control que
tuviera el enfoque no recibe evento de teclado (KeyDown, KeyPress o
KeyUp) de la tecla ENTRAR a menos que el usuario haya movido el
enfoque a otro botón de comando del mismo formulario. En este caso,
al presionar ENTRAR se elige el botón de comando que tiene el
enfoque en lugar del botón de comando predeterminado.
DragIcon
Establece el icono que se presenta como puntero en una operación de
arrastrar y colocar.
DragMode
Establece un valor que determina si se usa el modo de arrastre manual
o automático en una operación de arrastrar y colocar. Los valores
posibles de número son:
0 Manual (Predeterminado)
1 Automático
Enabled Habilitado
Propiedad Booleana que habilita o deshabilita el botón. Cuando está
deshabilitado (Enabled = False), el botón no tiene efecto, y su
apariencia varía, presentando un tono pálido tanto en su cuerpo como
en su título. Puede variarse en tiempo de ejecución.
Font Fuente
Manual del Alumno
30
Es el tipo de letra para el título. Puede cambiarse en tiempo de
ejecución.
Height Altura
Establece la altura del botón. Normalmente esta propiedad no se
introduce numéricamente, sino que la toma automáticamente de las
dimensiones que se le den al botón en tiempo de diseño. Puede
cambiarse, cambiando el valor a esta propiedad, en tiempo de
ejecución.
HelpContextID
Establece un número de contexto asociado para este control. Este
número se aplica para determinar la ayuda interactiva.
Puede tener los siguientes valores:
0 = No se especifica número de contexto
>0 Un entero que especifica un contexto válido.
Index Indice
En el caso de que se tengan varios botones que realicen una función
similar (Las teclas numéricas de una calculadora, p.e.) puede hacerse
un array con estos botones de comando. Todos tendrán el mismo
nombre, y se diferencian por un índice. Esta propiedad Index toma el
número de ese índice.
Left
Posición de su parte izquierda. Indica la posición del botón,
concretamente de la parte izquierda del mismo. Normalmente esta
propiedad no se introduce numéricamente, sino que la toma
automáticamente de la posición que se le de al botón en tiempo de
diseño. Puede cambiarse, cambiando el valor a esta propiedad, en
tiempo de ejecución.
MouseIcon Icono para el puntero del ratón
Determina el icono que presenta al puntero del ratón cuando pasa por
encima del botón, cuando se especifica en la propiedad
MousePointer que el puntero del ratón es el definido por el usuario.
(Custom)
MousePointer Puntero ratón
Determina la forma del puntero del ratón cuando éste pasa por encima
del botón. Puede elegirse uno de los punteros preestablecidos (15) o
incluso uno diseñado especialmente. Para especificar que el puntero
es uno diseñado especialmente, hay que poner a esta propiedad el
valor 99 (Custom), y en este caso aparecerá el icono determinado por
la propiedad MouseIcon
TabIndex Nº de orden para tabulador
Manual del Alumno
31
Cuando disponemos de varios controles en un mismo formulario,
solamente uno de ellos tiene el foco. Esta expresión de tener el foco
significa que ese control está remarcado y en esa condición, si
pulsamos la tecla ENTER haría el mismo efecto que hacer click con
el ratón en ese control. Esto es necesario, ya que existen ordenadores
que no disponen de ratón (típico de algunos portátiles). En estos
casos, para elegir uno u otro control debemos pulsar repetidas veces la
tecla TABulador. El foco irá cambiando de uno a otro control (pueden
ser controles de distinto tipo) cada vez que pulsemos la tecla
TABulador. Esta propiedad TabIndex marca el orden que seguirá el
foco a través de cada control.
TabStop Sale del control de la tecla TAB
Propiedad booleana. Cuando esta propiedad está a False, el botón no
tomará el foco cuando se pulse la tecla del Tabulador. Sin embargo
sigue manteniendo el índice de la propiedad TabIndex descrita
anteriormente. Puede cambiarse en tiempo de ejecución. Esto nos
permite descartar algún botón de tomar el foco, cuando por facilidad
para el usuario, sea conveniente en determinados puntos del
programa.
Tag
Esta propiedad no la usa directamente Visual-Basic. Sirve para
asociar a este control alguna información adicional para fines
externos a la programación. Similar a la del formulario.
Top
Indica la coordenada de la parte superior del control. Puede variarse
durante el tiempo de ejecución. Esta propiedad, juntamente con Left
definen la esquina superior izquierda del botón de comando.
Normalmente esta propiedad no se introduce numéricamente, sino
que la toma automáticamente de la posición que se le den al botón en
tiempo de diseño. Puede cambiarse, cambiando el valor a esta
propiedad, en tiempo de ejecución.
Visible Visible
Propiedad Booleana. Si es true, el botón se ve, si es False el botón no
se ve. Puede cambiarse en tiempo de ejecución. De hecho, es un
recurso muy usado para dejar visibles en un formulario, solamente los
objetos (controles) necesarios.
WhatThisHelpID (Propiedad, Windows 95)
Devuelve o establece un número de contexto asociado a un objeto. Se
utiliza para dotar a las aplicaciones de Ayuda interactiva con el menú
emergente ¿Qué es esto? de la Ayuda de Windows 95.
Manual del Alumno
32
Width Ancho
Define el ancho del botón. Con Height determina la dimensión del
botón.
LABEL ETIQUETA
____________________
Una etiqueta es un control que nos permite presentar un texto. La etiqueta debe usarse en
aquellos casos en los que exista una información estática o dinámica que no deba ser
cambiada por el operador.
Puede adoptar estas formas: con borde tridimensional, borde plano o sin borde, y el texto
justificado a la izquierda, a la derecha o centrado.
Se ha incluido la trama para poder observar los límites de la etiqueta sin borde.
PROPIEDADES
Alignment Justificación
Establece si el texto se justifica a la izquierda, a la derecha, o se
centra sobre la etiqueta.
Appearance Apariencia Plana o tridimensional.
Autosize Tamaño
Propiedad booleana. Si se pone a True, el tamaño de la etiqueta se
ajusta al texto que contiene.
Backcolor Color de fondo
Es el color de fondo de la etiqueta. Puede cambiarse en tiempo de
ejecución.
BackStyle Tipo de fondo
Opaco o transparente. Cuando se selecciona transparente, se ve
solamente el texto de la etiqueta. Cuando se selecciona opaco, este
texto se vé sobre un fondo gris.
Manual del Alumno
33
BorderStyle Tipo de borde
Sin borde o con borde. En caso de haber elegido en la propiedad
Appearance el modo tridimensional, y eligiendo con borde en esta
propiedad, el aspecto adopta una forma como incrustada en el
formulario.
Caption Título
Es el texto de la etiqueta. Puede cambiarse en tiempo de ejecución, lo
que permite usar la etiqueta como dispositivo de presentación de
textos. No se puede cambiar por el procedimiento de arrastrar con el
ratón, por lo que es el control adecuado cuando se quiere presentar un
texto que no se pueda cambiar por el operador.
DataField DataSource
Establecen la base de datos y el campo donde está el texto Datos que
se llevará a la propiedad Caption. Estas propiedades permiten
presentar los datos de una Base de Datos mediante un procedimiento
muy sencillo, con la ayuda de un control Data (Se verá mas adelante)
DragIcon
Establece el icono que se presenta como puntero en una operación de
arrastrar y colocar.
DragMode
Establece un valor que determina si se usa el modo de arrastre manual
o automático en una operación de arrastrar y colocar. Los valores
posibles de número son:
0 Manual (Predeterminado)
1 Automático
Enabled Habilitado
Propiedad Booleana que habilita o deshabilita la etiqueta Cuando está
deshabilitado (Enabled = False), no tienen efecto los eventos que se
produzcan sobre ella, y su apariencia varía, presentando un tono
pálido tanto en su cuerpo como en su título. Puede variarse en tiempo
de ejecución.
Font Fuente
Es el tipo de letra para el título. Puede cambiarse en tiempo de
ejecución.
Manual del Alumno
34
ForeColor
Es el color de la letra de la etiqueta. Puede cambiarse en tiempo de
ejecución.
Height Altura
Establece la altura de la etiqueta. Normalmente esta propiedad no se
introduce numéricamente, sino que la toma automáticamente de las
dimensiones que se le den a la etiqueta en tiempo de diseño.
Index Indice
En el caso de que se tengan varios etiquetas que realicen una función
similar puede hacerse un array con etiquetas. Todas tendrán el mismo
nombre, y se diferencian por un índice. Esta propiedad Index toma el
número de ese índice.
Left Posición de su parte izquierda
Indica la posición de la etiqueta, concretamente de su parte izquierda.
Normalmente esta propiedad no se introduce numéricamente, sino
que la toma automáticamente de la posición que ocupaba en tiempo
de diseño. Puede cambiarse, cambiando el valor a esta propiedad, en
tiempo de ejecución.
LinkItem LinkMode LinkTimeout LinkTopic
Estas propiedades establecen la forma en que debe llevarse a cabo una
conexión DDE con otra aplicación. Se verán con mas detalle al
estudiar los enlaces DDE
MouseIcon Icono del puntero del ratón
MousePointer Puntero ratón
Para estas propiedades es aplicable todo lo dicho para las mismas en
el Botón de Comando
Name Nombre
Es el nombre de la etiqueta con el que se le conocerá a lo largo del
programa
TabIndex Nº de orden
Al igual que para los botones de comando, la etiqueta tiene propiedad
TabIndex. Sin embargo, una etiqueta NUNCA tomará el foco. Vea la
propiedad UseMneumonic mas adelante.
Tag
Esta propiedad no la usa directamente Visual-Basic. Sirve para
asociar a este control alguna información adicional para fines
externos a la programación.
Top
Manual del Alumno
35
Indica la coordenada de la parte superior del control. Puede variarse
durante el tiempo de ejecución. Esta propiedad, juntamente con Left
definen la esquina superior izquierda del botón de comando.
Normalmente esta propiedad no se introduce numéricamente, sino
que la toma automáticamente de la posición que se le den a la etiqueta
en tiempo de diseño. Puede cambiarse, cambiando el valor a esta
propiedad, en tiempo de ejecución.
UseMneumonic
Devuelve o establece un valor que indica si al incluir el signo (&) en
el texto de la propiedad Caption del control Label se define una tecla
de acceso. Es una propiedad Booleana.
Los valores que puede tomar son True o False.
True (Predeterminado) Los caracteres (&) que aparezcan en el texto
de la propiedad Caption definen al carácter siguiente como tecla de
acceso. El signo (&) no aparece en la interfaz del control Label.
False Los caracteres (&) que aparezcan en el texto de la propiedad
Caption aparecen como tales en la interfaz del control Label.
En tiempo de ejecución, al presionar ALT+ la tecla de acceso definida
en la propiedad Caption del control Label, el enfoque se desplaza al
control siguiente al control Label en el orden de tabulación.
Visible Visible
Propiedad Booleana. Si es true, la etiqueta se ve, si es False no se ve.
Puede cambiarse en tiempo de ejecución.
WhatThisHelpID (Propiedad, Windows 95)
Devuelve o establece un número de contexto asociado a un objeto. Se
utiliza para dotar a las aplicaciones de Ayuda interactiva con el menú
emergente ¿Qué es esto? de la Ayuda de Windows 95.
Width Ancho
Define el ancho de la etiqueta. Con Height determina la dimensión de
la misma.
WordWrap
Devuelve o establece un valor que indica si un control Label con el
valor True en su propiedad AutoSize se expande vertical u
horizontalmente para adaptarse al texto especificado en su propiedad
Caption. Es una propiedad Booleana.
Manual del Alumno
36
Esta propiedad puede cambiarse en tiempo de ejecución
True El control Label se expande o contrae horizontal y
verticalmente para adaptarse al texto y al tamaño de la fuente.
Contempla para la expansión horizontal la colocación de los espacios
del texto.
False (Predeterminado) El texto no se ajusta a la siguiente línea; el
control Label se expande o contrae horizontalmente para adaptarse a
la longitud del texto y verticalmente para adaptarse al tamaño de la
fuente y al número de líneas.
Nota Si se establece False en AutoSize, el texto siempre se ajustará a
la línea siguiente, independientemente del tamaño del control Label y
del valor de la propiedad WordWrap. Esto puede ocultar parte del
texto, ya que el control Label no se expande en ninguna dirección.
TEXT BOX CAJAS DE TEXTO
_____________________________
Las cajas de texto son los controles en los que Visual Basic presenta o introduce textos. Es
por tanto un control bidireccional. Normalmente se usan para introdución de textos, o para
la presentación de aquellos que el operador pueda cambiar. Para cambiar o escribir un texto
en una caja de texto, basta con conseguir que esa caja de texto tenga el foco y teclear el texto
en el teclado. Esto se puede lograr, bien haciendo click con el ratón en esa caja de texto,
bien con la tecla TAB, bien por programa.
La caja de texto no se debe usar nunca para presentar textos que el operador de la aplicación
no deba cambiar. Úsese para ello la etiqueta, control no bidireccional, que además tiene la
ventaja de ocupar menos memoria de programa.
Las cajas de texto pueden tener una o varias líneas, según esté la propiedad Multiline. La
capacidad máxima de una caja de textos es de 64 Kbytes.
La forma de una caja de texto es la siguiente, dependiendo de las propiedades BorderStyle y
Appearance:
Manual del Alumno
37
PROPIEDADES
Alignment Justificación
Establece si el texto se justifica a la izquierda, a la derecha, o se
centra sobre la etiqueta. Esta propiedad solamente tiene efecto cuando
la propiedad Multiline está a True, ignorándose en caso contrario. Es
decir, permite colocar el texto justificado a la derecha cuando ese
texto puede ser de varias líneas. Para una única línea, se justifica
siempre a la izquierda.
Esta propiedad no puede cambiarse en tiempo de ejecución, pero sí
puede leerse en que condición está.
Appearance Apariencia
Plana o tridimensional.
Backcolor Color de fondo
Es el color de fondo de la caja de texto. Puede cambiarse en tiempo
de ejecución.
BorderStyle Tipo de borde
Sin borde o con borde. En caso de haber elegido en la propiedad
Appearance el modo tridimensional, y eligiendo con borde en esta
propiedad, el aspecto adopta una forma como incrustada en el
formulario.
DataField
DataSource Fuente de Datos
Establecen la base de datos y el campo donde está el texto que se
llevará a la propiedad Text. Estas propiedades permiten presentar de
una forma muy sencilla datos de una Base de Datos. Se verán cuando
se estudie el control Data y el motor de bases de datos
DragIcon
Establece el icono que se presenta como puntero en una operación de
arrastrar y colocar.
Manual del Alumno
38
DragMode
Establece un valor que determina si se usa el modo de arrastre manual
o automático en una operación de arrastrar y colocar. Los valores
posibles de número son:
0 Manual (Predeterminado)
1 Automático
Enabled Habilitado
Propiedad Booleana que habilita o deshabilita la etiqueta Cuando está
deshabilitado (Enabled = False), no tienen efecto los eventos que se
produzcan sobre el TextBox. No se puede escribir el él ni pasarle el
foco, pero sí se le puede cambiar el texto mediante el programa.
Puede ser una buena alternativa para impedir que el usuario pueda
cambiar un determinado texto. Esta propiedad puede variarse en
tiempo de ejecución.
Font Fuente
Es el tipo de letra que se utilizará en el TextBox. Puede cambiarse en
tiempo de ejecución.
ForeColor Color de la letra
Determina el color de las letras del texto.
Height Altura
Establece la altura de la caja de texto. Normalmente esta propiedad
no se introduce numéricamente, sino que la toma automáticamente de
las dimensiones que se le den a la caja en tiempo de diseño.
HelpContextID
Establece un número de contexto asociado para este control. Este
número se aplica para determinar la ayuda interactiva.
Puede tener los siguientes valores:
0 = No se especifica número de contexto
>0 Un entero que especifica un contexto válido.
Index Indice
En el caso de que se tengan varias cajas de texto que realicen una
función similar puede hacerse un array con ellas. Todas tendrán el
mismo nombre, y se diferencian por un índice. Esta propiedad Index
toma el número de ese índice.
Left Posición de su parte izquierda.
Indica la posición de la caja de texto, concretamente de su parte
izquierda. Normalmente esta propiedad no se introduce
numéricamente, sino que la toma automáticamente de la posición que
ocupaba en tiempo de diseño. Puede cambiarse, cambiando el valor a
esta propiedad, en tiempo de ejecución.
LinkItem LinkMode LinkTimeout LinkTopic
Manual del Alumno
39
Estas propiedades establecen la forma en que debe llevarse a cabo una
conexión DDE con otra aplicación. Se verán con mas detalle al
estudiar los enlaces DDE
Locked
Establece si el texto se puede editar, es decir, cambiar. Cuando se
pone esta propiedad a True, el texto existente en la caja puede
resaltarse con el ratón, e incluso copiarlo al portapapeles, pero no
puede variarse tecleando un nuevo texto. Se puede cambiar por
programa, cambiando la propiedad Text.
Si está en False, puede cambiarse el texto mediante teclado.
MaxLenght
Indica, si se establece, la longitud máxima del texto.
MouseIcon Puntero del ratón personalizado
MousePointer Puntero ratón
Determina la forma del puntero del ratón cuando éste pasa por encima
de la caja de texto. Puede elegirse uno de los punteros preestablecidos
en esta propiedad, (15 en total) e incluso un puntero personalizado en
la propiedad MouseIcon. Para que aparezca este puntero
personalizado, MousePointer debe ponerse al valor 99. Lo típico
para esta propiedad es el I-Beam (barra vertical)
Name Nombre
Es el nombre de la caja de texto con el que se le conocerá a lo largo
del programa
PasswordChar
En ocasiones, es conveniente que no se pueda leer lo que se escribe en
la caja de texto, caso por ejemplo de la entrada de un password o
palabra de paso. Esta propiedad nos permite indicar un carácter que
sustituye a cualquier carácter que tenga la caja de texto. (Típicos el *
o ?). El texto que tenga en la propiedad Text no cambia por el hecho
de presentar en pantalla un carácter distinto. Esta propiedad puede
cambiarse en tiempo de ejecución. Para quitar el PasswordChar basta
con forzarlo al carácter nulo :
Text1.PasswordChar = “”
Esta propiedad se ignora cuando la propiedad Multiline está a True.
ScrollBars
Cuando la propiedad Multiline de la caja de texto está a True, se
Manual del Alumno
40
pueden colocar barras de desplazamiento del texto hacia arriba y
abajo, o hacia los lados. Esto nos permite tener una caja de texto de
tamaño reducido y poder leer en ella un texto mayor que la propia
caja. Esta propiedad puede tomar los siguiente valores :
0 - No salen barras
1 - Barras de desplazamiento horizontal
2 - Barras de desplazamiento vertical
3 - Ambas barras.
TabIndex Nº de orden para obtener el foco
Al igual que para los botones de comando, esta propiedad para
tabulador marca el orden en el que le llegará el foco al pulsar la tecla
TAB
Tag
Esta propiedad no la usa directamente Visual Basic. Sirve para
asociar a este control alguna información adicional para fines
externos a la programación.
Top Indica la coordenada de la parte superior del control. Puede variarse
durante el tiempo de ejecución. Esta propiedad, juntamente con Left
definen la esquina superior izquierda de la caja de texto.
Normalmente esta propiedad no se introduce numéricamente, sino
que la toma automáticamente de la posición que se le de en tiempo de
diseño. Puede cambiarse, cambiando el valor a esta propiedad, en
tiempo de ejecución.
Visible Visible
Propiedad Booleana. Si es true, la caja de texto se ve, si es False no se
ve. Puede cambiarse en tiempo de ejecución.
WhatThisHelpID (Propiedad, Windows 95)
Devuelve o establece un número de contexto asociado a un objeto. Se
utiliza para dotar a las aplicaciones de Ayuda interactiva con el menú
emergente ¿Qué es esto? de la Ayuda de Windows 95.
Width Ancho
Define el ancho de la caja de texto. Con Height determina la
dimensión de la misma.
Manual del Alumno
41
Función InputBox.- Es un cuadro de ingreso de datos a una variable u objeto, muestra un
mensaje en un cuadro de diálogo y espera que el usuario escriba un texto o un dato,
devuelve un tipo String o Variant con el contenido del cuadro de texto.
Formato:
Nombre_Variable=InputBox(Mensaje [, Título][, Valor_por_defecto][, Xpos][, Ypos])
La sintaxis de la función InputBox consta de estos argumentos con nombre:
Mensaje.- Expresión de cadena que se muestra como mensaje en el cuadro de diálogo. La
longitud máxima del mensaje es de aproximadamente 1024 caracteres, según el ancho de los
caracteres utilizados. Si mensaje consta de más de una línea, puede separarlos utilizando un
carácter de retorno de carro (Chr(13)), un carácter de avance de línea (Chr(10)) o una
combinación de los caracteres de retorno de carro-avance de línea (Chr(13) y Chr(10)) entre
cada línea y la siguiente.
Título.- Expresión de cadena que se muestra en la barra de título del cuadro de diálogo. Si
omite Título, en la barra de título se coloca el nombre de la aplicación.
Valor_por_defecto.- Expresión de cadena o dato que se muestra en el cuadro de texto como
valor predeterminado del cuadro InputBox. Si se omite se muestra el cuadro de texto vacío.
Xpos.- Expresión numérica que especifica, en twips, la distancia en sentido horizontal entre
el borde izquierdo del cuadro de diálogo y el borde izquierdo de la pantalla. Si se omite
Xpos, el cuadro de diálogo se centra horizontalmente.
Manual del Alumno
42
Ypos.- Expresión numérica que especifica, en twips, la distancia en sentido vertical entre el
borde superior del cuadro de diálogo y el borde superior de la pantalla. Si se omite Ypos, el
cuadro de diálogo se coloca a aproximadamente un tercio de la altura de la pantalla, desde el
borde superior de la misma.
Ejemplo de InputBox para el ingreso de una edad a una variable.
Dim vEdad as Integer
vEdad=InputBox(“Ingrese la edad”, ”Mensaje de Ingreso”,18)
Cuadro InputBox
Función MsgBox.- Permite mostrar un mensaje en un cuadro de diálogo y espera a que el
usuario haga clic en un botón del cuadro y devuelve un tipo Integer correspondiente al botón
elegido o seleccionado por el usuario.
Formato:
[Nombre_Variable =] MsgBox(Mensaje[, Valor_Botones][, Título])
La sintaxis de la función MsgBox consta de estos argumentos con nombre:
Mensaje.- Expresión de cadena que representa al texto a mostrar en el cuadro de diálogo. La
longitud máxima de mensaje es de aproximadamente 1024 caracteres, según el ancho de los
caracteres utilizados. Si Mensaje consta de más de una línea, puede separarlos utilizando un
carácter de retorno de carro (Chr(13)) o un carácter de avance de línea (Chr(10)), o una
combinación de caracteres de retorno de carro - avance de línea (Chr(13) y Chr(10)) entre
cada línea y la siguiente.
Valor_Botones.- Expresión numérica que corresponde a la suma de los valores que
especifican el número y el tipo de los botones que se pretenden mostrar, el estilo de icono
que se va a utilizar, la identidad del botón predeterminado y la modalidad del cuadro de
mensaje. Si se omite este argumento, el valor predeterminado para Valor es 0.
Valores para los botones a mostrar:
Constante Valor Descripción
vbOKOnly 0 Muestra solamente el botón Aceptar.
vbOKCancel 1 Muestra los botones Aceptar y Cancelar.
vbAbortRetryIgnore 2 Muestra los botones Anular, Reintentar e Ignorar.
vbYesNoCancel 3 Muestra los botones Sí, No y Cancelar.
Título
Mensaje
Valor_por_defecto
Manual del Alumno
43
vbYesNo 4 Muestra los botones Sí y No.
vbRetryCancel 5 Muestra los botones Reintentar y Cancelar.
Valores para los iconos a mostrar:
Constante Valor Descripción
vbCritical 16 Muestra el icono de mensaje crítico.
vbQuestion 32 Muestra el icono de pregunta de Advertencia.
vbExclamation 48 Muestra el icono de mensaje de Exclamación.
vbInformation 64 Muestra el icono de mensaje de Información.
Valores de los botones por defecto:
Constante Valor Descripción
vbDefaultButton1 0 El primer botón es el predeterminado.
vbDefaultButton2 256 El segundo botón es el predeterminado.
vbDefaultButton3 512 El tercer botón es el predeterminado.
Valores del modelo de cuadro a usar:
Constante Valor Descripción
vbApplicationModal 0 Aplicación modal; el usuario debe responder al cuadro de
mensaje antes de poder seguir trabajando en la aplicación
actual.
vbSystemModal 4096 Sistema modal; se suspenden todas las aplicaciones hasta
que el usuario responda al cuadro de mensaje.
Valores devueltos por la Función MsgBox:
Constante Valor Descripción
vbOK 1 Sí presiono el botón Aceptar
vbCancel 2 Sí presiono el botón Cancelar
vbAbort 3 Sí presiono el botón Anular
vbRetry 4 Sí presiono el botón Reintentar
vbIgnore 5 Sí presiono el botón Ignorar
vbYes 6 Sí presiono el botón Sí
vbNo 7 Sí presiono el botón No
Título.- Expresión de cadena que se muestra en la barra de título del cuadro de diálogo. Si
se omite Título, en la barra de título se coloca el nombre de la aplicación.
Procedimiento MsgBox.- Funciona en forma idéntica a la función MsgBox y con sus
mismos argumentos pero se diferencia de está en que no devuelve un valor sino sólo
muestra un cuadro de mensaje.
Formato:
Manual del Alumno
44
MsgBox Mensaje[, Valor_Botones][, Título]
Ejemplo de MsgBox, Mostrar Grabar Archivo con los botones Si y No y con el icono de
interrogación.
Dim Rpta as Integer
Rpta = MsgBox(“Grabar Archivo”, 4 + 32 + 0, “Mensaje a Usuario”)
Cuadro MsgBox
CARACTERISTICAS DEL LENGUAJE VISUAL BASIC
TTiippooss ddee DDaattooss uuttiilliizzaaddooss eenn VViissuuaall BBaassiicc..
Tipos de datos:
Es la característica de una variable que determina que tipos de datos puede tener. Los tipos
de datos incluyen Byte, Boolean, Integer, Long, Currency, Single, Double, Date, String,
Object, Varian (predeterminado) y tipos definidos por el usuario, asi como tipos
específicos de objetos.
Tipos de datos y representación corta en Visual Basic:
Tipo de dato Representación corta
Integer %
Long (entero largo) &
Single
Double #
Currency @
String $
Valor_Botones Mensaje
Título
Manual del Alumno
45
Variables
Vienen a ser zonas de memoria que almacenan un dato, que puede ser modificado durante la
ejecución de la aplicación o programa. Las variables tienen un nombre (la palabra que se
utiliza para referirse al valor que contiene la variable) y un tipo de dato (que determina la
clase de datos que la variable puede almacenar). Puede considerar una variable como un
marcador de posición en memoria de un valor desconocido.
El nombre de una variable:
Debe comenzar con una letra.
No puede incluir un punto o un carácter de declaración de tipo.
No debe exceder de 255 caracteres.
Debe ser única en el mismo ámbito, que es el intervalo desde el que se puede hacer
referencia a la variable: un procedimiento, formulario, etc.
Definición de Variables
Las variables pueden ser definidas con las siguientes instrucciones que indicaran el tipo y
ámbito de la variable.
Dim.- Permite definir variables de tipo Local al procedimiento donde fueron declaradas, las
variables que se declaran en un procedimiento mediante la instrucción Dim sólo existen
mientras se ejecuta el procedimiento. Cuando termina el procedimiento, desaparece el valor
de la variable. Es decir, no puede tener acceso a una variable de un procedimiento desde otro
procedimiento. Estas características le permiten utilizar los mismos nombres de variables en
distintos procedimientos sin preocuparse por posibles conflictos o modificaciones
accidentales.
Formato:
Dim Nombre_Variable [As Tipo_de_Dato]
Static.- Permite declarar una variable local de tipo estática, estas variables preservan su
valor aunque termine el procedimiento donde fueron declaradas.
Formato:
Static Nombre_Variable [As Tipo_de_Dato]
Public.- Permite declarar variables de tipo Público o Globales que pueden ser usadas o
llamadas en forma global para toda la Aplicación o Proyecto si son declaradas en un Módulo
o para todo el formulario si son declaradas en la sección General – Declarations del
formulario.
Formato:
Public Nombre_Variable [As Tipo_de_Dato]
La cláusula opcional As Tipo_de_Dato de las instrucciones de declaración de Variables (Dim, Static y Public), le permite definir el tipo de dato o de objeto de la variable que va a declarar. Los tipos de datos definen el tipo de información que almacena la variable.
Las variables pueden no ser declaradas explícitamente y ser utilizadas directamente en el
programa con una sentencia o instrucción de asignación de datos.
Manual del Alumno
46
Para declarar variables de forma explícita de tal manera que siempre el programa solicite
que se defina o declare una variable para utilizarle; debe Incluir esta instrucción en la
sección Declaraciones del módulo de clase, de formulario o estándar:
Option Explicit
También puede hacer clic en el menú Herramientas, elija Opciones, haga clic en la ficha
Editor y active la opción Requerir declaración de variables. Esto inserta
automáticamente la instrucción Option Explicit en los módulos nuevos, pero no en los ya
creados, por lo que tendrá que agregar manualmente Option Explicit a los módulos
existentes en el proyecto.
Descripción del alcance de las variables
El alcance de una variable define qué partes del código son conscientes de su existencia.
Cuando declara una variable en un procedimiento, sólo el código de dicho procedimiento
puede tener acceso o modificar el valor de la variable; tiene un alcance que es local al
procedimiento. A veces, sin embargo, se necesita utilizar una variable con un alcance más
general, como aquella cuyo valor está disponible para todos los procedimientos del mismo
módulo o incluso para todos los procedimientos de toda la aplicación. Visual Basic le
permite especificar el alcance de una variable cuando la declara.
Establecimiento del alcance de las variables
Dependiendo de cómo se declara, una variable tiene como alcance un procedimiento (local)
o un módulo.
Alcance Privado Público
Nivel de
procedimiento
Las variables son privadas
del procedimiento en el
que aparecen.
No es aplicable. No
puede declarar variables
públicas dentro de un
procedimiento.
Nivel de
Módulo
Las variables son privadas
del módulo en el que
aparecen.
Las variables están
disponibles para todos
los módulos.
Variables utilizadas en un procedimiento
De forma predeterminada una variable a nivel de módulo está disponible para todos los
procedimientos del módulo, pero no para el código de otros módulos. Cree variables a nivel
de módulo declarándolas con la palabra clave Private en la sección Declaraciones al
principio del módulo. A nivel de módulo, no hay diferencia entre Private y Dim, pero es
preferible Private porque contrasta con Public y hace que el código sea más fácil de
comprender.
Constantes Una constante es un nombre significativo que sustituye a un número o una cadena que no
varía. Aunque una constante recuerda ligeramente a una variable, no puede modificar una
constante o asignarle un valor nuevo como ocurre con una variable. A menudo verá que el
código contiene valores constantes que reaparecen una y otra vez. O puede que el código
dependa de ciertos números que resulten difíciles de recordar (números que, por sí mismos,
no tienen un significado obvio).
En estos casos, puede mejorar mucho la legibilidad del código y facilitar su mantenimiento
si utiliza constantes. Hay dos orígenes para las constantes:
Manual del Alumno
47
Constantes intrínsecas o definidas por el sistema proporcionadas por aplicaciones y
controles. Las constantes de Visual Basic se muestran en Visual Basic (VB), Visual Basic
para aplicaciones (VBA) y las bibliotecas de Objeto de acceso de datos (DAO) en el
Examinador de objetos. Otras aplicaciones que proporcionan bibliotecas de objetos, como
Microsoft Excel y Microsoft Project, también proporcionan una lista de constantes que
puede utilizar con sus objetos, métodos y propiedades. También se definen constantes en la
biblioteca de objetos de cada control ActiveX.
Las constantes simbólicas o definidas por el usuario se declaran mediante la instrucción
[Public|Private] Const nombre_constante[As tipo_de_dato] = expresión.
El argumento nombre_constante es un nombre simbólico válido (las reglas son las mismas
que para crear nombres de variable) y expresión está compuesta por constantes y operadores
de cadena o numéricos; sin embargo, no puede utilizar llamadas a funciones en expresión.
En Visual Basic, los nombres de constantes tienen un formato que combina mayúsculas y
minúsculas, con un prefijo que indica la biblioteca de objetos que define la constante. Las
constantes de las bibliotecas de objetos de Visual Basic y Visual Basic para aplicaciones
tienen el prefijo "vb"; por ejemplo, vbTileHorizontal. Las constantes de la biblioteca de
objetos de acceso a datos tienen el prefijo "db"; por ejemplo, dbRelationUnique.
Una instrucción Const tiene igual alcance que una declaración de variable y se le aplican las
mismas reglas:
Para crear una constante local a un procedimiento, declárela dentro del procedimiento.
Para crear una constante disponible para todos los procedimientos de un módulo, pero no
para el código que está fuera del módulo, declárela en la sección Declaraciones del
módulo.
Para crear una constante disponible en toda la aplicación, declare la constante en la sección
Declaraciones de un módulo estándar y coloque delante de Const la palabra clave Public.
No se pueden declarar las constantes públicas en un módulo de clase o de formulario.
Operadores:
La tabla que se muestra a continuación presenta el conjunto de operadores que soporta
Visual Basic colocados de mayor a menor prioridad (enre ellos y entre categorías). Los
operadores que aparecen sobre una misma línea tienen igual prioridad. Las operaciones
entre paréntesis se evalúan primero, ejecutándose primero los paréntesis más internos.
TIPO OPERACION OPERADOR
Aritmético Exponenciación
Cambio de signo
Multiplicación y división
División entera
Resto de una división entera
Suma y resta
ˆ
-
*, /
\
Mod
+,-
Manual del Alumno
48
Concatenación Concatenar o enlazar &
Relacional Igual, distinto, menor, mayor =,<>,<,>,<=,=>
Otros Comparar dos expresiones de caracteres
Comparar dos referencias a objetos LIKE
IS
Lógico Negación
Y (conjunción)
Or (inclusión)
Or (exclusión)
Equivalencia (Opuesto a Xor)
Implicación (falso si el primer operando es
verdadero y segundo operando es falso)
Not
And
Or
Xor
Eqv
Imp
UTILIZACION DE MULTIPLES FORMULARIOS
Para utilizar varios formularios en nuestra aplicación tendremos que añadir cada uno de
ellos mediante la opción de menú Insert / Form o pulsando sobre el botón .
Método Show
Para llamar a un formulario desde el código utilizaremos el método Show. Si el formulario 2
tiene en la propiedad Name form2, para llamarlo desde otro formulario pondremos:
Form2.Show
Si no ponemos ningún argumento se asume que el formulario aparece en modo no modal, es
decir, se permitirá que se active cualquier otro formulario sin cerrar el formulario 2. La otra
modalidad que existe es modal, lo que significa que no se permite el enfoque hacia ningún
otro formulario hasta que no se cierre el actual. Este último modo puede servir para cuadros
de diálogo que soliciten ciertos parámetros para que la aplicación siga funcionando: una
contraseña.
Los argumentos del método Show son:
0 vbModeless No modal
1 vbModal Modal
Ejemplo:
Manual del Alumno
49
Form2.Show vbModal
COMUNICACIÓN ENTRE FORMULARIOS
Desde un formulario se puede tener acceso a los controles y propiedades de otro formulario.
En lugar de realizar el paso de parámetros cuando se llama a otro formulario que queremos
que aparezca con unos determinados valores iniciales, lo que se hace es acceder a los
controles del otro formulario y después mostrarlo mediante el método Show.
Para acceder a los controles de otro formulario se sigue la siguiente sintaxis:
Formulario!Control.Propiedad = valor
Se debe colocar una admiración "!" entre el formulario y el control y un punto entre el
control y la propiedad
Ejemplo:
Form2!Label1.Caption = "Número de Clientes"
Al acceder a las propiedades de otro formulario automáticamente se carga éste en memoria,
si no lo estaba ya antes. Una vez que hayamos modificado sus propiedades los
visualizaremos con el método Show.
No se puede acceder a las variables declaradas en otro formulario, de modo que si queremos
trabajar con variables generales, las cuales sean accesibles desde cualquier formulario de la
aplicación, tendremos que declararlas como Públicas desde un módulo de código.
Para insertar un módulo en nuestro proyecto de Visual Basic tendremos que marcar en
Insert / Module. Nos aparecerá una ventana en la que únicamente podremos colocar las
variables y procedimientos o funciones que queramos que sean públicas para toda la
aplicación.
En el siguiente ejemplo se declara la variable Gen_var de tipo Integer que será accesible
desde cualquier formulario de la aplicación:
Manual del Alumno
50
Ahora la ventana de proyecto tiene una línea más con un icono distinto indicando que se
trata de un módulo de código:
ESTRUCTURAS DE CONTROL CONDICIONAL
Las estructuras de Control condicional se utilizan para controlar el flujo del programa, ya
que un programa incapaz de alterar su flujo en respuesta a condiciones cambiantes, ya sean
internas o externas, sería ineficaz. Para realizar esto tenemos las siguientes instrucciones:
Estructuras de Decisión
If_End if.- Permite evaluar una condición, si la condición es verdadera ejecuta las
instrucciones debajo del If sino ejecuta las instrucciones debajo de la cláusula Else.
Formato:
If <condición> Then
Instrucciones a ejecutar si condición es verdadera
Else
Instrucciones a ejecutar si condición es falsa
End If
If <condición> Then Instrucción
La instrucción If puede evaluar varias condiciones a la vez empleando el siguiente formato:
If <condición 1> Then
Instrucciones 1, si condición 1 es verdadera
ElseIf <condición 2> Then
Manual del Alumno
51
Instrucciones 2, si condición 2 es verdadera
ElseIf <condición 3> Then
Instrucciones 3, si condición 3 es verdadera
........................
........................
ElseIf <condición n> Then
Instrucciones n, si condición n es verdadera
Else
Instrucciones m, si ninguna de las condiciones anteriores es verdadera
End If
Select Case
Es una estructura que evalúa una determinada expresión que puede tener múltiples
alternativas de las cuales se podrá realizar una de ellas, en el caso que sea verdadera sino se
evaluaran las instrucciones de la parte falsa debajo de la cláusula Case Else.
Formato:
Select Case <Expresion>
Case valor1 {Sí valor1 es verdad}
Instrucciones 1
Case valor2 {Sí valor2 es verdad}
Instrucciones 2
Case valor3 {Sí valor3 es verdad}
Instrucciones 3
.
.
.
Case valorN
Instrucciones n {Sí valorN es verdad}
Case Else
Instrucciones m {Sino son verdaderos los valores anteriores}
Manual del Alumno
52
End Select
FRAME RECUADRO
Se obtiene directamente de la caja de herramientas
Tiene la siguiente forma :
Un control Frame proporciona un agrupamiento identificable para controles. También puede
utilizar un Frame para subdividir un formulario funcionalmente por ejemplo, para separar
grupos de controles OptionButton.
Para agrupar controles, en primer lugar trace el control Frame y, a continuación, meta los
controles dentro de Frame. De este modo podrá mover al mismo tiempo el Frame y los
controles que contiene. Si traza un control fuera del Frame y, a continuación, intenta
moverlo dentro de éste, el control se colocará sobre el Frame, pero no pertenecerá a el. Es
decir, si es un OptionButton este se comportará como si estuviese fuera del Frame, aunque
físicamente esté dentro de el.
Cuando un control Frame tiene dentro otros controles, y hacemos invisible al Frame,
mediante su propiedad Visible = False, los controles interiores al Frame quedan también
invisibles.
Manual del Alumno
53
PROPIEDADES
Las señaladas con (*) no presentan novedades respecto a las ya
comentadas para los controles precedentes.
Caption Es el título que aparece en el borde del Frame.
ClipControls
Si esta propiedad está a True, los métodos gráficos en eventos Paint
vuelven a dibujar el objeto entero. Antes del evento Paint se crea una
zona de recorte alrededor de los controles no gráficos del formulario.
Si esta propiedad está a False dibujarán solamente las áreas
últimamente expuestas. En tiempo de ejecución, esta propiedad es de
sólo lectura.
Enabled
Cuando esta propiedad está a False, tanto los procedimientos
asociados al propio control Frame como todos los controles dentro del
Frame estarán inhabilitados. Si esta propiedad está a True, todos ellos
están habilitados.
Font
En esta propiedad, el tipo de letra afecta solamente al título del
Frame, no a los controles internos a el.
ForeColor
Color de las letras del título del Frame.
Visible
Cuando un Frame está con la propiedad Visible = False, tanto el
propio Frame como todos los controles interiores a el serán invisibles.
CHECK Y OPTION BUTTON(BOTONES DE ELECCION Y OPCION)
Se obtienen directamente de la caja de herramientas.
El control CheckBox, o casilla de verificación, permite elegir una opción
(activada/desactivada, True/False) que el usuario puede establecer o anular haciendo click.
Una X en una casilla de verificación indica que está seleccionada, activada, o con valor
True. Cada casilla de verificación es independiente de las demás que puedan existir en el
Manual del Alumno
54
formulario, pudiendo tomar cada una de ellas el valor True o False, a voluntad del operador.
Un control OptionButton muestra una opción que se puede activar o desactivar, pero con
dependencia del estado de otros controles OptionButton que existan en el formulario.
Generalmente, los controles OptionButton se utilizan en un grupo de opciones para mostrar
opciones de las cuales el usuario sólo puede seleccionar una. Los controles OptionButton
se agrupan dibujándolos dentro de un contenedor como un control Frame, un control
PictureBox o un formulario. Para agrupar controles OptionButton en un Frame o
PictureBox, dibuje en primer lugar el Frame o PictureBox y, a continuación, dibuje dentro
los controles OptionButton. Todos los controles OptionButton que están dentro del mismo
contenedor actúan como un solo grupo, e independientes de los controles OptionButton de
otros grupos distintos.
Aunque puede parecer que los controles OptionButton y CheckBox funcionan de forma
similar, hay una diferencia importante: Cuando un usuario selecciona un OptionButton, los
otros controles del mismo grupo OptionButton dejan de estas disponibles automáticamente.
Por contraste, se puede seleccionar cualquier número de controles CheckBox.
En el ejemplo de la figura, existen tres grupos de OptionButton, uno en un PictureBox,
que actúa, al tiempo que como cuadro de imagen, como contenedor de controles
OptionButton. Otro grupo está en el interior de un control Frame, y el otro grupo está en el
formulario. Los tres grupos son independientes entre sí, pero interiormente al grupo
solamente puede seleccionarse uno de los OptionButton que lo componen.
En el formulario también existen tres CheckBox, que como puede verse, se pueden
seleccionar los que se desee, sin ningún tipo de exclusión entre ellos.
PROPIEDADES
Las señaladas con (*) son comunes a ambos controles y no presentan
novedades respecto a las ya comentadas para los controles
precedentes.
Alignment Común a ambos controles.
Manual del Alumno
55
Admite los siguientes valores :
0 - Left Justify
1 - Right Justify
Cuando se elige el valor 0, justificado a la izquierda, el título del control aparece a la
derecha del botón, pegado a la figura del botón. Cuando se elige el valor 1, justificado a la
derecha, el título (Caption) aparece a la izquierda del botón, comenzando en la parte
izquierda del cuerpo total del control, es decir, no tiene porqué aparecer con su parte derecha
pegado al botón, caso que el cuerpo total del control se haya hecho mas largo que la palabra
del título.
DataField DataSource Propiedades del CheckBox solamente.
Establecen la base de datos y el campo donde están los datos (True /
False) que se llevarán a la propiedad Value . Al igual que en los
controles Label y TextBox esta propiedad nos permite visualizar
datos de una base de datos de una forma muy sencilla. En este caso,
el CheckBox solamente permite presentar (logicamente) datos de tipo
Booleano.
Height Común a ambos controles.
La altura del control solamente afecta a la colocación del Titulo
(Puede ponerse un título largo en varias líneas), no al tamaño del
botón, que es invariable.
Value Común a ambos controles
El valor de esta propiedad indica si el control está seleccionado
(Value = 1) o no seleccionado (Value = 0 ó Value = False). Esta
propiedad puede cambiarse en tiempo de ejecución. Mediante esta
propiedad, podemos tanto forzar el valor como leerlo.
Atención. Presenta una diferencia entre uno y otro control respecto a
la forma de expresarse respecto a su valor cuando está seleccionado.
Para forzar que el control NO esté seleccionado, o para leer el Value
cuando no está seleccionado, podemos utilizar tanto Value = 0 como
Value = False. Sin embargo, cuando lo que se quiere es poner la
propiedad a True hay una diferencia entre ambos controles.
Para el OptionButton podemos utilizar indistintamente las siguiente
formas :
Option1.Value = True Option1.Value = 1
Con cualquiera de ellas seleccionaremos ese control por programa.
Para el CheckBox solamente se podrá usar para este propósito la
instrucción :
Check1.value = 1
El poner como Value el valor True nos dará en este control un error.
Manual del Alumno
56
Para la lectura del Value, existe una diferencia entre el valor devuelto
por el CheckBox y el devuelto por el OptionButton.
Para leer el dato existente en un CheckBox es necesario utilizar la
forma :
variable = Check1.Value donde variable tomará el valor 1 (no True)
Para el control OptionButton emplearemos una instrucción igual :
variable = Option1.Value donde variable tomará el valor True (no
1)
FUNCIONES INCORPORADAS
Funciones Intrinsecas de VB.- Viene a ser cómo operadores especiales que permiten
realizar una determinada tarea y siempre devuelve un valor.
Funciones de Conversion
CSTR(Exp).- Convierte una expresion en dato de tipo string
VAL(Exp).- Convierte una expresion de cadena en un dato de tipo numerico(Variant).
Cdate(Exp).- Convierte una expresion que representa a una fecha en un dato de tipo
“DATE”
CINT(Exp).- Convierte una expresion en un dato de tipo entero
CSNG(Exp).- Convierte una expresion en un dato de tipo Single.
CLNG(Exp).- Convierte una expresion en un dato de tipo Long
CDBL(Exp).- Convierte una expresion en un dato de tipo Double
CCUR(Exp).- Convierte una expresion en un dato de tipo currency
CBYTE(Exp).- Convierte una expresion enb un dato de tipo Byte
CHR(Exp).- Retorna un carácter del codigo ASCII
Funcion de Cadena o String
Space (Nª Espacios).- Permite crear una cantidad de espacios blanco.
Left(Exp,Nª).- Permite extraer “n” caracteres de la izquierad de una cadena.
Right(Exp,Nª).- Permite extraer “n ” caracteres de la derecha de una cadena.
Mid(Expc,Pos,Nª).- Permite extraer los “n “ caracteres de una cadena a partir de una
posicion determinada.
Ucase(Expc).- Convierte a mayusculas una cadena.
Lcase(Expc).- Convierte a minusculas una cadena
Len(Expc).- Obtiene la longitud de una cadena.
Trim(Expc).- Elimina los espacios en blanco de la derecha e izquierda de una cadena.
Funciones de Fecha Hora
Year(Fecha).- Obtiene el año de una fecha determinada.
Month(fecha).- Obtiene el mes de una determinada Fecha
Dag(Fecha).- Obtiene el dia de una fecha determinada.
Date.- Retorna la fecha actual
Manual del Alumno
57
Date value (Exp).- Retorna el avlor numerico de una expresion que representa a uan fecha
para usarlo en calculos de fecha.
Time.- Retorna la hora actual
Time Value(Exp).- Retorna el valor numerico de una expresion que representa a una hora
para usrala en calculos de horas.
Hour(Tiempo).- Retorna las horas transcurridas entre dos tiempos.
Minute(Tiempo).- Retorna los minutis transcurridos entre dos tiempos
Second(Tiempo).- Retorna los segundos transcurridos entre dos tiempos.
Weekday(Fecha) Retorna el dia de la semana cómo un numero.Retorna el dia de la semana
cómo un numero.
ESTRUCTURAS DE BUCLES O REPETITIVAS
Estructuras Repetitivas. Son empleadas en procesos repetitivos basados en rangos o
condiciones.
Sentencia For – Next.- Permite repetir un conjunto de instrucciones desde un valor inicial
hasta un valor final.
Formato
FOR Contador = Valor Inicial To Valor Final [STEP incremento]
{ Instrucciones X } „Instrucciones a repetir
[EXIT FOR] „Sale del proceso repetitivo
{ Instrucciones Y } „ Instrucciones a repetir si no se ejecuta EXIT FOR
NEXT [Contador]
Sentencia While – Wend.- Permite repetir un conjunto de instrucciones mientras una
condición sea verdadera.
Formato:
While <condición>
{ Instrucciones a repetir mientras condición sea verdadera }
Wend
Sentencias Do While – Loop o Do Until – Loop.- Permiten ejecutar un conjunto de
instrucciones mientras que una condición sea verdadera, pero a su vez permiten salir del
proceso repetitivo usando la cláusula Exit Do.
Formato:
Do While | Until <condición>
{ Instrucciones A, se ejecutan mientras condición sea verdadera}
[Exit Do] Sale del proceso repetitivo
{ Instrucciones B, se ejecutan si el Exit Do no se ejecuto}
Loop
Manual del Alumno
58
Sentencias Do – Loop While o Do – Loop Until.- Permiten ejecutar un conjunto de
instrucciones hasta que una condición sea verdadera o mientras la condición sea falsa.
Formato
Do
{ Instrucciones A, se ejecutan mientras condición es falsa
[Exit Do] Sale del proceso repetitivo
{ Instrucciones B, se ejecutan si el Exit Do no se ejecuto }
Loop While | Until <condición>
MANEJO DE LISTAS
LIST BOX Y COMBO BOX
Se obtienen directamente de la caja de herramientas :
Un control ListBox muestra una lista de elementos en la que el usuario puede seleccionar
uno o más. Si el número de elementos supera el número que puede mostrarse, se agregará
automáticamente una barra de desplazamiento al control ListBox.
Un control ComboBox combina las características de un control TextBox y un control
ListBox. Los usuarios pueden introducir información en la parte del cuadro de texto y
seleccionar un elemento en la parte de cuadro de lista del control. En resumen, un
ComboBox es la combinación de un ListBox, que se comporta como si de un ListBox se
tratase, y de un TextBox, con comportamiento análogo a un TextBox sencillo, con la
particularidad aquí de que el texto se le puede introducir por teclado, o elegir uno de los que
figuran en la parte ListBox del Combo.
Estos controles toman la siguiente forma :
Puede verse en la figura un ejemplo de presentación de un ListBox (izquierda), un
ComboBox con la lista desplegada (Centro) y un ComboBox con la lista sin desplegar
(Combo2 a la derecha).
Manual del Alumno
59
La lista tiene varios elementos. Cada línea de esta lísta es un elemento de la lista. Como el
número de elementos de la lista tiene mas elementos de los que le podían caber, generó
automáticamente la barra de desplazamiento vertical.
El ComboBox está normalmente sin desplegar. Se despliega cuando se hace click con el
ratón en la flecha que tiene en su parte derecha (véase fig. Anterior). Al desplegarse,
muestra la lista con todos sus elementos. Haciendo click con el ratón en cualquiera de sus
elementos, el elemento elegido pasa a la parte TextBox del Combo y la lista vuelve a
replegar.
El ListBox (y por tanto el ComboBox) tiene unas propiedades y métodos particulares que
solamente se pueden aplicar durante el tiempo de ejecución :
ListCount - Indica el número de elementos que tiene la lista
ListIndex - Indica el número de orden del elemento seleccionado dentro de la lista.
AddItem - Añade un elemento a la lista.
RemoveItem - Elimina un elemento de la lista.
Text - Obtiene el elemento seleccionado.
List (n) - Obtiene el elemento cuyo orden dentro de la lista es n.
ListCount valdrá 0 si la lista no tiene ningún elemento, y n si tiene n elementos.
Para seleccionar un elemento de la lista, basta con hacer click con el ratón sobre él. Ese
elemento se resaltará con fondo en azul. Una vez seleccionado un elemento, la propiedad
ListIndex tomará el valor del número de orden que ocupa ese elemento en la lista,
comenzando por el 0 para el elemento que ocupa el primer lugar. Si no se selecciona ningún
elemento, el valor de la propiedad ListIndex será -1. El primer elemento de la lista es
ListIndex 0, y el valor de la propiedad ListCount siempre es uno más que el valor mayor
de ListIndex.
En el ComboBox la propiedad Text contiene el texto que contenga la parte TextBox del
Combo, bien haya sido introducida desde teclado o mediante la recuperación de un elemento
la parte ListBox del mismo.
Ejemplos
Supongamos que tenemos un ListBox llamado List1, y un ComboBox llamado Combo1. Se
enumeran distintas formas de obtener información de ellos.
Variable = List1.Listcount
Variable contendrá un número con el número total de elementos de la lista
List1.
Variable = List1.ListIndex
Variable contendrá un número con el número de orden del elemento de la
lista seleccionado en ese momento.
List1.AddItem “ELEMENTO NUEVO”
Añade un elemento a List1. En este caso, el elemento añadido es la palabra
ELEMENTO NUEVO.
Manual del Alumno
60
Variable = “VISUALBASIC”
List1.AddItem Variable
Añade un elemento a List1. En este caso, el elemento añadido es la palabra
VISUALBASIC.
Variable = List1.Text
Variable contendrá el elemento que estaba seleccionado en List1. (Variable
será una cadena de caracteres)
Variable = List1.List (n)
Variable contendrá el elemento que ocupa el número de orden n dentro de la
lista.
Variable = List1.List (List1.ListIndex)
Variable contendrá el elemento que estaba seleccionado en List1. Se ha
utilizado la propiedad List para obtener el elemento, y en vez de introducir un
número para definir el elemento que se desea, se introdujo el valor ListIndex
de List1, que es concretamente, el número de orden del elemento
seleccionado en ese momento. Observe que poner List1.List (List1.ListIndex)
es idéntico a poner List1.Text.
List1.RemoveItem (n)
Elimina el elemento n de List1.
List1.RemoveItem (List1.ListIndex)
Elimina el elemento que estaba seleccionado en ese momento.
List1.listIndex = n
Selecciona el elemento n de List1 (Se resalta en azul el elemento n)
PROPIEDADES DE ListBox y de ComboBox
Las señaladas con (*) son comunes a ambos controles y no presentan novedades respecto a
las ya comentadas para los controles precedentes.
Columns Propiedad de ListBox solamente.
Determina si los elementos se presentan en una sola columna o en varias columnas, y la
forma de presentar los elementos en el ListBox. Si esta propiedad se pone a 0 la lista tendrá
solamente una columna, y presentará los elementos uno debajo de otro. Cuando los
elementos sean mas que los que se pueden presentar en la lista, aparecen automáticamente
unas barras de desplazamiento vertical.
Si la propiedad se pone a un número distinto a 0, el ListBox es de tipo multicolumna,
presentará en cada columna los elementos que le quepan dependiendo de su dimensión
vertical, y tendrá tantas columnas como sea necesario para albergar el número de elementos
que tenga. Presentará en su cuadro tantas columnas como se le indique en el valor de esta
propiedad, y si no puede presentar todos los elementos en las columnas que muestra, le
aparecerán barras de desplazamiento horizontales para poder movernos por todas las
columnas que tenga.
Recuerde : El número que se le asigna a la propiedad Columns no indica el número de
Manual del Alumno
61
columnas que tendrá el ListBox sino el número de columnas que presenta.
Esta propiedad puede asignarse en diseño, mediante la caja de propiedades, o en tiempo de
ejecución mediante una instrucción como esta :
Nombrelista.Columns = número
Esta propiedad no puede definirse a 0 o cambiada desde 0 en tiempo de ejecuciones decir,
no se puede convertir en tiempo de ejecución un ListBox de múltiples columnas en un
ListBox de columna única o un ListBox de columna única en un ListBox de múltiples
columnas. Sin embargo, sí es posible cambiar durante la ejecución el número de columnas
de un ListBox de múltiples columnas.
DataField DataSource .
Establecen la base de datos y el campo donde están los datos que se
llevarán al TextBox o ComboBox para presentar datos procedentes de
una Base de Datos.
IntegralHeight No aplicable a ListBox o ComboBox
ItemData Propiedad muy importante.
Devuelve o establece un número específico para cada elemento de un control ComboBox o
ListBox.
Sintaxis
objeto.ItemData(índice) [= número]
La sintaxis de la propiedad ItemData tiene las siguientes partes:
objeto Nombre del ListBox o ComboBox.
índice El número de un elemento concreto del objeto.
número El número que se asocia con el elemento especificado.
Comentarios
La propiedad ItemData es una matriz de valores enteros largos cuyo número de elementos es
el valor de la propiedad ListCount del control. Los números asociados con cada elemento se
pueden usar para cualquier fin. Por ejemplo, se puede usar en la confección de una lista de
teléfonos, el número de identificación de un empleado, etc. Cuando se rellena el ListBox,
también se rellena los elementos correspondientes de la matriz ItemData con los números
correspondientes.
La propiedad ItemData se usa a menudo como índice de una matriz de estructuras de datos
asociados con los elementos de un control ListBox.
Manual del Alumno
62
Nota Cuando se inserta un elemento en una lista con el método AddItem, el elemento
también se inserta automáticamente en la matriz ItemData. Sin embargo, el valor no se
reinicializa a cero; retiene el valor que estaba en esa posición antes agregar el elemento a la
lista. Cuando se usa la propiedad ItemData, asegúrese de establecer su valor al agregar
nuevos elementos a la lista.
List Es el contenido de la lista.
Si la lista de elementos es corta e invariable, pueden introducirse los elementos en el cuadro
de propiedades durante el diseño.
Sorted
Establece o devuelve un valor que indica si los elementos de un ListBox o
ComboBox se colocan automáticamente en orden alfabético. Los valores que
puede adoptar son True o False.
True Los elementos de la lista se ordenan alfabéticamente (sin distinguir entre
mayúsculas y minúsculas).
False (Predeterminado) Los elementos de la lista no se ordenan alfabéticamente.
Cuando esta propiedad tiene el valor True, Visual Basic se encarga de casi todo el
procesamiento de cadenas necesario para mantener el orden alfabético, incluyendo el
cambio de los números de índice cuando se agregan o eliminan elementos.
Nota El uso del método AddItem para agregar un elemento en una posición
específica de la lista puede romper el orden alfabético, y los elementos agregados
con posterioridad pueden no ordenarse correctamente.
Manual del Alumno
63
EMPLEO DE CONTROLES AVANZADOS Y
PERSONALIZADOS
CONTROLES DE BUSQUEDA DE FICHEROS Y DIRECTORIOS
DriveListBox, DirListBox y FileListBox.
Se obtienen directamente de la Caja de Herramientas, en los iconos siguientes:
DriveListBox permite elegir una unidad de disco.
DirListBox muestra los directorios existentes en un árbol.
FileListBox muestra los ficheros existentes en un determinado directorio.
Tal como indica su nombre, estos controles son listas. Repase el control ListBox para
recordar sus propiedades.
DriveListBox
Este control permite elegir una unidad de disco válida en tiempo de ejecución. Utilice este
control para mostrar una lista de todas las unidades válidas del sistema de un usuario. Puede
crear cuadros de diálogo que permitan al usuario abrir un archivo de una lista en cualquier
unidad disponible.
DriveListBox desplegado y sin desplegar Name (nombre) por defecto List1
Posee las propiedades típicas de cualquier control VB respecto a su geometría y color. Las
Propiedades mas destacables de este control son : Drive, List, ListCount y ListIndex
Drive devuelve el nombre de la unidad de disco seleccionada :
Manual del Alumno
64
Variable = List1.Drive Variable = a : (ó c :[MS-DOS_6] ó D )
Este control se trata de una lista como su nombre indica, y posee las propiedades List,
ListCount y ListIndex para permitir al usuario tener acceso a elementos de la lista.
List (n) devuelve el texto que define a la unidad colocada en el lugar n. El número n
comienza por 0. Por ejemplo, en la figura anterior, List1.list(1) devolverá c :[MS-DOS_6]
ListCount proporciona información acerca del número de unidades de disco disponibles
(En el ejemplo, List1.ListCount será 3, que corresponde a los tres discos disponibles - disco
C :, disco A : y disco D : )
ListIndex devuelve el índice del disco seleccionado en la lista (0 para el primero, n-1 para
el último)
Utilizando el control DriveListBox en combinación con DirListBox y FileListBox, podrá
realizar un explorador de ficheros en cualquier disco de su ordenador.
DirListBox.
Presenta un cuadro de la siguiente forma:
donde puede verse el árbol completo de un directorio. El DirListBox solamente presenta
directorios. No presenta ficheros.
Aparte de las propiedades geométricas de todos los controles, el DirListBox presentas las
siguientes propiedades particulares :
Path Devuelve o establece la ruta de acceso actual. No está disponible en tiempo de diseño.
Sintaxis Nombre.Path [= pathname]
donde
Nombre es el nombre del DirListBox
pathname Una expresión de cadena que evalúa en el nombre de vía de acceso del directorio
por defecto del DirListBox..
Manual del Alumno
65
El valor de la propiedad Path es una cadena que indica una ruta de acceso, como
C:\WINDOWS\SYSTEM. El valor predeterminado es la ruta de acceso actual
Cuando se cambia la propiedad Path en tiempo de ejecución se genera un evento Change.
Nota El valor que devuelve Path es distinto del de List (ListIndex). Path devuelve
siempre un mismo camino, bien el que se le haya impuesto mediante esta misma propiedad
Path, y si no se le ha impuesto con anterioridad, el que tenga por defecto. List (ListIndex)
devuelve el camino completo del directorio seleccionado, y, como era de esperar, cambia
cada vez que cambiamos la selección del directorio.
List, ListCount y ListIndex
Al igual que cualquier lista, el DirListBox tiene las propiedades List, ListCount y
ListIndex.
ListIndex devuelve el valor del índice del directorio seleccionado. El valor devuelto es cero
cuando está seleccionado el primer directorio de los situados al final del árbol, 1 para el
siguiente, etc. Toma el valor -1 cuando se selecciona el directorio inmediatamente superior
al último nivel, el valor -2 cuando se selecciona el directorio situado 2 niveles jerárquicos
por encima del último nivel, etc.
ListCount devuelve un valor numérico igual al número de directorios existentes en el
último nivel, independientemente de los directorios que tuviesen por arriba.
List (n) devuelve una cadena de caracteres con el camino completo del elemento cuyo
orden sea el señalado entre paréntesis. Si en vez de n colocamos el ListIndex nos devolverá,
logicamente, el camino del elemento seleccionado.
FileListBox
Esta lista nos presenta los ficheros existentes en un directorio.
Como se puede apreciar, cuando el número de ficheros supera el número que puede
presentar, aparecen automáticamente las flechas de scroll verticales.
Esta lista de ficheros tiene las siguientes propiedades destacables :
Path
Devuelve o establece la ruta de acceso de su directorio actual. No está disponible en tiempo
de diseño. Este directorio puede ser el que se le haya impuesto mediante esta propiedad
Manual del Alumno
66
Path, o el que tenga por defecto. (El directorio por defecto sería el del ejecutable de la
aplicación)
Si le ponemos el nombre por defecto, List1, para todos los ejemplos :
variable = List1.Path Variable = C:\Archivos de programa\Microsoft Visual Basic32
(p. e.)
ListCount
Devuelve el número total de ficheros que hay en ese directorio.
Variable = List1.ListCount Variable = 19 (p. e.)
ListIndex
Devuelve un número con el índice del elemento seleccionado. Como todas las listas,
devuelve -1 si no hay ningún elemento seleccionado. El primer elemento de una lista tiene el
índice = 0.
Filename
Devuelve el nombre del fichero seleccionado.
List (n)
Devuelve el nombre del fichero que ocupa el lugar n en la lista.
Variable = List1.List (5) Variable = nombre del fichero que ocupa el 5º lugar en
la lista.
Si en lugar de n ponemos el valor de ListIndex :
variable = List1.List (List1.ListIndex) obtendremos el nombre del fichero
seleccionado.
Observe que en este último caso, el resultado es el mismo que el de List1.Filename
Veamos otras propiedades del FileListBox
Pattern
Devuelve o establece un valor que indica los nombres de archivo mostrados en
un control FileListBox en tiempo de ejecución.
Sintaxis objeto.Pattern [= valor]
La sintaxis de la propiedad Pattern consta de las siguientes partes:
objeto : Nombre del Control FileListBox
Manual del Alumno
67
valor: Expresión de cadena que indica una especificación de archivo, como *.* o *.FRM. La
cadena predeterminada es *.*, que obtiene una lista de todos los archivos. Además de
utilizar caracteres comodín, también puede especificar varios modelos, separándolos con
caracteres punto y coma (;). Por ejemplo, con *.EXE; *.BAT se obtendría una lista con
todos los archivos ejecutables y todos los archivos por lotes de MS-DOS.
Comentarios
La propiedad Pattern juega un papel clave en el diseño de las funciones de examen y
tratamiento de archivos de una aplicación. Puede utilizar Pattern en combinación con otras
propiedades de control de archivos para proporcionar al usuario formas de explorar archivos
o grupos de archivos similares. Por ejemplo, en una aplicación dedicada a iniciar otros
programas, podría hacer que sólo apareciesen los archivos .EXE en el cuadro de lista de
archivos (*.EXE).
Al modificar el valor de la propiedad Pattern se genera un evento PatternChange.
Archive, Hidden, Normal, System
Devuelven o establecen un valor que determina si un control FileListBox presenta los
archivos con los atributos Archive, Hidden, Normal o System.
El atributo Archive de un fichero indica si se ha variado ese fichero después de la última
copia de seguridad.
El atributo Hidden indica si el fichero se trata de un fichero oculto.
El atributo Normal indica que el fichero es un fichero “normal” (No está oculto ni es de
sistema).
El atributo System de un fichero indica que el fichero es un fichero de sistema.
Sintaxis
objeto.Archive [= booleano]
objeto.Hidden [= booleano]
objeto.Normal [= booleano]
objeto.System [= booleano]
Las sintaxis de la propiedades Archive, Hidden, Normal y System tiene la siguiente partes:
objeto :Nombre del FileListBox
booleano :Una expresión booleana (True / False) que especifica el tipo de archivos
presentados.
El valor booleano puede presentar los siguientes valores :
True :(Predeterminado para Archive y Normal) Presenta archivos con el atributo de la
propiedad en el control FileListBox.
False : (Predeterminado para Hidden y System) Presenta archivos sin el atributo de la
propiedad en el control FileListBox.
Manual del Alumno
68
Use estas propiedades para especificar el tipo de archivos a presentar en un control
FileListBox, basándose en los atributos de archivos estándar usados en el entorno operativo.
La definición de estas propiedades en el código en tiempo de ejecución hace que el control
FileListBox presente sólo aquellos archivos con los atributos especificados.
Por ejemplo, en una operación de buscar y reemplazar se podrían presentar solamente
archivos del sistema estableciendo la propiedad System a True y las demás propiedades a
False. También, como parte del procedimiento de copia de seguridad, se podría establecer la
propiedad Archive a True para relacionar solamente aquellos archivos modificados a partir
de la última copia de seguridad.
TIMER TEMPORIZADOR
Este objeto permite establecer temporizaciones. Presenta una novedad respecto a los
controles estudiados hasta ahora. El control Timer solamente se ve durante el tiempo de
diseño. En tiempo de ejecución, el control permanece invisible.
La temporización producida por el Timer es independiente de la velocidad de trabajo del
ordenador. (Casi independiente. El timer no es un reloj exacto, pero se le parece)
Se toma directamente de la caja de herramientas, y tiene el aspecto siguiente :
PROPIEDADES
Enabled (*)
Index (*)
Interval
El valor de esta propiedad nos dará el intervalo de tiempo (en milisegundos) en que se
producirá un evento Timer y consecuentemente, realizará el procedimiento asociado a este
evento. Si el valor de la propiedad Interval está a 0 (Predeterminado), no se produce el
evento Timer. (El control Timer está deshabilitado cuando se pone la propiedad Interval
= 0)
Left (*)
Name (*)
Tag (*)
Top (*)
PROCEDIMIENTOS
Timer
Manual del Alumno
69
Se produce cada vez que se cumple un intervalo completo.
FORMULARIOS MÚLTIPLES
Interfaz SDI o MDI
Con el IDE de Visual Basic hay disponibles dos estilos diferentes: la interfaz de documento
simple (SDI) o la interfaz de documentos múltiples (MDI). Con la opción SDI todas las
ventanas del IDE se pueden mover libremente por cualquier lugar de la pantalla; siempre y
cuando Visual Basic sea la aplicación actual, permanecerán encima de las demás
aplicaciones. Con la opción MDI, todas las ventanas del IDE están contenidas en una única
ventana primaria de tamaño ajustable.
Para cambiar entre los modos SDI y MDI
1. En el menú Herramientas, seleccione Opciones.
2. Seleccione la ficha Avanzado .
3. Active o desactive la casilla de verificación Entorno de desarrollo SDI.
El IDE comenzará en el modo seleccionado la próxima vez que inicie Visual Basic o ejecute
Visual Basic desde la línea de comandos con el parámetro /sdi o /mdi.
Manual del Alumno
70
DISEÑO DE MENUS
EL EDITOR DE MENUS
El Menú o Barra de Menú es la segunda línea de cualquier ventana Windows, donde pueden
verse distintos nombres. La Barra de Menú es un componente de un Formulario.
La Barra de Menú puede tener tantas palabras como se desee, y sobre cada palabra, puede
desplegarse un Menú desplegable con mas palabras. Sobre cada una de estas puede a su vez
desplegarse otro conjunto de palabras, etc. con lo que se puede conseguir una cantidad de
palabras tan grande como necesitemos.
Para crear un menú debe usarse el Editor de Menú, que se encuentra en la Barra de Menú de
VB en Herramientas | Editor de menús.
Manual del Alumno
71
Cada palabra del menú tiene su Caption (La palabra que aparece en el menú), su Name
(Nombre), y puede tener Index (si existen varias palabras con el mismo Name). Para
introducir estas propiedades basta con teclearlas directamente en cada una de las casillas al
efecto del cuadro del editor de menús. Para colocar el cursor de escritura en una u otra
casilla, puede hacerse bien con el cursor del ratón, bien con el tabulador. Para pasar a la
siguiente línea de edición (crear una nueva palabra), basta con pulsar ENTER.
Existen otras propiedades aparte del Caption y Name que se introducen directamente en las
casillas al efecto.
HelpContextID. Igual que esta propiedad en el resto de los controles, permite introducir un
número de contexto para la ayuda de Windows.
Enabled. Habilitado. Si se quita la marca de esa casilla, esa palabra aparecerá por defecto
deshabilitada.
Visible. Como su nombre indica, que sea visible o no lo sea. Puede cambiarse en tiempo de
ejecución.
WindowList. Indica si esa palabra es la que va a mostrar todos los formularios abiertos en
una aplicación de documentos múltiples (MDI). Al hacer click sobre esta palabra, se
desplegará un submenú con todos los Caption de los Formularios hijo abiertos en ese
momento. Solamente puede existir una palabra en un menú con esta propiedad activada.
Esta propiedad no puede variarse en tiempo de ejecución.
Para cambiar una de estas propiedades en tiempo de ejecución, basta con citar por su
nombre a esa palabra (por su Name, no por su Caption), e igualar a True o False su valor :
nmenu.Visible = False
Otras propiedades
Shortcut. Atajo. Esta propiedad admite varias combinaciones de teclas para acceder al
procedimiento click de esa palabra sin necesidad de usar el ratón.
NegotiatePosition. Establece un valor que determina si los controles Menu de nivel superior
se muestran en la barra de menús mientras un objeto vinculado o incrustado de un
formulario está activo y mostrando sus menús. No está disponible en tiempo de ejecución.
Puede tener los valores 0 (Predeterminado) Ninguno. El menú no se muestra en la barra de
menús cuando el objeto está activo.
1 Izquierda. El menú se muestra a la izquierda de la barra de menús cuando el objeto está
activo.
2 Medio. El menú se muestra en medio de la barra de menús cuando el objeto está activo.
3 Derecha. El menú se muestra a la derecha de la barra de menús cuando el objeto está
activo.
El menú editado con los datos de la figura anterior tendrá esta forma en tiempo de
ejecución :
Manual del Alumno
72
Observe que tiene cuatro palabras en la línea superior, y que “colgando” de la primera
aparece un menú desplegable. Para conseguir un menú desplegable fíjese en la figura del
Editor, en la parte de abajo donde están todos los Caption de las palabras del menú.
Observará que algunas de ellas (&Edicion, Documentos, Ayuda - Hay otra que no se vé,
&Archivo) están completamente a la izquierda de la ventana, y las demás están separadas
de la parte izquierda por unos guiones. Las palabras que están completamente a la izquierda
son las que figurarán en la barra de menú de forma permanente. Las que están separadas
(tabuladas) corresponden a las que aparecerán en los menús desplegables. Como es lógico,
un menú desplegable debe colgar de una palabra de las de la barra de menú. La palabra de la
que cuelga el submenú es la palabra sin tabular inmediatamente anterior.
Para tabular las palabras, hay que hacer click en el botón en forma de flecha a la derecha que
está sobre la ventana de edición :
Situandonos sobre una de las líneas ya editadas, y haciendo click sobre el botón con flecha
hacia la izquierda, quitamos la tabulación.
Los botones con flecha hacia arriba o abajo nos permiten variar el orden de las líneas ya
editadas.
Podemos hacer varios niveles de submenús a base de introducir varias tabulaciones. Al
comienzo de este capítulo puede ver un ejemplo de ello.
Quedan un par de cosas. Una de ellas es el carácter & que está delante de los Caption de
Archivo y Edición. Este carácter nos permite acceder al procedimiento click de esa palabra
pulsando la tecla Alt + la tecla correspondiente a la letra que está detrás del carácter &.
Justamente la letra que está subrayada en la palabra del menú.
El carácter & no tiene porqué ir precisamente al comienzo de la palabra. Puede ir en el
medio de la palabra. De esta forma se subrayará una letra intermedia.
Manual del Alumno
73
Otra cosa. Puede verse en el menú desplegado de la figura anterior una línea entre Guardar
Como y SALIR. Esta línea, que solamente tiene efectos estéticos, se logra introduciendo
como Caption un guión ( - ). El editor de menús solamente le permite el guión en una
palabra de menú desplegable (Tabulada). No se olvide de poner el Name incluso para este
guión.
Barra de Herramientas. Control Toolbar
Este control permite realizar una barra de herramientas. La barra de herramientas es, como
ya conocerá, una barra donde existen varios iconos. Estos iconos realizan una determinada
función. Normalmente se ponen en la barra de herramientas los iconos que representan las
acciones mas frecuentes de una aplicación. Esto facilita la operación al no tener que
desplegar menús para buscar la operación a realizar.
Como el espacio que ocupan los iconos es grande, es también bastante normal que no estén
representados en la barra de herramientas todas las funciones posibles de la aplicación, sino
como decíamos, solamente las mas frecuentes. Pero ocurre que la función que para un
usuario es muy frecuente, para otro no lo es, por lo que también es habitual poder programar
los iconos que aparecen en la barra de herramientas.
Todo ello lo puede hacer el control Toolbar.
Para introducir el Toolbar es necesario que esté presente en la caja de herramientas el
control personalizado Microsoft Windows Common Controls (COMCTL32.OCX).
El control Toolbar es un contenedor de un array de iconos. Estos iconos forman botones
sobre los que se puede insertar código en sus procedimientos. A cada botón se le denomina
Button y a la colección de botones se le denomina Buttons. Cada Button es un elemento de
la colección Buttons y por lo tanto podemos referirnos a cada uno de ellos por el índice que
tiene dentro de la colección.
Los iconos de cada uno de los botones del Toolbar debe introducirse previamente en un
control ImageList. Como se recordará, un control ImageList es un almacén de imágenes,
que podemos usar en cualquier parte de la aplicación. Una de esas partes es la confección de
la barra de herramientas. Por lo tanto, es necesario introducir un control ImageList en
cualquier aplicación que use un control Toolbar. Todas las imágenes del Toolbar deben
estar en un único ImageList. Y este ImageList debe estar en el mismo formulario que el
Toolbar .
La barra de herramientas puede realizarse en tiempo de diseño (este sería el caso para
cuando no existiese variación ni elección de botones a lo largo de la ejecución de la
aplicación) o en tiempo de ejecución (caso que correspondería con una aplicación que
tuviese una barra de menú programable o que variase esta barra de menú dependiendo de
cada operación que se esté ejecutando en la aplicación).
Para realizar la barra de herramientas en tiempo de diseño, basta con visualizar el cuadro de
propiedades que aparece pulsando el botón derecho del ratón sobre el control Toolbar.
Aparecerá un cuadro de diálogo como este :
Manual del Alumno
74
Puede ver que en el cuadro ImageList aparece el nombre de un ImageList. Al desplegar la
lista aparecerán todos los ImageList que existan en el formulario. El ImageList debe estar en
el mismo formulario que el Toolbar. Deberá elegirse el ImageList que contenga las
imágenes de los iconos que queremos introducir en el Toolbar.
Este cuadro nos permite también introducir la forma que adoptará el puntero del ratón
cuando entre en el Toolbar (MousePointer), si el Toolbar aparece por defecto habilitado o
deshabilitado (Enabled) y si muestra o no un rótulo programable al pasar el ratón por encima
de cada botón del Toolbar. (ShowTips). (El uso de estos pequeños rótulos pueden hacer una
aplicación muy bonita) La propiedad AllowCustomize permite, si es True, cambiar el orden
de los botones e introducir separadores (vea evento DobleClick).
En el cuadro botones podemos introducir los datos deseados para cada uno de los botones
que compondrán la colección Buttons.
Para insertar un nuevo botón hay que hacer click sobre Insertar botón e insertará un nuevo
botón inmediatamente después del que figura en la propiedad Index (en la figura del
ejemplo, lo insertaría en segundo lugar, no en el último lugar como podría creerse). También
podemos eliminar un botón haciendo click sobre Eliminar botón.
Manual del Alumno
75
El Caption (opcional) es la palabra que figurará debajo del icono del botón.
Un botón se identifica por su índice. ( Toolbar1.buttons(1) )
La propiedad Key es un nombre que se puede añadir a cada botón. Esta propiedad sirve para
identificar el botón que se ha pulsado, pero no para nombrar al botón.
La propiedad Value es el valor por defecto, con el que aparecerá el botón al comienzo de la
aplicación. (Unpressed, no pulsado, Pressed, pulsado).
La propiedad Style define el tipo de botón :
0 - Default Botón monostable. (Se pulsa, pero no se mantiene pulsado)
1 - Check Botón Biestable. (Se mantiene pulsado y se levanta con otro
click)
2 - Button Group Solo uno de los botones del grupo puede estar pulsado. Esta
propiedad lleva implícito que los botones que forman un grupo
son biestables. Pueden hacerse varios grupos independientes
introduciendo un botón que no pertenezca a un grupo (tipos 0,
1, 3 ó 4) entre los dos grupos que se independientes que se
pretenden formar
3 - Separator El botón se convierte en un separador de anchura fija.
4 - PlaceHolder El botón se convierte en un separador de anchura
variable.
ToolTipText es el texto que aparecerá al lado del botón cada vez que se ponga el cursor del
ratón sobre el botón. Para que aparezca debe estar habilitada la propiedad ShowTips.
Image es el número de la imagen en el ImageList.
El control Toolbar también puede realizarse en tiempo de ejecución. Para introducir u botón
en el Toolbar hay que crear el botón y añadirlo a la colección Buttons de Toolbar. Podemos
hacerlo en una sola instrucción :
Set NombreBotón = NombreToolbar.Buttons.add ( [Indice], [Key], [Caption], [Style],
[Imagen])
NombreBotón puede ser cualquier nombre (es el nombre del objeto botón)
NombreToolbar es el nombre del Toolbar
Indice es el número de orden de ese botón dentro del Toolbar
Key es el valor de la propiedad Key del botón. Este valor debe ser único para cada botón.
Style es un número del 0 al 4 con el tipo de botón. Vea lista mas arriba
Imagen es el número de la imagen para ese botón, dentro del ImageList que las contiene.
Los botones pueden habilitarse y deshabilitarse usando la propiedad Enabled (True / False).
Recuerde que los botones se identifican por su índice :
Toolbar1.Buttons(Indice).Enabled = False
Para saber que botón se ha pulsado, puede leerse la propiedad Key :
Manual del Alumno
76
Text1.Text = Button.Key presenta en Text1 el texto introducido en la propiedad
Key del último botón pulsado.
Con la lectura de la propiedad Key, y la sentencia Case o If ... Then podemos iniciar la parte
de la aplicación asociada a cada botón.
El control Toolbar tiene los siguientes eventos :
ButtonClick
Este evento se produce cada vez que se hace click sobre un botón del Toolbar. Pasa como
parámetro el índice del botón pulsado. Podremos saber que botón se ha pulsado mediante
sentencias condicionales :
Private Sub Toolbar1_ButtonClick(ByVal Button As Button)
If Button.Index = 1 Then . . . .
If Button.Index = 2 Then . . . .
También podríamos usar la propiedad Key como se dijo mas atrás.
Click
Este evento se produce cuando se hace click sobre cualquier botón del Toolbar, pero no pasa
parámetros. (No distingue sobre que botón se ha hecho click) Podemos utilizarlo cuando se
quiera realizar una operación común para todos los botones (Que suene un Beep, por
ejemplo)
DobleClick
Este evento solamente se produce cuando se hace doble click en la parte del Toolbar donde
no hay botones, y la propiedad AllowCustomize esté a True. Si se hace doble click sobre un
botón se produce solamente el evento click (dos veces). Haciendo doble click en una zona
libre de botones, con la propiedad AllowCustomize = True nos permite cambiar el orden de
los botones e introducir separadores.
Change
Se produce solamente cuando se ha realizado algún cambio del orden por el procedimiento
anterior.
DragDrop, DragOver
Igual que cualquier control.
MouseMove, MouseUp, MouseDown
Manual del Alumno
77
Igual que el resto de los controles Pasa como parámetro el índice del botón, la tecla de
mayúsculas, y las posiciones x e y del ratón.
Private Sub Toolbar_MouseDown(Button As Integer, Shift As Integer, x As Single, y As
Single)
Este control solamente funciona en la versión de VB de 32 Bits. Pero para 16 bits puede
hacerse una cosa parecida (y mas sencilla) utilizando un control Picture como contenedor de
tantos controles Image como necesitemos. Dado que el control Picture dispone de propiedad
Align y puede servir como contenedor de otros controles, puede realizarse una barra de
herramientas similar a esta, y posiblemente de forma mas sencilla.
FUNCIONES Y PROCEDIMIENTOS (MÓDULOS)
Procedimientos y funciones:
Cada formulario (*.frm) y cada módulo (*.bas) de una aplicación pueden contener:
Manual del Alumno
78
Declaraciones (contantes, tipos, variables y procedimientos de las DLL)
Procedimientos producidos por sucesos.
Procedimientos generales.
La base de una aplicación en Visual Basic la forman sus procedimientos conducidos
por sucesos. Un procedimiento conducido por un suceso es el código que es invocado
cuando un objeto reconoce que ha ocurrido un determinado suceso.
Cuando varios procedimientos conducidos por sucesos necesiten ejecutar un mismo
proceso, por ejemplo visualizar un diagrama de barras, la mejor forma de proceder es
colocar el código común en un procedimiento general que será invocado desde cada
procedimiento conducido por un suceso que necesite ejecutar dicho código. De esta forma
se elimina la necesidad de duplicar código. Un procedimiento general es invocado cuando
se hace una llamada explícita al mismo.
Un procedimiento general puede escribirse como procedimiento Sub o como función
Function. Un procedimiento conducido por un suceso es siempre Sub.
Ambito de un procedimiento:
Cuando un procedimiento es llamdado para su ejecución, Visual Basic busca ese
procedimiento en el formulario o módulo donde se encuentre. Si no lo encuentra, entonces
continúa la búsqueda en el resto de los módulos de la aplicacion.
Consecuentemente, un procedimiento definido en un módulo puede invocarse desde
cualquier parte de la aplicación, pero un procedimiento ligado a un formulario solo puede
ser llamado desde otros procedimientos ligados tambien a ese formulario. Esto quiero decir
que un procedimiento definido en un módulo es público y un procedimiento definido en un
formulario es privado a ese formulario. Por lo tanto, el nombre para un procedimiento
definido en un módulo deber ser único para todos los modulos, mientras que el nombre para
un procedimiento definido en un formulario puede utilizarse tambien en otro formulario.
Crear un procedimiento general:
Para crear un procedimiento general (módulo) basta con hacer doble click sobre el
explorador de proyectos. El explorador de proyectos es la parte donde se visualizan las
partes que conforman el proyecto: los formularios y los módulos, por ejemplo.
Posteriormente, se entra al editor de procedimientos donde se escribe el codigo necesario.
Funciones (Function):
La sintaxis correspondiente a una función es la siguiente:
[Static] [Private] [Function nombre([parámetros]) As tipo]
[sentencias]
[nombre = expresión]
[Exit Function]
Manual del Alumno
79
[sentencias]
[nombre = expresión]
End Function
Donde:
Nombre Es el nombre de la funcion: su tipo determina el tipo de datos que devuelve la
funcion. Para especificar el tipo, se puede utilizar los caracteres de declaracion
de tipo o la claúsula As tipo (Integer, Long, Single, Double, Currency, String o
Variant)
Parámetros Son una lista de variables que se corresponden con los argumentos que son
pasados cuando es invocada la funcion. Cuando se llama a la funcion, Visual
Basic asigna el valor de cada argumento en la llamada al parametro que ocupa su
misma posicion en la lista de parametros.
Expresión Define el valor devuelto por la funcion. Este valor es almacenado en el propio
nombre de la funcion, que actua como variable dentro del cuerpo de la misma.
Si no se efectua esta asignacion, el resultado que será devuelto es cero si ésta es
numérica, nulo (“”) si la función es de caracteres o vacio si la funcion es variant.
Exit Sub Permite salir de una funcion. Exit Function no es necesaria a no ser que necesite
retornar a la sentencia inmediatamente a continuación de la que efectuó la
llamada antes de que la funcion finalice.
End Sub Esta sentencia, al igual que Exit Function, devuele el control a la sentencia
inmediatamente a continuación de la que efectuó la llamada, continuando de esta
forma la ejecución del programa.
La llamada a una función es de la forma:
Variable = nombre ([argumentos])
Los argumentos son una lista de constantes, variables o expresiones separadas por comas.
El numero de argumentos debe ser igual al numero de parametros de la funcion. Los tipos
de los argumentos deben coincidir con los tipos de sus correspondientes parametros.
En cada llamada a una funcion hay que escribir los parentesis, aunque esta no tenga
argumentos. Una llamada a una funcion es parte de una expresion.
Practica No. 12
El siguiente ejemplo corresponde a una funcion que devuelve como resultado el factorial de
un numero N. El formulario correspondiente es como
sigue:
Manual del Alumno
80
En el presente ejercicio utilizaremos
Function Factorial(N As Integer) As Long
Dim F As Long
If N = 0 Then
Factorial = 1
Exit Function
End If
F = 1
For i = 2 To N
F = F * i
Next i
Factorial = F
End Function
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Fact = Factorial(Val(Text1))
Label3.Caption = Str(Fact)
End If
End Sub
En tiempo de ejecución el formulario de este ejercicio se vería como la figura siguiente:
Procedimientos:
La sintaxis que define un procedimiento es la siguiente:
Manual del Alumno
81
[Static][Private] Sub nombre [(parámetros)]
[Sentencias]
Exit Sub
[Sentencias]
End Sub
La explicación sobre cada parte del procedimiento es similar a la dada para las funciones.
La llamada a un procedimiento puede ser de alguna de las dos formas siguientes:
1. Call nombre_procedimiento [(parámetros)]
2. Nombre_procedimiento [(parámetros)]
A diferencia de una función, un procedimiento no puede ser utilizado en una expresión.
Para declarar procedimientos externos, esto es, procedimientos contenidos en una
DLL, se debe utilizar la sentencia Declare. Una sentencia Declare puede aparecer en la
sección de declaraciones del formulario o del módulo.
Práctica No. 13
En este ejercicio diseñaremos un formuario en el cual utilizaremos un procedimiento para
calcular el salario bruto de un empleado de acuerdo al salario por hora devengado y el total
de horas trabajadas. Se creará, asimismo, un procedimiento para realizar este cálculo,
pasándole los parámetros de las horas y el salario por hora. El diseño del formulario es
como la figura siguiente:
El código contenido en el formulario es como sigue:
Private Sub Cal_Salario(Hora As Integer, SB As Long)
Label4.Caption = Str(Val(Text1) * Val(Text2))
Manual del Alumno
82
End Sub
Private Sub cerrar_Click()
Unload Me
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Text2.SetFocus
End If
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer) (A PARTIR DE AQUI)
If KeyAscii = 13 Then
Cal_Salario Text1, Text2
End If
End Sub
El formulario, en tiempo de ejecución, se vería de la forma siguiente:
Ahora variando el ejercicio hacia procesar lo anterior mediante un módulo:
1. Diseñe el siguiente formulario en Visual Basic.
Manual del Alumno
83
2. Cree un módulo denominado Mod_Calcula.bas que calculará el Salario Normal y el
Salario Extra de un empleado determinado. El proyecto se visualizará asi:
En el botón “Calcular” del formulario escriba el siguiente código:
Private Sub Calcular_Click()
Dim HTraba, HPaga As Long
Dim SNormal As Long, SExtra As Long
HTraba = MaskEdBox1.Text
HPaga = MaskEdBox2.Text
Call Mod_Calcula(HTraba, HPaga, SNormal, SExtra)
Label6.Caption = Str(SNormal)
Label7.Caption = Str(SExtra)
Label8.Caption = Str(SNormal + SExtra)
End Sub
3. En el módulo Mod_Calcula.bas escriba el siguiente código:
Public Function Mod_Calcula (ByVal HoTrabaja As Long, _
Manual del Alumno
84
ByVal PagarHora As Long, _
ByRef Sal_Normal As Long, _
ByRef Sal_Extra As Long)
If HoTrabaja <= 48 Then
Sal_Normal = PagarHora * HoTrabaja
Else
Sal_Normal = PagarHora * 48
Sal_Extra = PagarHora * (HoTrabaja - 48) * 1.5
End If
End Function
Declarar todas las variables locales como estáticas:
Para hacer que todas las variables locales de un procedimiento sean por defecto
estáticas, hay que colocar al principio de la cabecera del procedimiento la palabra clave
static.
Por ejemplo:
Static Sub Cal_Salario(Hora As Integer, SB As Long)
„....
End Sub
Declarar un procedimiento privado:
Para que un procedimiento sea solo accesible desde los procedimientos del módulo al
cual pertenece, hay que colocar al principio de la cabecera del procedimiento la palabra
clave Private.
Por ejemplo:
Private Sub Cal_Salario(Hora As Integer, SB As Long)
„....
End Sub
La palara clave Private no tiene efecto cuando el procedimiento se declara en un
formulario, ya que éste, por definición, ya es privado. Esto aplica también en funciones.
Argumentos por referencia y por valor:
En las funciones (Function) y los procedimientos (Sub), los argumentos se pasan por
referencia; de este modo, cualquier cambio de valor que sufra un parámetro en el cuerpo de
la función o del procedimiento también se produce en el argumento correspondiente de la
llamada a la función o al procedimiento.
Cuando se llama a una función o aun procedimiento, se podrá especificar que el valor
de un argumento no sea cambiado por la función o el procedimiento, poniendo dicho
argumento entre paréntesis en la llamada. Un argumento entre paréntesis en la llamada es
un argumento pasado por valor. Por ejemplo:
Manual del Alumno
85
Factorial (Num), Fact
En esta llamda al procedimiento Factorial el argumento Num es pasado por valor.
Significa que lo que pasa es una copia de Num. Si el procedimiento cambia ese valor, el
cambio solo afecta a la copia y no a la propia variable Num.
Otra forma de especificar que un argumento será siempre pasado por valor es
anteponiendo la palabra ByVal a la declaración del parámetro en la cabecera del
procedimiento (Sub o Function). Por ejemplo:
Sub Factorial (ByVal N As Integer, F As Long)
Procedimientos recursivos:
Se dice que una función (Function) es recursiva o que un procedimiento es recursivo
si se llaman a sí mismos.
La función factorial, cuyo código se presenta a continuación, es recursiva:
Function Factorial (N As Integer) As Long
If N = 0 Then
Factorial = 1
Else
Factorial = N * Factorial (N – 1)
End If
End Function
Nota: Queda como ejercicio al estudiante implementar este ejercicio en el formulario
adecuado.
ARRAYS DE VARIABLES
Arreglos:
Un arreglo permite referirse a una serie de elementos del mismo tipo por un mismo
nombre y referenciar un único elemento de la serie utilizando un índice.
Manual del Alumno
86
Visual Basic, igual que sus predecesores, permite arreglos (Array) de variables de una
o más dimensiones y de cualquier tipo de datos (tipos fundamentales y tipos definidos por el
programador), e introduce un nuevo tipo de arreglos: arreglos de controles. Estos arreglos
son necesarios para escribir menús, crear nuevos controles en tiempo de ejecución o para
hacer que una serie de controles tengan asociado un mismo procedimiento para cada tipo de
suceso.
Arreglos de variables:
Los arreglos de este tipo permiten referirse a una serie de variables por un mismo
nombre y acceder individualmente a cada una de ellas utilizando un índice. Este tipo de
arreglos tiene que declararse en el código y pueden tener una o más dimensiones.
Arreglos estáticos:
Para declarar un arreglo estático, es decir con un número fijo de elementos, Visual
Basic hace tres consideraciones importantes:
Se debe declarar en la sección de declaraciones de un módulo o del formulario,
utilizando la sentencia DIM.
Se debe declarar un arreglo a nivel de formulario o de módulo, en la sección de
declaraciones del formulario o del módulo respectivo, utilizando la sentencia DIM.
Se debe declarar un arreglo local a un procedimiento utilizando la sentencia
STATIC dentro del propio procedimiento.
Ejemplos:
Dim Array_1 (1 To 5, 1 To 5) As Integer „Arreglo 5X5 de tipo Integer
Static Array_1 (1 To 10) As String „Arreglo de 10 elementos, tipo String.
Global Array_1 (12) As Integer „Arreglo de formulario de 10 elementos.
Arreglos dinámicos:
Las dimensiones de un arreglo puede que no sean siempre las mismas, por ende,
muchas veces se hace necesario que éste sea dinámico. El espacio requerido para el arreglo
será asignado en tiempo de ejecución del programa. Es decir, puede ser redimensionado en
cualquier momento durante la ejecución de un programa.
Para declarar un array dinámico:
Lo primero que debe hacerse es decidir si el arreglo va a ser local o global. Si es
global debe declararse, con Dim en un módulo, o con Static o Dim en el
formulario. Se debe dejar la lista de dimensiones vacía.l
Debe asignarse el número actual de elementos con la sentencia ReDim.
Manual del Alumno
87
La sentencia REDIM permite cambiar el número de elementos de un arreglo, es decir, lo
redimensiona pero no cambiar el número de dimensiones. Sin embargo, solo puede aparecer
en un procedimiento.
Finalmente, se deben tomar en cuenta las siguientes consideraciones:
Para aumentar o disminuir el tamaño actual de un arreglo multidimensional, solo
se puede cambiar el limite superior de la ultima dimensión. Si se disminuye,
logicamente se perderán algunos datos. Recuerdese que con la sentencia REDIM
array(I,J) se pierden los datos contenidos en dicho vector. Para conservarlos
utilice el mandato REDIM PRESERVE array(Ubound(array,2)+2) en este caso,
se incrementa el tamaño del arreglo y con la función Ubound (que devuelve el
valor más alto de la segunda dimensión.
Un arreglo es muy grande cuando su tamaño excede los 64 KB. No deben crearse
arreglos muy grandes cuando éstos involucren objetos, cadenas de caracteres de
longitud variable (de longitud fija si). Sin embargo, el tamaño máximo de un
arreglo no sobrepasa los 64 MB, con Windows ejecutándose en modo extendido y
1 MB cuando lo hace en modo estandar. El rango de cada una de las dimesniones
es de –32768 a 32767.
Ahora se creará una práctica para dejar básicamente dejar implicito el tema de los arreglos:
Práctica No. 14
Se creará un formulario en el cual residirá el código para crear un arreglo dinámico, el cuál
basará su tamaño en el valor que digite el usuario en el text1. Es decir, si el usuario digita
un valor 6, el vector se creará con 6 celdas de memoria.
El formulario alusivo es como el que se muestra en la figura siguiente:
El código anidado será:
En declaraciones generales del formulario:
Dim Arreglo() As Integer
Dim CambioLinea$, Fin%
Procedimientos creados:
Manual del Alumno
88
Private Sub Mostrar()
'ReDim Preserve Arreglo(1, Fin)
CambioLinea = Chr$(13) & Chr$(10)
Text2 = ""
For I% = 1 To Fin
Text2 = Text2 + Str(Arreglo(I)) & CambioLinea
Next I
End Sub
Private Sub Calculo1()
'La siguiente línea dimensiona el arreglo de acuerdo al número capturado „en el text1, es
decir, crea el número de celdas de acuerdo a text1.
Fin = Val(Text1)
ReDim Arreglo(Fin)
For I% = 1 To Fin
Arreglo(I) = I
Next I
Mostrar
End Sub
Private Sub Salir_Click()
Unload Me
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Calculo1
End If
End Sub
Adicionales:
En este apartado se presentan algunos ejemplos de código que pueden ser de utilidad
en el desarrollo de aplicaciones.
1. DoEvents:
Muchas veces se necesita tener algún procedimiento que permita cancelar una
operación determinada en alguna parte de la misma. Ejemplo clásico es la impresión de
documentos, la cual muchas veces se necesita cancelar dado que se ha presentado algún
inconveniente. En este ejemplo, simplemente se trata de procesar un determinado ciclo y
detenerlo en cualquier momento. Para ello se utiliza el método DoEvents. El formulario es
tal como se presenta:
Manual del Alumno
89
El código residente en el botón procesar es como sigue:
Private Sub Command1_Click()
Dim I%
Static optSeguir As Boolean
If optSeguir Then
optSeguir = False
Else
optSeguir = True
Command1.Caption = "&Detener"
Do While optSeguir And I < 1000000
I = I + 1
Label2.Caption = Str(I)
DoEvents
Loop
optSeguir = False
Command1.Caption = "&Procesar"
End If
End Sub
3. Tipos de Variables: El siguiente ejercicio pretende reforzar el uso de variables en Visual Basic. Inicialmente
diseñe el siguiente formulario:
Manual del Alumno
90
El código necesario es el siguiente:
En declaraciones generales:
Public ClicPub%
En el botón de variables estática:
Private Sub Command1_Click()
Static ClicEstatico As Integer
ClicEstatico = ClicEstatico + 1
Label2 = Str(ClicEstatico)
End Sub
En el botón de variable dinámica:
Private Sub Command2_Click()
Dim ClicD As Integer
ClicD = CliD + 1
Label1 = Str(ClicD)
End Sub
En el botón de variable pública:
Private Sub Command3_Click()
ClicPub = ClicPub + 1
Label3 = Str(ClicPub)
End Sub
En el botón de reiniciar variables:
Private Sub Reiniciar_Click()
ClicPub = 0
ClicEstatico = 0
End Sub
FUNCIONES API‟S DE WINDOWS
Librerías dinámicas:
Manual del Alumno
91
Un programador de aplicaciones además de conocer el ambiente para desarrollo
gráfico (windows) debe conocer también el entorno de desarrollo windows (Windows
Application Programming Interfase, conocido como API).
Las funciones Windows son el corazon de las aplicaciones Windows. Hay cientos de
funciones de Windows que ejecutan una variedad de tareas dispuestas para ser llamadas; por
ejemplo, desde C o desde Visual Basic. Los mensajes son utilizados por Windows para
permitir que las aplicaciones se comuniquen entre si y con el propio sistema Windows.
Una biblioteca de vínculos dinámicos (DLL) es un conjunto de procedimientos,
externos a la aplicación, a los que se puede llamar desde la aplicación. Las DLL no están
enlazadas a su archivo ejecutable y, por tanto, pueden vincularse en tiempo de ejecución en
lugar de cargarse en tiempo de compilación. Esto quiere decir que las bibliotecas pueden
actualizarse independientemente de la aplicación y que múltiples aplicaciones pueden
compartir una misma DLL.
Una librería dinámica (Dynamic Link Libraries), las cuales se abrevian como DLL‟s
permite que las las aplicaciones Windows compartan código y recursos. Una DLL es en
realidad un fichero ejecutable que contiene funciones de Windows que pueden ser utilizadas
por todas las aplicaciones.
La API (Interfaz de programación de aplicaciones) de Windows consta de las
funciones, mensajes, estructuras de datos, tipos de datos e instrucciones que puede utilizar
para crear aplicaciones que se ejecuten bajo Microsoft Windows. Las partes de la API que
más se utilizan son los elementos de código incluidos para llamar a funciones de la API
desde Windows. Estos incluyen declaraciones de procedimientos (para las funciones de
Windows), definiciones de tipos definidos por el usuario (para estructuras de datos pasadas a
esas funciones) y declaraciones de constantes (para valores pasados y retornados desde esas
funciones).
Una de las mejores características de Visual Basic, son sus librerías dinámicas. Una
DLL es una libreria de funciones que Windows lee y ejecuta atendiendo a las necesidades
del programa EXE que se ejecuta. Lo opuesto a una DLL es una libreria estatica, donde las
funciones necesarias para la ejecucion del programa EXE son copiadas en el program
durante el proceso de compilacion y enlace que lo genera.
La utilización de librerías dinámicas tiene ventajas. Una ventaja es que como están
separadas del programa, se pueden actualizar sin tener que modificar los programas que las
utilizan. Otra ventaja es el ahorro de memoria principal y de disco, ya que, como es
Windows quien administra la utilizacion de las DLL, no existe duplicidad de codigo cuando
varias aplicaciones las utilizan.
Tambien tiene inconvenientes. Uno de ellos es el tiempo que Windows tiene que
emplear en leer las funciones que el programa necesita utilizar de una DLL. Otra desventaja
es que cada programa ejecutable necesita que esten presentes las DLL que utiliza. Cuando
se utilizan librerias estaticas, las funciones que el programa necesita se incluyen en el
mismo, por lo que ni se pierde tiempo en leerlas, ni la librería tiene que estar presente.
Manual del Alumno
92
Las funciones de la API de Windows están disponibles en las librerías Kernel, GDI y
User. Las DLL para esas funciones están en los ficheros KERNEL.EXE, GDI.EXE, y
USER.EXE, localizados en el directorio SYSTEM de Windows. Visual Basic puede utilizar
DLL creadas en cualquier lenguaje, con muy pocas excepciones.
Las versiones de 32 bits del sistema operativo Windows (Windows 95 y Windows NT)
constan de tres DLL principales: User32, GDI32 y Kernel32. Estas DLL proporcionan la
mayor parte de la funcionalidad de la API de Windows.
® User32
User32.dll trata las tareas relacionadas con la administración de ventanas, menús,
controles y cuadros de diálogo. Por ejemplo, puede llamar al procedimiento
FlashWindow de User32.dll para hacer que una ventana parpadee.
® GDI32
GDI32.dll se encarga de la presentación de gráficos.
® Kernel32
Kernel32.dll se ocupa de las tareas del sistema operativo. Por ejemplo, puede llamar al
procedimiento GetWindowsDirectory de Kernel32.dll para obtener la ruta de acceso
actual de la carpeta de Windows. Además de estas tres DLL, Windows 95 y Windows NT contienen muchas otras DLL que
amplían la funcionalidad de Visual Basic.
Para acceder a las librerias dinamicas, Visual Basic utiliza la sentencia Declare.
Hay dos pasos básicos para usar un procedimiento de una DLL:
1. Utilizar la instrucción Declare para indicar a Visual Basic qué procedimiento desea usar.
2. Llamar al procedimiento de una DLL desde el lugar adecuado del código.
Ventajas del uso de DLL:
Con las DLL, puede:
® Realizar tareas no disponibles en Visual Basic.
Manual del Alumno
93
Las DLL pueden realizar tareas que son difíciles o imposibles de efectuar desde
Visual Basic. Por ejemplo, puede llamarse a un procedimiento de una DLL para
que la aplicación permanezca como la ventana visible.
® Aumentar el rendimiento.
El código de una DLL suele ejecutarse más rápidamente que el código de Visual
Basic. Si se tiene un procedimiento que requiere el máximo rendimiento, puede
escribirlo como una DLL y, a continuación, llamar a la DLL desde Visual Basic.
® Realizar actualizaciones independientemente de la aplicación.
Puede actualizarse una DLL sin volver a compilar la aplicación que la invoca, lo
que facilita la administración de la aplicación.
Declaración de una función de una DLL:
Para declarar una funcion de una libreria dinámica, se tiene que escribir una sentencia
Declare en la sección de declaraciones de un formulario o de un modulo de la aplicacion
Visual Basic. Una funcion declarada en un formulario es privada para ese formulario, y
declarada en un módulo, es pública, y por lo tanto puede ser llamada desde cualquier parte
de la aplicación.
Sintaxis 1:
[Public | Private] Declare Sub nombre Lib "nombre_biblioteca" [Alias "nombre_alias"]
[([lista_argumentos])]
Sintaxis 2:
[Public | Private] Declare Function nombre Lib "nombre_biblioteca" [Alias "nombre_alias"]
[([lista_argumentos])] [As tipo]
La sintaxis de la instrucción Declare consta de las siguientes partes:
Parte Descripción
Public Opcional. Se usa para declarar procedimientos que están
disponibles para todos los demás procedimientos en todos los
módulos.
Private Opcional. Se usa para declarar procedimientos que sólo están
disponibles dentro del módulo donde se hace la declaración.
Sub Opcional(debe aparecer Sub o Function). Indica que el
procedimiento no devuelve un valor.
Function Opcional (debe aparecer Sub o Function). Indica que el
procedimiento devuelve un valor que se puede utilizar en una
expresión.
nombre Requerido. Cualquier nombre válido de procedimiento.
Observe que los puntos de entrada de las DLL distinguen
mayúsculas de minúsculas.
Manual del Alumno
94
Lib Requerido. Indica que el procedimiento que está declarando se
encuentra en una DLL o un recurso de código. La cláusula Lib
es obligatoria para todas las declaraciones.
nombre_
biblioteca Requerido. Nombre del archivo DLL o del recurso de código
que contiene el procedimiento declarado.
Alias Opcional. Indica que el procedimiento al que se llama tiene
otro nombre en la DLL. Esto es útil cuando el nombre del
procedimiento externo es el mismo que el de una palabra
clave. También es posible usar Alias cuando un procedimiento
de DLL tiene el mismo nombre que una variable pública, una
constante o cualquier otro procedimiento con el mismo
alcance. Alias también resulta útil si algún carácter del nombre
del procedimiento de la DLL no se admite como nombre.
nombre_
alias Opcional. Nombre del procedimiento de la DLL o del recurso
de código. Si el primer carácter no es un signo de número (#),
nombre_alias es el nombre del punto de entrada del
procedimiento en la DLL. Si # es el primer carácter, todos los
caracteres que le siguen deberán indicar el número ordinal del
punto de entrada del procedimiento.
lista_
argumentos Opcional. Lista de variables que representan argumentos que
se pasan al llamar al procedimiento.
Tipo Opcional. Tip o de datos del valor devuelto por un
procedimiento Function; puede ser Byte, Boolean, Integer,
Long, Currency, Single, Double, Decimal (no admitido
actualmente), Date, String (sólo de longitud variable), o
Variant, un tipo definido por el usuario o un tipo de objeto.
Manual del Alumno
95
El argumento lista_argumentos posee las siguientes partes y sintaxis:
[Optional] [ByVal | ByRef] [ParamArray] nombre_variable[( )] [As tipo]
Parte Descripción
Optional Opcional. Indica que un argumento no se requiere. Si se usa,
todos los argumentos subsiguientes de lista_argumentos
también deben ser opcionales y deben declararse mediante la
palabra clave Optional. No se puede utilizar Optional para
ningún argumento si se utiliza ParamArray.
ByVal Opcional. Indica que el argumento se pasa por valor.
ByRef Indica que el argumento se pasa por referencia. ByRef es el
modo predeterminado en Visual Basic.
ParamArray Opcional. Se usa sólo como el último argumento de
lista_argumentos para indicar que el argumento final es una
matriz Optional de elementos Variant. La palabra clave
ParamArray le permite incluir un número arbitrario de
argumentos. No se puede usar con ByVal, ByRef u Optional.
nombre_
variable Requerido. Nombre de la variable que representa el argumento
que se pasa al procedimiento; sigue las convenciones estándar
de nombres de variables.
() Requerido para variables de matriz. Indica que
nombre_variable es una matriz.
Tipo Opcional. El tipo de datos del argumento que se pasa al
procedimiento; puede ser Byte, Boolean, Integer, Long,
Currency, Single, Double, Decimal (no admitido actualmente),
Date, String (sólo longitud variable), Object, Variant, un tipo
definido por el usuario o un tipo de objeto.
Comentarios:
Para los procedimientos Function el tipo de datos del procedimiento determina el tipo
de datos que devuelve. Puede usar una cláusula As a continuación de lista_argumentos para
especificar el tipo de valor devuelto por la función. Dentro de lista_argumentos puede
utilizar una cláusula As para especificar el tipo de datos de los argumentos que se pasan al
procedimiento. Además de especificar cualquiera de los tipos de datos estándar, puede
especificar As Any en lista_argumentos para inhibir la comprobación del tipo de datos y
permitir el paso de cualquier tipo de datos al procedimiento.
Los paréntesis vacíos indican que el procedimiento Sub o Function no tiene ningún
argumento y que Visual Basic debe comprobar que no se pasa ninguno. En el ejemplo
siguiente, Primero no toma ningún argumento. Si usa argumentos en una llamada a Primero,
ocurrirá un error:
Declare Sub Primero Lib "MiBiblioteca" ()
Manual del Alumno
96
Si se incluye una lista de argumentos, se comprobará el número y el tipo de argumentos
cada vez que se llame al procedimiento. En el ejemplo siguiente, Primero toma un
argumento Long:
Declare Sub Primero Lib "MiBiblioteca" (X As Long)
Nota No es posible tener cadenas de longitud fija en la lista de argumentos de una
instrucción Declare; sólo se pueden pasar cadenas de longitud variable a los procedimientos.
Las cadenas de longitud fija pueden aparecer como argumentos de procedimientos, pero se
convierten a cadenas de longitud variable antes de pasarse.
Nota La constante vbNullString se utiliza al llamar a procedimientos externos, donde el
procedimiento externo requiere una cadena cuyo valor es cero, que no es lo mismo que una
cadena de longitud cero ("").
Un ejemplo:
Declare Function lopen Lib “Kernel” Alia “_lopen” (ByVal lpPathName _
As String, ByVal iReadWrite As Integer) As Integer
Observese en la declaracion las palabras claves Lib (librería) y ByVal (por valor).
Opcionalmente puede aparecer también la palabra clave Alias.
Si la funcion no retorna un valor, se debe declarar como un procedimiento Sub. Por
ejemplo:
Declare Sub CloseWindow Lib “User” (ByVal hWnd As Integer)
La clausula Lib indica a Visual Basic la librería donde puede encontrar la funcion de la API
de Windows declarada.
Los argumentos de una función pueden ser pasados por valor o por referencia. Visual Basic
pasa los argumentos por referencia (utilizando direcciones de 32 bits). Para pasar un
argumento por valor, debe escribirse la palabra clave ByVal delante de la declaración del
argumento.
Algunas funciones aceptan más de un tipo de datos de un mismo argumento. Esto se indica
declarando el argumento como Any. Por ejemplo:
Declare Function Catch Lib “Kernel” (lpCatchBuf As Any) As Integer
a función de una DLL:
Una vez que se ha declarado una función, puede ser invocada exactamente igual que otras
funciones intrínsecas de Visual Basic. Por ejemplo:
Declare Function IsIconic Lib “User” (ByVal hWnd As Integer) As Integer
If IsIconic(Form2.hWnd) Then...
Este ejemplo llama a la función IsIconic para verificar si el formulario 2 es un icono.
Tipos de datos en las llamadas
Manual del Alumno
97
Visual Basic posee diversos tipos de datos, muchos de los cuales no son soportados por las
API‟s de Windows. Por ende, se debe poner mucha atención cuando se llame a estas
funciones.
Cadenas de caracteres: Las mayoría de funciones DLL esperan cadenas de carácteres
estándar C (ASCIIZ), las cuales finalizan con un caracter nulo (0 ANSI). En este caso
anteponga la palaba ByVal a la declaración del parámetro de la función. Asi, Visual Basic
interpreta que debe utilizar el estilo C para pasar la cadena de caracteres. Por la misma
razon, una funcion de una DLL no puede retornar una cadena de caracteres, excepto cuando
se haya escrito especificamente para Visual Basic.
Si la funcion ha sido escrita especificamente para Visual Basic, entonces no necesita utilizar
la palabra ByVal. En este caso, la funcion podria retornar una cadena de caracteres.
Ya que las cadenas son pasadas por referencia a una funcion de una DLL, puede suceder que
la funcion modifique la cadena VB. En este caso, hay que tener cuidado, ya que si la
longitud de la variable de caracteres no es suficiente, como la función no puede incrementar
dicha longitud, simplemente escribe a continuacion del final, destruyendo asi areas de
memoria. Para evitar este problema, se debe declarar la cadena de caracteres lo
suficientemente grande.
Por ejemplo, la función GetWindowsDirectory, cuya declaracion es:
Declare Function GetWindowsDirectory Lib “Kernel” (ByVal lpBuffer As String, ByVal_
nSize As Integer) As Integer
devuelve en su primer argumento el camino del directorio de Windows. Como medida de
seguridad, para llamar a la función se debe declarar el primer argumento como una cadena
de longitud 255, tal y como se muestra:
Dim W As Integer, Ruta As String * 255
W = GetWindowsDirectory(Ruta, Len(Ruta))
Otra solución puede ser definir una cadena de longitud variable y rellenarla de nulos. Esto
es:
Dim W As Integer, Ruta As String
Ruta = String$(255,0)
W = GetWindowsDirectory(Ruta, Len(Ruta))
Práctica No. 15
Manual del Alumno
98
En el siguiente ejemplo se mostrará la utilización de las API‟s de Windows. Deberá diseñar
dos formularios denominándolos Dialog y Form1, asimismo, dos módulos que realizarán las
llamadas a dos funciones API‟s. El proyecto debe mostrarse tal y como se muestra en la
figura siguiente:
El formulario FORM1 tendrá el siguiente aspecto:
Asimismo, el formulario Dialog será:
En el botón “Ver Ventana con función API” digite el siguiente código:
Private Sub EjecutarAPI_Click()
Dialog.Show
End Sub
El botón “Ubicar Carpeta de Windows (API)” tendrá el código siguiente:
Private Sub DirWindows_Click()
Manual del Alumno
99
Dim sWinDir As String
Dim lLen As Long
Dim Mensa$
CL = Chr$(13) & Chr$(10)
Mensa = "El directorio actual de Windows" & CL
Mensa = Mensa & "está en la carpeta : " & CL & CL
sWinDir = String(255, 0)
lLen = GetWindowsDirectory(sWinDir, Len(sWinDir))
sWinDir = Left(sWinDir, lLen)
sWinDir = sWinDir + "\"
MsgBox Mensa & sWinDir, vbOKOnly, "Usando API GetWindowsDirectory"
End Sub
En el formulario Dialog digite el siguiente código:
Option Explicit
Private Sub Form_Load()
Dim Mensaje$
Dim CambioLinea$
CambioLinea = Chr$(13) & Chr$(10)
Dialog.Height = 2550
Dialog.Left = 2715
Dialog.ScaleHeight = 2175
Dialog.ScaleWidth = 5085
Dialog.Top = 3420
Dialog.Width = 5175
Mensaje = Mensaje & " Ha ocurrido un error de aplicación " & CambioLinea
Mensaje = Mensaje & " debe proceder a apagar el equipo y " & CambioLinea
Mensaje = Mensaje & " y llamar al dpto de Soporte Técnico."
Label1.Caption = Mensaje
End Sub
Private Sub OKButton_Click()
Unload Me
Form1.Show
End Sub
Private Sub Timer1_Timer()
Dim lresultado As Variant
lresultado = FlashWindow(Dialog.hWnd, 2)
End Sub
Por su parte, el modulo 1 (module1) de nombre FlashWindows.bas contendrá el llamado a
la función FlashWindows que permite que un formulario parpadee de acuerdo a ciertos
argumentos dados en el timer. En este caso, cada 2 segundos. El profesor le explicará con
detalles sobre este acontecimiento. El código de la función será la siguiente:
Manual del Alumno
100
'En las declaraciones generales de un módulo .BAS.
Declare Function FlashWindow Lib "User32" _
(ByVal hWnd As Long, ByVal bInvert As Long) _
As Long
En cuanto el módulo GetsWindowsDirectory el cual es otra función API de Windows lo que
pretende es obtener la ruta donde yacen los archivos del sistema operativo Windows. El
código es el siguiente:
Declare Function GetWindowsDirectory Lib "Kernel32" _
Alias "GetWindowsDirectoryA" _
(ByVal f As String, ByVal fLen As Long) As Long
Arreglos:
Se debe recordar que a una funcion o procedimiento Visual Basic (Function o Sub) se
puede pasar como argumento un arreglo íntegro. Por ejemplo:
Declare Sub FX ( a(), f%, c%)
„...
Dim w(1 To Filas, 1 To Cols)
Call FX(w(), Filas, Cols)
Por el contrario, a una función de una DLL no se le puede pasar un arreglo integro, ni un
arreglo mayor a los 64 Kb, de la misma forma que a una función VB, a no ser que haya sido
escrita especificamente para VB. Para pasar un arreglo íntegro a una funcion de una DLL,
se debe pasar el primer elemento del arreglo por referencia. Esto es así por que los
elementos del arreglo están colocados en posiciones sucesivas de memoria. Una funcion de
una DLL a la que se le pasa el primer elemento de un arreglo tiene acceso a todos los
elementos del arreglo. Esto es valido para arreglos numéricos, pero no para de tipo cadena.
Tipos definidos por el usuario (estructuras):
Algunas funciones de las DLL aceptan un tipo definido por el usuario como argumento (una
estructura). Una estructura hay que pasarla por referencia. Por ejemplo:
Type RECT
Left As Integer
Top As Integer
Right As Integer
Bottom As Integer
End Type
Declare Sub InvertRect Lib “User” (ByVal hDC As Integer, lpRect As RECT)
Dim Posicion As RECT
La llamada siguiente pasa la estructura Posicion a la función InvertRect:
InvertRect hDc, posicion
Manual del Alumno
101
También es posible pasar estructuras que incluyan miembros que sean cadenas de
caracteres. Si la estructura contiene miembros que son cadenas de caracteres, debe definirse
a éstos como de longitud fija.
Para finalizar esta sesión de las API‟s de Windows crearemos un nuevo ejemplo mediante la
siguiente práctica:
Práctica No. 16
Para finalizar una sesión Windows bajo el control de una aplicación Visual Basic, se debe
utilizar la función API de Windows ExitWindows, cuya sintaxis es la siguiente:
Declare Function ExitWindows Lib “User” (ByVal dwReturnCode As Long,_
ByVal wReserved As Integer) As Integer
Recuerdese que una sentencia Declare debe estar en una sola línea.
Esta función permite iniciar Windows de nuevo, finalizar Windows y devolver el control a
DOS o finalizar Windows y arrancar la computadora de nuevo. El argumento
dwReturnCode especifica la accion a tomar; la palabra de mayor peso es cero y la de
menor peso puede ser: 0 (para finalizar Windows y devolver el control a DOS) 0x67
(finalizar Windows y arrancar la computadora de nuevo) 0x66 (reiniciar Windows). El
argumento wReserved es un valor reservado y debe ser 0.
Cuando la función ExitWindows es invocada Windows envia un mensaje a todas las
aplicaciones, notificándoles que ha sido requerida (como presionar CTRL+ALT+DEL) la
accion de finalizar Windows. Entonces esas aplicaciones pueden finalizar controladamente;
por ejemplo un procesador de textos preguntará al usuario si quiere guardar el documento
que se encuentra en ese momento abierto, entre otros. En el caso de que una o más
aplicaciones rehusen finalizar, esta función retorna 0. Windows enviará un mensaje
notificando y no finalizará; en otro caso, retorna un valor distinto de cero y se realizará la
acción requerida.
La utilización de ExitWindows es una buena idea para no perder datos.
Se diseñará un formulario tal y como se muestra a continuación:
Manual del Alumno
102
En el botón “Salir de Windows” escriba el siguiente código:
Private Sub CmdSalirDeWindows_Click()
'Salir de Windows y retornar a DOS
If ExitWindows(0, 0) = 0 Then
MsgBox "No se puede salir de Windows"
End If
End Sub
Posteriormente, cree un módulo para realizar la llamada a la función API de Windows
ExitWindows y coloque en ella el código siguiente:
Declare Function ExitWindows Lib "User" _
(ByVal wReserved As Long, _
ByVal dwReturnCode As Integer) As Integer
Procedimientos de la API de Windows utilizados con frecuencia
En la tabla siguiente se muestran algunos procedimientos de DLL procedentes de la API de
Windows que se suelen utilizar para ampliar las aplicaciones de Visual Basic.
BitBlt: Mover un mapa de bits de un contexto de dispositivo de origen a un destino.
ExtractIcon, DrawIcon y LoadIcon: Manipular iconos.
FindExecutable: Buscar y recuperar el nombre del archivo ejecutable asociado a un
determinado archivo.
GetSystemDirectory: Obtener la ruta de acceso del directorio del sistema de
Windows.
GetSystemMetrics: Obtener el alto y el ancho de los elementos de pantalla de
Microsoft Windows.
GetTempFileName: Devolver un nombre de archivo temporal y una ruta de acceso
mediante la variable de entorno TEMP.
GetWindowPlacement, SetWindowPlacement: Obtener o establecer el estado de
presentación y las posiciones normal (restaurada), minimizada y maximizada de una
ventana.
SendMessage: Enviar mensajes de Windows para controlar aplicaciones. Por
ejemplo, el mensaje LB_SETTABSTOPS establece las tabulaciones de un cuadro de
lista. LB_FINDSTRING busca la primera cadena del cuadro de lista que coincide con el
texto del prefijo. Hay centenares de mensajes distintos.
BringWindowToTop, SetActiveWindow: Establecer el enfoque en una
determinada ventana.
Manual del Alumno
103
DragAcceptFiles, DragFinish: Proporcionar las características de arrastrar y colocar
archivos.
FindWindow, ShowWindow: Comprobar si una aplicación determinada está o no en
ejecución actualmente.
GetActiveWindow, IsWindow: Determinar cuándo una función de núcleo ha terminado
de cargar un programa.
GetWindowText: Obtener el título de una ventana o el texto de un control, dado un
controlador de ventana.
Manual del Alumno
104
Manual del Alumno
105
Manual del Alumno
106
Manual del Alumno
107