100 PIPER´S

Archivos y Entrada/Salida de Datos en Visual Basic 6.0

En este capítulo se van a describir varias formas de introducir información en el programa, así como de obtener resultados en forma impresa o mediante escritura en un fichero. Se va a presentar una nueva forma interactiva de comunicarse con el usuario, como son las cajas de diálogo MsgBox e InputBox. Particular interés tiene la lectura y escritura de datos en el disco, lo cual es necesario tanto cuando el volumen de información es muy importante (la memoria RAM está siempre más limitada que el espacio en disco), como cuando se desea que los datos no desaparezcan al terminar la ejecución del programa. Los ficheros en disco resuelven ambos problemas.
También se verá en este capítulo cómo obtener resultados alfanuméricos y gráficos por la
impresora.

CAJAS DE DIÁLOGO INPUTBOX Y MSGBOX

Estas cajas de diálogo son similares a las que se utilizan en muchas aplicaciones de Windows. La caja de mensajes o MsgBox abre una ventana a través de la cual se envía un mensaje al usuario y se le pide una respuesta, por ejemplo en forma de clicar un botón O.K./Cancel, o Yes/No. Este tipo de mensajes son muy utilizados para confirmar acciones y para decisiones sencillas. La caja de diálogo InputBox pide al usuario que teclee una frase, por ejemplo su nombre, un título, etc.
La forma general de la función MsgBox es la siguiente:
respuesta = MsgBox(“texto para el usuario”, tiposBotones, “titulo”)
donde respuesta es la variable donde se almacena el valor de retorno, que es un número indicativo del botón clicado por el usuario, de acuerdo con los valores de la Tabla 7.1. La constante simbólica que representa el valor de retorno indica claramente el botón clicado. Los otros dos argumentos son opcionales. El parámetro tiposBotones es un entero que indica la combinación de botones deseada por el usuario; sus posibles valores se muestran en la Tabla 7.2. También en este caso la constante simbólica correspondiente es suficientemente explícita. Si este argumento se omite se muestra sólo el botón O.K. El parámetro titulo contiene un texto que aparece como título de la ventana; si se omite, se muestra en su lugar el nombre de la aplicación. Se puede modificar el valor de tiposBotones de modo que el botón que se activa por defecto cuando se pulsa la tecla Intro (el botón que tiene el focus) sea cualquiera de los botones de la caja. Para ello basta sumar a tiposBotones otra constante que puede tomar uno de los tres valores siguientes: 0 (vbDefaulButton1, que representa el primer botón), 256 (vbDefaulButton2, que representa el segundo botón) y 512 (vbDefaulButton3, que representa el tercer botón).

Finalmente, se puede incluir en el mensaje un icono ad-hoc por el mismo procedimiento de sumarle al argumento tiposBotones una nueva constante numérica con los siguientes valores y significados definidos por la constante simbólica apropiada: 16 (vbCritical), 32 (vbQuestion), 48 (vbExclamation) y 64 (vbInformation). Es obvio que, por los propios valores considerados, al sumar estas constantes o las anteriores al argumento tiposBotones, la información original descrita en la Tabla 7.2 no se pierde. La Figura 7.1 muestra un ejemplo de caja MsgBox resultado de ejecutar el comando siguiente:
lblBox.Caption = MsgBox(“Pulse un botón: “, 2 + 256 + 48, _”Caja de mensajes”)
donde el “2” indica que deben aparecer los botones Abort, Retry y Cancel, el “256” indica que el botón por defecto es el segundo (Retry) y el “48” indica que debe aparecer el icono de exclamación.
Por otra parte, la forma general de la función InputBox es la siguiente:
texto = InputBox(“texto para el usuario”, “titulo”, “default”, left, top)
donde texto es la variable donde se almacena el valor de retorno, que es el texto tecleado por el usuario. Los parámetros “texto para el usuario” y titulo tienen el mismo significado que en MsgBox. El parámetro default es un texto por defecto que aparece en la caja de texto y que el usuario puede aceptar, modificar o sustituir; el contenido de esta caja es lo que en definitiva esta función devuelve como valor de retorno. Finalmente, left y top son las coordenadas de la esquina superior izquierda de la InputBox; si se omiten, Visual Basic 6.0 dibuja esta caja centrada en horizontal y algo por encima de la mitad de la pantalla en vertical. La Figura 7.2 muestra un ejemplo de caja InputBox resultado de ejecutar el comando siguiente:

lblBox.Caption = InputBox(“Escriba su nombre: “, _”Caja de entrada”, “Miguel Indurain”)

donde el nombre que aparece por defecto es el del mejor ciclista de los últimos tiempos. Este nombre aparece seleccionado y puede ser sustituido por otro que teclee el usuario.

MÉTODO PRINT

Este método permite escribir texto en formularios, cajas pictureBox y en un objeto llamado Printer que se verá un poco más adelante.

Características generales

La forma general del método Print se explica mejor con algunos ejemplos como los siguientes:
pctBox.Print “La distancia es: “; Dist; ” km.”

pctBox.Print 123; 456; “San”; “Sebastián”

pctBox.Print 123, 456, “San”, “Sebastián”
pctBox.Print -123; -456

De estos ejemplos se pueden ya sacar algunas conclusiones:
1. El método Print recibe como datos una lista de variables y/o cadenas de caracteres. Las cadenas son impresas y las variables se sustituyen por su valor.
2. Hay dos tipos básicos de separadores para los elementos de la lista. El carácter punto y coma (;) hace que se escriba inmediatamente a continuación de lo anterior. La coma (,) hace que se vaya al comienzo de la siguiente área de salida. Con letra de paso constante como la Courier las áreas de salida empiezan cada 14 caracteres, es decir en las columnas 1, 15, 29, etc. Con letras de paso variable esto se hace sólo de modo aproximado.
3. Las constantes numéricas positivas van precedidas por un espacio en blanco y separadas entre sí por otro espacio en blanco. Si son negativas el segundo espacio es ocupado por el signo menos (-).
4. El tipo y tamaño de letra que se utiliza depende de la propiedad Font del formulario, objeto PictureBox u objeto Printer en que se esté escribiendo. Existen otros separadores tales como Tab(n) y Spc(n). El primero de ellos lleva el punto de inserción de texto a la columna n, mientras que el segundo deja n espacios en blanco antes de seguir escribiendo. Tab sin argumento equivale a la coma (,). Estos espaciadores se utilizan en combinación con el punto y coma (;), para separarlos de los demás argumentos. Por defecto, la salida de cada método Print se escribe en una nueva línea, pero si se coloca un punto y coma al final de un método Print, el resultado del siguiente Print se escribe en la misma línea.
Puede controlarse el lugar del formulario o control donde se imprime la salida del método
Print. Esta salida se imprime en el lugar indicado por las propiedades CurrentX y CurrentY del formulario o control donde se imprime. Cambiando estas propiedades se modifica el lugar de impresión, que por defecto es la esquina superior izquierda. Existen unas funciones llamadas TextWidth(string) y TextHeight(string) que devuelven la anchura y la altura de una cadena de caracteres pasada como argumento. Estas funciones pueden ayudar a calcular los valores más adecuados para las propiedades CurrentX y CurrentY.
La función str(valor_numérico) convierte un número en cadena de caracteres para facilitar su impresión. En realidad, es lo que Visual Basic 6.0 ha hecho de modo implícito en los ejemplos anteriores. En versiones anteriores del programa era necesario que el usuario realizase la conversión de modo explícito.

Función Format

La función Format realiza las conversiones necesarias para que ciertos datos numéricos o de otro tipo puedan ser impresos con Print. Como se ha visto, en el caso de las variables numéricas esto no es imprescindible, pero la función Format permite controlar el número de espacios, el número de decimales, etc. En el caso de su aplicación a objetos tipo fecha (date) y hora (time) la aplicación de Format es imprescindible, pues Print no los escribe directamente. La forma general de esta función es la siguiente:
Format(expresion, formato)
donde expresion es una variable o expresión y formato -que es opcional- describe el formato deseado para el resultado. El valor de retorno es una cadena de caracteres directamente utilizable en Print. Para fechas existen formatos predefinidos tales como “General Date”, “Long Date”, “Medium Date” y “Short Date”; para la hora los formatos predefinidos son “Long Time”, “Medium Time” y “Short Time”. Además existe la posibilidad de que el usuario defina sus propios formatos (ver User-Defined Date/Time Formats (Format Function), en el Help del programa). El usuario también puede definir sus propios formatos numéricos y de cadenas de caracteres. A diferencia de la función Str, la función Format no deja espacio en blanco para el signo de los números positivos.

UTILIZACIÓN DE IMPRESORAS

Visual Basic 6.0 permite obtener por la impresora gráficos y texto similares a los que se pueden
obtener por la pantalla, aunque con algunas diferencias de cierta importancia. Existen dos formas de imprimir: la primera mediante el método PrintForm, y la segunda utilizando el objeto Printer, que es un objeto similar al objeto PictureBox. Ambos métodos tienen puntos fuertes y débiles que se comentarán a continuación.

Método PrintForm

El método PrintForm permite imprimir un formulario con sus controles y con los resultados de los métodos gráficos (PSet, Line y Circle) y del método Print. Para ello la propiedad AutoRedraw del formulario tiene que estar puesta a True, y los métodos citados tienen que estar llamados desde un evento distinto del Paint. Lo único que no se dibuja del formulario es la barra de título. Este sistema de impresión es muy sencillo de utilizar, pero tiene el inconveniente de que el resultado se imprime con la misma resolución de la pantalla (entre 50 y 100 puntos por pulgada), no aprovechando por tanto la mayor resolución que suelen tener las impresoras (300, 600 ó más puntos por pulgada).

Objeto Printer

Este segundo sistema tiene la ventaja de que permite aprovechar plenamente la resolución de la impresora, pero no permite dibujar controles sino sólo los métodos gráficos habituales (PSet, Line y Circle), el método Print y un método no visto hasta ahora que es PaintPicture.
Para Visual Basic 6.0 la impresora es un objeto gráfico más, similar a los formularios y a las
cajas gráficas PictureBox. Como tal objeto gráfico tiene sus propiedades generales (DrawStyle, BackColor, ForeColor, etc.), además de otras propiedades específicas de la impresora, como DeviceName, DriverName, Orientation, Copies, etc. Para más información puede utilizarse el Help, buscando Printer object. En principio se utiliza la impresora por defecto del PC, pero Visual Basic mantiene una Printers Collection, que es algo así como un array de impresoras disponibles. A partir de esta Printers Collection se puede cambiar a la impresora que se desee.
El objeto Printer tiene un método llamado EndDoc para enviar realmente a la impresora el
resultado de los métodos gráficos. El método PaintPicture permite incorporar el contenido de ficheros gráficos a un formulario, PictureBox o Printer. Su forma general es:

object.PaintPicture pictProp X, Y, Width, Height
donde pictProp indica el gráfico (coincide con la propiedad Picture de PictureBox), X e Y indican las coordenadas de inserción y los dos últimos parámetros las dimensiones (opcionales).

CONTROLES FILELIST, DIRLIST Y DRIVELIST

Uno de los problemas que hay que resolver para leer o escribir en ficheros de disco es ser capaces de localizar interactivamente los correspondientes ficheros, de modo análogo a como se realiza con los comandos File/Open o File/Save As de Word, Excel o de
cualquier otra aplicación. Este tipo de operaciones se pueden hacer mucho
más fácilmente con los Common Dialog Controls vistos en el Apartado
4.4, en la página 58, aconsejando por lo tanto su uso. A pesar de ello, aquí se
van a explicar los controles específicos de que dispone Visual Basic 6.0.
Visual Basic 6.0 dispone de tres controles que facilitan el recorrer el árbol de ficheros y de
directorios, localizando o creando interactivamente un fichero determinado. Estos controles son el FileListBox (para ficheros), el DirListBox (para directorios) y el DriveListBox (para unidades de disco). La Figura 7.4 muestra estos tres controles, junto con unas etiquetas que los identifican. Los dos primeros son listas, mientras que el tercero es una caja de tipo ComboBox.
En principio estos controles, cuando se colocan en un formulario tal como se muestra en la
Figura 7.4, están desconectados. Quiere esto decir que al cambiar la unidad de disco (drive) no se muestran en la caja dirListBox los directorios correspondientes a la nueva unidad de disco. Por otra parte, al cambiar de directorio tendrán que cambiar de modo acorde los ficheros en la caja fileListBox. La dificultad de conectar estas cajas no es grande, pero sí hay que saber cómo se hace pues depende de propiedades de estas cajas que no aparecen en la ventana de propiedades (ventana Properties) en modo de diseño, y que sólo están accesibles en modo de ejecución. De entre estas propiedades las más importantes son las siguientes:
1. La DriveListBox tiene una propiedad llamada Drive que recoge la unidad seleccionada por el
usuario (puede ser una unidad física como el disco c:\ o una unidad lógica asignada por el
usuario a otro disco o directorio en un servidor o en otro ordenador de la red).
2. La propiedad path de la caja DirListBox determina el drive seleccionado y por tanto qué
directorios se muestran en dicha caja.
3. Finalmente, una propiedad también llamada path de la caja FileListBox determina el
directorio que contiene los ficheros mostrados. Para enlazar correctamente las cajas de discos, directorios y ficheros se puede utilizar el evento Change, de tal forma que cada vez que el usuario cambia la unidad de disco se cambia el path del directorio y cada vez que se cambia el directorio se cambia el path de los ficheros. Esto puede hacerse con el código siguiente:

Private Sub dirPrueba_Change()
filPrueba.Path = dirPrueba.Path
End Sub
Private Sub drvPrueba_Change()
dirPrueba.Path = drvPrueba.Drive
End Sub
La caja FileListBox tiene una propiedad llamada FileName que contiene el nombre del
fichero seleccionado por el usuario. Para tener el path completo del fichero basta anteponerle la propiedad Path de la fileListBox, que incluye el directorio y el drive, y la barra invertida (\). Si el usuario introduce FileName incluyendo el path, Visual Basic actualiza también de modo automático la propiedad Path de FileListBox. El usuario se debe preocupar de utilizar el evento Change para actualizar el Path de la caja DirListBox y la propiedad Drive de DriveListBox.
Otra propiedad importante es la propiedad Pattern, que indica los tipos de ficheros que se
mostrarán en la caja. El valor por defecto es “*.*”, lo cual hace que se muestren todos los ficheros.
Si su valor fuese “*.doc” sólo se mostrarían los ficheros con esta extensión. La propiedad Pattern admite varias opciones separadas por untos y coma (“*.doc; *.dot”).

TIPOS DE FICHEROS

Tanto en Windows como en Visual Basic 6.0 existen, principalmente, dos tipos de archivos:
1. Ficheros ASCII o ficheros de texto. Contienen caracteres codificados según el código ASCII y se pueden leer con cualquier editor de texto como Notepad. Suelen tener extensión *.txt o *.bat, pero también otras como *.m para los programas de Matlab, *.c para los ficheros fuente de C, *.cpp para los ficheros fuente de C++ y *.java para los de Java.
2. Ficheros binarios: Son ficheros imagen de los datos o programas tal como están en la
memoria del ordenador. No son legibles directamente por el usuario. Tienen la ventaja de que ocupan menos espacio en disco y que no se pierde tiempo y precisión cambiándolos a formato ASCII al escribirlos y al leerlos en el disco. Con Visual Basic 6.0 se pueden leer tanto ficheros ASCII como ficheros binarios. Además el acceso a un fichero puede ser de tres formas principales.
1. Acceso secuencial. Se leen y escriben los datos como si se tratara de un libro: siempre a continuación del anterior y sin posibilidad de volver atrás o saltar datos. Si se quiere acceder a un dato que está hacia la mitad de un fichero, habrá que pasar primero por todos los datos anteriores. Los ficheros de texto tienen acceso secuencial.
2. Acceso aleatorio (random): Permiten acceder directamente a un dato sin tener que pasar por todos los demás, y pueden acceder a la información en cualquier orden. Tienen la limitación de que los datos están almacenados en unas unidades o bloques que se llaman registros, y que todos los registros que se almacenan en un fichero deben ser del mismo tamaño. Los ficheros de acceso aleatorio son ficheros binarios.
3. Acceso binario. Son como los de acceso aleatorio, pero el acceso no se hace por registros sino por bytes. Antes de poder leer o escribir en un fichero hay que abrirlo por medio de la sentencia Open. En esta sentencia hay que especificar qué tipo de acceso se desea tener, distinguiendo también si es para lectura (input), escritura (output) o escritura añadida (append).

LECTURA Y ESCRITURA EN FICHEROS SECUENCIALES

Apertura y cierre de ficheros

Para poder leer o escribir en un fichero antes debe ser abierto con la sentencia Open, cuya forma general es la siguiente:
Open filename For modo As # fileNo
donde:

filename es el nombre del fichero a abrir. Será una variable string o un nombre entre dobles comillas (“ ”).

modo Para acceso secuencial existen tres posibilidades: Input para leer, Output para escribir al comienzo de un fichero y Append para escribir al final de un fichero ya existente. Si se intenta abrir en modo Input un fichero que no existe, se produce un error. Si se abre para escritura en modo Output un fichero que no existe se crea, y si ya existía se borra su contenido y se comienza a escribir desde el principio. El modo Append es similar al modo Output, pero respeta siempre el contenido previo del fichero escribiendo a continuación de lo último que haya sido escrito anteriormente.

fileNo es un número entero (o una variable con un valor entero) que se asigna a cada fichero que se abre. En todas las operaciones sucesivas de lectura y/o escritura se hará
referencia a este fichero por medio de este número. No puede haber dos ficheros abiertos con el mismo número. Visual Basic dispone de una función llamada FreeFile que devuelve un número no ocupado por ningún fichero. A continuación puede verse un ejemplo de fichero abierto para lectura:
Open “C:\usuarios\PRUEBA1.txt” For Input as #1
Después de terminar de leer o escribir en un fichero hay que cerrarlo. Para ello, se utilizara el comando Close, que tiene la siguiente forma:
Close # fileNo
donde el fileNo es el número que se la había asignado al abrirlo con la instrucción Open.

Lectura y escritura de datos
Sentencia Input


Existen varias formas de leer en un fichero de acceso secuencial. Por ejemplo, para leer el valor de una o más variables se utiliza la sentencia Input:
Input # fileNo, varName1, varName2, varName3, …
donde el fileNo es el número asignado al archivo al abrirlo y varName1, varName2, … son los nombres de las variables donde se guardarán los valores leídos en el fichero. Debe haber una correspondencia entre el orden y los tipos de las variables en la lista, con los datos almacenados en el fichero. No se pueden leer directamente vectores, matrices o estructuras. Si los datos del disco han de ser escritos por el propio programa, conviene utilizar la sentencia write (mejor que Print) para garantizar que los valores están convenientemente separados. La sentencia Write se verá posteriormente.

Función Line Input y función Input
La función Line Input # lee una línea completa del archivo y devuelve su contenido como valor de retorno. Su forma general es:
varString = Line Input #fileNo
Conviene recordar que en los ficheros de texto se suele utilizar el carácter return (o Intro)
para delimitar las distintas líneas. Este es el carácter ASCII nº 13, que por no ser un carácter imprimible se representa en Visual Basic 6.0 como chr(13). En muchas ocasiones (como herencia del MS-DOS) se utiliza como delimitador de líneas una combinación de los caracteres return y linefeed, representada en Visual Basic 6.0 como chr(13)+chr(10). En la cadena de caracteres que devuelve Line no se incluye el carácter de terminación de la línea.
Para leer todas las líneas de un fichero se utiliza un bucle for o while. Visual Basic 6.0 dispone de la función EOF (End of File) que devuelve True cuando se ha llegado al final del
fichero. Véase el siguiente ejemplo:
Do While Not EOF(fileNo)
miLinea = Line Input #fileNo

Loop
También se puede utilizar la función Input, que tiene la siguiente forma general:
varString = Input(nchars, #fileNo)
donde nchars es el número de caracteres que se quieren leer y varString es la variable donde se almacenan los caracteres leídos por la función. Esta función lee y devuelve todos los caracteres que encuentra, incluidos los intro y linefeed. Para ayudar a utilizar esta función existe la función LOF (fileNo), que devuelve el nº total de caracteres del fichero. Por ejemplo, para leer todo el contenido de un fichero y escribirlo en una caja de texto se puede utilizar:
txtCaja.text = Input(LOF(fileNo), #fileNo)

Función Print #

Para escribir el valor de unas ciertas variables en un fichero previamente abierto en modo Output o Append se utiliza la instrucción Print #, que tiene la siguiente forma:
Print #fileNo, var1, var2, var2, …
donde var1, var2,… pueden ser variables, expresiones que dan un resultado numérico o alfanumérico, o cadenas de caracteres entre dobles comillas, tales como “El valor de x es…”.
Considérese el siguiente ejemplo:
Print #1, “El valor de la variable I es: “, I
donde I es una variable con un cierto valor que se escribe a continuación de la cadena. Las reglas para determinar el formato de la función Print # son las mismas que las del método Print visto previamente.

Función Write #


A diferencia de Print #, la función Write # introduce comas entre las variables y/o cadenas de caracteres de la lista, además encierra entre dobles comillas las cadenas de caracteres antes de escribirlas en el fichero. La función Write # introduce un carácter newline, esto es, un return o un return+linefeed después del último carácter de las lista de variables. Los ficheros escritos con Write # son siempre legibles con Input #, cosa que no se puede decir de Print #. Véase el siguiente ejemplo:
’ Se abre el fichero para escritura
Open “C:\Temp\TestFile.txt” For Output As #1
Write #1, “Hello World”, 234 ’ Datos separados por comas
MyBool = False: MyDate = #2/12/1969# ’ Valores de tipo boolean y Date
Write #1, MyBool; ” is a Boolean value”
Write #1, MyDate; ” is a date”
Close #1 ’ Se cierra el fichero
El fichero TestFile.txt guardado en C:\Temp contendrá:
“Hello World”,234
#FALSE#,” is a Boolean value”
#1969-02-12#,” is a date”

FICHEROS DE ACCESO ALEATORIO

Los ficheros de acceso aleatorio se caracterizan porque en ellos se puede leer en cualquier orden.
Los ficheros de acceso aleatorio son ficheros binarios. Cuando se abre un fichero se debe escribir For Random, al especificar el modo de apertura (si el fichero se abre For Binary el acceso es similar, pero no por registros sino por bytes; este modo es mucho menos utilizado).

Abrir y cerrar archivos de acceso aleatorio

Estos archivos se abren también con la sentencia Open, pero con modo Random. Al final se añade la sentencia Len=longitudRegistro, en bytes. Véase el siguiente ejemplo:
fileNo = FreeFile size = Len(unObjeto)
Open filename For Random as #fileNo Len = size
donde filename es una variable que almacena el nombre del archivo. Se recuerda que la función FreeFile devuelve un número entero válido (esto es que no está siendo utilizado) para poder abrir un fichero. El último parámetro informa de la longitud de los registros (todos deben tener la misma longitud). Visual Basic 6.0 dispone de la función Len(objetoName), que permite calcular la dimensión en bytes de cualquier objeto perteneciente a una clase o estructura. De ordinario los ficheros de acceso directo se utilizan para leer o escribir de una vez todo un bloque de datos. Este bloque suele ser un objeto de una estructura, con varias variables miembro. Los ficheros abiertos para acceso directo se cierran con Close, igual que los secuenciales.

Leer y escribir en una archivo de acceso aleatorio.
Funciones Get y Put


Se utilizan las funciones Get y Put. Su sintaxis es la siguiente:
Get #fileNo, registroNo, variableObjeto
Put #fileNo, registroNo, variableObjeto
La instrucción Get lee un registro del fichero y almacena los datos leídos en una variable, que puede ser un objeto de una determinada clase o estructura. La instrucción Put escribe el contenido de la variable en la posición determinada del fichero. Si se omite el número de registro se lee (escribe) a continuación del registro leído (escrito) anteriormente. Véase el siguiente ejemplo:
FileNo=FreeFile
size=Len(unObjeto)
Open filename for Random as #fileNo Len=size
Get #fileNo, 3, size
Con este ejemplo, se ha abierto el fichero filename de la misma forma que se realizó en el
ejemplo anterior, pero ahora, además se ha leído un registro de longitud size, y más en concreto, el tercer registro. Si se quisiera modificar el valor de este registro, no habría más que asignarle el valor que se quisiera, para a continuación introducirlo en el fichero mediante la sentencia siguiente:
Put #fileNo, 3, size

FICHEROS DE ACCESO BINARIO

La técnica a emplear es básicamente la misma que con los ficheros de acceso aleatorio, con la salvedad de que en lugar de manejar registros, en los ficheros de acceso binario se trabaja con bytes.
Véase el siguiente ejemplo:
FileNo=FreeFile
Open filename for Binary as #fileNo
Get #1, 4, dato
dato = 7
Put #1, 4, dato
Close #1
En el anterior ejemplo se puede observar como primero se introduce en la variable dato el
valor del cuarto byte del fichero filename, para posteriormente asignarle el valor 7, e introducirlo de nuevo en el cuarto byte de filename.

Funciones y procedimientos en Visual Basic

Conceptos generales sobre funciones

Las aplicaciones informáticas que habitualmente se utilizan, incluso a nivel de informática personal, suelen contener decenas y aún cientos de miles de líneas de código fuente. A medida que los programas se van desarrollando y aumentan de tamaño, se convertirían rápidamente en sistemas poco manejables si no fuera por la modularización, que es el proceso consistente en dividir un programa muy grande en una serie de módulos mucho más pequeños y manejables. A estos módulos se les suele denominar de distintas formas (subprogramas, subrutinas, procedimientos, funciones,
etc.) según los distintos lenguajes. Sea cual sea la nomenclatura, la idea es sin embargo siempre la misma: dividir un programa grande en un conjunto de subprogramas o funciones más pequeñas que son llamadas por el programa principal; éstas a su vez llaman a otras funciones más específicas y así sucesivamente.

La división de un programa en unidades más pequeñas o funciones presenta –entre otras las ventajas siguientes:

1. Modularización. Cada función tiene una misión muy concreta, de modo que nunca tiene un número de líneas excesivo y siempre se mantiene dentro de un tamaño manejable. Además, una misma función (por ejemplo, un producto de matrices, una resolución de un sistema de ecuaciones lineales, ...) puede ser llamada muchas veces en un mismo programa, e incluso puede ser reutilizada por otros programas. Cada función puede ser desarrollada y comprobada por separado.
2. Ahorro de memoria y tiempo de desarrollo. En la medida en que una misma función es utilizada muchas veces, el número total de líneas de código del programa disminuye, y también lo hace la probabilidad de introducir errores en el programa.
3. Independencia de datos y ocultamiento de información. Una de las fuentes más comunes de errores en los programas de computador son los efectos colaterales o perturbaciones que se pueden producir entre distintas partes del programa. Es muy frecuente que al hacer una modificación para añadir una funcionalidad o corregir un error, se introduzcan nuevos errores en partes del programa que antes funcionaban correctamente. Una función es capaz de mantener una gran independencia con el resto del programa, manteniendo sus propios datos y definiendo muy claramente la interfaz o comunicación con la función que la ha llamado y con las funciones a las que llama, y no teniendo ninguna posibilidad de acceso a la información que no le compete.

Funciones y procedimientos Sub en Visual Basic 6.0


En Visual Basic 6.0 se distingue entre funciones y procedimientos Sub. En ocasiones se utiliza la palabra genérica procedimiento para ambos. La fundamental diferencia entre un procedimiento Sub y una función es que ésta última puede ser utilizada en una expresión porque tiene un valor de retorno. El valor de retorno ocupa el lugar de la llamada a la función donde esta aparece. Por ejemplo, si en una expresión aparece sin(x) se calcula el seno de la variable x y el resultado es el valor de retorno que sustituye a sin(x) en la expresión en la que aparecía. Por tanto, las funciones devuelven valores, a diferencia de los procedimientos que no devuelven ningún valor, y por tanto no pueden ser utilizadas en expresiones. Un procedimiento Sub es un segmento de código independiente del resto, que una vez llamado por el programa, ejecuta un número determinado de ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero página 38 instrucciones, sin necesidad de devolver ningún valor al mismo (puede dar resultados modificando los argumentos), mientras que una función siempre tendrá un valor de retorno.

Los nombres de los procedimientos tienen reglas de visibilidad parecidas a las de las
variables. Para llamar desde un formulario a un procedimiento Public definido en otro formulario es necesario preceder su nombre por el del formulario en que está definido. Sin embargo, si se desea llamar a un procedimiento definido en un módulo estándar (*.bas) no es necesario precederlo del nombre del módulo más que si hay coincidencia de nombre con otro procedimiento de otro módulo estándar.

Funciones (function)

La sintaxis correspondiente a una función es la siguiente:
[Static] [Private] Function nombre ([parámetros]) [As tipo]
[sentencias]
[nombre = expresion]
[Exit Function]
[sentencias]
[nombre = expresion]
End Function

Donde nombre es el nombre de la función. Será de un tipo u otro dependiendo del dato que devuelva. Para especificar el tipo se utiliza la cláusula As Tipo (Integer, Long, Single, Double, Currency, String o Variant). parámetros son los argumentos que son pasados cuando se llama a la función. Visual Basic asigna el valor de cada argumento en la llamada al parámetro que ocupa su misma posición. Si no se indica un tipo determinado los argumentos son Variant por defecto. Como se verá en un apartado posterior, los argumentos pueden ser pasados por referencia o por valor.

El nombre de la función, que es el valor de retorno, actúa como una variable dentro del cuerpo de la función. El valor de la variable expresion es almacenado en el propio nombre de la función. Si no se efectúa esta asignación, el resultado devuelto será 0 si la función es numérica, nulo ("") si la función es de caracteres, o Empty si la función es Variant.

Exit Function permite salir de una función antes de que ésta finalice y devolver así el control del programa a la sentencia inmediatamente a continuación de la que efectuó la llamada a la función.

La sentencia End Function marca el final del código de la función y, al igual que la Exit Function, devuelve el control del programa a la sentencia siguiente a la que efectuó la llamada, pero lógicamente una vez finalizada la función.

La llamada a una función se hace de diversas formas. Por ejemplo, una de las más usuales es la siguiente:

variable = nombre([argumentos])
donde argumentos son un lista de constantes, variables o expresiones separadas por comas que son pasadas a la función. En principio, el número de argumentos debe ser igual al número de parámetros de la función. Los tipos de los argumentos deben coincidir con los tipos de sus correspondientes parámetros, de lo contrario puede haber fallos importantes en la ejecución del programa. Esta regla no rige si los argumentos se pasan por valor (concepto que se verá más adelante).

En cada llamada a una función hay que incluir los paréntesis, aunque ésta no tenga
argumentos.

Procedimientos Sub

La sintaxis que define un procedimiento Sub es la siguiente:

[Static] [Private] Sub nombre [(parámetros)]
[sentencias]
[Exit Sub]
[sentencias]
End Sub

La explicación es análoga a la dada para funciones.

La llamada a un procedimiento Sub puede ser de alguna de las dos formas siguientes:
Call nombre[(argumentos)] o bien, sin pasar los argumentos entre paréntesis, sino poniéndolos a continuación del nombre simplemente separados por comas: nombre [argumentos]

A diferencia de una función, un procedimiento Sub no puede ser utilizado en una expresión pues no devuelve ningún valor. Por supuesto una función puede ser llamada al modo de un procedimiento Sub, pero en esta caso no se hace nada con el valor devuelto por la función.

El siguiente ejemplo corresponde a un procedimiento Sub que devuelve una variable F que es la raíz cuadrada de un número N.

Sub Raiz (N As Double, F As Double)
If N < 0 Then
Exit Sub 'Se mandaría un mensaje de error
Else
F = Sqr(N)
End If
End Sub
La llamada a este procedimiento Sub puede ser de cualquiera de las dos formas siguientes:
Raiz N, F
Call Raiz(N, F)
En el ejemplo anterior, el resultado obtenido al extraer la raíz cuadrada al número N se
devuelve en la variable F pasada como argumento, debido a que como se ha mencionado
anteriormente, un procedimiento Sub no puede ser utilizado en una expresión.

EVENTOS

A continuación se presentan brevemente los eventos más normales que reconoce Visual Basic 6.0.

Es importante tener una visión general de los eventos que existen en Windows 95/98/NT porque cada control de los que se verán más adelante tiene su propio conjunto de eventos que reconoce, y otros que no reconoce. Cualquier usuario de las aplicaciones escritas para Windows 95/98/NT hace uso continuo e intuitivo de los eventos, pero es posible que nunca se haya detenido a pensar en ello.

Para saber qué eventos puede recibir un control determinado basta seleccionarlo y pulsar . De esta forma se abre una ventana del Help que explica el control y permite acceder a los eventos que soporta.

Eventos generales

Carga y descarga de formularios

Cuando se arranca una aplicación, o más en concreto cuando se visualiza por primera vez un formulario se producen varios eventos consecutivos: Initialize, Load, Activate y Paint. Cada uno de

Eventos, Propiedades y Controles
estos eventos se puede aprovechar para realizar ciertas operaciones por medio de la función correspondiente.

Al ocultar, cerrar o eliminar un formulario se producen otra serie de eventos: Deactivate, QueryUnload, Unload y Terminate que se verán en un próximo ejemplo.

Para inicializar las variables definidas a nivel de módulo se suele utilizar el evento Initialize, que tiene lugar antes que el Load. El evento Load se activa al cargar un formulario. Con el formulario principal esto sucede al arrancar la ejecución de un programa; con el resto de los formularios al mandarlos cargar desde cualquier procedimiento o al hacer referencia a alguna propiedad o control de un formulario que no esté cargado. Al descargar un formulario se produce el evento Unload. Si se detiene el programa desde el botón Stop de Visual Basic 6.0 (o del menú correspondiente) o con un End, no se pasa por el evento Unload. Para pasar por el evento Unload es necesario cerrar la ventana con el botón de cerrar o llamarlo explícitamente. El evento
QueryUnload se produce antes del evento Unload y permite por ejemplo enviar un mensaje de confirmación.

El evento Load de un formulario se suele utilizar para ejecutar una función que dé valor a sus propiedades y a las de los controles que dependen de dicho formulario. No se puede utilizar para dibujar o imprimir sobre el formulario, pues en el momento en que se produce este evento el formulario todavía no está disponible para dichas operaciones. Por ejemplo, si en el formulario debe aparecer la salida del método Print o de los métodos gráficos Pset, Line y Circle (que se estudian en el Capítulo 6 de este manual) puede utilizarse el evento Paint u otro posterior (por ejemplo, el evento GotFocus del primer control) pero no puede utilizarse el evento Load.
Se puede ocultar un formulario sin descargarlo con el método Hide o haciendo la propiedad
Visible = False. Esto hace que el formulario desaparezca de la ventana, aunque sus variables y propiedades sigan estando accesibles y conservando sus valores. Para hacer visible un formulario oculto pero ya cargado se utiliza el método Show, que equivale a hacer la propiedad Visible = True,
y que genera los eventos Activate y Paint. Si el formulario no había sido cargado previamente, el método Show genera los cuatro eventos mencionados.
Cuando un formulario pasa a ser la ventana activa se produce el evento Activate y al dejar de serlo el evento Deactivate. En el caso de que el formulario que va a ser activo no estuviera cargado ya, primero sucederían los eventos Initialize, Load y luego los eventos Activate y Paint.
Todo esto se puede ver y entender con un simple ejemplo, mostrado en la Figura 4.2. Se han de crear dos formularios (frmPrincipal y frmSecundario). El primero de ellos contendrá dos botones (cmdVerSec y cmdSalir) y el segundo tres (cmdHide, cmdUnload y cmdTerminate). El formulario principal será el primero que aparece, y sólo se verá el segundo si se clica eel botón
Cargar Formulario. Cuando así se haga, a medida que los eventos antes mencionados se vayan sucediendo, irán apareciendo en pantalla unas cajas de mensajes que tendrán como texto el nombre del evento que se acaba de producir. Según con cual de los tres botones se haga desaparecer el segundo formulario, al volverlo a ver se producirán unos eventos u otros, según se puede ver por los mensajes que van apareciendo con cada evento

Eventos relacionados con el ratón

Click y DblClick


El evento Click se activa cuando el usuario pulsa y suelta rápidamente uno de los botones del ratón.
También puede activarse desde código (sin tocar el ratón) variando la propiedad Value de alguno de los controles. En el caso de un formulario este evento se activa cuando el usuario clica sobre una zona del formulario en la que no haya ningún control o sobre un control que en ese momento esté inhabilitado (propiedad Enabled = False). En el caso de un control, el evento se activa cuando el usuario realiza una de las siguientes operaciones:
-Clicar sobre un control con el botón derecho o izquierdo del ratón. En el caso de un botón
de comando, de un botón de selección o de un botón de opción, el evento sucede solamente al clicar con el botón izquierdo.
-Seleccionar un registro de alguno de los varios tipos listas desplegables que dispone Visual Basic.
-Pulsar la barra espaciadora cuando el foco está en un botón de comando, en un botón de selección o en un botón de opción.
-Pulsar la tecla Return cuando en un formulario hay un botón que tiene su propiedad
Default = True.
ESIISS: Aprenda Visual Basic 6.0 como si estuviera en Primero página 52
-Pulsar la tecla Esc cuando en un formulario hay un botón que tiene su propiedad Cancel = True.
-Pulsar una combinación de teclas aceleradoras (Alt + otra tecla, como por ejemplo cuando de despliega el menú File de Word con Alt+F) definidas para activar un determinado control de un formulario.
También se puede activar el evento Click desde código realizando una de las siguientes operaciones:
-Hacer que la propiedad Value de un botón de comando valga True.
-Hacer que la propiedad Value de un botón de opción valga True
-Modificar la propiedad Value de un botón de selección.
El evento DblClick sucede al clicar dos veces seguidas sobre un control o formulario con el botón izquierdo del ratón.

MouseDown, MouseUp y MouseMove

El evento MouseDown sucede cuando el usuario pulsa cualquiera de los botones del ratón, mientras que el evento MouseUp sucede al soltar un botón que había sido pulsado. El evento MouseMove sucede al mover el ratón sobre un control o formulario.

Los eventos MouseUp y MouseDown tienen algunos argumentos que merecen ser comentados. El argumento Button indica cuál de los botones del ratón ha sido pulsado o soltado, y el argumento Shift indica si además alguna de las teclas alt, shift o ctrl está también pulsada.

CONTROLES V.S

Botón de comando (Command Button)

La propiedades más importantes del botón de comando son su Caption, que es lo que aparece escrito en él, las referentes a su posición (Left y Top) y apariencia externa (Height, Width y tipo de letra) y la propiedad Enabled, que determina si en un momento dado puede ser pulsado o no.

No hay que confundir la propiedad Caption con la propiedad Name. La primera define a un texto que aparecerá escrito en el control, mientras que las segunda define el nombre interno con el que se puede hacer referencia al citado objeto.

Si en la propiedad Caption se pone el carácter (&) antes de una de sus letras, dicha letra aparece subrayyada en el botón (como la “x” en el botón Exit de la figura anexa). Esto quiere decir que, como es habitual en Windows, dicho botón puede activarse con el teclado por medio de la combinación Alt+letra subrayada. Esta característica es común a muchos de los controles que tienen propiedad Caption.

Botones de opción (Option Button)

Además de las mencionadas para el caso anterior estos botones tienen la propiedad Value, que en un determinado momento sólo puede ser True en uno de los botones del grupo ya que se trata de opciones que se excluyen mutuamente.

Para agrupar botones se coloca primero un marco o frame en el formulario y, estando seleccionado, se colocan después cuantos botones de opción se desee. En un mismo formulario se pueden colocar cuantos grupos de botones de opción se quiera, cada uno de ellos agrupado dentro de su propio marco. Es muy importante colocar primero el frame y después los botones de opción. Con esto se consigue que los botones de opción estén agrupados, de modo que sólo uno de ellos pueda estar activado. Si no se coloca ningún frame todos los botones de opción de un mismo formulario forman un único grupo. Si los botones ya existen y se quieren introducir un un frame se seleccionan, se hace Cut y luego Paste dentro del frame seleccionado.

Sólo un grupo de botones de opción puede recibir el focus, no cada botón por separado.
Cuando el grupo tiene el focus, con las flechas del teclado (y ) se puede activar una u otra opción sin necesidad de usar el ratón. También se puede utilizar Alt+carácter introduciendo antes de dicho carácter un (&) en el Caption del botón de opción.

Botones de selección (Check Box)

La única diferencia entre estos botones y los anteriores es que en los botones de selección puede haber más de uno con la propiedad Value a True. Estos botones no forman grupo aunque estén dentro de un frame, y reciben el focus individualmente. Se puede también utilizar el carácter (&) en el Caption para activarlos con el teclado.
El usuario debe decidir qué tipo de botones se ajustan mejor a sus necesidades: en el caso de la edad, está claro que no se puede ser de dos edades diferentes; sí es posible sin embargo conocer varios lenguajes de programación.

Barras de desplazamiento (Scroll Bars)

En este tipo de control las propiedades más importantes son Max y Min, que determinan el rango en el que está incluido su valor, LargeChange y SmallChange que determinan lo que se modifica su valor al clicar en la barra o en el botón con la flecha respectivamente y Value que determina el valor actual de la barra de desplazamiento. Las barras de desplazamiento no tienen propiedad Caption.

El evento que se programa habitualmente es Change, que se activa cuando la barra de desplazamiento modifica su valor. Todo lo comentado en este apartado es común para las barras de desplazamiento verticales y horizontales. Además de las Scroll Bars horizontal y vertical, Visual Basic 6.0 dispone también del control
Slider, utilizado en los paneles de control de Windows, que tiene una función similar.

Etiquetas (Labels)


En las etiquetas o labels la propiedad más importante es Caption, que contiene el texto que aparece sobre este control. Esta propiedad puede ser modificada desde programa, pero no interactivamente clicando sobre ella (a diferencia de las cajas de texto, que se verán a continuación). Puede controlarse su tamaño, posición, color de fondo y una especie de borde 3-D. Habitualmente las labels no suelen recibir eventos ni contener código.

Las Labels tienen las propiedades AutoSize y WordWrap. La primera, cuando está a True, ajusta el tamaño del control al del texto en él contenido. La segunda hace que el texto se distribuya en varias líneas cuando no cabe en una sola.

Cajas de texto (Text Box)

La propiedad más importante de las cajas de texto es Text, que almacena el texto contenido en ellas. También se suelen controlar las que hacen referencia a su tamaño, posición y apariencia. En algún momento se puede desear impedir el acceso a la caja de texto, por lo que se establecerá su propiedad Enabled como False. La propiedad Locked como True hace que la caja de texto sea de sólo lectura. La propiedad MultiLine, que sólo se aplica a las cajas de texto, determina si en una de ellas se pueden incluir más de una línea o si se ignoran los saltos de línea. La justificación o centrado del texto se controla con la propiedad Alignment. La propiedad ScrollBars permite controlar el que aparezca ninguna, una o las dos barras de desplazamiento de la caja.

En una caja de texto no se pueden introducir Intros con el teclado en modo de diseño.

En modo de ejecución se deben introducir como caracteres ASCII (el 13 seguido del 10, esto Carriage Return y Line Feed). Afortunadamente Visual Basic 6.0 dispone de la constante vbCrLf, que realiza esta misión de modo automático.

Otras propiedades importantes hacen referencia a la selección de texto dentro de la caja, que sólo están disponibles en tiempo de ejecución. La propiedad SelStart sirve para posicionar el cursor al comienzo del texto que se desea seleccionar (el primer carácter es el cero); SelLength indica el número de caracteres o longitud de la selección; SelText es una cadena de caracteres que representa el texto seleccionado. Para hacer Paste con otro texto sustituyendo al seleccionado basta asignarle a esta propiedad ese otro texto (si no hay ningún texto seleccionado, el texto de SelText se inserta en la posición del cursor); para entresacar el texto seleccionado basta utilizar esta propiedad en alguna expresión.
Los eventos que se programan son Change, cuando se quiere realizar alguna acción al modificar el contenido de la caja, Click y DblClick y en algunos casos especiales KeyPress para controlar los caracteres que se introducen. Por ejemplo, se puede chequear la introducción del código ASCII para detectar que ya se finalizado con la introducción de datos. También se utiliza la propiedad MaxLength para determinar el número máximo de caracteres que pueden introducirse en la caja de texto.

En aquellos casos en los que se utilice una caja de texto como entrada de datos (es el control que se utiliza la mayoría de las veces con esta finalidad), puede ser interesante utilizar el método SetFocus para enviar el foco a la caja cuando se considere oportuno.

Otras propiedades de las cajas de texto hacen referencia a los tipos de letra y al estilo. Así la propiedad FontName es una cadena que contiene el nombre del Font (Courier New, Times New
Roman, etc.), FontSize es un tipo Short que contiene el tamaño de la letra, y FontBold, FontItalic,
FontUnderline y FontStrikethrough son propiedades tipo Boolean que indican si el texto va a tener esa característica o no.

Listas (List Box)

Una lista es un control en el que se pueden mostrar varios registros o líneas, teniendo uno o varios de ellos seleccionado(s). Si en la lista hay más registros de los que se pueden mostrar al mismo tiempo, se añade automáticamente una scrollBar.

Para añadir o eliminar registros de la lista en modo de ejecución se utilizan los métodos AddItem y RemoveItem. Las listas se suelen inicializar desde el evento Form_Load.

La propiedad List es un array que permite definir el contenido de la lista en modo de diseño a través de la ventana de propiedades. List permite también acceder a los elementos de la lista en tiempo de ejecución, para utilizar y/o cambiar su valor. Para ello se pone en índice del elemento entre paréntesis (empezando a contar por cero) a continuación de List, como se muestra a continuación por ejemplo, para cambiar el tercer elemento:

lstName.List(2) = "Tercero"
Para añadir un registro en tiempo de ejecución se utiliza AddItem:
lstName.AddItem Registro_Añadido, posición donde posicion es un argumento opcional que permite especificar la posición en que se debe añadir.
Si se omite el registro se añade al final de la lista. Lo anterior es válido si la propiedad Sorted está a False; si está a True el nuevo registro se añade en la posición ordenada que le corresponde. Para eliminar un registro,
lstName.RemoveItem Posición_del_registro_en_la_lista
En el caso de que se quiera vaciar completamente el contenido de una lista se puede utilizar el método Clear.
Dos propiedades interesantes de las listas son ListCount y ListIndex. La primera contiene el número total de registros incluidos en la lista. La segunda permite acceder a una posición concreta de la lista para añadir un registro nuevo en esa posición, borrar uno ya existente, seleccionarlo, etc.
Hay que recordar una vez más que los elementos de la lista se empiezan a numerar por cero. El valor de propiedad ListIndex en cada momento coincide con el registro seleccionado y en el caso de no haber ninguno seleccionado esta propiedad vale -1.
Es interesante saber que al seleccionar uno de los registros de la lista se activa el evento Clic de dicha lista.

Las listas permiten selecionar más de un elemento poniendo la propiedad MultiSelect a valor
1-Simple o 2-Extended. En el primer caso los elementos se seleccionan o se elimina la selección simplemente clicando sobre ellos. En el segundo caso la forma de hacer selecciones múltiples es la típica de Windows, utilizando las teclas Ctrl y Shift. Con selección múltile la propiedad SelCount indica el número de elementos seleccionados, mientras que la propiedad Selected() es un array de valores boolean que indica si cada uno de los elementos de la lista está seleccionado o no.

Cajas combinadas (ComboBox)

Un ComboBox tiene muchas cosas en común con una lista. Por ejemplo los métodos AddItem, RemoveItem o Clear y las propiedades List, ListIndex o
ListCount.

La diferencia principal es que en un ComboBox tiene una propiedad llamada
Style, que puede adoptar tres valores (1,2 ó 3) que corresponden con tres distintas formas de presentar una lista:
1. Style=0 ó Style=vbComboDropDown (Dropdown Combo), Éste es el valor
más habitual y corresponde con el caso en el que sólo se muestra el registro seleccionado, que es editable por el usuario, permaneciendo el resto oculto hasta que el usuario despliega la lista completa clicando sobre el botón-flecha.
2. Style=1 ó Style=vbComboSimple (Simple Combo). En este caso el registro seleccionado también es editable, y se muestra una lista no desplegable dotada si es necesario de una scrollbar.
3. Style=2 ó Style=vbComboDropDownList (DropDown List). En este último caso el registro seleccionado no es editable y la lista es desplegable.
En una caja combinada, al igual que en una caja de texto sencilla, está permitido escribir con el teclado en tiempo de ejecución, si la propiedad Enabled vale True. En una lista esto no es posible.
La propiedad Text corresponde con lo que aparece en la parte de caja de texto del control ComboBox, bien sea porque el usuario lo ha introducido, bien porque lo haya seleccionado.

Controles relacionados con ficheros


Trabajando en un entorno Windows 95/98/NT es habitual tener que abrir y cerrar ficheros parar leer datos, guardar un documento, etc. Hay tres controles básicos que resultan de suma utilidad en esta tarea. Son la lista de unidades lógicas o discos (Drive ListBox), la lista de directorios (Dir ListBox) y la lista de ficheros (File ListBox).

Control Timer

Si se desea que una acción suceda con cierta periodicidad se puede utilizar un control Timer.
Este control produce de modo automático un evento cada cierto número de milisegundos y es de fundamental importancia para crear animaciones o aplicaciones con movimiento de objetos. La propiedad más importante de un objeto de este tipo es Interval, que determina, precisamente, el intervalo en milisegundos entre eventos consecutivos. La acción que se desea activar debe programarse en el evento Timer de ese mismo control.

Si en algún momento se desea detener momentáneamente la acción periódica es suficiente con hacer False la propiedad Enabled del control Timer y para arrancarla de nuevo volver a hacer Trae esa propiedad. Haciendo 0 la propiedad Interval también se consigue inhabilitar el Timer.

CAJAS DE DIÁLOGO ESTÁNDAR (CONTROLES COMMON DIALOG)

El control de cuadro de diálogo estándar de Windows 95/NT (Common Dialog) ofrece una forma sencilla y eficiente de realizar algunas de las tareas más comunes de un programa, tales como la selección de un fichero para lectura/escritura, la impresión de un fichero o la selección de un tipo de letra o un color.

Lo primero que hay que hacer es ubicar el control en el formulario. El control se representará como un icono de tamaño invariable. No es posible especificar la ubicación que tendrá la caja de diálogo cuando se abra en la pantalla, ya que se trata de una propiedad no accesible por el usuario.

Un único cuadro de diálogo estándar puede bastar para realizar todas las funciones que se deseen, es decir, no es necesario insertar un cuadro de diálogo para imprimir un texto y otro para guardarlo, sino que ambos pueden compartir el mismo cuadro de diálogo simplemente invocando a uno u otro tipo en tiempo de ejecución (no es posible indicarlo en tiempo de diseño). Para ello se dispone de los métodos siguientes: ShowColor, ShowFont, ShowHelp, ShowOpen, ShowPrinter y
ShowSave. En ocasiones interesará introducir varios controles diferentes por motivos de claridad o para que ciertas propiedades sean distintas

Las principales propiedades de este control en cada una de sus variantes se explican en los apartados siguientes. La propiedad Flag existe para todos los controles y determina algunas de sus características más importantes.


Open/Save Dialog Control

Las propiedades más importantes de este control son:
-DefaultExt: Es la extensión por defecto a utilizar para abrir/salvar archivos. Con Save, si el nombre del fichero se teclea sin extensión, se añade esta extensión por defecto.
-DialogTitle: Devuelve o da valor al título de la caja de diálogo (cadena de caracteres).
-FileName: Nombre completo del archivo a abrir/salvar, incluyendo el path.
-FileTitle: Nombre del archivo a abrir/salvar pero sin la ruta de acceso correspondiente.
-Filter: Contiene los filtros de selección que aparecerán indicados en la parte inferior de lapantalla en la lista de tipos de archivo. Pueden indicarse múltiples tipos de archivo, separándolos mediante un barra vertical ( Alt Gr +< 1> ). Su sintaxis es la siguiente:
Objeto.Filter = "(descripción a aparecer en la listbox)|filtro"
Por ejemplo:
"Texto (*.txt)|*.txt|Imágenes(*.bmp;*.ico)|*.bmp;*.ico"
-FilterIndex: Indica el índice (con respecto a la lista de tipos) del filtro por defecto. Se empiezan a numerar por "1".
-InitDir: Contiene el nombre del directorio por defecto. Si no se especifica, se utiliza el directorio actual.
-Flags: Esta propiedad puede tomar muchos valores con objeto de fijar los detalles concretos de este control (por ejemplo, abrir un fichero en modo read only, avisar antes de escribir sobre un fichero ya existente, etc.). Estos valores están definidos por constantes de
Visual Basic 6.0 cuyos nombres empiezan con las letras cdl. Para más información en el Help de Common Dialog Control buscar Properties, Flags Properties (Open, Save As Dialogs). Por ejemplo, el valor definido por la constante cdlOFNOverwritePrompt hace que antes de escribir en un fichero ya existente se pida confirmación al usuario. Para establecer varias opciones a la vez se le asigna a Flags la suma de las constantes correspondientes. Las distintas constantes disponibles se pueden encontrar en el Help buscando Constants/CommonDialog Control.

Print Dialog Control

Las propiedades más importantes de este control son:
-Copies: Determina el número de copias a realizar por la impresora.
-FromPage: Selecciona el número de página a partir del cual comienza el rango de impresión.
-ToPage: Selecciona el número de página hasta la cual llega el rango de impresión.
-PrinterDefault: Cuando es True se imprime en el objeto Visual Basic Printer. Además las opciones actuales de impresión que se cambien serán asignadas como las opciones de impresión por defecto del sistema.
-Flags: Ver con ayuda del Help los posibles valores de esta propiedad.

Font Dialog Control

Las propiedades más importantes de este control son:
-Color: Color de impresión. Para usar esta propiedad hace falta establecer la propiedad
Flags al valor de la constante cdlCFEffects.
-FontBold, FontItalic, FontStrikethru, FontUnderline: Devuelve o asigna los valores de los estilos de la fuente actual.
-FontName: Devuelve o asigna el nombre de la fuente en uso.
-FontSize: Devuelve o asigna el tamaño de la fuente en uso.
-respectivamente que aparecerán en la lista de selección de tamaños de la fuente. -Flags: Indica si los tipos de letra que se van a mostrar son los de la pantalla
(cdlCFScreenFonts), los de la impresora (cdlCFPrinterFonts) o ambos (cdlCFBoth). Con la constante cdlCFEffects se puede indicar que se permite cambiar efectos como el color, subrayado y cruzado con una línea. Si Flags vale 0 da un error en tiempo de ejecución inndicando que no hay fonts instaladas.

Color Dialog Control

Las propiedades más importantes de este control son:
-Color: Devuelve o asigna el valor del color actual.
-Flags: Ver con ayuda del Help los posibles valores de esta propiedad. Por ejemplo, con el valor cdlCCFullOpen muestra el cuadro de diálogo completo, mientras que el valor cdlCCPreventFullOpen muestra sólo los colores predefinidos, impidiendo definir otros nuevos. Con el valor cdlCCRGBInit se establece el color inicial para el cuadro de diálogo.

FORMULARIOS MÚLTIPLES

Un programa puede contener más de un formulario. De hecho, habitualmente los programas contienen múltiples formularios. Recuérdese que el formulario es la ventana de máximo nivel en la que aparecen los distintos controles.

Sin embargo, un programa siempre debe tener un formulario principal, que es el que aparece al arrancar el programa. Se puede indicar cuál debe ser el formulario principal en el menú Project/Project Properties, en la lengüeta General, en la sección Startup Form. Por defecto, el programa considera como formulario principal el primero que se haya creado. El resto de formularios que se incluyan en el programa serán cargados en su momento, a lo largo de la ejecución del programa.

Para añadir en tiempo de diseño nuevos formularios al programa, hay que acudir al menú Project/Add Form. La forma de cargar y descargar estos formularios se ha explicado con anterioridad. Es importante sin embargo recordar que conviene descargar aquellos sub-formularios que ya no sean de utilidad, ya que así se ahorran recursos al sistema.

Para activar en tiempo de ejecución un formulario distinto del inicial (o del que esté activo en ese momento), se utiliza el método Show (frmName.Show). El método Hide oculta el formulario, pero lo deja cargado; el método Activate lo vuelve a mostrar. El método Unload elimina los elementos gráficos del formulario, pero no las variables y el código. El método Unload Me descarga el propio formulario que lo llama. Para eliminar completamente un formulario se puede utilizar el comando:
Set frmName = NOTHING que llama al evento Terminate (hay que utilizar también los métodos Hide o Unload para que desaparezca de la pantalla).
Para referirse desde un formulario a los objetos y variables de otro formulario se utiliza el operador punto (frmName.Object.Property).

Apertura de controles en forma modal

En ciertas ocasiones se desea que el programa no realice ninguna acción hasta que el usuario cierre una ventana o formulario en la que se le pregunta algo o en la que tiene que tomar alguna decisión.

En esos casos, al utilizar el método Show, es necesario utilizar el argumento Style con valor 1. A esto se le llama mostrar una ventana en forma modal. Esto quiere decir que no se permitirá al usuario hacer activa ninguna pantalla hasta que el usuario cierre esa ventana modal. Esto se hace así:
frmName.Show 1
o bien,
frmName.Show vbModal

Formularios MDI (Multiple Document Interface)

En algunos casos puede ser interesante establecer una jerarquía entre las ventanas o formularios que van apareciendo sucesivamente en la pantalla del ordenador, de tal manera que al cerrar una que se haya establecido como principal, se cierren también todas las que se han abierto desde ella y dentro de ella. De esta forma una misma aplicación puede tener varios documentos abiertos, uno en cada ventana hija. Así trabajan por ejemplo Word y Excel, que pueden tener varios documentos abiertos dentro de la ventana principal de la aplicación. En el mundo de las Windows de Microsoft a esto se llama MDI (Multiple Document Interface). La Figura 4.5 muestra un ejemplo de formulario MDI.

En Visual Basic 6.0 estos formularios que tienen sub-formularios hijos se conocen como MDIForms. Los formularios MDI se crean desde el menú de Visual Basic 6.0 con el comando Project/Add MDI Form. En una aplicación sólo puede haber un formulario MDI, pero éste puede tener varios hijos. Si se quiere que un formulario sea Child, debe tener su propiedad MDIChild como True.
Si al iniciar una aplicación el formulario que se carga en primer lugar es un formulario Child, el formulario MDI se carga al mismo tiempo. Al cerrar un formulario MDIForm se cierran todos sus formularios Child;

Los formularios Child se minimizan y maximizan dentro de los límites del formulario MDI. Cuando están maximizados, su Caption aparece junto al Caption del formulario
MDI. Los formularios Child no tienen menús propios, sino que sus menús aparecen en la barra de menús del formulario MDI.
En una aplicación con un formulario MDI y uno o más formularios Child, puede haber otros formularios que no sean Child y que se abren fuera de los límites del formulario MDI cuando son requeridos.

MENUS

Entre las capacidades de Visual Basic 6.0 no podía faltar la de construir menús con gran facilidad. Sin embargo, hay algunas diferencias respecto al modo el que se construyen los controles. Para crear menús Visual Basic dispone de una herramienta especial que se activa mediante el comando Menu Editor del menúTools. El cuadro de diálogo que se abre se nuestra en la más adelante se verá cómo se utiliza esta herramienta; antes, conviene recordar brevemente las características más importantes de los menús de
Windows 95/98/NT. Los menús presentan sobre los demás controles la ventaja de que ocupan menos espacio en pantalla, pero tienen el inconveniente de que sus posibilidades no están a la vista más que cuando se despliegan.

MENÚS CONTEXTUALES (POPUP MENU)

Los menús contextuales aparecen cuando el usuario clica con el botón derecho sobre un elemento de la aplicación. El programa debe reconocer el evento MouseUp o MouseDown, ver si el usuario ha clicado con el botón derecho (argumento Button igual a 2) y llamar al método PopupMenu, que tiene la siguiente forma general: PopupMenu menuName [,flags[,x[,y]]] donde menuName ee el nombre de un menú (con al menos un elemento), x e y son las coordenadas base para hacer aparecer el menú contextual, y flags son unas constantes que determinan más en concreto dónde y cómo se muestra el menú. Las constantes que determinan dónde aparece el menú son: vbPopupMenuLeftAlign (default), vbPopupMenuCenterAlign y vbPopupMenuRightAlign. Por otra parte vbPopupMenuLeftButton (default) y vbPopupMenuRightButton determinan si el comando se activa con el botón izquierdo o con cualquiera de los dos botones. Las constantes se combinan con el operador Or. El nombre del menú que aparece en el método PopupMenu debe haber sido creado con el Menu Editor, aunque puede tener la propiedad Visible a False, si no se desea que se vea.

Un poco de Visual Basic

¿Qué es Visual Basic?

Diseñador de entorno de datos: Es posible generar, de manera automática, conectividad entre controles y datos mediante la acción de arrastrar y colocar sobre formularios o informes.

Los Objetos Actives son una nueva tecnología de acceso a datos mediante la acción de arrastrar y colocar sobre formularios o informes.

Asistente para formularios: Sirve para generar de manera automática formularios que administran registros de tablas o consultas pertenecientes a una base de datos, hoja de calculo u objeto (ADO-ACTIVE DATA OBJECT)

Asistente para barras de herramientas es factible incluir barras de herramientas es factible incluir barra de herramientas personalizada, donde el usuario selecciona los botones que desea visualizar durante la ejecución.

En las aplicaciones HTML: Se combinan instrucciones de Visual Basic con código HTML para controlar los eventos que se realizan con frecuencia en una pagina web.

La Ventana de Vista de datos proporciona acceso a la estructura de una base de datos. Desde esta también acceso al Diseñador de Consultas y diseñador de Base de datos para administrar y registros.

Características de Visual Basic.

- Barra de titulo: muestra el nombre del proyecto y del formulario q se está diseñando actualmente

- Barra de menús: agrupa los menús despegables que contienes todas las operaciones que pueden llevarse a cabo con Visual Basic 6.0.

- Barra de herramientas estándar: contienen los botones que se utilizan con mayor frecuencia cuando se trabaja con un proyecto. Simplifica la elección de opciones de los menús Archivo, Edición, Ver y Ejecutar; además, en el área derecha presenta la ubicación (coordenadas) y el tamaño del objeto seleccionado

- Ventana de formulario: es el área donde se diseña la interfaz gráfica, es decir, es donde se inserta electo gráficos, como botones, imágenes, casilla de verificación, cuadros de listas, etc.

- Cuadro de herramientas: presenta todos los controles necesarios para diseñar una aplicación, como cuadros de texto, etiquetas, cuadros de listas, botones de comandos, etc.

- Ventana de proyecto: muestra los elementos involucrados en el proyecto, como formularios, módulos, controles oxc, etc. Cada elemento puede seleccionarse en forma independiente para su edición.

- Ventana de posición del formulario: muestra la ubicación que tendrá el formulario en la pantalla, cuando ejecute la aplicación. Esta ubicación puede cambiarse si se hace clic con el botón izquierdo del mouse.

- La Ventana propiedades muestra todas las propiedades del control actualmente seleccionado, en este caso muestra las propiedades del Form1, luego podemos ver que abajo dice "Form1 Form", lo que está en negrita es el nombre del objeto, y lo que le sigue es el tipo de objeto, en este caso es un Formulario (Form)

Ventajas y desventajas de Visual Basic

Ventajas
La facilidad del lenguaje permite crear aplicaciones para windows en muy poco tiempo. En otras palabras, permite un desarrollo eficaz y menor inversion tanto en tiempo como en dinero .

Permite generar librerias dinamicas de forma activa, mediante una reconfiguracion en su proceso de coleccion o codificacion.

Desventajas
No existe forma alguna de exportar el codigo a otras plataformas diferentas a windows. Los ejecutables generados son relativamente lentos en VISUAL BASIC 6.0 y anteriores. Por efecto permite la programacion sin declaracion de variables.

Su lenguaje no distingue entre mayusculas y minusculas como se hace en C++.

Versiones

Las versiones de Visual Basic para Windows son muy conocidas, pero existe una versión de Microsoft Visual Basic 1.0 para MS-DOS (ediciones Profesional y Estándar) menos difundida y que data de 1992. Era un entorno que, aunque en modo texto, incluía un diseñador de formularios en el que se podían arrastrar y soltar distintos controles.

La última versión sólo para 16 bits, la 3.0,no incluía una detallada biblioteca de componentes para toda clase de usos. Durante la transición de Windows 3.11 a Windows 95, apareció la versión 4.0, que podía generar programas de 16 y 32 bits a partir de un mismo código fuente, a costa de un gran aumento en el tamaño de los archivos "runtime" necesarios. Además, se sustituyen los controles VBX por los nuevos OCX. Con la versión 5.0,estuvo a punto de implementar por primera vez la posibilidad de compilar a código nativo, obteniendo una mejora de rendimiento considerable. Tanto esta como la posterior 6.0 soportaban características propias de los lenguajes orientados a objetos, aunque careciendo de algunos ítems importantes como la herencia y la sobrecarga. La versión 6.0 continua utilizándose masivamente y es casi compatible prácticamente al 100% con las últimas versiones de Windows como Vista y Windows 7.

Las versiones actuales de Visual Basic se basan en la plataforma .NET, que se desligan de las anteriores versiones.

Cabe mencionar que aunque menos conocido, existió también una versión gratuita de Visual Basic 5.0 dedicada en su práctica a desarrollo de controles y componentes, su nombre en concreto era Microsoft Visual Basic 5.0 Control Creation Edition (Visual Basic 5 CCE). También hubo versiones orientadas al desarrollo de aplicaciones para dispositivos móviles basados en Windows CE y Pocket PC, conocido como eMbedded Visual Basic.

Intérprete

Es un programa informático capaz de analizar y ejecutar otros programas, escritos en un lenguaje de alto nivel. Los intérpretes se diferencian de los compiladores en que mientras estos traducen un programa desde su descripción en un lenguaje de programación al código de máquina del sistema, los primeros (los intérpretes) sólo realizan la traducción a medida que sea necesaria, típicamente, instrucción por instrucción, y normalmente no guardan el resultado de dicha traducción.

Usando un intérprete, un solo archivo fuente puede producir resultados iguales incluso en sistemas sumamente diferentes (ej. una PC y un PlayStation 3). Usando un compilador, un solo archivo fuente puede producir resultados iguales solo si es compilado a distintos ejecutables específicos a cada sistema.

Los programas interpretados suelen ser más lentos que los compilados debido a la necesidad de traducir el programa mientras se ejecuta, pero a cambio son más flexibles como entornos de programación y depuración (lo que se traduce, por ejemplo, en una mayor facilidad para reemplazar partes enteras del programa o añadir módulos completamente nuevos), y permiten ofrecer al programa interpretado un entorno no dependiente de la máquina donde se ejecuta el intérprete, sino del propio intérprete (lo que se conoce comúnmente como máquina virtual).

Compilador

El compilador de Visual Basic x.0 genera ejecutables que requieren una DLL para que funcionen, en algunos casos llamada MSVBVMxy.DLL (acrónimo de "MicroSoft Visual Basic Virtual Machine x.y", siendo x.y la versión) y en otros VBRUNXXX.DLL ("Visual Basic Runtime X.XX"), que provee todas las funciones implementadas en el lenguaje. Además existen un gran número de bibliotecas (DLL) que facilitan el acceso a muchas funciones del sistema operativo y la integración con otras aplicaciones. Actualmente la mayoria de estas bibliotecas y componentes adicionales para ejecutar los programas desarrollados en Visual Basic 6.0 vienen de serie en las versiones de Windows posteriores a XP. En versiones anteriores sera necesario instalar la librería en tiempo de ejecución (runtime) y las bibliotecas comunes que se pueden descargar del sitio web de MSDN.

Formulario

Objeto de una base de datos utilizado para la introducción, edición y gestión de la información de una tabla de la base de datos. Un formulario ofrece un modo de visualización sencillo de algunos o todos los campos de un registro de manera simultánea.

Controles

Son los objetos que conforman la interfaz grafica de un programa;

vistas de visual basic

Vista Proyecto



Vista formulario



Vista Herramientas




Herramientas de la caja de herramientas

-TextBox

Mediante este control podremos realizar tanto la entrada como la salida de datos en nuestras aplicaciones.

No hace falta que indiquemos las coordenadas de la situación del formulario en pantalla, simplemente tendremos que marcar sobre el control de la caja de herramientas y dibujarlo con el tamaño que queramos en nuestro formulario

-Label

Este control es también uno de los más utilizados, aunque su utilidad queda restringida a la visualización de datos en el mismo, no permitiendo la introducción de datos por parte del usuario.

-CommandButton

Este control es el típico botón que aparece en todas las aplicaciones y que al hacer click sobre él nos permite realizar alguna operación concreta, normalmente Aceptar o Cancelar. Aunque según el código que le asociemos podremos realizar las operaciones que queramos.

-OptionButton

Este control nos permite elegir una opción entre varias de las que se nos plantean. Cada opción será un control optionbutton diferente.

-Check button y option button (botones de eleccion y opcion)

Se obtienen directamente de la caja de herramientas.



Dada la similitud de ambos controles, se comentan conjuntamente.

El control CheckBox, o casilla de verificación, permite elegir una opción (activada / desactivada, True/False) que el usuario puede establecer o anular haciendo click. Una X en una casilla de verificación indica que está seleccionada, activada, o con valor True. Cada casilla de verificación es independiente de las demás que puedan existir en el formulario, pudiendo tomar cada una de ellas el valor True o False, a voluntad del operador.

Un control OptionButton muestra una opción que se puede activar o desactivar, pero con dependencia del estado de otros controles OptionButton que existan en el formulario.

Generalmente, los controles OptionButton se utilizan en un grupo de opciones para mostrar opciones de las cuales el usuario sólo puede seleccionar una. Los controles OptionButton se agrupan dibujándolos dentro de un contenedor como un control Frame, un control PictureBox o un formulario. Para agrupar controles OptionButton en un Frame o PictureBox, dibuje en primer lugar el Frame o PictureBox y, a continuación, dibuje dentro los controles OptionButton. Todos los controles OptionButton que están dentro del mismo contenedor actúan como un solo grupo, e independientes de los controles OptionButton de otros grupos distintos.

Aunque puede parecer que los controles OptionButton y CheckBox funcionan de forma similar, hay una diferencia importante: Cuando un usuario selecciona un OptionButton, los otros controles del mismo grupo OptionButton dejan de estas disponibles automáticamente. Por contraste, se puede seleccionar cualquier número de controles CheckBox.

-List box y combo box

Estos dos controles, debido a su similitud, se estudian conjuntamente.

Se obtienen directamente de la caja de herramientas:



Un control ListBox muestra una lista de elementos en la que el usuario puede seleccionar uno o más. Si el número de elementos supera el número que puede mostrarse, se agregará automáticamente una barra de desplazamiento al control ListBox.

Un control ComboBox combina las características de un control TextBox y un control ListBox. Los usuarios pueden introducir información en la parte del cuadro de texto y seleccionar un elemento en la parte de cuadro de lista del control. En resumen, un ComboBox es la combinación de un ListBox, que se comporta como si de un ListBox se tratase, y de un TextBox, con comportamiento análogo a un TextBox sencillo, con la particularidad aquí de que el texto se le puede introducir por teclado, o elegir uno de los que figuran en la parte ListBox del Combo.

-Controles hscrollbar y vscrollbar

Son dos controles similares, para introducir un dato cuasi-analógico en una aplicación. Se toman directamente de la caja de herramientas, y tienen un aspecto parecido al de un control de volumen de un equipo de música. El HScrollBar está en posición horizontal, y el VScrollBar en posición vertical.



Mediante estos controles se pueden introducir datos variando la posición del cursor.

-Timer temporizador

Este objeto permite establecer temporizaciones. Presenta una novedad respecto a los controles estudiados hasta ahora. El control Timer solamente se ve durante el tiempo de diseño. En tiempo de ejecución, el control permanece invisible.

La temporización producida por el Timer es independiente de la velocidad de trabajo del ordenador. (Casi independiente. El timer no es un reloj exacto, pero se le parece)

Se toma directamente de la caja de herramientas, y tiene el aspecto siguiente:



-Shape

Se toma directamente de la caja de herramientas:



Shape es un control gráfico que se muestra como un rectángulo, un cuadrado, una elipse, un círculo, un rectángulo redondeado o un cuadrado redondeado.

Utilice controles Shape en tiempo de diseño en lugar o además de invocar los métodos Circle y Line en tiempo de ejecución. Puede dibujar un control Shape en un contenedor, pero no puede actuar como contenedor. (Esto quiere decir que un control Shape nunca le servirá, por ejemplo, para albergar varios OptionButton y pretender que sean independientes de otros controles OptionButton que se encuentren fuera del control Shape.

Este control no tiene Procedimientos. En realidad, solamente sirve para mostrar un determinado gráfico, envolver gráficamente a otros controles, pero no tiene ninguna aplicación en cuanto a programa. Es un "adorno" para sus aplicaciones.

-Line

Se toma directamente de la caja de herramientas



Line, al igual que Shape, es un control gráfico que solamente sirve para poner una línea en un formulario. Del mismo modo, no tiene procedimientos, por lo que no sirve para aportar código al programa. Solo sirve para aportar una característica gráfica, es un adorno.

-Control Gauge

Este control presenta una información numérica de forma gráfica, bien como un display lineal (típico por ejemplo en ecualizadores de audio), o como una aguja. No está normalmente en la caja de herramientas, por lo que hay que traerla desde los Controles Personalizados (Menú desplegable de Herramientas) Se denomina MicroHelp Gauge Control. El archivo que lo contiene se denomina GAUGE16.OCX, 16 bits



Mediante este control, podemos presentar una magnitud numérica de una forma cuasi-analógica. Podríamos decir que es un control similar al HScrollBar, que en vez de meter información a la aplicación, la presenta.

Este control puede servir, por ejemplo, para presentar el tanto por ciento de ejecución de una tarea, como elemento tranquilizante. Puede presentar el nivel de un depósito de agua, etc.

Presenta las dos formas siguientes:



En la figura puede verse un Gauge de aguja, uno de barra horizontal y otro de barra vertical. Para mejorar la presentación, el Gauge permite poner un gráfico como fondo, cambiar el color de la barra, color de fondo, etc.

El control Gauge crea medidores definidos por el usuario, que puede elegir entre los estilos lineales (relleno) o de aguja.

Nota para la distribución Cuando cree y distribuya aplicaciones con controles Gauge, tendrá que instalar el archivo apropiado en el subdirectorio SYSTEM de Windows del cliente. El Kit para instalación que incluye Visual Basic, le proporciona herramientas para escribir los programas que instalan las aplicaciones correctamente.

El CommonDialog es un control del que se libran muy pocas aplicaciones. Dada la importancia de este control, se le dedica un capitulo único en esta Guía del Estudiante.

-Cuadro de dialogo CommonDialog

Normalmente se encuentra en la caja de herramientas



Este control no se presenta en tiempo de diseño mas que con un simple icono:



El cuadro de diálogo, CommonDialog se utiliza para varias funciones:

Abrir Ficheros

Guardar Ficheros

Elegir colores

Seleccionar Impresora

* Seleccionar Fuentes
* Mostrar el fichero de Ayuda

En realidad el cuadro de diálogo permite conocer datos con los cuales, y mediante el código adecuado, abriremos o guardaremos ficheros, elegiremos colores o seleccionaremos fuentes. Es decir, el CommonDialog NO realiza mas funciones que mostrar ficheros existentes, fuentes disponibles, colores, para que, mediante código, abramos esos ficheros o usemos una determinada fuente.

Dependiendo de la aplicación para la que vaya a usarse se deberá activar de distintas formas. Si el cuadro de diálogo se va a usar para seleccionar la impresora y para otras aplicaciones, es recomendable usar uno exclusivamente para seleccionar la impresora.

Esta última recomendación se debe a que, para el control de la impresora, el CommonDialog SI realiza las funciones de selección de impresora predeterminada. Esta diferencia operativa hace que si usamos el mismo CommonDialog para seleccionar impresora y abrir ficheros, por ejemplo, se "cuelgue" el CommonDialog.

Propiedades



DateString (Propiedad)

Now (Propiedad)

ScriptEngine (Propiedad)

ScriptEngineBuildVersion (Propiedad)

ScriptEngineMajorVersion (Propiedad)

ScriptEngineMinorVersion (Propiedad)

TimeOfDay (Propiedad)

Timer (Propiedad)

TimeString (Propiedad)

Today (Propiedad)

Historia de Visual Basic

Hace poco más de 10 años, el proceso de construir una simple aplicación basada en Microsoft Windows se habría podido describir como complicado, difícil y largo. Construir estas aplicaciones ricas en gráficos -una tarea que hoy parece sencilla- no era un proceso trivial antes de la introducción de Visual Basic1.0 en mayo de 1991.
Con Visual Basic, los programadores podían, por primera vez , implementar aplicaciones de Windows en un ambiente intuitivo y gráfico, simplemente arrastrando controles sobre un formulario. Haciendo posible a los programadores profesionales y a los ocasionales maximizar su productividad, Visual Basic conllevó un renacimiento del desarrollo de aplicaciones basadas en Windows.
Este año, en la celebración del décimo cumpleaños de Visual Basic, se mira al pasado a la herramienta que revolucionó la manera en la que se construye software, y se anhelan otros 10 años de innovación y productividad de Visual Basic.
En los últimos 10 años, la comunidad de Visual Basic ha crecido hasta ser la mayor comunidad de desarrolladores de software del mundo. Durante ese tiempo, una industria entera de vendedores de componentes creció alrededor de este producto. Éste, combinado con la sencilla forma de desarrollar aplicaciones para Windows, fueron la base fundamental de la realización de la visión de Microsoft para la programación basada en Windows.

"Thunder"(Trueno)

Inicialmente, Visual Basic fue pensado para ser un producto muy táctico. Microsoft tenía varias iniciativas en el desarrollo que lideraba Visual Basic 1.0, todas fueron pensadas para convertirse en las herramientas de programación a largo plazo, estratégicas, gráficas y orientadas a objetos. Como siempre ocurre con los productos en su versión 1.0, el equipo de Visual Basic 1.0 fue forzado a cortar características de su larga lista de ideas para entregar realmente el producto al mercado. Consecuentemente, la primera versión incluyó poco más que la tecnología Embedded Basic que había sido desarrollada originalmente en Microsoft QuickBasic 4.0 (el código "p" y compilador de Microsoft) y una herramienta compiladora de diseño simple originalmente diseñada para Windows 3.0 pero que nunca fue utilizada para tal fin. Aproximadamente 12 meses después, el desarrollo y mejora de la versión 1.0 comenzó, Microsoft sacó al mercado una herramienta desarrolladora para cubrir la exigencia en ese momento del mercado cuyo nombre en clave fue "Thunder"(Trueno).

Un cambio monumental

Desde este inicio bastante desfavorable vino un resultado igualmente difícil de comprender: un impacto en la industria informática tan profundo que cambió para siempre el curso del desarrollo del software y creó una explosión en el mercado de las aplicaciones de Windows. Diez años más tarde, parece muy obvio-pero en esa época, cuando solamente un pequeño y selecto grupo de personas, era capaz de desarrollar aplicaciones para Windows, Visual Basic 1.0 representó un cambio gigantesco en el diseño de aplicaciones
Innegablemente radical en su puesta en práctica, implementación y capacidades, Visual Basic1.0 se propagó a través de la comunidad en cuestión de pocos meses. Poco después del "shock" inicial de fiebre por Visual Basic, un pequeño pero fuerte grupo de seguidores comenzó a transformar las bibliotecas de código que tenían con sus características, métodos y eventos, y a exponerlos como componentes de Visual Basic llamados VBXs, o los controles personalizados. Después de poco tiempo, la producción de estos componentes reutilizables creció de una comunidad especializada a una industria que crecía de vendedores de controles, y ayudó a Visual Basic a pasar de ser un logro de software a convertirse en un descubrimiento tecnológico.


El ambiente de desarrollo de Visual Basic 1.0

Cuando aún no había pasado un año de su salida inicial al mercado ,Visual Basic ya había evolucionado rápidamente a un kit desarrollador altamente estratégico. Microsoft había comenzado a utilizar Visual Basic internamente en algunos de sus propios proyectos que estaba desarrollando. A medida que la demanda de Visual Basic aumentaba, quedaba claro que los desarrolladores requerirían un Visual Basic mejor y más capacitado. Para tratar a esta necesidad creciente, Microsoft anunció la disponibilidad de Visual Basic 2.0 en noviembre de 1992. La segunda versión de Visual Basic, distribuida en la edición estándar y profesional, proveía a los desarrolladores un funcionamiento perceptiblemente mejorado y mayor capacidad para crear aplicaciones de tamaño mayor y más sofisticadas. Incluía también una ayuda para mejorar la puesta a punto y depuración, proveía de la capacidad de conectarse a bases de datos mediante ODBC, y nuevas y productivas herramientas ,por ejemplo, la ventana de propiedades, sintaxis del código en color , y completo soporte para un Interfaz de Múltiples Documentos (MDI).



El cuadro de propiedades y la caja de herramientas (con controles añadidos) de Visual Basic 2.0.

Mientras la adopción de Visual Basic en las corporaciones se expandía, también lo hacía la necesidad de una herramienta para el desarrollador que permitiera aplicaciones data-aware robustas. Visual Basic 3.0, anunciado solamente seis meses después de la salida al mercado de la versión 2.0, solucionaba esta necesidad combinando el motor de la base de datos de Microsoft Access 1.1 con un conjunto rico de controles data-aware. Por primera vez, los desarrolladores podían conectar fácilmente a las bases de datos en un ambiente cliente/servidor usando un diseñador visual intuitivo. La complementación de estas características era los Data Access Object (Objetos de Acceso a Datos) (DAO), un completo paquete de los objetos que proporcionaban al acceso mediante código a la base de datos. Finalmente, Visual Basic 3.0 amplió la capacidad de la herramienta de desarrollo incluyendo los Crystal Reports, un motor para visualizar datos extraídos en una variedad de formatos personalizables.

Herramientas más potentes

En los años venideros, la industria informática comenzaría a abrazar el movimiento a la programación en 32-bits. La salida al mercado de Microsoft Windows 95 y de Microsoft Windows NT condujeron a esta adopción y destacó la necesidad de herramientas de desarrollo más potentes que podrían soportar la nueva arquitectura. Fue entonces cuando la revista Windows Watcher señaló que Visual Basic estaba adoptado por más compañías (30 por ciento) que cualquier otro lenguaje de programación. Llevar una base instalada tan grande del desarrollo de aplicaciones en 16-bits a 32-bits sería una tarea de migración importante, pero aseguraría la existencia prolongada del lenguaje de programación Visual Basic y de su comunidad. La versión 32-bit de Visual Basic- versión 4.0-fue anunciada en septiembre de 1995 e incluía la edición estándar y profesional así como una nueva edición destinada al nivel empresarial y el desarrollo en equipo. La edición empresarial ofrecía nuevas capacidades tales como automatización remota, control de datos remoto, y una versión integrada de Microsoft Visual SourceSafe para la dirección de la configuración y realización de diferentes versiones.


Visual Basic 4.0 con soporte 32-bit

Las versiones de Visual Basic 5.0 y 6.0-anunciadas en marzo de 1997 y en junio de 1998, respectivamente- representaron un paso importante hacia posibilitar a los desarrolladores en Visual Basic programar en los nuevos niveles del funcionamiento en el ambiente libre que representa Internet. Las características tales como el compilador del código nativo introdujeron aumentos del funcionamiento de hasta el 2.000 por ciento. El Webclass designer (diseñador de clases Web) simplificó la creación de las aplicaciones del Web proporcionando un modelo intuitivo del objeto para el servidor web. Y el diseñador de páginas DHTML permitió la creación de aplicaciones para Microsoft Internet Explorer 4.0- que combinaron la riqueza de HTML dinámico (DHTML) con el funcionamiento y la productividad de Visual Basic. Finalmente, con la Control Creation Edition (Edición de Creación de Controles), los desarrolladores de Visual Basic podrían construir fácilmente los controles Microsoft ActiveX de alto rendimiento y con un amplio alcance que estaban destinados a Internet.



Visual Basic 5.0

Hoy, se continúa ampliando las posibilidades del desarrollador en Visual Basic. Con Visual Basic .NET, se posibilita a los desarrolladores en Visual Basic con niveles de control y productividad sin precedentes. A través de objetos-orientados de primera-clase, tales como herencia, manejo estructural excepcional, y construcciones con parámetros, programar en Visual Basic llegará a ser más elegante, simple, y de mantenimiento sencillo. Con el acceso completo al marco del NET de Microsoft, los desarrolladores pueden, por primera vez, conseguir ventaja directa de la rica plataforma de Microsoft y construir aplicaciones tradicionales basadas en Windows, aplicaciones Web de pequeños clientes, los servicios de nueva generación de Web de XML, y software para móviles.
Cuadro 5. La demo de El Gorila .NET , escrito en Visual Basic .NET.
Los Formularios de Windows con formas, los ricos gráficos, las construcciones orientadas al objeto, y la integración del servicio Web de XML son todo la parte de Visual Basic .NET.

A través de los años, Visual Basic ha evolucionado de un juguete de un aficionado a una herramienta imprescindible que continúa cambiando el mundo. Ha revolucionado la manera que se trabaja con la información, la manera de comunicarse, y la forma en la que se construyen aplicaciones.
Con todos los cambios en la configuración de la tecnología y de la aplicación en los últimos 10 años, la comunidad de Visual Basic ha continuado innovando como líderes en el desarrollo y la producción de software. Mientras, es interesante mirar al pasado y observar los éxitos alcanzados por este producto, es importante remarcar que Visual Basic está sólo en una fase bastante inicial. Con Visual Basic .NET, Microsoft proporciona sus cimientos para asegurarse de que los desarrolladores en Visual Basic continúan conduciendo esta cursa -ahora y en el futuro.

Artículo original obtenido de: http://www.microsoft.com