·    INDICE

 

·       Introduccion e historia de VISUALBASIC

·       Visual Basic - Guía del Estudiante  Cap. 1:

ARRANQUE Y ENTRADA

·       Visual Basic - Guía del Estudiante  Cap. 2:

FORMULARIOS

·       Visual Basic - Guía del Estudiante  Cap. 3:

CONTROLES

·       Visual Basic - Guía del Estudiante  Cap. 4:

CONTROLES DE IMAGEN

·       Visual Basic - Guía del Estudiante  Cap. 5:

CONTROLES DE BUSQUEDA DE FICHEROS

·       Visual Basic - Guía del Estudiante  Cap. 6:

DDE

·       Visual Basic - Guía del Estudiante  Cap. 7:

METODOS GRAFICOS

·       Visual Basic - Guía del Estudiante  Cap.8:

FICHEROS

·       Visual Basic - Guía del Estudiante  Cap.9:

INTERFACE DE DOCUMENTOS MULTIPLES (MDI)

·       Visual Basic - Guía del Estudiante  Cap.10:

El Objeto Printer

·       Visual Basic - Guía del Estudiante  Cap. 11:

FUNCIONES

·       Visual Basic - Guía del Estudiante  Cap. 12:

EL CONTROL RICH TEXT BOX

·       Visual Basic - Guía del Estudiante  Cap. 13:.

LA AYUDA DE WINDOWS

·       Visual Basic - Guía del Estudiante  Cap. 14:

Procedimientos y funciones en VB

·       Visual Basic - Guía del Estudiante  Cap. 15:

OLE

·       Visual Basic - Guía del Estudiante  Cap. 16:

MULTIMEDIA.  REPRODUCCION DE SONIDOS E IMÁGENES

·       Visual Basic - Guía del Estudiante  Cap. 17:

CORRECCION DE ERRORES Y DEPURACION DE PROGRAMAS - EL OBJETO ERROR. OPTIMIZACION – DISTRIBUCION DE APLICACIONES

·       Visual Basic - Guía del Estudiante  Cap. 18:

BASES DE DATOS EN VISUAL BASIC 

·       Visual Basic - Guía del Estudiante  Cap. 19:

OPERACIONES CON BASES DE DATOS SIN UTILIZAR EL CONTROL DATA

 


Introduccion e historia de VISUALBASIC

 

INTRODUCCION   Antecedentes históricos.

___________________________________

 

El lenguaje de programación BASIC  (Beginner's All purpose Symbolic Instruction Code ) nació en el año 1964 como una herramienta destinado a principiantes, buscando una forma sencilla de realizar programas, empleando un lenguaje casi igual al usado en la vida ordinaria ( en inglés), y con instrucciones muy sencillas y escasas. Teniendo en cuenta el año de su nacimiento, este lenguaje cubría casi todas las necesidades para la ejecución de programas. Téngase en cuenta que las máquinas existentes en aquella época estaban estrenando los transistores como elementos de conmutación,  los ciclos de trabajo llegaban a la impensable cifra de 10.000 por segundo y la memoria no pasaba de unos pocos k´s en toroides de ferrita.

 

La evolución del BASIC por los años 70 fue escasa, dado el auge que tomaron en aquella época lenguajes de alto nivel como el FORTRAN y el COBOL. En 1978 se definió una norma para unificar los Basics existentes creándose la normativa BASIC STANDARD

 

Con la aparición de los primeros ordenadores personales, dedicados comercialmente al usuario particular, allá por la primera mitad de los ochenta, el BASIC resurgió como lenguaje de programación pensado para principiantes, y muchos de estos pequeños ordenadores domésticos lo usaban como único sistema operativo (Sinclair, Spectrum, Amstrad)

 

Con la popularización del PC, salieron varias versiones del BASIC que funcionaban en este tipo de ordenadores (Versiones BASICA, GW-BASIC), pero todas estas versiones del BASIC no hicieron otra cosa que terminar de rematar este lenguaje. Los programadores profesionales no llegaron a utilizarlo, habida cuenta de las desventajas de este lenguaje respecto a otras herramientas (PASCAL, C, CLIPPER).  El BASIC con estas versiones para PC llegó incluso a perder crédito entre los profesionales de la informática.

 

Las razones para ello eran obvias:

 

          - No era un lenguaje estructurado.

          - No existían herramientas de compilación fiables.

          - No disponía de herramientas de intercambio de información.

          - No tenía librerías.

          - No se podía acceder al interior de la máquina.

          - Un largo etcétera de desventajas respecto a otros lenguajes de programación.

 

Tal fue ese abandono por parte de los usuarios, que la aparición del Quick-BASIC de Microsoft, una versión ya potente del BASIC, que corregía casi todos los defectos de las versiones pasó prácticamente inadvertida, a no ser porque las últimas versiones del sistema operativo MS-DOS incluían una versión de Quick-BASIC algo recortada (Q-Basic) como un producto mas dentro de la amplia gama de ficheros ejecutables que acompañan al sistema operativo, y aprovecha de él el editor de textos (Cada vez que se llama al EDIT estamos corriendo el editor del Q-Basic).

 

Esta versión del popular BASIC ya es un lenguaje estructurado, lo que permite crear programas modularmente, mediante subrutinas y módulos, capaz de crear programas ya competitivos con otros lenguajes de alto nivel. Sin embargo llegaba tarde, pues los entornos MS-DOS estaban ya superados por el entorno gráfico Windows.

 

Sin embargo algo había en el BASIC que tentaba a superarse: su gran sencillez de manejo. Si a esto se le añade el entorno gráfico Windows, el aprovechamiento al máximo de las posibilidades de Windows en cuanto a intercambio de información, de sus librerías, de sus drivers y controladores, manejo de bases de datos, etc. el producto resultante puede ser algo que satisfaga todas las necesidades de programación en el entorno Windows. La suma de todas estas cosas es VISUAL - BASIC.  Esta herramienta conserva del BASIC de los años 80 únicamente su nombre y su sencillez,  y tras su lanzamiento al mercado, la aceptación a nivel profesional hizo borrar por fin el "mal nombre" asociado a la palabra BASIC.

 

Actualmente se está comercializando la versión 5.0 de este producto. Desde su salida al mercado, cada versión supera y mejora la anterior. Dados los buenos resultados a nivel profesional de este producto, y el apoyo prestado por el fabricante para la formación de programadores, Visual-Basic se ha convertido en la primera herramienta de desarrollo de aplicaciones en entorno Windows.

 

Es obligado decir sin embargo, que sigue siendo BASIC. No se pueden comparar sus prestaciones con otros lenguajes cuando deseamos llegar al fondo de la máquina y controlar uno a uno sus registros. No es ese el fin perseguido con VB y si es necesario llegar a esas precisiones será necesario utilizar otro lenguaje que permita bajar el nivel de programación. (Visual-C). o realizar librerías (DLLs) que lo hagan. En la mayor parte de las aplicaciones, las herramientas aportadas por VB son mas que suficiente para lograr un programa fácil de realizar y de altas prestaciones.

 

Características Generales de Visual-Basic

 

Visual-Basic es una herramienta de diseño de aplicaciones para Windows, en la que estas se desarrollan en una gran parte a partir del diseño de una interface gráfica. En una aplicación Visual - Basic, el programa está formado por una parte de código puro, y otras partes asociadas a los objetos que forman la interface gráfica.

 

Es por tanto un termino medio entre la programación tradicional, formada por una sucesión lineal de código estructurado, y la programación orientada a objetos. Combina ambas tendencias. Ya que no podemos decir que VB pertenezca por completo a uno de esos dos tipos de programación, debemos inventar una palabra que la defina : PROGRAMACION VISUAL.

 

La creación de un programa bajo Visual Basic lleva los siguientes pasos:

 

- Creación de un interface de usuario. Este interface será la principal vía de comunicación hombre máquina, tanto para salida de datos como para entrada. Será necesario partir de una ventana  - Formulario - a la que le iremos añadiendo los controles necesarios.

 

- Definición de las propiedades de los controles - Objetos - que hayamos colocado en ese formulario. Estas propiedades determinarán la forma estática de los controles, es decir, como son los controles y para qué sirven.

 

- Generación del código asociado a los eventos que ocurran a estos objetos. A la respuesta a estos eventos (click, doble click, una tecla pulsada, etc.) le llamamos Procedimiento, y deberá generarse de acuerdo a las necesidades del programa.

 

- Generación del código del programa. Un programa puede hacerse solamente con la programación de los distintos procedimientos que acompañan a cada objeto. Sin embargo, VB ofrece la posibilidad de establecer un código de programa separado de estos eventos. Este código puede introducirse en unos bloques llamados Módulos, en otros bloques llamados Funciones, y otros llamados Procedimientos. Estos Procedimientos no responden a un evento acaecido a un objeto, sino que responden a un evento producido durante la ejecución del programa.

 

No es necesario entender de momento lo anterior. Visual Basic introduce un concepto nuevo de programación, y es necesario cambiar hasta el argot del programador. Posiblemente se le habrán acumulado demasiados términos de una sola vez. Es normal. A poco que siga leyendo verá las cosas mas claras cuando se explique una por una.

 

VARIABLES. DEFINICION Y ENTORNO

 

Basic, desde siempre, al contrario de otros sistemas de programación, no exigió la definición previa de una variable.  Una variable, como Vd. seguro que conoce, es un nombre que en el programa le asignamos a un dato. Ese dato podrá cambiar. Piense por ejemplo, en un programa consistente en la toma de datos de los alumnos de un centro escolar. Existirán varias variables para poder introducir los datos de los alumnos. Estas variables pueden tener nombre tales como:

 

          Nombre

          Apellido1

          Apellido2

          Dirección

          Teléfono

          DNI

         

La variable Nombre tomará valores distintos según vayamos introduciendo los datos de los distintos alumnos. Es posible, que a lo largo de la ejecución del programa, esta variable Nombre valga:

 

          José

          Pedro

          María

          Luis

 

Espero que su intuición o conocimiento anterior le lleve a conocer el concepto de variable. Mas adelante lo verá mas claro.

 

Decíamos que Basic no exige la definición previa de las variables. Otras herramientas exigen que se haga así. Por lo tanto es normal encontrar, en otros sistemas de programación, que un programa comienza de la siguiente forma:

 

          Declare Nombre As String Le dice que Nombre es una sucesión de letras

          Declare Apellido1 As String

          Declare Apellido2 As String

          Declare Dirección As String

          Declare Teléfono As String          Le dice que Teléfono es una sucesión de letras 

          Declare DNI As Número              Le dice que DNI es un número

 

Mediante estas declaraciones, el programa sabe de que tipo de dato se trata y por tanto cómo debe trabajar con él. En otros sistemas de programación distintos de Basic, es necesario realizar esta declaración antes de introducir una variable.

 

Basic permite que no se declaren. Cuando a lo largo del programa le introducimos una variable nueva, asume que es una variable y que el tipo es el adecuado para el valor que le estamos introduciendo en ese momento.

 

Por ejemplo, si Basic encuentra estas instrucciones

 

                    DNI=50000000

                    Nombre ="Pedro"

                    Teléfono = "1234567"

 

entiende que DNI, Nombre y Teléfono son variables, que DNI es un número (No hemos metido su valor entre comillas), y que Nombre y Teléfono son sucesiones de caracteres alfanuméricos (su valor está entre comillas)

 

Esta particularidad de no necesitar declarar las variables hace que sea sencillo introducir una variable nueva.  Sin embargo entraña un gran peligro. Imagínese que en un paso posterior del programa, le mandamos escribir esos tres datos anteriores con la instrucción PRINT

 

                    Print DNI

                    Print Nombre

                    Print Telwfono

 

Habrá observado en tercer lugar la palabra Telwfono, que por error ha introducido el programador. Basic interpreta que Telwfono es una variable e irá a leer en memoria el valor que tiene. No tendrá ningún valor. Por lo tanto no escribirá nada y encima no dará ningún aviso de que se ha cometido un error. Nada es gratis en esta vida, y la facilidad para introducir variables se paga con la posibilidad de un error.

 

Basic ha pensado en ese problema, y se puede solucionar con esta que será la primera instrucción BASIC que vamos a estudiar:

 

OPTION EXPLICIT          

Obliga a declarar previamente las variables que se vayan a usar. De no haberla declarado antes de usarla, el programa dará una comunicación de error.

 

 

TIPOS DE VARIABLES

 

Las variables pueden ser de los siguientes tipos: (El número indicado en segundo lugar indica el número de Bytes que ocupa en memoria.)

 

 

Booleana      (2)      Admite los valores 0 y 1, o True (verdadero) y False (falso)

Byte             (1)      Números enteros, en el rango de 0 a 255

Integer                   (2)      Números enteros en el rango de -32768 a 32767

Long             (4)      Números enteros en el rango de -2147483648 a 2147483647

Single           (4)      Punto flotante, simple precisión

Doble           (8)      Punto flotante, doble precisión.

Currency       (8)      Entero, con punto decimal fijo  (Típico de monedas)

String           (*)      Cadenas alfanuméricas de longitud variable o fija

Date             (8)      Fechas

Objet            (4)      Referencia a objetos

Variant                   (**)     Otros tipos de datos

 

(*) Una variable tipo String ocupa el mismo número de bytes que caracteres tenga la cadena.

(**) Una variable tipo Variant ocupa 16 bytes si se trata de un número y 22 bytes + longitud de la cadena si se trata de un dato tipo cadena de caracteres.

 

Existen también variables definidas por el usuario (Ya verá la sentencia Type). En este tipo de variables se pueden introducir muchos datos de distinto tipo. Los bytes necesarios para almacenar esa variable dependerá de los datos que se hayan definido.

 

Dentro de las variables Objet (variables que se refieren a objetos) existe una gran variedad que a estas alturas del curso no debemos complicarnos con ellas. Pero para adelantar algo, veremos que una variable puede ser del tipo Form - Formulario - , tipo Picture, etc. etc.

 

Cada tipo de variable ocupa unos determinados bytes. Si no se define una variable, VB toma como tipo por defecto para la variable el tipo Variant. Este tipo ocupa mas bytes que, por ejemplo, un integer. Si el tipo de dato que vamos a introducir en una variable es un integer, y no la hemos declarado como tal, VB asumirá para esa variable que es del tipo Variant, lo que le llevará a gastar mas bytes de memoria (16) que los que necesitaría (2) si la hubiésemos declarado previamente. Si esa variable va a estar en el rango de 0 a 255, y no declaramos previamente que la variable va a se del tipo Byte, o la declaramos como integer, p. e., estamos desperdiciando memoria RAM y posiblemente, retardando la ejecución del programa. Lo mismo podemos decir del resto de las variables, y lo importante que es definirlas y definirlas bien.

 

NOTA. Observe en la lista anterior que un dato Booleano ocupa 2 Bytes, mientras que un dato tipo Byte ocupa un byte.  En muchas ocasiones declaramos variables tipo Boolean con la intención de que ocupen menos espacio. Paradoja del VB. Si la declaramos como Byte ocupamos menos espacio en memoria. Declarar una variable como Boolean tiene también sus ventajas (escribirá menos código por lo general cuando necesite leer o escribir una variable tipo Boolean), pero tenga presente esta observación respecto a los datos Boolean.

 

Puede declarar el tipo de la variable mediante un carácter después del nombre de la variable. Esta técnica, obligatoria en Quick-Basic, está en desuso en VB. No es recomendable definir el tipo de esta forma, pues existe un serio peligro de error. De cualquier forma, eso es potestativo del programador y de sus costumbres.

 

Los caracteres que definen cada tipo de variable son:

 

 

                    %       Integer                   &        Long             !         Single

 

                    #        Double                   @       Currency       $        String

 

 

Ejemplos Prácticos de declaración de variables

 

En Visual Basic, cuando declaramos una variable como String (Cadena de caracteres), no es necesario declarar su longitud.  VB aceptará cualquier número de caracteres. Si desea evitar que se puedan introducir más de un determinado número de caracteres, debe declarar su número. Por ejemplo :

 

          Dim Var1 as String            Var1 puede tener cualquier número de caracteres

 

          Dim Var2 as String * 15               Var2 puede tener un máximo de 15 caracteres.

 

En este segundo caso, si se introduce como Var2 una cadena de caracteres con mas de 15 caracteres, Var2 tomará solamente los 15 primeros.  Visual basic no presenta ningún aviso de que esa variable ha omitido los caracteres que han sobrepasado la cifra de 15. Si desea que el usuario conozca esa circunstancia, debe introducir el código oportuno para producir el aviso.

 

La declaración de variables tipo String con número de caracteres predefinido presenta también inconvenientes a la hora de tratar esa cadena de caracteres con sentencias tales como Mid, Left y Right, o a la hora de añadir una cadena a otra.  La experiencia nos indica que NO merece la pena declarar variables tipo String con el número de caracteres prefijado.

 

En una gran parte de los casos una variable que se compone de números debe declararse como una variable de cadena de caracteres (String), y no como numérica. Cuando pensamos por ejemplo en un número de DNI, compuesto por 7 u 8 cifras, un código postal, el número de una calle, el piso de un edificio,  parecen invitar a que la variable que los contenga sea una variable de tipo numérico (Byte, Integer, Long, ...).  Estas variables, aunque su contenido sean números, siempre se deben declarar como String, ya que se tratan en realidad de cadenas de caracteres, aunque estos sean números. Para aclarar mas estas ideas, piense en el número del DNI con la letra del NIF incluido, o que el lugar del DNI se deba rellenar con el número del permiso de residencia, (lleva letras).  Piense en el código postal de una provincia que comienza por 0 ( 08XXX = Barcelona ) . Si la variable que va a contener ese código postal se declara como numérica, el cero de la izquierda lo desprecia, por lo que ese código postal quedaría reducido al  8XXX, número de 4 cifras que el cartero nunca reconocería como un código postal, que necesariamente ha de tener 5 cifras.  Para terminar, piense la forma de introducir en una variable numérica el número 32Bis de una calle o el piso S2 de un edificio. O piense en una variable que va a contener un código de un producto. Ese código siempre va a ser un número, por ejemplo de 9 cifras. ¿Ha pensado como trataría el ordenador una variable numérica que contiene el código 000100123 ?. El resultado sería que convertiría ese código en la cifra 100123, y Vd. deberá buscarse la vida para añadir los ceros iniciales a la hora de sacarlo a una impresora, por ejemplo.

 

En todos los casos anteriores, el número no representa una cantidad numérica, sino un nombre. Lo que ocurre es que ese nombre contiene solamente números.

 

¿Qué variables debemos declarar entonces como numéricas ? La respuesta es bien sencilla : Aquellas que van a contener datos con lo que vamos a realizar operaciones matemáticas.

 

Las variables booleanas (True/False) pueden en muchos casos sustituirse por una variable del tipo Byte. Si ese datos True / False se va a introducir en una base de datos o en fichero en el disco, puede ser mas prudente poner 0 en vez de False y 1 en vez de True.

 

Una variable byte ocupa muy poco, simplemente 1 byte como su nombre indica. Pero no puede contener números mayores de 255 ni números negativos.

 

Cada vez que declare una variable numérica piense en los valores que puede tener, sobre todo cuando esa variable va a ser el resultado de una operación matemática. Recuerde el escaso margen de una variable tipo Integer ( de -32768 a 32767)

 

Si la aplicación va a tratar moneda, piense en la forma de expresar los números decimales y el número de ellos permitidos, así como el redondeo.  La variable correcta para este caso es Currency, pero Currency le añade automáticamente el tipo de moneda de cada país (Pts. Para España) lo que con frecuencia es un engorro. Los datos del tipo de moneda los toma del sistema operativo del ordenador, por lo que no se extrañe si le expresa el número de pesetas en dólares. Cambie el país  en su S. O.

 

 

Ambito de las variables.

 

Denominamos ámbito de una variable a las partes del programa donde esa variable está declarada.  Para entenderlo mejor, veamos someramente la forma de un programa desarrollado en VB.

 

Un programa VB tiene uno o varios formularios. Cada formulario tiene varios controles. Tanto el formulario como cada uno de sus controles tienen una parte del programa, justamente la parte relacionada con cada uno de los eventos que pueden suceder bien al formulario o a los controles. A estas partes las habíamos llamado Procedimientos. Podemos tener procedimientos que no estén relacionados con ningún evento ocurrido al formulario o a sus controles. (Los Procedimientos que iremos insertando a lo largo de la aplicación)

Aparte de formularios y controles, un programa puede tener Módulos, y en cada uno de los módulos podemos insertar cuantos Procedimientos y Funciones queramos.  La estructura de un programa VB puede ser de la siguiente forma:

 

Formulario1  Formulario2  Formulario3  Módulo1       Modulo2

Declaraciones         Declaraciones         Declaraciones         Declaraciones          Declaraciones

Proc. A1       Proc.B1        Proc.C1        Proc.D1        Proc.E1

Proc. A2       Proc.B2        Proc.C2        Proc.D2        Proc.E2

Proc. A3       Proc.B3        Proc.C3        Proc.D3        FunciónE1

Proc. A4       Proc.B4        Proc.C4        Proc.D4        FunciónE2             

Proc. A5       Proc.BB1      Proc.CC1                         FunciónE3

Proc. AA1     Proc.BB2      Proc.CC2                         FunciónE4

Proc. AA2     Proc.B33      Proc.CC3                         FunciónE5

Proc. AA3                        Proc.CC4                         FunciónE6

 

Si se declara una variable dentro de un procedimiento o Función, esa variable "NO SALE" del Procedimiento o Función donde se declaró. El procedimiento puede estar en un Formulario (Cualquier procedimiento de un control o un procedimiento creado por nosotros) o en un Módulo (En este caso, el procedimiento solo puede ser creado por nosotros)

         

En un Formulario, una variable puede declararse de dos formas : Privada o Pública. Para declarar una variable a nivel de formulario debe hacerse en la sección de declaraciones, que está la ventana de código Objeto = General, Proc. = Declaraciones. Si se declara Privada, esa variable se puede mover por todo el formulario, (es decir, por todos los procedimientos de todos los controles del formulario y por los Procedimientos que pudiésemos insertar en ese formulario), pero no sale de dicho formulario.  Si se declara como Pública, esa variable puede moverse por todo el formulario, de la misma forma que lo haría declarada como Privada, y además puede ser usada desde otro Formulario o Módulo, citándola con el nombre del Formulario, seguido del nombre de la variable (Formulario.Variable)

 

En un Módulo una variable puede declararse como Privada, con lo que no saldrá de ese Módulo, o Pública, pudiendo en este caso usarse en todo el programa. Cuando se declara una variable como pública en un Módulo, basta referirse a ella por su nombre, sin citar el nombre del Módulo donde se declaró.

 

En  VB es posible declarar varias veces las variables, es decir, pueden declararse a nivel de formulario, en su apartado de declaraciones, y esa variable conservará su valor en todas las partes de ese formulario. Sin embargo, si se declara una variable con el mismo nombre a un nivel inferior, por ejemplo al principio de un procedimiento, esa variable será una variable distinta a la anterior, aunque tenga el mismo nombre, a al declararla en un Procedimiento, solamente será válida en ese Procedimiento. Una vez que hayamos salido de ese procedimiento, la variable con ese nombre volverá a ser la declarada en el Formulario. En realidad, lo que tenemos son dos variables distintas, pero con el mismo nombre, una declarada para todo el formulario excepto para el procedimiento donde se volvió a declarar, y otra para ese procedimiento concreto.

 

NOTA.- No es recomendable declarar una variable a dos niveles. Es mucho mejor utilizar otro nombre para esa variable dentro del procedimiento donde se le declararía por segunda vez. A esta nota cabe exceptuar cuando declaramos variables para una operación tipo contador

 

          For I = 1 To N

 

Esa variable I es práctico declararla con el mismo nombre en cada Procedimiento donde se use.

  

Tipos de declaración de variables.

 

          Sentencia DIM                 Es la forma mas común de declarar una variable como

Privada. Puede emplearse en un Procedimiento, Función, Formulario o Módulo. La sintaxis es de la siguiente forma:

 

                    Dim    nombrevariable       As Integer    (o el tipo que sea)

 

Declarando una variable con la sentencia DIM, en un formulario, Función, procedimiento o módulo, el entorno de la variable será el explicado anteriormente para una variable declarada como Privada. Es decir, esa variable no sale del formulario, procedimiento ó módulo donde se declaró. Cada vez que entremos al formulario, procedimiento o módulo, esa variable tomará el valor cero (si es numérica) o nulo (si es string).

 

Sentencia PRIVATE                   Es la forma de declarar una variable como Privada. Puede

emplearse solamente en la sección de declaraciones de un Formulario o Módulo. La sintaxis es de la siguiente forma:

 

                    Private         nombrevariable       As Tipovariable      

 

 

Declarando una variable mediante la sentencia PRIVATE en un Formulario o Módulo, esa variable puede usarse en todo ese Formulario o Módulo (En todos sus Procedimientos y Funciones), pero NO fuera del Formulario o Módulo donde se declaró.

 

La sentencia Private no puede usarse en un procedimiento o función.

 

 

Sentencia PUBLIC           Es la forma de declarar una variable como Pública. Puede

emplearse solamente en la sección de declaraciones de un Formulario o Módulo. La sintaxis es de la siguiente forma:

 

                            Public  nombrevariable          As    Tipovariable          

 

Declarando una variable de esta forma en la sección de declaraciones de un Módulo, esa variable puede usarse en cualquier parte del programa citándola simplemente por su nombre.

Si se declara de esta forma en la sección de declaraciones de un Formulario, esa variable puede usarse en toda el programa. Para nombrarla, si estamos en el Formulario donde se declaró basta con citarla por su nombre. Si no estamos en ese Formulario, habrá que citarla por el nombre del Formulario, seguido del nombre de la variable, separados por un punto :

 

                    NombreFormulario.Nombrevariable

 

En un Módulo puede usarse también la sentencia Global en vez de Public :

 

          Sentencia  GLOBAL        Declara una variable que es válida en todo el programa. La                                       sintaxis es:

 

                    Global                    nombrevariable       As      tipovariable

 

La sentencia Global sólo puede usarse en el apartado de declaraciones de un Módulo.

 

Mediante la sentencia Global la variable puede usarse en todo el espacio del programa.

 

Sentencia STATIC

 

Como se dijo anteriormente, una variable declarada en un procedimiento pierde su valor al salir de él. Lo peor es que una vez que el programa vuelva a entrar en ese procedimiento, la variable estará puesta a cero. Afortunadamente, esto último tiene solución. Si declarásemos una variable en un procedimiento o función, como estática, esa variable, aunque no la podremos utilizar fuera de ese procedimiento o función, cuando volvamos a él conservará el valor que tenía cuando lo abandonamos. Esta declaración como estática se realiza mediante la intrucción Static

 

          Static           nombrevariable                 As      tipovariable

 

 

El nombre de una variable puede ser tan largo como queramos. hasta un máximo de 40 caracteres.  En la versión VB para España se pueden usar incluso la Ñ y vocales acentuadas. Es indiferente usar mayúscula ó minúsculas. No se sorprenda, si por ejemplo, la ha declarado con mayúsculas y luego la cita con minúsculas al escribir el código, que automáticamente se cambie a mayúsculas. El nombre de una variable siempre debe comenzar por una letra.

 

No hay problema por utilizar variables largas. Al compilar el programa no se lleva el nombre, es decir, no le va a ocupar mas espacio. Utilice siempre nombres que le definan la variable con algún sentido. Es muy útil a la hora de acordarse como se llaman, y sobre todo, a la hora de rehacer un programa que realizó hace seis meses.

 

Pese a que Visual Basic no obliga a declarar variables, es muy útil hacerlo. De esta forma se tiene control sobre el programa. La experiencia se lo irá demostrando.

 

Resumimos la forma de declarar una variable :

 

En un Procedimiento  (La variable no puede usarse fuera de esta Procedimiento)

 

                    Dim Variable As Tipovariable

 

En un Procedimiento, como permanente (La variable no puede usarse fuera de este procedimiento, y dentro de él conserva el valor aunque se salga y se vuelva a entrar)

 

                    Static  Variable As Tipovariable

 

En un Formulario  (En su sección de declaraciones)

 

Como Privada  (Solamente se puede usar en ese Formulario)

 

                    Dim Variable As  Tipovariable          ó

 

                    Private Variable As Tipovariable

 

Como Pública    (Puede usarse en toda la aplicación)

 

                    Public Variable As Tipovariable

 

En un Módulo

                   

Como Privada  (Solamente puede usarse en ese Módulo)

 

Dim Variable As  Tipovariable          ó

 

                    Private Variable As Tipovariable

 

Como Pública    (Puede usarse en toda la aplicación)

 

                    Public Variable As Tipovariable        ó  

 

                    Global  Variable As Tipovariable

 

Error típico de un programador novel de Visual Basic

 

Creo que esta costumbre viene del lenguaje C. Pero no vale en VB. Se trata de declarar varias variables juntas en una misma línea :

 

Dim Variable1, Variable2, Variable3, Variable4 As String

 

Esta declaración está MAL hecha. Visual Basic interpretará que Variable1, Variable2 y Variable3 son del tipo Variant, y solamente Variable4 la supone como tipo String

 

La forma correcta de hacerlo, si queremos declarar esas variables un una sola línea, es la siguiente :

 

Dim Variable1 As String, Variable2 As String, Variable3 As String, Variable4 As String.

 

Lenguaje Basic del Visual Basic.

 

No ha sido un juego de palabras. VB emplea unas instrucciones casi iguales a las que emplea Quick Basic. Sin embargo ha añadido otras nuevas instrucciones, inherentes con la programación visual. Vamos a estudiar aquí las instrucciones y definiciones mas sencillas, comunes a QB y VB.

 

Sentencias condicionales.

 

Llamamos sentencias condicionales a aquellas que se realizan si se cumple una determinada condición. Son las sentencias por las que empieza cualquier texto de Basic, y este no va ser menos.

 

La sentencia condicional mas usada es:

 

          Si se cumple una condición Entonces

 

          Realiza estas instrucciones

 

          Si no se cumple

 

          Realiza estas otras instrucciones

 

          Fin de la sentencia.

 

Así de fácil es programar en Basic. Lo que ocurre es que esta herramienta habla inglés, y lo descrito anteriormente toma la forma:

 

          If  condición  Then

          Instrucciones

          Else

          Otras instrucciones

          End If

 

En este ejemplo, la condición era que, o se cumple una condición y ejecuta unas determinadas instrucciones, o no se cumple, y ejecuta otras condiciones distintas. Puede ocurrir que, caso de no cumplirse la condicione primera, se abra un abanico de dos o tres posibilidades. La sentencia condicional tendría entonces la forma:

 

          If  condición 1 Then

          Instrucciones

          ElseIf Condición 2

          Otras instrucciones

          ElseIf Condición 3

          Otro juego de instrucciones

          Else

          Instrucciones que debe realizar caso de no cumplir las condiciones 1, 2 y 3.

          End If

 

Como decíamos anteriormente, este es el tipo de sentencia condicional mas usada. Existe otra:

 

          Select Case

 

Su nombre casi nos define lo que es: Selecciona, dependiendo del caso, un determinado juego de instrucciones:

 

          Select Case variable         ' variable es una variable que puede tomar los valores (p.e.)                                                  de 1 a 4

 

          Case 1

          Instrucciones a ejecutar en caso de que variable = 1

          Case 2

          Instrucciones a ejecutar en caso de que variable = 2

          Case 3

          Instrucciones a ejecutar en caso de que variable = 3

          Case 4

          Instrucciones a ejecutar en caso de que variable = 4

          End Select

 

Este procedimiento resulta mucho mas sencillo y rápido que las sentencias If   Then   Else

vistas anteriormente, cuando el margen de elección es mayor que 2.

 

Cuando lo que queremos es elegir un valor, no ejecutar instrucciones como hacíamos anteriormente, disponemos de otras dos funciones:  Choose y Switch.

 

Switch toma una serie de parámetros, todos por parejas. El primer término de cada pareja es la expresión a evaluar. El segundo es el valor que tiene que devolver. En realidad Switch es una función (las funciones las veremos muy pronto)

 

          A = Switch  (B=1, 5,  B=2, 7,   B=3, 11)

 

Esta instrucción obtiene un valor para A que dependerá del valor que tome B entre los valores posibles  (1, 2 ó 3)

 

La sentencia Choose es casi igual, cambia solamente la forma. La misma intrucción anterior puede realizarse con Choose de la siguiente forma:

 

          A = Choose  ( B, 5, 7, 11 )

 

En estas sentencias, Switch  y  Choose,  si el valor de B no coincide con ninguno de los valores que se le habían establecido (1, 2 ó 3 en nuestro caso), la sentencia devuelve el valor Nulo  ( Null ).  Esto puede producir algún error si no se contempla esa posibilidad.

 

Con estas sentencias condicionales es posible realizar bifurcaciones del programa, cambiar las propiedades de un objeto, obtener resultados de operaciones, ....

 

Sentencias de bucle.

 

Es muy común utilizar bucles a lo largo de un programa. Un bucle es una sucesión repetitiva de instrucciones, que se estarán realizando mientras se cumpla una condición o mientras no se cumpla otra condición.  Es tan sencillo como esto:

 

          Mientras  condición

 

          Instrucciones

 

          Fin del bucle

 

Existen dos formas de bucle: Una, que realiza un número determinado de recorridos por el bucle. Es el denominado bucle por contador. Otra, realiza el bucle hasta que se cumpla (o deje de cumplirse) una condición. Es el llamado bucle por condición.

 

          Bucle por contador

 

          Realiza el bucle tantas veces como le indiquemos. Por ejemplo, en este bucle nos va a presentar las 26 letras mayúsculas del alfabeto inglés

 

          For  N=65 To 90

 

          Label1.caption = Chr ( N )

 

          Next N

 

Este "programa" nos presentará en una caja  (Label) los caracteres cuyo número ASCII vaya desde el 65  (A) al 90  (Z)   Comenzará presentando el correspondiente al número 65, e irá presentando sucesivamente el 66, el 67, etc., hasta llegar al 90, donde se parará.

 

          Bucles por condición

 

          Ejecuta las instrucciones del bucle mientras se cumple una condición

 

          X = 0 

          Do While X < 1000

          X = X + 1

          Loop

 

El programa toma una variable ( X ) que previamente tuvimos la curiosidad de ponerla a cero,  e incrementa su valor una unidad. Analiza si el valor de X es menor que 1000, y si es cierto, vuelve a realizar el bucle. Así hasta que X ya no sea menor que 1000. Al dejar de cumplirse que X sea menor que 1000, sale del bucle.  Acabamos de realizar un temporizador, y también de exponer las sentencias condicionales y los bucles, inicio de cualquier curso de Basic. Como final de lección, se propone un problema.  Con el primer bucle, donde visualizábamos los caracteres A a la Z, posiblemente no nos diese tiempo de ver cada una de las letras que iban apareciendo en la pantalla, en la etiqueta Label1, dado que cambiaría con mucha velocidad, y solamente veríamos la Z, que es donde se detuvo el programa. Podemos poner un temporizador cada vez que presente una letra, y así nos dará tiempo a verla. Con los dos bucles vistos anteriormente ya podemos hacerlo.

 

Si lo que queremos es que el programa se ejecute mientras no se cumpla una determinada condición, la sentencia será:

 

          X = 0 

          Do Until X > 1000

          X = X + 1

          Loop

 

Observe que la diferencia entre una y otra es la condición,  While  para indicar Mientras se cumpla que ...    y  Until  para indicar  Mientras no se cumpla que ....

 

Para terminar bien el programa anterior utilizaremos la condición de While  (Mientras se cumpla la condición)

 

          For  N=65 To 90

          Label1.caption = Chr ( N )

          Label1.RefreshN             ' Refresca la etiqueta

          X = 0 

          Do While X < 1000

          X = X + 1

          Loop

          Next N

 

Este es nuestro primer programa en BASIC.  En VISUAL BASIC es idéntico, pero nos falta la interface gráfica. Para realizarla basta con abrir el VB y sobre el formulario que aparece al abrirlo, introducir una etiqueta, (Label) que llevará el nombre por defecto de Label1. Solo nos queda pensar donde introducimos el código anterior. Podemos introducir un botón de comando  (Command Button) que saldrá con el nombre por defecto de Command1. Haga doble click sobre el botón. Aparecerá el procedimiento Click. Este procedimiento es el que se realiza cuando hacemos click sobre ese botón. Escriba en ese procedimiento este código.

         

          Private Sub Command1_Click()    ' Esta línea sale automáticamente

          For  N=65 To 90

          Label1.caption = Chr ( N )

          Label1.RefreshN             ' Refresca la etiqueta

          X = 0 

          Do While X < 1000           ' Bucle de temporización

          X = X + 1

          Loop

          Next N                                       ' Termina el bucle de temporización

          End Sub                           ' Esta línea sale automáticamente

 

Hemos puesto nuestra primera piedra en Visual Basic. Este ejemplo es muy sencillo. Visual Basic es tan sencillo como este ejemplo.

 

BASIC DE VISUAL BASIC     (2)

___________________________

 

Funciones de cadenas

 

Se denomina CADENA a una sucesión de caracteres.  Una cadena puede tener uno o varios caracteres alfanuméricos. Una cadena es también una sucesión de números.

 

Ejemplo de cadenas:

 

Curso de Visual Basic

abcdefghijklmnopqrstuvwxyz1234567890

123456789

 

Hagamos una distinción entre una cadena que contenga números y un número.  Un número tiene un valor, pero también tiene una presentación escrita. El valor es algo que estará en el ordenador como una sucesión de bits. Dependiendo de como lo hayamos declarado, tendrá mas o menos bits. Pero esa información no es un número legible por el usuario. Lo que sí es legible por el usuario es la representación en numeración decimal (u octal, o hexadecimal, o incluso en binario) de ese número. Esa representación del número en un determinado sistema de numeración es una cadena.

 

Así, el número nueve, que en la memoria del ordenador será una sucesión de bits, el ordenador puede presentárnoslo como:

 

          9                  En numeración decimal

          9                  En numeración hexadecimal

          11                En numeración octal

          1001            En numeración binaria

 

Esas formas de presentarnos el número son CADENAS de caracteres. El valor del número dentro del ordenador es un NUMERO.

 

Para presentar un número en la pantalla, el ordenador debe convertirlo previamente a una cadena.

 

Cuando introducimos un valor numérico por teclado o pantalla, el ordenador para hacer operaciones con él, debe transformarlo a un número.

 

Estas consideraciones nos llevan a las dos primeras funciones con cadenas:

 

          Str     (número)                Convierte un número a una cadena en numeración                                                  decimal.

 

          Val     (cadena numérica)  Obtiene el valor (el número) correspondiente a esa                                                  cadena.

 

Ejemplos

 

          Variablenumerica = Val (TextBox1.Text)

 

          Este ejemplo convierte la cadena de caracteres (numéricos) que hubiese en la caja de texto TextBox1 en un número, y asocia este número a la variable Variablenumerica.

          Si el contenido de la caja de textos no fuesen caracteres numérico (abcd, por ejemplo), Variablenumerica  tomaría el valor 0.

 

 

          Label1.Caption = Str (Variablenumerica)

 

          Este ejemplo pondría en la etiqueta Label1 los caracteres correspondientes al valor que tuviese la variable Variablenumerica .

 

Nota para recordar: Siempre habrá que convertir un número a una cadena cuando queramos presentarlo en la pantalla. Siempre habrá que convertir a número la cadena de caracteres numéricos que hayamos introducido por teclado o por pantalla, cuando queramos operar con ese número. Un Label, cuando tiene que presentar un único número, no le pedirá que se lo convierta a cadena, pues VB hace automáticamente esa conversión. Sin embargo, cuando tiene que presentar un número, y además un texto en el mismo Label, VB no realizará automáticamente ese cambio, por lo que le dará un error. Le recomiendo que convierta los números a variables de cadena siempre que los quiera presentar en un Label o TextBox.

 

Existe una función mas amplia que Str. Se trata de Cstr.  Esta función no solamente transforma un número a una cadena, como hace Str, sino que convierte cualquier tipo de variable a una variable tipo String (cadena).

 

Esta función transforma, por ejemplo, una variable tipo Booleana en una variable de cadena, devolviendo la cadena “Verdadero” si el valor de la variable booleana es True, y “Falso” si es False.

 

Puede también transformar a una cadena de caracteres el valor de un CheckBox o de un OptionButton. En estos casos devuelve 0 y 1 para el CheckBox (Desactivado / Activado) y Verdadero ó Falso  para el OptionButton (Activado / Desactivado)

 

label1.Caption = CStr(booleana) Label1.Caption = Verdadero    si booleana es true

                                                 Label1.Caption = Falso     si booleana es False

 

Label2 = CStr(Check1.Value)                Label2.Caption = 1      si Check1 está activado

                                                 Label2.Caption = 0      si Check1 está desactivado

 

Label3 = CStr(Option1.Value)                Label3.Caption = Verdadero   si Check1 está activado

                                                 Label3.Caption = Falso      si Check1 está desactivado

 

Si se aplica Cstr  a una variable tipo Fecha/Hora devuelve la fecha / Hora en formato corto.

 

Mas funciones de cadena:

 

Left (cadena, n)

Extrae los n primeros caracteres de una cadena, comenzando por la izquierda.

 

          Si cadena = Curso de Visual Basic         (Para todos los ejemplos)

 

          Resultado = Left (cadena, 10)               ---->   Resultado = Curso de V

         

          Right (cadena, n)    Extrae lo n últimos caracteres de la cadena

 

          Resultado = Right (cadena, 10)            ---->   Resultado = sual Basic

 

          Mid  (cadena, m, n)          Extrae n caracteres de la cadena, siendo el primer carácter                                     extraído el que ocupa el lugar m.

         

          (Vea Instrucción Mid mas abajo)

 

          Resultado = Mid (cadena, 3, 10) ---->   Resultado = rso de Vis

 

 

LCase (cadena)               Devuelve otra cadena igual, pero con todos los

caracteres en minúsculas.  (LCase = Lower Case)

 

          Resultado = Lcase (cadena)       ---->   Resultado = curso de visual basic

 

 

UCase (cadena)               Devuelve otra cadena igual, pero con todos los

caracteres en mayúsculas.  (UCase = Upper Case)

 

          Resultado = UCase (cadena)      ---->   Resultado = CURSO DE VISUAL BASIC

 

 

          Len (cadena)                    Devuelve la longitud de la cadena

 

          Resultado = Len (cadena) ---->   Resultado = 21

 

          LenB (Cadena)                 Devuelve el número de Bytes empleados para almacenar la

cadena. Sorpréndase, es el doble que Len (Cadena)

 

          String (n, carácter) Devuelve una cadena de n caracteres como el indicado

 

          Resultado = String (8, "a")                    ---->   Resultado = aaaaaaaa

 

          Resultado = String (8, Chr(65))             ---->   Resultado = AAAAAAAA

 

          Resultado = String (8, 65)          ---->   Resultado = AAAAAAAA

 

          Space          (n)                Devuelve una cadena formada por n espacios.

 

          Resultado = "A" + Space (6)+ "B"          ---->   Resultado = A      B

 

         

          LTrim                    Elimina los posibles espacios que tenga una cadena por su                                    izquierda.

 

          Rtrim                     Elimina los posibles espacios que tenga una cadena por su                                    derecha.

 

          Trim                      Elimina los espacios que tenga una cadena, tanto por su                                        izquierda como por su derecha. (No elimina los espacios

                                       centrales de la cadena)

 

          Estas tres funciones se emplean para quitar los posibles espacios que pueden resultar de una entrada de datos. Tienen especial importancia cuando se toman los datos de un archivo o base de datos, donde fueron introducidos por otro programa.

 

          No se pone ningún ejemplo de estas funciones, pues sería difícil verlo impreso.

 

InStr (cadena, cadena1)             Busca la cadena1 dentro de cadena y devuelve el número de orden dentro de cadena donde se encuentra la primera letra de cadena1

 

          Resultado = InStr (cadena, "sua")         ---->   Resultado = 12

 

 

          StrConv       Convierte una cadena de caracteres en otra, según las instrucciones

que le sigan. Puede sustituir a UCase  o  LCase si la instrucción es

UpperCase o LowerCase respectivamente, o poner la primera letra de        todas las palabras de la cadena en mayúsculas, si la instrucción es         ProperCase.

 

          Resultado = StrConv (cadena, UpperCase)     ----> Resultado = CURSO DE                                                                                          VISUAL BASIC

 

          Resultado = StrConv (cadena, LowerCase)     ----> Resultado = curso de visual                                                                                 basic

 

          Resultado = StrConv (cadena, ProperCase)    ----> Resultado = Curso De Visual                                                                                Basic

Instrucción Mid

 

Mid puede usarse también para cambiar el contenido de una cadena. Observe la sutileza entre Mid como Función de cadena y Mid como Instrucción.

 

La Instrucción Mid reemplaza un número especificado de caracteres en una variable de cadena con caracteres de otra cadena.

 

Sintaxis                  Mid(cadena1, inicio[, longitud]) = cadena2

 

          Resultado Mid (cadena, 7,2)=”Sobre”              ---- > Resultado = Curso sobre Visual

Basic

 

FUNCIONES CON NUMEROS

_________________________

 

Visual Basic puede operar con números tal como lo haría cualquier persona. Conoce las 4 reglas, y puede utilizar paréntesis de la misma forma que los escribimos sobre el papel.

 

          Los operadores que utiliza para las operaciones básicas son:

 

          +        Suma

          -         Resta

          *         Multiplicación

          /         División

          \         División sin decimales       

          Mod   Resto de una división

          ^         Eleva a un exponente

 

          Ejemplos

 

          Resultado = 12 + 15                   ---->   Resultado = 27

          Resultado = 15 - 12          ---->   Resultado = 3

          Resultado = 15 * 12                    ---->   Resultado = 180

          Resultado = 15 / 12          ---->   Resultado = 1.25

          Resultado = 15 \ 12          ---->   Resultado = 1

          Resultado = 15 Mod 12               ---->   resultado = 3

          Resultado = 12 ^ 2            ---->   Resultado = 144

 

          resultado = ( ( 4 * 3 ) / 2 ) ^ 2      ---->   Resultado = 36

 

Estos operadores se denominan Operadores aritméticos.

 

Existen otras operaciones que se pueden realizar con números: comparaciones. Los operadores que realizan comparaciones se denominan Operadores relacionales.  El resultado de las operaciones realizadas con estos operadores solamente admiten dos resultados: True  (Cierto) o False  (Falso)  Estos operadores son:

 

          =        Igual que

          <>      No igual que

          <        Mayor que

          <=      Mayor o igual que

          >        Menor que

          =>      Igual o menor que

 

Estos operadores se suelen utilizar en estructuras de programa donde se tome una decisión.

 

El operador = puede usarse también para comparar cadenas o fechas.

 

Operadores Lógicos

 

Estos operadores sólo tienen sentido cuando hablemos de variables Booleanas, es decir, aquellas que solamente pueden tomar los valores cero y uno.

 

          Operador      Función         Devuelve True si     Devuelve False si

 

          And              Función AND A=True y B=True    Cualquier otro caso

         

          Or                Función OR   A=True o B=True    A=False y B=False

         

          Xor              Función XOR A=True y B=False   A=True y B=True

                                                 A=False y B=True   A=False y B=False

 

          Eqv              F. Equivalente         A=True y B=True    A=True y B=False

                                                 A=False y B=False  A=False y B=True

 

          Imp              Implicación    A=True y B=True    A=True y B=False

                                                 A=False y B=True

                                                 A=False y B=False

 

          Not              Negación      A=False                 A=True

 

          Like             Igualdad       A=True                             A=False

 

 

Otras Funciones con números

 

          CInt             Parte entera Devuelve la parte entera de un número con decimales

 

          Abs              Valor Absoluto        Devuelve el valor absoluto de un número

 

          Sgn              Signo            Devuelve el signo de un número

 

          Sqr              Raíz cuadrada        Devuelve la raíz cuadrada de un número

 

          Exp              Exponenciación       Devuelve el número elevado al exponente indicado

 

          Log              Logaritmo     Devuelve el logaritmo natural de ese número

 

Trigonométricas

 

          Sin               Seno            Devuelve el valor del seno de un ángulo (Expresado

                                                 en radianes)

 

          Cos              Coseno                  Devuelve el coseno de un ángulo (En radianes)

 

          Tan              Tangente      Devuelve la tangente de un ángulo

 

          Atn              Arco Tang.    Devuelve un arco cuya tangente sea el número

                                                 (Angulo en radianes)

 

 

Una función curiosa

 

          Timer           Tiempo acumulado  Devuelve el tiempo (en segundos) que ha                                                            pasado desde las 12 de la noche.

 

Generación de números aleatorios

 

          Randomize (Numero)       Inicia el generador aleatorio tomando como dato de partida el                                    Numero. Devuelve el resultado en una variable llamada Rnd.

 

NOTA MUY IMPORTANTE.- Los números aleatorios generados de esta forma son siempre iguales, eso sí, dependiendo del número que se le introduzca como parámetro. Esta generación de números no produce números aleatorios pues como se dijo, dependen del numero que se meta como parámetro, y si este se repite, se repite la sucesión de números que nos crea el generador aleatorio.

 

La forma de obtener números realmente aleatorios es introducir como parámetro un número que sea variable con el tiempo. Ese número no puede ser otro que el número timer visto antes. Y siempre con la precaución de que medie mas de un segundo entre dos instrucciones Randomize. La función toma entonces la forma:

 

          Randomize Timer

 

          La función Randomize devuelve una variable Rnd con un número comprendido entre 0 y 1 (Nunca será 0 ni 1) Leyendo el valor de la variable sucesivas veces, se puede obtener una sucesión de números aleatorios. No es necesario ejecutar la instrucción Randomize Timer cada vez que se quiera obtener un dato de la variable Rnd.

 

Un ejemplo. Generador de números para la Lotería Primitiva

 

Supongamos que tenemos un formulario con una etiqueta de nombre Label1, un botón de comando de nombre Command1. Cuando hagamos click sobre el botón de comando deberá generar un número comprendido entre el 1 y el 49. En el procedimiento click de Command1 pondremos el siguiente código:

 

Private Sub Command1.click

 

Randomize Timer

A = Rnd

A = Rnd * 100

A = CInt(A)

Do While A > 49

A = A - 49

Loop

Do While A < 1

A = A + 49

Loop

Label1.caption = A

End Sub

 

Realice este pequeño programa, con la instrucción Randomize Timer y sin ella.

 

 

Funciones con fechas.

 

Las fechas son cadenas especiales. Visual Basic sabe obtener y tratar la información relativa a la fecha y la hora. Dispone para ello de una declaración de variable: Date. Una variable declarada como date puede contener una fecha, una fecha y una hora o una hora solamente.

 

          Date             Devuelve la fecha de hoy. Esta fecha la toma del reloj del ordenador.

 

          Time            Devuelve la hora actual.

 

          Now             Devuelve la fecha y hora actual.

 

          WeekDay     Devuelve el día de la semana (En número, 1=Domingo, 2=Lunes,...)

 

          Day              Obtiene el día, a partir de una fecha     

 

          Month                    Obtiene el mes a partir de una fecha. 

 

          Year             Obtiene el año a partir de una fecha.   

 

          Hour            Obtiene la hora a partir de una hora      

 

          Minute                   Obtiene el minuto a partir de una hora.  

 

          Second        Obtiene el segundo a partir de una hora.         

 

          DateAdd      Añade un intervalo de tiempo a una fecha

 

          DateDiff       Obtiene el intervalo de tiempo entre dos fechas

 

          DatePart      Devuelve una parte de una fecha  (semana, trimestre, etc.)

 

          DateSerial    Compone una fecha a partir de parámetros relativos

 

          TimeSerial   Compone una hora a partir de parámetros relativos.

 

          DateValue    Devuelve una fecha a partir de un dato que se le parezca y VB pueda

                              obtener de él una fecha válida

 

 

Mediante estas instrucciones podemos obtener el dato necesario de una fecha u hora. Por ejemplo, para obtener el día de hoy solamente:

 

          Día = Day (Now)    Día será un número

 

El día de la semana lo obtendríamos

 

          Diasemana = WeekDay (Now)              Diasemana será un número

 

DateValue, una instrucción que le sacará mucho provecho

 

          Fecha = DateValue (120796)               

          Fecha = DateValue (12 07 96)              Fecha =12/07/96

 

Función FORMAT

 

Esta función permite presentar cadenas de numéricas o fechas de una determinada forma. Permite establecer el Formato de esa cadena.

 

Si recurre a la ayuda de VB acerca de esta función se va a enterar muy poco de lo que puede dar de sí. La sintaxis que presenta es :

 

Format(expresión[, formato[, primerdíadesemana[, primerasemanadelaño]]])

 

Lo mejor que puede hacer con esta definición de la sintaxis de Format es olvidarla. No le aclara mucho lo que se puede hacer con Format.  La función Format se usa para poner una fecha en un determinado formato. Con la expresión :

 

          FechadeHoy = Format (Now, “yyyy-mm-dd”)

 

la variable FechadeHoy tendrá el valor  1998-05-21, que se refiere al día 21 de mayo de 1998, según el formato recomendado por la norma ISO-8601 para la presentación de fechas. Si hubiésemos puesto la expresión  FechadeHoy = Format (Now, “dd/mm/yy”) , la variable FechadeHoy contendría el valor 21/05/98 referido al día citado.

 

Las posibilidades de Format llegan también al campo de las cadenas numéricas. Por ejemplo la cifra 123456 se transformará en las siguientes expresiones, según como empleemos la función Format

 

                    Variable = Format(123456, "Currency")     Variable = 123.456 Pts

                    Variable = Format(123456, "Standard")     Variable = 123.456,00

 

Veamos ahora con un poco mas de conocimiento la sintaxis de Format

 

Variable = Format (expresión[, formato[, firstdayofweek[, firstweekofyear]]])

 

Donde

expresión es una cadena o fecha válida

formato es uno de los formatos predefinidos  (Standard, Currency, etc. Vea mas abajo)

 

firstdayofweek. Especifica el primer día de la semana. Puede tomar uno de estos valores o constantes :

 

Constante     Valor            Descripción

 

vbUseSystem          0                  El especificado en el sistema operativo.

VbSunday     1                  Domingo (valor por defecto)

vbMonday     2                  Lunes

vbTuesday    3                  Martes

vbWednesday         4                  Miércoles

vbThursday   5                  Jueves

vbFriday       6                  Viernes

vbSaturday   7                  Sábado

 

firstweekofyear       Especifica cual es la primera semana del año. Puede tomar uno de los siguientes valores o constantes :

 

Constante               Valor  Descripción

 

vbUseSystem                   0        Usa el valor del sistema operativo

vbFirstJan1             1        La primera semana es la que contiene al día 1 de Enero(Valor

por defecto

vbFirstFourDays      2        La primera semana es la que contiene al menos, 4 días de ese

año (Rec. ISO - 8601)

vbFirstFullWeek      3        La primera semana es la que tiene todos sus días en ese año

  

 

No se complique la vida con el tema del primer día de la semana ni la primera semana del  año. No lo usará con frecuencia. Centrémonos mas en el parámetro Formato. Puede tomar muchos valores. Veamos los principales. Primero para números

 

Observe que usamos la expresión Variable =Format (1234567,”Formato”) para todos los ejemplos de números.

 

Para poner los números separados por millares :

 

          Variable = Format(1234567, "##,###,###")      Variable = 1.234.567

                  

(Cada carácter # indica que ahí va un número. El separador debe ser una coma, no un punto, aunque esto depende del idioma que esté usando)

 

Puede poner una de estas expresiones, eso si, siempre entre comillas dobles :

         

General Number      Muestra el número tal como lo tecleó

Currency                En formato de la moneda de su sistema operativo

Fixed                      Sin separador de millar y dos decimales  (1234567,00)

Standard                Con separador de millares y dos decimales (1.234.567,00)

Percent                            Multiplica el número por cien y lo presenta cono

porcentaje(123456700,00%)

Scientific                 Usa notación científica  (1,23E+06)

.

Para fechas    (Observe que usamos el ejemplo Format(Now, “Formato”) y Now = 21/07/98

a las 22:16:00  y pico)

 

General Date          21/07/98 22:16:00

Long Date     martes 21 de julio de 1998

Medium Date          21-jul-98

Short Date    21/07/98

yyyy-mm-dd  1998-05-21

yy-mm-dd     98-07-21

Long Time    22:19:53

Medium Time          10:20 PM

Short Time    22:20

hh :mm :ss    22 :21 :29

hh :mm                   22 :21

 

Format dispone de mas opciones. Sería muy largo explicarlas aquí. Para mas información, en la WEB de Microsoft puede encontrar mas formatos posibles.

 

MATRICES

__________

 

 

Cuando utilizamos varias variables que tienen un significado similar para nosotros, pero que son distintas (Por ejemplo, el nombre de los alumnos de una clase) podemos utilizar una matriz. Esta matriz está formada por tantos elementos como alumnos tenga la clase. El nombre asociado a cada uno de los elementos de la matriz puede ser:

 

          Alumno (n)    Donde n es el número por orden de lista de ese alumno.

 

Las matrices normalmente comienzan a numerar por el número 0. Este comienzo puede no ser el mas apropiado para la variable que estamos planteando, pues ningún alumno tiene el número de orden 0. Para hacer que una matriz comience a numerar por el 1 se debe definir mediante la instrucción:

                    Option Base 1

 

que debe colocarse al comienzo del módulo o formulario donde declaremos la matriz.

 

Para declarar la matriz se hace como con todas las variables, especificando entre paréntesis el número de elementos que componen la matriz:

 

                    Dim Alumno (25) as String

 

Hemos declarado que la variable alumno es una cadena, y que hay 25 elementos en esa matriz.

 

Una matriz también se puede declarar de la siguiente forma :

 

                    Dim Alumno(1 To 25) as String

 

Donde le decimos que la variable Alumno tiene 25 elementos, que el primero tiene el índice 1 y el último tiene el índice 25.

 

Pero imaginemos que queremos meter en la misma matriz el nombre, primer apellido y segundo apellido del alumno. Necesitaremos declarar una matriz de 25 por 3. Como todos los elementos serán cadenas de caracteres, podemos declararla de la siguiente forma:

 

                    Dim Alumno (1 To 25, 1 To 3) As String

 

De esta forma, el primer apellido del alumno que ocupa el puesto número 15 de la clase, será el elemento:

 

                    Alumno (15, 2)

 

Podemos definir matrices de dimensión superior a dos. Podemos llegar a un máximo de 60 dimensiones. Una matriz de 5 dimensiones se declararía:

 

                    Dim  Variable ( 1 To N, 1 To M, 1 To P, 1 To Q, 1 To R)

 

entendiendo que hay N, M, P, Q y R elementos en cada una de las dimensiones respectivamente.

 

Una variable ya declarada como una matriz puede redimensionarse a lo largo del programa mediante la instrucción ReDim

 

                    ReDim Alumno (1To 25)

 

Mediante esta instrucción, estamos ReDimensionando una matriz ya declarada. No se puede redimensionar una matriz inexistente.

Mediante la declaración 1 To 25 le estamos diciendo que el primer elemento de la matriz es el 1, independientemente de lo que hayamos puesto en OPTION BASE.  Si se redimensiona simplemente con el número de elementos :

 

                    ReDim (25)

 

le estamos diciendo que tiene 25 elementos, pero que el primero sea el 0 ó el 1 depende de haber puesto OPTION BASE 0   u  OPTION BASE 1.

 

Una matriz puede redimensionarse cuantas veces se quiera a lo largo de la aplicación, pero esa redimensión no puede afectar al número de dimensiones de la matriz. Si redimensionamos la matriz perderá la información existente. Para evitar perder la información presente en la matriz, debe utilizar la sentencia ReDim Preserve.

 

Si usa la palabra clave Preserve en matrices de dimensión superior a 1, va a encontrarse con comportamientos no esperados. Como podrá ver en la Ayuda de VB, usando ReDim Preserve sólo puede cambiar el tamaño de la última dimensión de matriz y no puede modificar en ningún momento el número de dimensiones. NO es cierto del todo. lo podrá hacer una sola vez.

 

Respecto a cambiar el número de dimensiones, si ha declarado la matriz con unas dimensiones determinadas, ya no podrá cambiar las dimensiones ni con ReDim ni con ReDim Preserve. Le saldrá un error que dice que las dimensiones de la matriz ya han sido declaradas.

Pero si ha declarado la matriz sin dimensiones :

 

          Dim MiMatriz()

 

puede cambiar las dimensiones             Dim MiMatriz (1 To 5, 1 To 9)

y volver a cambiarlas                            Dim MiMatriz (1 To 8, 1 To 15, 1 To 6)

 

Observe que no solamente la hemos cambiado dos veces de dimensiones (la primera a 2 y la segunda a 3), sino que también hemos cambiado el número de elementos en cada dimensión.

 

Si hubiésemos utilizado ReDim Preserve solamente podríamos haber usado la primera de las dos líneas anteriores :

 

          ReDim Preserve MiMatriz (1 To 5, 1 To 9)

 

pero ya no podríamos volver a cambiar el número de dimensiones con la segunda línea. Nos daría un error.

 

Con ReDim podemos cambiar el número de elementos de cada dimensión cuantas veces queramos. Por ejemplo, podemos redimensionar MiMatriz de las siguiente forma :

 

          ReDim MiMatriz (1 To 5, 1 To 9)

          ReDim MiMatriz (1 To 15, 1 To 20)

          ReDim MiMatriz (1 To 25, 1 To 30)

          . . . . . . . . . . . . . . . . . . . . . . . . . . .

 

Si hubiésemos empleado ReDim Preserve, podríamos cambiar los elementos de todas las dimensiones de la matriz una vez :

 

          ReDim Preserve (1 To 5, 1 To 9)

 

a partir de ahora, solamente podemos cambiar los elementos de la última dimensión :

 

          ReDim Preserve (1 To 5, 1 To 20)

          ReDim Preserve (1 To 5, 1 To 30)

 

es decir, no podremos hacer esto :

 

          ReDim Preserve (1 To 10, 1 To 30)    donde se señala en negrita el error.

 

Esto no causa ningún error en una matriz de una dimensión, ya que si la matriz tiene sólo una dimensión, puede cambiar el tamaño de esa dimensión porque es la única y la última.

 

Cuando a lo largo de la aplicación se va redimensionando una matriz, podemos llegar la circunstancia de que, en un momento determinado, no sepamos las dimensiones de esa matriz.

 

Para conocer el índice máximo y mínimo de una matriz se usan las funciones UBound y LBound.

 

UBound devuelve el mayor subíndice disponible para la dimensión indicada de una matriz.

 

Sintaxis                  UBound(nombredelamatriz[, dimensión])

 

LBound devuelve el mayor subíndice disponible para la dimensión indicada de una matriz.

 

Sintaxis                  LBound(nombredelamatriz[, dimensión])

 

Ejemplo  Tengamos una matriz llamada Mimatriz, de tres dimensiones. En un momento de la aplicación se ejecutó la siguiente instrucción válida :

 

ReDim Mimatriz (1 To 100, 0 To 3, 5 To 20)

 

En otro momento queremos tener el control de los índices de esa matriz, y queremos averiguar el índice menor y mayor de cada una de sus dimensiones :

(IID1= Indice Inferior Dimensión 1, ISD 1 = Indice Superior Dimensión 1, etc. )

 

                    IID 1= LBound (Mimatriz, 1)                 IID1 = 1

                    ISD1 = UBound (Mimatriz, 1)                ISD1 = 100

                    IID 2= LBound (Mimatriz, 2)                 IID1 = 0

                    ISD2 = UBound (Mimatriz, 2)                ISD1 = 3

                    IID 1= LBound (Mimatriz, 3)                 IID1 = 5

                    ISD1 = UBound (Mimatriz, 3)                ISD1 = 20

 

 


 

VISUAL BASIC Guía del Estudiante  Cap. 1

 VOLVER a INDICE

Tras esta pequeña introdución al lenguaje Basic ya estamos en disposición de encender el ordenador y comenzar a trabajar con Visual-Basic. Se supone que su PC tiene instalado el programa Visual basic, bien en su versión de 16 bits si dispone de Windows 3.xx o la de 32 bits si dispone ce Win95 ó Windows NT.

 

Entre en el programa VB. Le aparecerá en pantalla algo similar a esto :  (Para VB Vers. 4)

 

 

 

Este es el comienzo del programa . Observe que en esta pantalla existen varias cosas. En la parte superior , la barra de título del programa Visual Basic, con el texto :

 

Proyect1 - Microsoft Visual Basic (Diseño)

 

Por debajo de esta barra de Título del VB, encontramos la barra de menú de VB, con las leyendas :

 

          Archivo  Edición Ver Insertar Ejecutar Herramientas  Complementos  Ayuda

 

Por debajo de esta barra de menú  tenemos la barra de herramientas, donde podrá ver varios iconos, que cada uno representa un determinada operación que Vd. puede realizar. Estas operaciones está todas en la línea de menú, y puede acceder a ellas abriendo los menús desplegables que existen en cada una de las palabrea Archivo  Edición  Ver  ...... de esta línea de menú.  El hecho de colocar las operaciones mas usuales en un icono en la barra de herramientas se hace para mayor comodidad del usuario.

 

A la izquierda de la pantalla tiene una caja rectangular con tres columnas de iconos. Esa caja es la Caja de Herramientas  (No la confunda con la barra de herramientas de la parte superior)

 

Esta caja de herramientas es, salvando las distancias, lo mismo que una caja de herramientas real que pueda tener un mecánico para realizar su trabajo. En ella están los iconos que representan a los controles con los que Vd. va a desarrollar su aplicación VB. No están todos los que pueden estar, al igual que en una caja de herramientas de un mecánico no están todas las herramientas que puede usar. Están solamente las mas usuales. Si necesita alguna mas, puede cogerla de otra parte (barra de Menú, Herramientas, Controles personalizados) y agregarlos a esa caja de herramientas, al igual que lo haría un mecánico con una herramienta especial, que la metería en su caja sólo cuando va a realizar un trabajo determinado para el que la necesite.

 

Posiblemente esta caja de herramientas no le aparezca tal y como la ve en estos apuntes. Eso depende si Ud. tiene la versión personal o la profesional, o si usa la versión de 16 ó 32 bits. Esa caja de herramientas puede personalizarla a su gusto. Para ello, deberá cargar un proyecto ya existente en los discos de distribución de Visual Basic, llamado AUTO32LD.VBP (versión 32 bits)  ó AUTO16LD.VBP  (Versión 16 bits) que se encontrará en el directorio donde haya cargado el programa Visual Basic. Este proyecto no tiene otra función que determinar las herramientas con las que quiere abrir el VB. Para introducir herramientas nuevas en la caja de herramientas, basta con desplegar el menú Herramientas de la barra de menú, e ir a Controles personalizados. Haciendo click en esta línea de controles personalizados, podemos seleccionar nuevos controles para añadir a la caja de herramientas, marcando la casilla que está a la izquierda del nombre del control que quiere introducir. Una vez seleccionados todos los nuevos controles, haga click en ACEPTAR, y podrá observar que esos nuevos controles ya se le han añadido a la caja de herramientas. Para que esos nuevos controles le aparezcan de entrada cuando inicia una sesión de VB, debe salir de Visual basic guardando los cambios. Vuelva a entrar y observará que ya le aparecen esos nuevos controles en la caja. No es prudente meter muchos controles en la caja. Ponga solamente los que necesite normalmente en sus aplicaciones. Ocupará menos memoria y tardará menos tiempo en cargar el programa VB. Además, cuando realice una aplicación y la distribuya una vez compilada, Visual Basic entregará en los disquetes de distribución las DLL’s  u OCX’s correspondientes a todos los controles personalizados que Vd. tenga en la caja de herramientas, los necesite el programa o no los necesite. Esto le va a suponer que está cargando subprogramas inútiles en el ordenador destino de su aplicación. A la hora de compilar el programa (Crear archivo .EXE) quite todos los controles personalizados que no necesite su aplicación. (Sólo los controles personalizados. Los controles comunes - CommandButton, Label, TextBox, etc.-, no se pueden eliminar de la caja de herramientas)

 

Para quitar controles de su caja de herramientas, debe proceder de forma análoga, cargando el programa AUTOxxLD.VBP, abriendo menú de herramientas, Controles personalizados, quitando la marca al cuadro situado en la parte izquierda del control a eliminar, y guardando el proyecto al salir.

 

En el centro, y ocupando casi toda la pantalla, tenemos el Formulario. Este Formulario es la interface gráfica de su aplicación, sobre el que podrá añadir los controles que necesite. Lo veremos mas adelante con todo detalle.

 

Observa dos ventanas, una denominada Ventana de Propiedades, donde puede ver las propiedades del formulario, Form1, y otra, denominada Ventana de Proyecto.  Existe otra ventana, que no está en la figura anterior, la Ventana de Depuración.  Por cada formulario y cada control que introduzca en el proyecto, le aparecerá otra ventana, denominada ventana de código.

 

No se extrañe de que esta presentación gráfica del Visual Basic coincida con otros sistemas de desarrollo  (Delphi, p.e.). La lógica de desarrollo de una aplicación en Windows ha llevado a varios fabricantes de software a utilizar un entorno gráfico similar (diríamos idéntico). A Visual basic le queda el orgullo de ser el primero en utilizarlo.

 

Con lo descrito anteriormente ya tenemos, al menos, fijado el argot con el que expresarnos para comenzar a estudiar el VISUAL BASIC. Veamos con un poco mas detalle la Ventana de Código.

 

 

 

 

Esta figura le muestra un Formulario con su ventana de código. Cada objeto gráfico de VB tiene su propia ventana de código. Así, si en este formulario hubiésemos introducido un Label y dos CommandButton, todos ellos tendrían su propia ventana de código.  La ventana de código la podemos ver haciendo doble click sobre cualquier objeto de nuestro proyecto. En este caso hemos hecho doble click sobre el único objeto que teníamos : el formulario.

 

Observe las dos cajas de la parte superior, uno con la inscripción  Objeto : que en el momento que le sacamos la foto tenía Form, y el otro con la inscripción Proc :  (procedimiento), que en el momento de la foto tenía Load.  A estas cajas les denominamos Lista de Objetos y Lista de Procedimientos respectivamente. 

 

Haciendo click sobre la flecha de cada lista, se despliega un menú, en la lista de objetos se desplegará una lista con los nombres de cada objeto existente en ese momento dentro del formulario. Haciendo click sobre uno de los nombres, nos presentará la ventana de código de ese objeto. Todos los objetos gráficos (controles) existentes dentro de un formulario y el propio formulario aparecerán en la misma lista de objetos.

 

Haciendo click sobre la flecha de la lista de procedimientos, se despliega la lista con todos los procedimientos posibles para ese objeto. Siempre saldrá uno. Si tenemos escrito código en uno de los procedimientos, saldrá por defecto ese procedimiento para el cual hemos escrito el código. Si no hay código en ninguno de los procedimientos, saldrá el que tenga por defecto cada objeto.

 

Solamente nos queda por decir, para cerrar este capítulo, que es un procedimiento.

 

Para ello vamos a explicar lo que es un evento. Un Evento es algo que le puede ocurrir a un objeto. En una internase gráfica, lo que le puede ocurrir a un objeto es que se le haga click, doble click, que se pase el cursor del ratón por encima, etc. Este es el Evento. El Procedimiento es la respuesta por parte de ese objeto, al evento que le está sucediendo.

 

Esa respuesta, esa forma de Proceder del objeto al evento que le está sucediendo, debemos programarla según nuestras necesidades, es decir, debemos escribir el código que necesite nuestra aplicación como respuesta al evento que acaba de ocurrir. Posiblemente, no queramos ninguna respuesta a muchos de los eventos que pueden acaecer a un objeto. Cada objeto tiene muchos eventos y solamente queremos aprovechar los que nos interesan. Para que un evento no produzca ningún efecto, basta con dejar sin código el procedimiento correspondiente a ese evento. En los eventos que queramos que realice alguna operación, le escribiremos en su procedimiento el código necesario para que esa operación se realice. Sin darnos cuenta, hemos comenzado a escribir el código de la aplicación.

 

Observará que el primer elemento del menú desplegable de la lista de objetos se denomina General. Este no es en realidad ningún objeto, sino un apartado existente en cada formulario, que, al desplegar su lista de procedimientos tiene la sección de declaraciones,  donde debemos declarar las variables que queremos que afecten a todo el formulario y sus controles, y tendrá además, los nombres de todos los procedimientos que introduzcamos (véase un poco mas adelante).  En este menú desplegable de la lista de procedimientos del General verá con frecuencia cosas que Vd. no puso allí.  Cosas tales como Command1_click, y en la ventana un determinado código. Esto ocurre cuando se borra algún control que tenía escrito código en alguno de sus procedimientos. Visual Basic sabe lo mucho que cuesta escribir el código asociado a un control. Si borramos un control de nuestro formulario accidentalmente, después de haber introducido todo el código asociado a él, Visual Basic nos sorprende con que ese código no lo tira inmediatamente, sino que lo reserva como un procedimiento en ese apartado General del formulario.  Si en realidad queríamos borrar el control y todo su código, debemos quitarlo de ese apartado General de nuestro formulario, pues en realidad, si no lo queremos, no hará otra cosa que estorbar. Para quitarlo basta con borrar todo el código que aparece en la ventana de código cuando hacemos click sobre el nombre del control eliminado. Deberemos borrar todo el código, incluida la cabecera donde figura el nombre del control eliminado, y la parte final, que siempre termina con EndSub.

 

El primer estorbo lo observará si crea otro control con el mismo nombre, cosa fácil ya que VB da un nombre por defecto a cada control (Command1, Command2....).  El código asociado al control eliminado pasará automáticamente al nuevo control con el mismo nombre.

 

Una aplicación puede tener todo su código escrito en los sucesivos procedimientos del formulario y de  los controles que tenga ese formulario.

Puede ocurrir que un determinado evento no esté entre los posibles eventos de los controles de nuestra aplicación. Piense por ejemplo, el evento de que la variable A sea igual a la variable B. No existe en ninguno de los controles ese procedimiento. No se preocupe, puede crear un procedimiento que se ejecute cuando su programa lo decida. Podemos añadir cuantos procedimientos queramos. Estos procedimientos se añaden al formulario, y deberán definirse por un nombre que Vd. debe elegir. Para que se ejecuten las instrucciones (código) incluido en ese procedimiento, basta simplemente con nombrarlo por ese nombre.

Para insertar un procedimiento debe ir a la barra de menú, hacer click sobre Insertar, y en el menú que le desplegará, volver a hacer click sobre Procedimiento. VB le presentará un cuadro donde le pedirá el nombre, si quiere que sea un procedimiento, una función o una propiedad. A lo largo del curso irá viendo que es cada cosa.

 

Escribiendo el código en los sucesivos procedimientos, bien en los propios de cada objeto, bien en los procedimientos que vayamos creando, es posible completar la aplicación. Pero en una aplicación larga esta forma de escribir el código no sería la mas adecuada. Es mas, posiblemente sería demasiado engorroso escribirla de esta forma, y muy probablemente deberíamos escribir el mismo código para varios procedimientos, lo que alargaría inútilmente el programa y el tiempo de desarrollo.

 

Para disponer de un sitio donde escribir parte (o la mayor parte) de su programa, puede introducir uno o varios módulos. Expliquemos lo que es un módulo.

 

Un Módulo es una parte del programa donde solamente puede escribir código. Es igual que un formulario, sin interface gráfica. Un profesor de Visual Basic lo expresaba diciendo que un Módulo es un Formulario sin cara. En un módulo pueden existir procedimientos al igual que en los formularios, pero como un módulo no tiene interface gráfica, esos procedimientos debe introducirlos el programador tal y como explicamos un poco mas atrás. El módulo tiene su propia ventana de código, al igual que un formulario, con un objeto único, el apartado General. Aquí también tenemos la sección de declaraciones, al igual que los formularios. En esta sección de declaraciones se comporta de manera similar a la de los formularios, pero permite algo que no nos permite la sección de declaraciones de un formulario : Declarar variables que se pueden utilizar en todo el programa.  Esto ya lo ha visto mas atrás, con las sentencia de declaración Global y Public.

 

Los módulos se emplean para la declaración de variables globales, y para escribir el código de la aplicación que sea común a varios formularios. Esto nos evita tener que repetir código inútilmente. Ese código común se escribirá en un procedimiento que previamente habremos insertado en este módulo, y lo citaremos por su nombre desde cualquier parte del programa.

 

¿Cual es el nombre de un procedimiento existente dentro de un módulo ?  Depende. Si estamos ejecutando código escrito en otro procedimiento dentro del mismo módulo, es decir, si estamos dentro de ese mismo módulo, basta con citarlo por su nombre : p.e., si en el MóduloA tenemos un procedimiento llamado Procedimiento1, y queremos llamarle desde una línea de código dentro de ese mismo módulo, basta con referirse a él con :

 

          Procedimiento1

 

Si la línea de código donde nos vamos a referir a él está fuera de MóduloA, deberemos referirnos a ese procedimiento con :

 

          MóduloA.Procedimiento1

 

Lo mismo podemos decir para cualquier procedimiento insertado en un formulario. Desde dentro del formulario basta con referirse a él citándolo por su nombre. Desde fuera de ese formulario deberemos citarle como :

 

          Formulariox.Procedimientoy

 

donde damos por hecho que Formulariox es el nombre del formulario que lo contiene, y Procedimientoy es el nombre del procedimiento.

 

Fíjese en el punto usado como separador entre el nombre del formulario y el nombre del procedimiento. VB usa como separador un punto. Usa el separador para separar el nombre de un control y una de sus propiedades  (Label1.Caption), para separar el nombre del formulario del nombre de uno de sus controles (Formulario1.label1.caption)  Se irá familiarizando con la terminología VB según vayamos avanzando en el curso.

 

Funciones

 

Al igual que introducimos Procedimientos, podemos introducir Funciones en nuestra aplicación. Una Función es un Procedimiento al que le pasamos uno o varios parámetros.  (O Ninguno) Verá los Procedimientos y funciones mas adelante  (Cap. 15). Al igual que los Procedimientos, pueden ser públicas (se verán en toda la aplicación)  o privadas  (se verán solamente en el formulario donde estén.

 

Main

 

Merece la pena pararse un poco para estudiar el Procedimiento  Main. Para verlo con mas detalle, comentaremos como comienza a trabajar una aplicación realizada en Visual Basic.

 

Imaginemos una aplicación que tiene 3 Formularios. En cada uno de ellos tiene código. Logicamente la aplicación tendrá que presentar uno de ellos en primer lugar. Deberemos decirle a Visual Basic cual es el formulario inicial, y será ese por el que empiece. En ese formulario dispondremos el código necesario para que la aplicación se ejecute en el orden deseado.

 

Si hacemos click en la Barra de Menú de Visual Basic, en Herramientas | Opciones obtendremos el siguiente  cuadro de diálogo :

 

 

 

Verá que tiene 4 pestañas, y actualmente tiene abierta la pestaña correspondiente a Proyecto, y tiene desplegada una lista donde nos pide el Formulario Inicial. En esa lista figura también la expresión Sub Main.  Si ponemos como formulario inicial uno de los formularios, la aplicación comenzará por ese formulario. Si en uno de los Módulos existentes en el proyecto, ponemos un procedimiento llamado Main, podemos comenzar la ejecución de la aplicación justamente por ese procedimiento. En ese procedimiento pondremos el código necesario para que, posteriormente, se muestre uno de los formularios.  Esto es muy practico cuando queremos hacer una función previa a mostrar cualquier formulario  (abrir una base de datos, por ejemplo). Para comenzar la aplicación por Main se elige esa opción en la lista Formulario Inicial.

¡ Recuerde que Main debe estar en un Módulo !

 

El cuadro de diálogo anterior sirve además para otras cosas. Entre ellas poner el nombre del proyecto (nombre que no aparecerá por ninguna parte, solo en los datos internos de la aplicación) y su descripción.

 

En otra pestaña podemos configurar varias prestaciones del entorno de trabajo :

 

Guardar la aplicación antes de ejecutar. Esta prestación nos va a evitar muchos disgustos. Es muy práctico guardar la aplicación antes de ejecutarla, pues de esta forma evitamos que, si nuestra aplicación tiene un error tal que hagamos colgarse a Windows, siempre tendremos la aplicación metida en el disco duro. Pero también es una pequeña pesadez tener que esperar a que se guarde cada vez que la ejecutamos.

 

Si tenemos la activada la casilla Declaración de variables requerida nos pondrá automáticamente Option Explicit en el encabezamiento de todas las secciones de declaraciones de la aplicación.

 

Podemos elegir también las ventanas que queremos que estén siempre visibles, y que verifique automáticamente la sintaxis de una instrucción en el momento de escribirla.

 

 

 

La pestaña de Editor nos permite fundamentalmente 2 cosas : 

 

Ver solamente el código correspondiente al procedimiento que estamos escribiendo ó Ver el código del Módulo (o Formulario) completo. En este último caso es un poco mas difícil de manejar la ventana de código, sobre todo si el programador no está muy habituado a ello. Le presenta procedimiento tras procedimiento, separados por una línea.  Para seleccionar una u otra opción hay que seleccionar o deseleccionar la casilla Ver módulo completo.

 

Cambiar el color de la letra y del fondo del código, según el tipo que sea (código, comentario, error devuelto, etc.).  Los alumnos mas aventajados y con ganas de marear al profesor y, lo que es peor, a sus compañeros, conocen la forma de poner como invisible una parte del texto del código.  Si observa comportamientos raros en el texto donde escribe el código, revise el cuadro de Colores de Código.

 

 

 


 

Visual Basic - Guía del Estudiante  Cap. 2

 VOLVER a INDICE

 

FORMULARIO

____________

 

El primer objeto Visual Basic con que nos encontramos es el FORMULARIO. De hecho, cada vez que iniciamos Visual Basic (VB) nos presenta en pantalla un nuevo formulario, que tiene por defecto el nombre de Form1

 

El Formulario es un objeto, que sirve de soporte de otros objetos.  El nombre de FORMULARIO lo toma precisamente porque, al igual que un formulario de papel contiene textos escritos, lugares donde podemos escribir, figuras, cajas donde podemos elegir una u otra opción, etc., en este cuadro gráfico que llamamos formulario, podemos introducir textos escritos, lugares donde podemos escribir, figuras, cajas donde podemos elegir una u otra opción ....

 

En realidad un formulario es lo que normalmente conocemos por VENTANA. El nombre de formulario le viene muy bien cuando ese formulario es una ventana donde vamos a introducir datos alfanuméricos. Cuando en vez de introducir datos, lo que tenemos es, por ejemplo, una ventana donde se reproducen exactamente los controles de operación de una máquina, parece en principio que sería mas correcto el nombre de "ventana".  De alguna forma lo hay que llamar, y esa forma es FORMULARIO. Posiblemente a lo largo de estos apuntes nos referiremos al formulario con el nombre de ventana, o incluso, pantalla. Procuraremos usar el nombre apropiado: FORMULARIO.

 

         

Forma inicial del formulario.

 

 

Ejemplo de un formulario para una aplicación industrial. Este formulario reproduce el panel de control de un transmisor - receptor de radio. En este caso, parece que el nombre de ventana le viene mejor que el de formulario. Observe que dentro del formulario existen gran cantidad de objetos. Botones, que hacen la misma función que el botón real en el equipo de radio, y un par de displays, que muestran un texto, en este caso las frecuencias de transmisión y recepción.

 

Como cualquier objeto Visual Basic, un formulario tiene propiedades y procedimientos:

 

PROPIEDADES.

 

Name           Nombre

 

Define al objeto durante la ejecución del programa. Se introduce en tiempo de diseño y no se puede variar durante la ejecución. Nombre por defecto: Form1  (Form2  y sucesivos)   Este nombre por defecto debe cambiarse, (debería cambiarse por norma en el momento de introducir el formulario), ya que de no hacerlo corremos el riesgo de borrar el código existente de otro formulario del mismo nombre en el momento de guardar la aplicación.

 

Caption        Título

 

Es el texto que aparecerá en la barra de Título cada vez que aparezca en pantalla este formulario. No tiene otra función dentro del programa. El programa no accede a este formulario por el título, sino por el nombre.   Puede cambiarse en tiempo de ejecución.

                   

                              NOTA.- No confundir Nombre (Name) con Título (Caption)

 

 

 

Control Box Control “menos” del Formulario              Valor por defecto : True

 

Propiedad booleana que admite los valores de true (verdadero) o False (Falso). Si esta propiedad es True, aparecerá en la esquina superior izquierda el "menos" para desplegar el menú de control de este formulario. Si esta propiedad se pone como False, no existirá dicho "menos" y por tanto no se puede desplegar dicho menú.

 

MinButton                      

MaxButton                      Valor por defecto: True

 

Botones (flechas) de minimizar y maximizar este formulario. Son igualmente propiedades booleanas, que admiten el valor True o False. Si están en true, aparecerá la flecha correspondiente. Si están en False, no aparecerá dicha flecha. Deben configurarse de una u otra forma, dependiendo si se quiere minimizar / maximizar este formulario durante la ejecución.

 

Nota.  En los formularios MDI child, es necesario poner a true las propiedades ControlBox, MinButton y MaxButton para poder maximizar el formulario hijo. De no ponerlas a true, sí se pretende maximizar el formulario hijo,  (Propiedad WindowState=2) el formulario no aparece.

 

BorderStyle Tipo de borde        

 

Define el tipo de borde que tendrá el formulario durante la ejecución. No se puede cambiar en tiempo de ejecución,

                    Admite los siguientes valores:

 

                    0 - None    El formulario no tiene borde alrededor

 

                    1 - Fixed Single  

El formulario tendrá un borde fino, y no podrá cambiarse su tamaño durante el tiempo de ejecución. Con este valor, el formulario puede tener un menú de control, barra de título y botones de maximizar y minimizar. Solo podrá cambiarse de tamaño utilizando estos botones.

2-Sizable 

El formulario tendrá borde grueso, y se podrá cambiar su tamaño en tiempo de ejecución mediante los botones de maximizar y minimizar, y mediante el arrastre de uno de los bordes con el ratón.

 

                    3 - Fixed Dialog  

El formulario tendrá borde grueso, y no se podrá redimensionar durante la ejecución. No puede tener los botones de maximizar ni minimizar.

 

                    4 - Fixed ToolWindow

En las versiones de 16 bits de Windows y Windows NT 3.51 y anteriores se comporta como Fixed Single. No puede cambiar de tamaño. En Windows 95 muestra el botón Cerrar, y el texto de la barra de titulo aparece con un tamaño de fuente reducido. El formulario no aparece en la barra de tareas de W95.

 

                    5 - Sizable ToolWindow  

En las versiones de 16 bits se comporta como Sizable. En W95 muestra el botón Cerrar y el texto de la barra de titulo aparece con un tamaño de fuente reducido. El formulario no aparece en la barra de tareas de W95.

 

                    Valor por defecto:  2 . Sizable

 

Nota: Al cambiar a determinados valores, las propiedades MaxButton y MinButton se ponen a False. Pueden cambiarse a True posteriormente.

 

Appearance Apariencia    Valor por defecto:  3D

 

Admite los valores 0 (=Flat,  plano) y 1  (=3D) Si tiene el valor 1  (3D), el formulario aparecerá con cierto efecto tridimensional, y los controles que le introduzcamos a este formulario aparecerán como esculpidos dentro de él. Con valor 0 (Flat)  en esta propiedad, el formulario aparecerá durante la ejecución como una superficie plana. El color de fondo se ve afectado al cambiar esta propiedad. Si se cambia a 3D, el fondo (Backcolor) toma el color definido en Windows en el Panel de Control. Si se cambia a Flat, toma el color blanco

 

Autoredraw                     Valor por defecto: False

 

Propiedad booleana. Esta propiedad, estando en True, permite actualizar el contenido del formulario y de sus controles incluso cuando no están visibles. Imaginemos que en este formulario existe un texto, una etiqueta (Label) o caja de texto (Text Box) cuyo texto se haya cambiado, bien por programa, bien por una entrada, mientras este formulario no estaba visible. Lo mismo podemos decir de las propiedades de cualquier otro control. Si esta propiedad Autoredraw está en False, al hacer visible este formulario, aparecerá igual que cuando se ocultó. Si esta propiedad está en True, aparecerá actualizado.

 

Backcolor    Color del fondo      

 

Establece el color del fondo del formulario. Puede cambiarse en tiempo de ejecución.

 

          Valor por defecto: El establecido en el Panel de Control de Windows.

 

ClipControls                              Valor por defecto: False

 

Propiedad Booleana. Establece si un evento Paint vuelve a dibujar el objeto entero (True) o si solamente dibujan las partes que han sufrido cambios (False)

 

DrawMode

 

Establece un valor que determina el aspecto de la salida de un método gráfico o el aspecto de un control Shape o Line. Verá mas adelante los efectos de esta propiedad.

 

DrawStile                         Valor por defecto : 0      

 

Establece el estilo de línea de la salida de métodos gráficos:

 

                    Valores:        0 - Línea continua

                                       1 - Rayas

                                       2 - Puntos

                                       3 - Raya-Punto

                                       4 - Raya - Punto - Punto

                                       5 - Transparente

                                       6 - Continuo interior.

 

DrawWidth                      Valor por defecto: 1

 

Establece el ancho de una línea dibujada. El valor debe expresarse en pixeles.

 

Enabled       Activado       Valor por defecto: True

 

Propiedad booleana. Si está en True, el formulario está activado y se puede interactuar con él. Si está en False, se desactiva el formulario, impidiendo de esta forma, que se pueda trabajar con él.

 

ForeColor                        Valor por defecto: Negro

         

Establece el color del primer plano del formulario. Es el color que tendrán las letras si escribimos en él, o los dibujos, si lo que hacemos es dibujar. En tiempo de diseño, determina el color de la rejilla,.

 

FillStyle       Tipo de relleno        Valor por defecto: 2

 

Establece el modo de rellenar controles Shape, o figuras (círculos o cuadrados) creados con los métodos gráficos Circle y Line.

 

                    Valores:        0 - Continuo

                                       1 - Transparente

                                       2 - Línea Horizontal

                                       3 - Línea Vertical

                                       4 - Diagonal hacia arriba

                                       5 - Diagonal hacia abajo

                                       6 - Cruzado

                                       7 - Diagonal cruzada

 

FillColor                 Color de relleno

 

Especifica el color del relleno contemplado en FillStyle.

 

Font             Tipo de letra Valor por defecto: El determinado en la personalización.

 

Especifica el tipo y tamaño de la letra que se usará en el formulario. Al seleccionar esta propiedad en la ventana de propiedades, aparece un cuadro de dialogo donde se eligen ambos parámetros.

Cuando introduzca nuevos controles en el Formulario, la propiedad Font de estos controles tomará el valor que tenga esta propiedad en el Formulario.  Puede servirle este pequeño truco para utilizar en todos los controles una determinada fuente sin tener que teclearla para cada control.

 

FontTranparent     Texto Transparente Valor por defecto: True

 

Establece si el texto o gráfico de fondo del formulario se muestra (True) o no se muestra entre los caracteres de texto escritos en el propio formulario.

 

FontSize                 Tamaño de letra

         

Establece el tamaño de la letra. Esta propiedad, que puede variarse en tiempo de ejecución, varía solamente el tamaño, y no el tipo de letra. El tamaño debe expresarse en puntos. Máximo, 2160 puntos.

 

FontBold, FontItalic, FontStrikethru, FontUnderline

         

Permiten, en tiempo de ejecución, cambiar un texto a negrita, cursiva, tachado y subrayado. Son propiedades booleanas True / False

 

Height                   Altura           Valor por defecto: No existe

 

Define la altura del formulario. El valor de esta propiedad no se introduce normalmente como un dato numérico, sino que toma el valor automáticamente, dependiendo de las dimensiones del formulario durante el tiempo de diseño. Puede cambiarse durante el tiempo de ejecución.

 

 

HelpContextID                           Valor por defecto: 0

 

Establece un número de contexto asociado para este formulario. Este número se aplica para determinar la ayuda interactiva asociada a este formulario. Vea mas adelante, el tema Ayuda de Windows.

 

Puede tomar los siguientes valores :      0 - No se especifica número de contexto

                                                 >0 Un entero que especifique un contexto válido.

Icon             Icono

 

Esta propiedad define el icono que va a representar a este formulario cuando esté minimizado. Si el formulario es el formulario padre o formulario de inicio de una aplicación, este icono es el que toma el Asistente de Instalación para colocarlo como icono de apertura del programa en el grupo de programas Windows correspondiente. Como valor de esta propiedad se le puede asignar directamente el icono o el nombre de un archivo (con su path correspondiente) que lo contiene, haciéndolo directamente sobre la caja de propiedades.

 

          Valor por defecto: el icono que se le haya programado en la personalización.

 

KeyPreview                     Valor por defecto: False

 

Propiedad Booleana. Cuando un formulario tiene dentro de sí varios controles, uno de ellos es el que está activo. En estas condiciones, si se pulsa una tecla,  esa pulsación la  recibe en primer lugar el control que esté activo,  y si éste no la procesa, pasa esa pulsación al formulario. Para hacer que esa pulsación pase directamente al formulario, debe ponerse esta propiedad en True.

 

Left    Borde Izquierdo                Valor por defecto: No existe

 

Indica la posición del borde izquierdo del formulario. Normalmente no se introduce como valor numérico, sino que lo toma automáticamente de la posición que tenga el formulario en el     tiempo de diseño. Puede cambiarse en tiempo de ejecución, para mover el formulario.

 

LinkMode                        Valor por defecto: 0

 

Permite que una aplicación destino inicie una conversación DDE con el formulario (origen de datos). Puede tomar los siguiente valores:

 

                    0 - No hay interacción DDE

1 - Source. Indica que este Formulario es origen de una comunicación DDE. El dato que se va a traspasar en esa comunicación DDE estará en un TextBox, en un Label o en un PictureBox de este Formulario.

 

LinkTopic

 

Establece el tema al que este formulario va a responder a una conversación DDE, cuando funciona como origen. Es por este tema por el que se debe llamar a este formulario cuando actúa de origen en una conversación DDE

 

MDIChild                         Valor por defecto: False

 

Establece que este formulario es un formulario Hijo dentro de un formulario MDI. No se puede cambiar en tiempo de ejecución. Es una propiedad booleana

True = es formulario hijo          False =No lo es

 

 

MouseIcon                      Valor por defecto: ninguno

 

Establece un icono personalizado para el puntero del ratón cuando esté encima de este Formulario. Este icono puede ser un bit-map de los existentes en el directorio Icons de Visual Basic o cualquiera que tengamos. Si se pone 99 como valor de la propiedad MousePointer (siguiente), cada vez que el puntero del ratón pase por este Formulario, cambiará su forma y adoptará la del icono elegido.

 

MousePointer                           Valor por defecto: flecha

 

Determina la forma del puntero del ratón cuando se coloca encima del formulario. Puede elegirse uno de los punteros preestablecidos (15 en total) o el personalizado visto en la propiedad anterior. Para elegir ese icono personalizado, debemos poner en esta propiedad el valor 99.

 

Picture                  Gráfico                   Valor por defecto: No existe

 

Mediante esta propiedad podemos poner un gráfico como fondo del formulario. El gráfico puede ser un bit-map o un fichero .ICO

 

ScaleHeight, ScaleWidth, ScaleMode,

 

Indican la unidad de medida de dimensión de altura y anchura del Formulario. ScaleMode indica en qué unidades de medida se van a medir esas dimensiones.  Acepta Twips (1), Point(2), Pixel (3),  Character (4), Pulgadas (Inch) (5), Milímetros (6), Centímetros (7).  Si colocamos la propiedad ScaleMode  en cualquiera de estos valores, las propiedades ScaleHeight y ScaleWidth nos vendrán dadas automáticamente dependiendo del ancho del Formulario, y no se extrañe si encuentra para estas propiedades valores tan peregrinos como 4815 y  7423.  Al haber elegido la unidad de medida, los valores de ancho (ScaleWidth) y alto (ScaleHeight) serán los que tengan que ser, medidos en la unidad que hemos elegido. Podemos elegir una cifra para el ancho y el alto del Formulario de forma que podamos controlar mejor las distintas posiciones que van a ocupar en él los controles, los textos o los dibujos. Podemos poner, por ejemplo, que el Formulario mida 400 de ancho (ScaleWidth = 400) y 300 de alto (ScaleHeight = 300) forzándole estas propiedades, bien en tiempo de diseño en la caja de propiedades, o en tiempo de ejecución mediante código. Entonces sabemos que el formulario, independientemente de las dimensiones físicas que tenga sobre la pantalla, medirá 400 de ancho y 300 de alto, y si en estas condiciones queremos colocar un control o un dibujo justo en el medio del Formulario, sabemos que tenemos que colocarle en las coordenadas 200, 150. ¿Que unidad de medida estaremos utilizando entonces en el Formulario ?   Unas definidas por el usuario (distintas para el ancho y el alto) que serán las necesarias para que el Formulario mida de ancho lo que le hayamos puesto en la propiedad ScaleWidth y de alto lo que le hayamos puesto en la propiedad ScaleHeight. Observe que la propiedad ScaleMode se ha cambiado automáticamente a User (0) al introducir las dimensiones de ancho y alto que nosotros queremos.

 

Estas unidades de medida afectarán a los controles que metamos en este Formulario. Se medirán en su ancho y alto con la unidad de medida definida para el ancho y alto del Formulario. Lógicamente también afectará a las propiedades Left y Top de los controles, pero estas propiedades se verán afectadas además por las propiedades ScaleLeft y ScaleTop del Formulario que se verán a continuación.

 

ScaleLeft,  ScaleTop

 

Estas propiedades, medidas en la unidad de medida elegida para el ancho y alto mediante las propiedades ScaleMode, ScaleWidth y ScaleHeight anteriores, expresan las coordenadas iniciales de la parte izquierda y de la parte superior respectivamente del Formulario. Estas propiedades no afectan a la posición del Formulario en la pantalla (Si está maximizado seguirá ocupando toda la pantalla, si está en “Normal” ocupará el mismo sitio que se dio en tiempo de diseño).  Supongamos que se le asigna a un Formulario, las propiedades ScaleWidth = 400, y ScaleHeight = 300. Si colocamos un control justamente en el centro del Formulario tendrá sus propiedades Top =150 y Left=200. Si ponemos ahora las propiedades del Formulario ScaleLeft a 30 y ScaleTop a 10, ese control, para seguir en el centro del Formulario deberá tener sus propiedades Top a 160  (150 + 10) y Left a 230  (200 + 30). 

 

Recuerde que las medidas de un formulario crecen, desde la esquina superior izquierda, según avanzamos hacia abajo y hacia la derecha.

 

Como aclaración de las relaciones entre distintas unidades de medida, puede ver en la siguiente table la correspondencia entre cada una de ellas y la unidad imaginaria Twip.

 

1 Point=20 Twips ;  1Pixel=15 Twips :  1 Charecter=240 Twips ; 1 Inch (pulgada) =1440 Twips  1mm=56,52 Twips  1 cm=566 Twips

 

Tag                                 Valor por defecto: No existe

 

Esta propiedad no la usa directamente Visual-Basic. Sirve para asociar al formulario información adicional para fines externos a la programación. Pero también le puede servir para almacenar en ella una variable para que la use un código ajeno al formulario. El autor de estos apuntes tiene por costumbre utilizar la propiedad Tag del formulario inicial para guardar el parámetro que se le pasa a algunos programas para acceder a ellos con unos determinados privilegios.  Resumiendo, está ahí para lo que el programador quiere.

 

Top    Posición del borde superior         Valor por defecto: No existe

 

Esta propiedad establece la posición del borde superior del formulario. Normalmente no se introduce como valor numérico sino que lo toma automáticamente de la posición que tenga el  Formulario durante el tiempo de diseño Este valor puede cambiarse durante la ejecución para, conjuntamente con Left,  variar la posición del Formulario. Los valores de Top y Left definen la esquina superior izquierda del Formulario.

                                      

Visible                                                 Valor por defecto:  True

 

Propiedad Booleana.  Asignándole el valor True la pantalla es visible, y asignándole el valor False, no se ve.  Este valor puede cambiarse durante el tiempo de ejecución para ocultar y hacer visible el formulario.

 

Width           Ancho                     Valor por defecto: No existe

 

Define la anchura del formulario. Normalmente no se introduce como valor numérico sino que lo toma automáticamente del tamaño que tenga el formulario durante el tiempo de diseño. Juntamente con Height define el tamaño del formulario. Puede cambiarse durante el tiempo de ejecución.

 

WindowState        

 

Establece el estado en el que aparecerá el formulario cuando se activa y presenta en pantalla. Admite tres opciones:    

0 - Normal  El formulario recupera la posición y tamaño que tenía en el tiempo de diseño.

1 - Minimizado  El formulario aparece minimizado, representado por su icono.

2 - Maximizado   El formulario aparece maximizado, ocupando toda la pantalla.

 

PROCEDIMIENTOS

 

Activate       Activación                         Click            Click

DblClick       Doble click                        Deactivate   Desactivación

DragDrop     Arrastrar y soltar              DragOver     Arrastrar por encima

GotFocus    Obtener el foco                          KeyDown     Mantener pulsada una tecla

KeyPress     Pulsar una tecla                KeyUp                   Soltar una tecla      

LinkError     Error de enlace                           LinkExecute Ejecución de un enlace de datos

LinkOpen     Romper el enlace              Load            Cargar el formulario

LostFocus   Perder el foco                            MouseDown Pulsar una tecla del ratón

MouseMove Mover el ratón (Detecta la posición del ratón sobre el formulario)

MouseUp     Soltar una tecla del ratón   Paint            Pintar

QueryUnload         Confirmación de descarga Resize                   Cambio de tamaño

Unload                   Descargar el formulario

 

 

Un Formulario sirve, fundamentalmente, de contenedor de controles. Es la ventana de Windows de nuestra aplicación. Una aplicación puede tener varios Formularios y dentro de cada uno de ellos, los controles necesarios para cada paso o estado de la aplicación.

 

Un Formulario puede servir también como soporte de textos o dibujos.

 

 

CONTROLES

 

Una vez introducido un Formulario, se pueden colocar los objetos (controles) que forman parte de la aplicación. Estos controles se irán viendo en próximos capítulos.

 

Los controles, lo mismo que el Formulario, tienen Propiedades y Procedimientos.

 

Las Propiedades definen las características del Control. Los Procedimientos definen la forma de actuar (la forma de proceder) de un control frente a un evento.

 

Tanto las propiedades como los procedimientos deben ser definidos por el programador. Las propiedades dejan un pequeño margen de actuación, los procedimientos son en su totalidad, definidos por el programador. Estos procedimientos forman parte del programa. Podría incluso hacerse una aplicación que no tuviese mas código que el introducido en los procedimientos.

 

Para colocar un control en un Formulario, basta con “tomarlo” de la caja de herramientas existente en la parte izquierda de la pantalla de VB y llevarlo al Formulario. Si no existiese el control deseado en la caja de herramientas, deberemos ir a “cogerlo” a Controles personalizados que está en el menú desplegable Herramientas de la barra de Menú de VB. Se elige el nuevo control, marcando la caja de opción a la izquierda de su nombre, y haciendo click en ACEPTAR. Este control ya pasa a la caja de herramientas.

 

 

 COMMAND BUTTON      BOTON DE COMANDO

_______________________________________

 

El Command Button es un objeto que sirve para introducir datos a través de la pantalla. El Botón de Comando tiene la siguiente forma:

         

El botón de comando puede usarse para la entrada de datos con el ratón, o para validar cualquier operación. El tamaño puede cambiarse a voluntad, pero la forma siempre es rectangular. En la figura anterior vemos dos botones de comando, uno de ellos (el Command2) marcado con unos puntos en su contorno. Estos puntos nos permiten variar su tamaño en tiempo de diseño. También puede cambiarse su tamaño y posición en tiempo de ejecución.

 

 

PROPIEDADES

 

Name           Nombre                 

Es el nombre que define a este objeto durante la ejecución del programa. No se puede cambiar en tiempo de ejecución. El nombre por defecto es Command1,  Command2, etc. Estos nombres por defecto deberían cambiarse por otros que nos indiquen algo respecto a este control, aunque en este caso no es tan imprescindible como para los formularios.

 

Caption        Título

Es el texto que aparece en el botón. Puede cambiarse en tiempo de ejecución. No tiene otra función dentro del programa.

 

                              NOTA.- No confundir Nombre (Name) con Título (Caption)

 

Appearance Apariencia

Determina la forma del botón. Admite los valores de Flat       (Plano) y 3D.  No se aprecia en gran medida la diferencia.

 

Backcolor    Color de fondo

Es el color de un pequeño cuadrado que aparece rodeando el título, NO el color del botón, que es invariable. Puede cambiarse en tiempo de ejecución.

 

Cancel        

Establece un valor que indica si un botón de comando es el botón Cancelar de un formulario.  Es una propiedad booleana, y admite los valores True o False. Puede utilizar la propiedad Cancel para dar al usuario la opción de cancelar los cambios que no se han hecho efectivos y devolver el formulario a su estado anterior. En un formulario sólo puede haber un botón de comando con la propiedad Cancel = True.

 

Default

Establece un valor que determina el control CommandButton que es el botón de comando predeterminado de un formulario. Sólo un botón de comando de un formulario puede ser el botón de comando predeterminado. Cuando Default se define a True para un botón de comando, se define automáticamente a False para el resto de los botones de comando del formulario. Cuando la propiedad Default del botón de comando está establecida a True y su formulario primario está activo, el usuario puede elegir el botón de comando (invocando su evento Click) presionando ENTRAR. Cualquier otro control que tuviera el enfoque no recibe evento de teclado (KeyDown, KeyPress o KeyUp) de la tecla ENTRAR a menos que el usuario haya movido el enfoque a otro botón de comando del mismo formulario. En este caso, al presionar ENTRAR se elige el botón de comando que tiene el enfoque en lugar del botón de comando predeterminado.

 

DragIcon

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

 

DragMode

Establece un valor que determina si se usa el modo de arrastre manual o automático en una operación de arrastrar y colocar.  Los valores posibles de número  son:

 

0       Manual  (Predeterminado)

1       Automático

 

Enabled       Habilitado

Propiedad Booleana que habilita o deshabilita el botón. Cuando está deshabilitado (Enabled = False), el botón no tiene efecto, y su apariencia varía, presentando un tono pálido tanto en su cuerpo como en su título. Puede variarse en tiempo de ejecución.

 

Font             Fuente

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

 

Height                   Altura

Establece la altura del botón. Normalmente esta propiedad no se introduce numéricamente, sino que la toma automáticamente de las dimensiones que se le den al botón en tiempo de diseño. Puede cambiarse, cambiando el valor a esta propiedad, en tiempo de ejecución.

 

HelpContextID

Establece un número de contexto asociado para este control. Este número se aplica para determinar la ayuda interactiva.

 

Puede tener los siguientes valores:

0 = No se especifica número de contexto

>0  Un entero que especifica un contexto válido.

 

Index           Indice

En el caso de que se tengan varios botones que realicen una función similar (Las teclas numéricas de una calculadora, p.e.) puede hacerse un array con estos botones de comando. Todos tendrán el mismo nombre, y se diferencian por un índice. Esta propiedad Index toma el número de ese índice.

 

Left   

Posición de su parte izquierda. Indica la posición del botón, concretamente de la parte izquierda del mismo. Normalmente esta propiedad no se introduce numéricamente, sino que la toma automáticamente de la posición que se le de al botón en tiempo de diseño. Puede cambiarse, cambiando el valor a esta propiedad, en tiempo de ejecución.

 

MouseIcon   Icono para el puntero del ratón

Determina el icono que presenta al puntero del ratón cuando pasa por encima del botón, cuando se especifica en la propiedad MousePointer que el puntero del ratón es el definido por el usuario. (Custom)

 

MousePointer        Puntero ratón

Determina la forma del puntero del ratón cuando éste pasa por encima del botón. Puede elegirse uno de los punteros preestablecidos (15) o incluso uno diseñado especialmente. Para especificar que el puntero es uno diseñado especialmente, hay que poner a esta propiedad el valor 99 (Custom), y en este caso aparecerá el icono determinado por la propiedad MouseIcon

 

TabIndex     Nº de orden para tabulador

Cuando disponemos de varios controles en un mismo formulario, solamente uno de ellos tiene el foco. Esta expresión de tener el foco significa que ese control está remarcado y en esa condición, si pulsamos la tecla ENTER haría el mismo efecto que hacer click con el ratón en ese control. Esto es necesario, ya que existen ordenadores que no disponen de ratón (típico de algunos portátiles). En estos casos, para elegir uno u otro control debemos pulsar repetidas veces la tecla TABulador. El foco irá cambiando de uno a otro control (pueden ser controles de distinto tipo) cada vez que pulsemos la tecla TABulador. Esta propiedad TabIndex marca el orden que seguirá el foco a través de cada control.

 

TabStop      Sale del control de la tecla TAB

Propiedad booleana. Cuando esta propiedad está a False, el  botón no tomará el foco cuando se pulse la tecla del Tabulador. Sin embargo sigue manteniendo el índice de la propiedad TabIndex descrita anteriormente. Puede cambiarse en tiempo de ejecución. Esto nos permite descartar algún botón de tomar el foco, cuando por facilidad para el usuario, sea conveniente en determinados puntos del programa.

 

Tag

Esta propiedad no la usa directamente Visual-Basic. Sirve para asociar a este control alguna información adicional para fines externos a la programación. Similar a la del formulario.

 

Top

Indica la coordenada de la parte superior del control. Puede variarse durante el tiempo de ejecución. Esta propiedad, juntamente con Left definen la esquina superior izquierda del botón de comando. Normalmente esta propiedad no se introduce numéricamente, sino que la toma automáticamente de la posición que se le den al botón en tiempo de diseño. Puede cambiarse, cambiando el valor a esta propiedad, en tiempo de ejecución.

 

 

Visible                   Visible

Propiedad Booleana. Si es true, el botón se ve, si es False el botón no se ve. Puede cambiarse en tiempo de ejecución. De hecho, es un recurso muy usado para dejar visibles en un formulario, solamente los objetos (controles) necesarios.

 

WhatThisHelpID              (Propiedad, Windows 95)

 

Devuelve o establece un número de contexto asociado a un objeto. Se utiliza para dotar a las aplicaciones de Ayuda interactiva con el menú emergente ¿Qué es esto? de la Ayuda de Windows 95.

 

Width                    Ancho

Define el ancho del botón. Con Height determina la dimensión del botón.

 

 

 

PROCEDIMIENTOS DEL BOTON DE COMANDO

 

Click                      DragDrop              DragOver              GotFocus

KeyDown               KeyPress               KeyUp                             LostFocus

MouseDown          MouseMove           MouseUp

 

¡  El botón de Comando no tiene el procedimiento DbClick !

 

 

LABEL         ETIQUETA

____________________

 

 

Una etiqueta es un control que nos permite presentar un texto. La etiqueta debe usarse en aquellos casos en los que exista una información estática o dinámica que no deba ser cambiada por el operador.

 

Puede adoptar estas formas:  con borde tridimensional, borde plano  o sin borde, y el texto justificado a la izquierda, a la derecha o centrado.

 

 

Se ha incluido la trama para poder observar los límites de la etiqueta sin borde.

 

 

PROPIEDADES 

 

Alignment    Justificación

Establece si el texto se justifica a la izquierda, a la derecha, o se centra sobre la etiqueta.

 

Appearance Apariencia    Plana o tridimensional.

 

Autosize      Tamaño

Propiedad booleana. Si se pone a True, el tamaño de la etiqueta se ajusta al texto que contiene.

 

Backcolor    Color de fondo

Es el color de fondo de la etiqueta. Puede cambiarse en tiempo de ejecución.

 

BackStyle    Tipo de fondo

Opaco o transparente. Cuando se selecciona transparente, se ve solamente el texto de la etiqueta. Cuando se selecciona opaco, este texto se vé sobre un fondo gris.

 

BorderStyle Tipo de borde

Sin borde o con borde. En caso de haber elegido en la propiedad Appearance el modo tridimensional, y eligiendo con borde en esta propiedad, el aspecto adopta una forma como incrustada en el formulario.

 

Caption        Título

Es el texto de la etiqueta. Puede cambiarse en tiempo de ejecución, lo que permite usar la etiqueta como dispositivo de presentación de textos. No se puede cambiar por el procedimiento de arrastrar con el ratón, por lo que es el control adecuado cuando se quiere presentar un texto que no se pueda cambiar por el operador.

 

DataField  DataSource   

Establecen la base de datos y el campo donde está el texto Datos que se llevará a la propiedad Caption. Estas propiedades permiten presentar los datos de una Base de Datos mediante un procedimiento muy sencillo, con la ayuda de un control Data (Se verá mas adelante)

 

 

DragIcon

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

 

DragMode

Establece un valor que determina si se usa el modo de arrastre manual o automático en una operación de arrastrar y colocar.  Los valores posibles de número  son:

 

0       Manual  (Predeterminado)

1       Automático

 

Enabled       Habilitado

Propiedad Booleana que habilita o deshabilita la etiqueta Cuando está deshabilitado (Enabled = False),  no tienen efecto los eventos que se produzcan sobre ella, y su apariencia varía, presentando un tono pálido tanto en su cuerpo como en su título. Puede variarse en tiempo de ejecución.

 

Font             Fuente

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

 

ForeColor

Es el color de la letra de la etiqueta. Puede cambiarse en tiempo de ejecución.

 

Height                   Altura

Establece la altura de la etiqueta.  Normalmente esta propiedad no se introduce numéricamente, sino que la toma automáticamente de las dimensiones que se le den a la etiqueta en tiempo de diseño.

 

Index           Indice

En el caso de que se tengan varios etiquetas que realicen una función similar puede hacerse un array con etiquetas. Todas tendrán el mismo nombre, y se diferencian por un índice. Esta propiedad Index toma el número de ese índice.

 

Left    Posición de su parte izquierda

Indica la posición de la etiqueta, concretamente de su parte izquierda. Normalmente esta propiedad no se introduce numéricamente, sino que la toma automáticamente de la posición que ocupaba en tiempo de diseño. Puede cambiarse, cambiando el valor a esta propiedad, en tiempo de ejecución.

 

LinkItem  LinkMode  LinkTimeout  LinkTopic

Estas propiedades establecen la forma en que debe llevarse a cabo una conexión DDE con otra aplicación. Se verán con mas detalle al estudiar los enlaces DDE

 

MouseIcon   Icono del puntero del ratón

MousePointer        Puntero ratón

Para estas propiedades es aplicable todo lo dicho para las mismas en el Botón de Comando

 

Name           Nombre

Es el nombre de la etiqueta con el que se le conocerá a lo largo del programa

 

TabIndex     Nº de orden

Al igual que para los botones de comando, la etiqueta tiene propiedad TabIndex. Sin embargo, una etiqueta NUNCA tomará el foco. Vea la propiedad UseMneumonic mas adelante.

 

Tag

Esta propiedad no la usa directamente Visual-Basic. Sirve para asociar a este control alguna información adicional para fines externos a la programación.

 

Top

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.