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.

Publicado en Uncategorized | Deja un comentario

Funciones, eventos, controles y menús del Visual Basic 6.0

1.- Funciones y procedimientos en Visual Basic 6.0

Los procedimientos o funciones son muy interesantes y útilies en la programación. Nos sirven para realizar una tarea concreta que probablemente se vaya a ejecutar varias veces a lo largo de la vida de la página. Esta tarea se especifica en un bloque de código de manera independiente y cuando se desean realizar las acciones del procedimiento se llama al porcedimiento o función. Una vez realizadas las acciones pertinentes se devuelve el flujo del programa al lugar desde donde se imbocó ese procedimiento o función.

Lo primero que debemos hacer al crear un procedimiento es pensar las cosas que se desean hacer dentro de la función, la información que necesitaremos (y que tendremos que recibir como parámetros) y la información que devolverá. Con estas ideas claras se pueden construir los procedimientos y funciones sin mucha dificultad, siguiendo estas estructuras.

Para un procedimiento

Sub nombre (parametro1, parametro2…)
… Código del procedimiento
end Sub

Para una función

Function nombre (parametro1, parametro2…)
… Código de la función
end Function

2.- Eventos.

Los eventos son acciones, tales como: Hacer clic, doble clic, presionar una tecla, mover el puntero del mouse, etc., que el usuario debe realizar para que un objeto ejecute una acción determinada. Cada control responde a diferentes eventos, algunos de ellos tienen características comunes. Los eventos pueden Visualizarse en la ventana de código.
Cajas de diálogo.
La mayoría de las aplicaciones Windows hacen uso de los cuadros de diálogo para establecer las opciones o introducir información que necesitan para realizar una acción indicada por el usuario.
Otro uso posible de los cuadros de diálogo es presentar información al usuario. Los cuadros de diálogo se caracterizan por ser modales y no permitir poder cambiar el tamaño de la ventana, además no deberán tener una barra de menús desplegables.

En Visual Basic se pueden crear tres tipos de cuadros de diálogos: personalizados, predefinidos y diálogo común.

  • Cuadros predefinidos:
  • La sintaxis completa de la función MsgBox es:

<code>MsgBox(mensaje[, botones][, título][,  archivoAyuda, contexto])</code>

El cuadro InputBox se consigue a través de la función InputBox. Se utiliza cuando se necesita que el usuario introduzca alguna información. La sintaxis correcta es:

<code>InputBox(mensaje [,título][, estándar][,  posx][,posy][, archivoAyuda , contexto])</code>

  • Diálogo común:
  • En el objeto diálogo común lo podemos encontrar en la barra de herramientas de Visual Basic:

Nos permite mostrar cinco cuadros de diálogo estándar en las aplicaciones. Estos cuadros de diálogo son:

  • Abrir
  • Guardar Como
  • Imprimir
  • Fuente
  • Color

También podemos hacer uso del control diálogo para llamar al motor de Ayuda de Windows de forma que pueda presentar el archivo de ayuda en línea de la aplicación. Al crear un objeto diálogo común, se sitúa en una posición y un tamaño estándar.

En el caso de querer utilizar el cuadro de diálogo común Guardar como:

  • DialogTitle: Es el texto que debe aparecer en la barra de título del cuadro de diálogo.
  • DefaultExt: Es la extensión con la que se guardará el archivo.
  • Filter: Indica la extensión de los archivos que deben mostrarse en el cuadro de diálogo.

3.- Menús
En Visual Basic 6.0, se crea un objeto Menu mediante el Editor de menús. Los objetos Menu están vinculados al formulario para el que se han creado pero se pueden modificar en tiempo de ejecución o mostrar como menús contextuales. Los menús creados con el objeto Menu no admiten de forma nativa sombreado, iconos o controles incrustados; sólo se pueden crear menús de estilo “sencillo” de Windows 98.


Publicado en Uncategorized | Deja un comentario

Iniciación al Visual Basic 6.0

¿Qué es el Visual Basic?

Es un lenguaje de programación desarrollado por Alan Cooper para Microsoft. El lenguaje de programación es un dialecto de BASIC, con importantes añadidos. Su primera versión fue presentada en 1991 con la intención de simplificar la programación utilizando un ambiente de desarrollo completamente gráfico que facilitará la creación de interfaces gráficas y en cierta medida también la programación misma.

Características del Visual Basic.

  • Visual Basic 6.0 soporta la abstracción, la encapsulación, el poliformismo y la reutilización del código.
  • Los objetos de Visual Basic están encapsulados; es decir, contienen su propio código y sus propios datos.
  • Los objetos de Visual Basic tienen propiedades, métodos y eventos. Las propiedades son los datos que describen un objeto. Los eventos son hechos que pueden ocurrir sobre un objeto (un clic sobre un botón es un evento que produce un mensaje). Un método agrupa el código que se ejecuta en respuesta a un evento.
  • Al conjunto de propiedades y métodos se le llama interfaz. Además de su interfaz predeterminada, los objetos pueden implementar interfaces adicionales para proporcionar poliformismo. El poliformismo le permite manipular muchos tipos diferentes de objetos sin preocuparse de su tipo.
  • Las interfaces múltiples son una característica del modelo de objetos componente (COM) y permiten que los programas evolucionen con el tiempo, agregando nueva funcionalidad sin afectar al código existente.

Ventajas y desventajas.

Ventajas:

  • Es un lenguaje RAD.
  • Posee una curva de aprendizaje muy rápida.
  • Integra el diseño e implementación de formularios de Windows.
  • Permite usar con suma facilidad la plataforma de los sistemas Windows dado que tiene acceso prácticamente total a la API de Windows incluidas librerías actuales.
  • El código en Visual Basic es fácilmente migrable a otros lenguajes.
  • Es un lenguaje muy extendido por lo que resulta fácil encontrar información, documentación y fuentes para los proyectos.

Desventajas:

  • Sin soporte oficial de Microsoft desde el 4 de abril de 2008 No es multiplataforma.
  • Por defecto permite la programación sin declaración de variables.
  • No permite la sobrecarga de operadores ni métodosNo permite nombres de espacio.
  • El depurador no es demasiado flexible ni cómodo en ciertas situaciones.
  • Su fuerte dependencia de librerías y componentes ActiveX que requieren de privilegios de administrador para poder instalar las aplicaciones.

Versiones del Visual Basic.

  • Microsoft Visual Basic 1.0 para MS-DOS (ediciones Profesional y Estándar).
  • 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.
  • 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.
  • 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.

¿Qué es un 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.

¿Qué es un compilador?

Es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa equivalente que la máquina será capaz de interpretar.

¿Qué son los formularios?

Es una ventana sobre la que dibujamos los elementos que el usuario tiene que utilizar para comunicarse con la aplicación.

¿Qué son los controles?

Son los objetos que conforman la interfaz grafica de un programa; a través de ellos, un usuario interactúa con la aplicación. Sus características pueden cambiarse por medio de la ventana propiedades.

Son los gráficos que permiten introducir o mostrar datos, como por ejemplo: cajas de texto, botones, etiquetas, marcos, listas y temporizadores. Por lo tanto cabe señalar que el formulario mas los controles y forman la interfaz o medio de comunicación.

Vistas del programa ( Proyecto, formulario, herramientas, entre otras. )

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

¿Cuáles son las 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: 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.
  • Option Button: 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.
  • List Box: 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.
  • 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 VScrollBarSon: 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.
  • 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.
  • 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.
  • 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.
  • CommonDialog (Cuadro de diálogo): Se utiliza para varias funciones: Abrir ficheros, guardar ficheros, elegir colores, seleccionar impresora, fuentes, mostrar el fichero de ayuda, etc.

Propiedades de los elementos.

Publicado en Uncategorized | Deja un comentario