Índice general - instituto wienerwiener.edu.pe/manuales/cicloi/lenguaje-de-programacion-i... ·...

154
Manual del Alumno INSTITUTO SUPERIOR TECNOLÓGICO NORBERT WIENER Manual del Alumno ASIGNATURA: Lenguaje de Programación I (Visual Basic I) 1

Upload: dominh

Post on 06-Oct-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

Manual del Alumno

INSTITUTO SUPERIOR TECNOLÓGICONORBERT WIENER

Manual del Alumno

ASIGNATURA: Lenguaje de Programación I (Visual Basic

I)

PROGRAMA: S3C

1

Manual del Alumno

Lima-Perú

2

Manual del Alumno

Í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

3

Manual del Alumno

ALGORITMOS, PROGRAMAS Y CONCEPTOS FUNDAMENTALES

AlgoritmosAlgoritmos.- 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.

4

Manual del Alumno

El ordenador deberá seguir la siguiente secuencia:

Pseudocódigo

Inicio

Abrir archivo de Listín telefónicoRepetir mientras no sea fin de archivo

Leer el nombre y teléfono Mostrarlo en pantalla Pasar a siguiente registro

Fin de RepetirCerrar 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.

5

Manual del Alumno

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 PrecedenciaPotenciaProductoDivisiónDivisión EnteraMódulo o RestoSumaResta

^*/\

Mod+-

7665544

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 OperadorMayor queMenor queIgual queDiferente deMayor o Igual queMenor o Igual queComparar 2 cadenasComparar 2 objetos

><=

<>>=<=

LikeIs

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.

6

Manual del Alumno

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.

7

Manual del Alumno

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ónByte 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 bytesLong Representa a un número entero largo entre -2,147’483,648 a 2,147’483,647, se

almacena en 4 bytesSingle 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.

8

Manual del Alumno

VariablesVienen 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).

9

Manual del Alumno

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.

10

Manual del Alumno

Ediciones de Visual Basic

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"

11

Manual del Alumno

4- Eventos

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 = RojoGlobo.Diámetro = 10Globo.Inflado = True

12

Manual del Alumno

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 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.InflarGlobo.DesinflarGlobo.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.DesinflarGlobo.HacerRuido "Bang"Globo.Inflado = FalseGlobo.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.

13

Manual del Alumno

Proyecto de visual Basic.

Un proyecto es una colección de archivos que se usan para generar una aplicación.

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.

14

Manual del Alumno

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.

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 Studio4. 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

15

Manual del Alumno

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:

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

16

Barra de Herramientas Estandar o ToolBar

Cuadro de Herramientas o ToolBox

Ventana Posición de l Formulario

Ventana de Propiedades

Ventana Explorador Proy ecto

Ventana Formulario

Barra de Menú

Manual del Alumno

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:

Botón Alternar carpetasPermite cambiar la presentación del proyecto entre elementos separados por tipo(carpetas) o todos juntos.

Botón Ver objetoPermite mostrar en pantalla el elemento seleccionado en la ventana del Explorador de Proyectos.

Botón Ver códigoPermite pasar a la ventana de código del elemento seleccionado en la ventana del Explorador de Proyectos.

Ventana PropiedadesEnumera 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.

17

Manual del Alumno

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.

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

18

Manual del Alumno

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 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.

FormularioEl 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:

19

Manual del Alumno

Presione ParaF7 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

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ú.

20

Manual del Alumno

 MinButtonMaxButton Valor por defecto: True 

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.

21

Manual del Alumno

 5 - Sizable ToolWindow

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. 

22

Manual del Alumno

DrawStile Valor por defecto : 0 Establece el estilo de línea de la salida de métodos gráficos: 

Valores: 0 - Línea continua1 - Rayas2 - Puntos3 - Raya-Punto4 - Raya - Punto - Punto5 - Transparente6 - 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 - Continuo1 - Transparente2 - Línea Horizontal3 - Línea Vertical4 - Diagonal hacia arriba5 - Diagonal hacia abajo6 - Cruzado7 - 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.

23

Manual del Alumno

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 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.

 

24

Manual del Alumno

Valor por defecto: el icono que se le haya programado en la personalización. 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 DDE1 - 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 

25

Manual del Alumno

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 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

26

Manual del Alumno

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 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.

27

Manual del Alumno

 WindowState 

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ónClick ClickDblClick Doble clicDeactivate DesactivaciónDragDrop Arrastrar y soltarDragOver Arrastrar por encimaGotFocus Obtener el focoKeyDown Mantener pulsada una teclaKeyPress Pulsar una teclaKeyUp Soltar una teclaLinkError Error de enlaceLinkExecute Ejecución de un enlace de datosLinkOpen Romper el enlaceLoad Cargar el formularioLostFocus Perder el focoMouseDown Pulsar una tecla del ratónMouseMove Mover el ratón (Detecta la posición del ratón sobre el formulario)MouseUp Soltar una tecla del ratónPaint PintarQueryUnloadConfirmación de descargaResize Cambio de tamañoUnload Descargar el formularioUn 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.

28

Manual del Alumno

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 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

29

Manual del Alumno

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 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.

 

DragIconEstablece el icono que se presenta como puntero en una operación de arrastrar y colocar.

 DragModeEstablece 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.

30

Manual del Alumno

 Font Fuente

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.

 LeftPosició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

31

Manual del Alumno

 TabIndex Nº de orden para tabulador

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

32

Manual del Alumno

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 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

33

Manual del Alumno

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.

 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

34

Manual del Alumno

Es el tipo de letra para el título. Puede cambiarse en tiempo de ejecución.

 ForeColorEs 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

35

Manual del Alumno

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 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

36

Manual del Alumno

valor True en su propiedad AutoSize se expande vertical u horizontalmente para adaptarse al texto especificado en su propiedad Caption. Es una propiedad Booleana.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: 

37

Manual del Alumno

 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.

 

38

Manual del Alumno

DragModeEstablece 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.

 HelpContextIDEstablece 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

39

Manual del Alumno

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ónDetermina 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

40

Manual del Alumno

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 barras1 - Barras de desplazamiento horizontal2 - Barras de desplazamiento vertical3 - 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.

41

Manual del Alumno

 

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.

42

Manual del Alumno

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.

43

Título

Mensaje

Valor_por_defecto

Manual del Alumno

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ónvbOK 1 Sí presiono el botón AceptarvbCancel 2 Sí presiono el botón CancelarvbAbort 3 Sí presiono el botón AnularvbRetry 4 Sí presiono el botón ReintentarvbIgnore 5 Sí presiono el botón IgnorarvbYes 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:

44

Manual del Alumno

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 IntegerRpta = MsgBox(“Grabar Archivo”, 4 + 32 + 0, “Mensaje a Usuario”)

Cuadro MsgBox

CARACTERISTICAS DEL LENGUAJE VISUAL BASIC

Tipos de Datos utilizados en Visual Basic.Tipos de Datos utilizados en Visual Basic.

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 $

45

Valor_Botones Mensaje

Título

Manual del Alumno

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 VariablesLas 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.

46

Manual del Alumno

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 ExplicitTambié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 variablesEl 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 variablesDependiendo de cómo se declara, una variable tiene como alcance un procedimiento (local) o un módulo.

Alcance Privado PúblicoNivel deprocedimiento

Las variables son privadas del procedimiento en el que aparecen.

No es aplicable. No puede declarar variables públicas dentro de un procedimiento.

Nivel deMó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 procedimientoDe 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.

ConstantesUna 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:

47

Manual del Alumno

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ónCambio de signoMultiplicación y divisiónDivisión enteraResto de una división enteraSuma y resta

ˆ-

*, /\

Mod+,-

48

Manual del Alumno

Concatenación Concatenar o enlazar &

Relacional Igual, distinto, menor, mayor =,<>,<,>,<=,=>

Otros Comparar dos expresiones de caracteresComparar dos referencias a objetos

LIKEIS

Lógico NegaciónY (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)

NotAndOrXorEqvImp

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 ShowPara 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 modal1 vbModal Modal

Ejemplo:

49

Manual del Alumno

Form2.Show vbModal

COMUNICACIÓN ENTRE FORMULARIOSDesde 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 propiedadEjemplo:

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:

50

Manual del Alumno

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

51

Manual del Alumno

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}

52

Manual del Alumno

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.

53

Manual del Alumno

 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.

ClipControlsSi 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.

54

Manual del Alumno

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 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.

55

Manual del Alumno

 Alignment Común a ambos controles. 

Admite los siguientes valores : 0 - Left Justify1 - 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 

56

Manual del Alumno

El poner como Value el valor True nos dará en este control un error. 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 stringVAL(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 enteroCSNG(Exp).- Convierte una expresion en un dato de tipo Single.CLNG(Exp).- Convierte una expresion en un dato de tipo LongCDBL(Exp).- Convierte una expresion en un dato de tipo DoubleCCUR(Exp).- Convierte una expresion en un dato de tipo currencyCBYTE(Exp).- Convierte una expresion enb un dato de tipo ByteCHR(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 cadenaLen(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 FechaDag(Fecha).- Obtiene el dia de una fecha determinada.

57

Manual del Alumno

Date.- Retorna la fecha actual 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 actualTime 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 tiemposSecond(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

58

Manual del Alumno

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).

59

Manual del Alumno

 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 listaListIndex - 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.ListcountVariable 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.

60

Manual del Alumno

 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.

61

Manual del Alumno

Recuerde : El número que se le asigna a la propiedad Columns no indica el número de 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.

62

Manual del Alumno

La propiedad ItemData se usa a menudo como índice de una matriz de estructuras de datos asociados con los elementos de un control ListBox. 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.

63

Manual del Alumno

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 

64

Manual del Alumno

Drive devuelve el nombre de la unidad de disco seleccionada : 

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 : PathDevuelve 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 DirListBoxpathname Una expresión de cadena que evalúa en el nombre de vía de acceso del directorio por defecto del DirListBox.. 

65

Manual del Alumno

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

66

Manual del Alumno

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

67

Manual del Alumno

 

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 FileListBoxbooleano :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. 

68

Manual del Alumno

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 (*)IntervalEl 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 

69

Manual del Alumno

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.

70

Manual del Alumno

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.  

71

Manual del Alumno

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 :

72

Manual del Alumno

 

 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. 

73

Manual del Alumno

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 : 

74

Manual del Alumno

 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. 

75

Manual del Alumno

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 ToolbarIndice es el número de orden de ese botón dentro del ToolbarKey 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 arribaImagen 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 :

76

Manual del Alumno

 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 

77

Manual del Alumno

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:

78

Manual del Alumno

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]

79

Manual del Alumno

[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:

80

Manual del Alumno

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 = FEnd Function

Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Fact = Factorial(Val(Text1)) Label3.Caption = Str(Fact) End IfEnd 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:

81

Manual del Alumno

[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))

82

Manual del Alumno

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.

83

Manual del Alumno

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, _ ByVal PagarHora As Long, _

84

Manual del Alumno

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 IfEnd 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:

Factorial (Num), Fact

85

Manual del Alumno

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 IfEnd 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.

86

Manual del Alumno

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.

87

Manual del Alumno

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 IntegerDim CambioLinea$, Fin%

Procedimientos creados:

88

Manual del Alumno

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) = INext IMostrarEnd 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:

89

Manual del Alumno

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:

90

Manual del Alumno

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 = 0End Sub

FUNCIONES API’S DE WINDOWS

Librerías dinámicas:

91

Manual del Alumno

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.

92

Manual del Alumno

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.

93

Manual del Alumno

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.

94

Manual del Alumno

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.

95

Manual del Alumno

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" ()

96

Manual del Alumno

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 Integera 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

97

Manual del Alumno

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 StringRuta = String$(255,0)W = GetWindowsDirectory(Ruta, Len(Ruta))

Práctica No. 15

98

Manual del Alumno

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()

Dim sWinDir As String

99

Manual del Alumno

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.ShowEnd 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:

'En las declaraciones generales de un módulo .BAS.

100

Manual del Alumno

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 RECTLa llamada siguiente pasa la estructura Posicion a la función InvertRect:

InvertRect hDc, posicion

101

Manual del Alumno

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:

102

Manual del Alumno

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 IfEnd 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.

DragAcceptFiles, DragFinish: Proporcionar las características de arrastrar y colocar archivos.

103

Manual del Alumno

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.

104

Manual del Alumno105

Manual del Alumno106

Manual del Alumno107

Manual del Alumno108