0% encontró este documento útil (0 votos)
19 vistas512 páginas

Introducción a Visual Basic

El documento proporciona una historia del lenguaje de programación BASIC y su evolución hacia Visual Basic. Comenzó en 1964 como un lenguaje sencillo para principiantes. Resurgió en los años 80 con la popularización de las PC pero tenía desventajas frente a otros lenguajes. La versión Quick BASIC de Microsoft corrigió problemas pero llegó tarde. Visual Basic aprovechó las ventajas de Windows para crear un potente entorno de desarrollo visual que hizo popular el lenguaje entre los profesionales.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
19 vistas512 páginas

Introducción a Visual Basic

El documento proporciona una historia del lenguaje de programación BASIC y su evolución hacia Visual Basic. Comenzó en 1964 como un lenguaje sencillo para principiantes. Resurgió en los años 80 con la popularización de las PC pero tenía desventajas frente a otros lenguajes. La versión Quick BASIC de Microsoft corrigió problemas pero llegó tarde. Visual Basic aprovechó las ventajas de Windows para crear un potente entorno de desarrollo visual que hizo popular el lenguaje entre los profesionales.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd

Visual Basic - Gua del Estudiante

INTRODUCCIN Antecedentes histricos.


___________________________________

El lenguaje de programacin BASIC (Beginner's All purpose


Symbolic Instruction Code ) naci en el ao 1964 como una
herramienta destinado a principiantes, buscando una forma
sencilla de realizar programas, empleando un lenguaje casi igual
al usado en la vida ordinaria ( en espaol o ingls), y con
instrucciones muy sencillas y escasas. Teniendo en cuenta el
ao de su nacimiento, este lenguaje cubra casi todas las
necesidades para la ejecucin de programas. Tngase en cuenta
que las mquinas existentes en aquella poca estaban
estrenando los transistores como elementos de conmutacin,
los ciclos de trabajo llegaban a la impensable cifra de 10,000
por segundo y la memoria no pasaba de unos pocos ks en
toroides de ferrita (8086 Intel).

La evolucin del BASIC por los aos 70 fue escasa, dado el auge
que tomaron en aquella poca lenguajes de alto nivel como el
FORTRAN y el COBOL. En 1978 se defini una norma para

unificar los Basics existentes crendose la normativa BASIC


STANDARD.

Con la aparicin de los primeros ordenadores personales,


dedicados comercialmente al usuario particular, all por la
primera mitad de los ochenta, el BASIC resurgi como lenguaje
de programacin pensado para principiantes, y muchos de estos
pequeos ordenadores domsticos lo usaban como nico
sistema operativo (Sinclair, Spectrum, Amstrad).

Con la popularizacin del PC, salieron varias versiones del BASIC


que funcionaban en este tipo de ordenadores (Versiones
BASICA, GW-BASIC), pero todas estas versiones del BASIC no
hicieron otra cosa que terminar de rematar este lenguaje. Los
programadores profesionales no llegaron a utilizarlo, habida
cuenta de las desventajas de este lenguaje respecto a otras
herramientas (PASCAL, C, CLIPPER). El BASIC con estas
versiones para PC lleg incluso a perder crdito entre los
profesionales de la informtica.

Las razones para ello eran obvias:

- No era un lenguaje estructurado.


- No existan herramientas de compilacin fiables.
- No dispona de herramientas de intercambio de
informacin.
- No tena libreras.
- No se poda acceder al interior de la mquina.
- Un largo etctera de desventajas respecto a otros
lenguajes de programacin.

Tal fue ese abandono por parte de los usuarios, que la aparicin
del Quick-BASIC de Microsoft, una versin ya potente del BASIC,
que correga casi todos los defectos de las versiones pas
prcticamente inadvertida, a no ser porque las ltimas versiones
del sistema operativo MS-DOS 3.0 incluan una versin de
Quick-BASIC algo recortada (Q-Basic) como un producto mas
dentro de la amplia gama de ficheros ejecutables que
acompaan al sistema operativo, y aprovecha de el editor de
textos (Cada vez que se llama al EDIT estamos corriendo el
editor del Q-Basic).

Esta versin del popular BASIC ya es un lenguaje estructurado,


lo que permite crear programas modularmente, mediante
subrutinas y mdulos, capaz de crear programas ya
competitivos con otros lenguajes de alto nivel. Sin embargo
llegaba tarde, pues los entornos MS-DOS estaban ya superados
por el entorno grfico Windows.

Sin embargo algo haba en el BASIC que tentaba a superarse:


su gran sencillez de manejo. Si a esto se le aade el entorno
grfico Windows, el aprovechamiento al mximo de las
posibilidades de Windows en cuanto a intercambio de
informacin, de sus libreras, de sus drivers y controladores,
manejo de bases de datos, etc. el producto resultante puede ser
algo que satisfaga todas las necesidades de programacin en el
entorno Windows. La suma de todas estas cosas es VISUAL BASIC. Esta herramienta conserva del BASIC de los aos 80
nicamente su nombre y su sencillez, y tras su lanzamiento al
mercado ydesde luego las versiones 6 y Net, la aceptacin a
nivel profesional hizo borrar por fin el "mal nombre" asociado a
la palabra BASIC.

Actualmente se est comercializando la versin VB Net de este


producto. Desde su salida al mercado, cada versin supera y
mejora la anterior. Dados los buenos resultados a nivel

profesional de este producto, y el apoyo prestado por el


fabricante para la formacin de programadores, Visual-Basic se
ha convertido en la primera herramienta de desarrollo de
aplicaciones en entorno Windows, apoaderandose del 85 % de
los desarrollos globales.

Es obligado decir sin embargo, que sigue siendo BASIC. No se


pueden comparar sus prestaciones con otros lenguajes cuando
deseamos llegar al fondo de la mquina y controlar uno a uno
sus registros. No es ese el fin perseguido con VB y si es
necesario llegar a esas precisiones ser necesario utilizar otro
lenguaje que permita bajar el nivel de programacin por
ejemplo Visual-C, o realizar libreras (DLLs) que lo hagan. En la
mayor parte de las aplicaciones, las herramientas aportadas por
VB son mas que suficiente para lograr un programa fcil de
realizar y de altas prestaciones.

INTRODUCCIN HISTRICA AL ENTORNO


WINDOWS.
Las interfaces grficos de usuario (GUI) han revolucionado el
mundo informtico. Quiz ms importante a largo plazo es el
hecho de que las aplicaciones Windows tienen una interfaz de
usuario consistente, es decir, los usuarios tienen ms tiempo
para dominar la aplicacin sin tener que preocuparse de las

teclas que deben pulsarse dentro de los mens y cuadros de


dilogo.
Todo esto tiene un precio; antes de la existencia de Visual Basic,
el desarrollo de aplicaciones para Windows era mucho ms
complicado que desarrollar aplicaciones para DOS. Los
programadores tenan que preocuparse ms de lo que estaba
haciendo el ratn, de dnde estaba el usuario dentro de un
men y de si estaba realizando un clic o un doble clic en un
punto determinado. Desarrollar aplicaciones para Windows
requera expertos programadores en C, e incluso stos tenan
problemas.
Visual Basic ha cambiado esta situacin. Se pueden desarrollar
aplicaciones para Windows ms rpidamente. Los errores de
programacin no se generan tan frecuentemente y, si lo hacen,
son ms sencillos de depurar. Adems incluye dos conceptos
importantes:

Un mtodo visual de creacin de aplicaciones, incluyendo


formularios (ventanas), controles y, componentes del
formulario.

La habilidad de asociar cdigo directamente a cada evento


de cada elemento del diseo visual.

DESARROLLO DE APLICACIONES EN
WINDOWS.
Windows 95 ha sido diseado para tomar las ventajas de las
nuevas tecnologas de hardware y software. Entre las
innovaciones ms importantes de la programacin con Windows
95 tenemos:

API (Application Programming Interface) de 32 bit, compatible con


la API soportada en Windows NT.

Un modelo de memoria sin muchas de las restricciones de versiones anteriores de Windows, lo que
significa que las cadenas ya no estn limitadas a 65.535 caracteres, pudiendo alcanzar casi los 2
billones de caracteres de longitud.

La capacidad de incrustar objetos OLE entre la inmensa mayora de aplicaciones Windows 95 con
solo arrastrar y soltar.

La adaptacin de los controles OLE (OCXs) en lugar de los controles VBX para utilizarlos en
programacin.

Optimizacin del registro central para almacenar informacin de las aplicaciones. sto sustituye a los
ficheros INI utilizados en Windows 3.x para mantener informacin acerca del sistema y las
aplicaciones.

Optimizacin de la implementacin de multimedia, incluyendo sonidos, grficos y animaciones.


Introduccin de un nuevo modo de presentacin de las aplicaciones, incluyendo la barra de tareas,
controles de ficha y, ficheros de ayuda.

Etc.

LA PROGRAMACIN VISUAL Y GUIADA POR EVENTOS.


Un programa realizado en DOS es un conjunto de sentencias
que se ejecutan de arriba a abajo ms o menos, en el orden que
el programador ha diseado. Una aplicacin en Windows
presenta todas las opciones posibles en uno o ms formularios
para que el usuario elija entre ellas. La secuencia en la que se

ejecutarn las sentencias no puede ser prevista por el


programador. sto da lugar a la Programacin Orientada a
Eventos. Para programar una aplicacin en Windows hay que
escribir cdigo separado para cada objeto en general, quedando
la aplicacin dividida en pequeos procedimientos, conducido
cada uno de ellos por un suceso. Un suceso es una accin
reconocida por un objeto (formulario o control) el suceso puede
ser causado por el usuario o, indirectamente por el cdigo. En
Visual Basic cada formulario y cada control tienen predefinidos
un conjunto de sucesos. Cuando ocurren estos sucesos, Visual
Basic invoca al procedimiento asociado con el objeto para ese
suceso.
Para desarrollar una aplicacin en Visual Basic, los pasos que se
seguirn son:

1.
2.

Crear la interfaz de usuario.


Modificar las propiedades de cada objeto.

3.

Escribir el cdigo asociado a los eventos de cada objeto.

EL ENTORNO VISUAL BASIC.


Los elementos que componen la pantalla de Visual Basic son:
Barra de mens.
Visualiza las rdenes que se utilizan para desarrollar, probar y
archivar una aplicacin. Los mens que nos encontramos son:

Archivo contiene las rdenes para trabajar con archivos.

Edicin contiene las herramientas que ayudan a escribir el cdigo.

Ver da acceso rpido a todas las partes del programa.

Insertar permite incluir nuevos mdulos y formularios en la aplicacin.

Ejecutar permite verificar la aplicacin mientras se desarrolla.

Herramientas controla el aspecto y propiedades del entorno.

Complementos contiene las utilidades para el manejo de bases de datos.

Ayuda.

Ventana o barra de herramientas.


Facilita el uso a las rdenes ms comunes. De izquierda a
derecha los iconos que aparecen permiten:
Formulario, crear un nuevo formulario.
Modulo ,crear un nuevo mdulo. Se utiliza para crear fragmentos de cdigo
independiente del formulario.

Abrir Project ,permite abrir un proyecto.

Guardar Proyecto, permite guardar un proyecto.

Bloquear Controles ,impide que se muevan los controles del formulario


involuntariamente.

Editor de Mens, visualiza la ventana de diseo de mens.

Propiedades, visualiza la ventana de propiedades de los distintos objetos.

Examinador de Objetos, muestra las clases, mtodos, propiedades, etc. de


los objetos disponibles en la aplicacin.

Proyecto, visualiza la ventana de proyecto.

Inicio,

Interrumpir.

Terminar.

Alternar Puntos de Ruptura.

Inspeccin Instantnea,,visualiza el valor del elemento seleccionado en la


ventana de cdigo.

Llamadas, visualiza la estructura de llamadas activas.

Paso a Paso por instrucciones.

Paso a Paso por procedimientos.

Caja de herramientas.
Provee de un conjunto de herramientas que permiten colocar los
controles en el formulario durante el diseo del proyecto.
Ventana de proyecto.
En esta ventana estn especificados los ficheros (formularios, mdulos,
etc.) que forman la aplicacin y, dnde se seleccionarn para crearlos o
modificarlos. Esto se debe a que hay ficheros que pueden utilizarse en
ms de una aplicacin. Adems contiene dos botones: Ver Formulario
que visualiza el formulario seleccionado y; Ver Cdigo que visualiza el
cdigo del fichero seleccionado.
Ventana del formulario.
Es la ventana que da lugar a la interfaz de usuario. Es la ventana que se
personalizar. Los puntos que aparecen sobre el formulario, forman una
rejilla que ayuda a la hora de alinear los controles que se sitan sobre el
mismo. Esta rejilla desaparece en tiempo de ejecucin. Para eliminarla
en tiempo de diseo se acceder a la opcin
Herramientas/Opciones/Ficha Entorno/Mostrar Cuadrcula.
Ventana de propiedades.
Especifica las propiedades de cada uno de los objetos. En cada momento
mostrar las propiedades del objeto seleccionado en el formulario. Est
formada por dos partes: la lista desplegable de objetos que visualiza el
nombre del objeto seleccionado y, la lista de propiedades del objeto
seleccionado.

QU SUCEDE AL EJECUTAR UNA APLICACIN VISUAL BASIC?

Los eventos que tendrn lugar a la hora de ejecutar una aplicacin son:
0.

Form_Initialize

1.

Form_Load

2.

Form_Resize

3.

Form_Activate

4.

Form_GotFocus

5.

Form_Paint (solo en el caso de que la propiedad AutoRedraw del formulario est establecida a
False)

y, antes de descargar un formulario de memoria, los eventos que tienen


lugar son:
0.

Form_Terminate

1.

Form_Unload

CMO FUNCIONA UNA APLICACIN VISUAL BASIC?


Normalmente, se escribe cdigo a los eventos a los que se quiera
dar respuesta. Si el evento no tiene respuesta o no se produce,
Visual Basic no har nada, es decir no se ejecutar cdigo
alguno. Para poder ejecutar cdigo, se tendr que haber dado
respuesta a algn evento de algn control y, que dicho evento
tenga lugar.

CONCEPTO DE PROYECTO.
Dado que es muy comn en aplicaciones Visual Basic compartir
cdigo o formularios personalizados, Visual Basic organiza las
aplicaciones en lo que denomina proyectos. Cada proyecto puede
tener varios formularios y, el cdigo que activa los controles de
un formulario es archivado con el formulario en archivos
separados. El cdigo general compartido por todos los
formularios de una aplicacin puede ser dividido en varios
mdulos, que tambin se archivan separadamente. En Visual
Basic 6.0 un proyecto puede tener, adems, mdulos de clase y
ficheros de recursos.
Aunque Visual Basic almacena separadamente los archivos que
forman un proyecto, hace un seguimiento de dnde estn los
archivos. Crea un archivo con la extensin .VBP de Visual Basic
Program/Project. Visual Basic permite tener un solo proyecto
abierto en un momento determinado, es por ello que algunas
PC's se bloquean .
Los formularios se archivan con la extensin .FRM y contienen
una imagen del formulario y, de todos los controles que
pertenecen a l, incluidas sus propiedades. Tambin pueden

contener subrutinas de manejo de eventos, procedimientos


generales, declaraciones de variables y de constantes a nivel de
formulario y, procedimientos externos.

Un mdulo estndar contiene cdigo Visual Basic que no est


asociado a ningn formulario en particular. Los procedimientos
que se encuentran en el mdulo, pueden ser accedidos desde
cualquier otro procedimiento de la aplicacin. Se almacenan con
la extensin .BAS. Los mdulos de clase tienen la extensin
.CLS y contienen cdigo, incluido subrutinas, funciones,
mtodos y procedimientos para crear descripciones genricas de
objetos. Estos mdulos contienen propiedades que describen el
comportamiento de una clase, as como el cdigo que define las
propiedades y los mtodos de la clase.
Los archivos de recursos se almacenan con la extensin .RES y
contienen bitmaps, cadenas de texto, o cualquier otra
informacin que pueda ser cambiada sin tener que reeditar el
cdigo de la aplicacin. Un proyecto solo puede contener un
archivo de recursos.

Caractersticas Generales de Visual-Basic

Visual-Basic es una herramienta de diseo de aplicaciones para


Windows, en la que estas se desarrollan en una gran parte a

partir del diseo de una interfase grfica. En una aplicacin


Visual - Basic, el programa est formado por una parte de
cdigo puro, y otras partes asociadas a los objetos que forman
la interfase grfica.

Es por tanto un termino medio entre la programacin


tradicional, formada por una sucesin lineal de cdigo
estructurado, y la programacin orientada a objetos. Combina
ambas tendencias. Ya que no podemos decir que VB pertenezca
por completo a uno de esos dos tipos de programacin,
debemos inventar una palabra que la defina : PROGRAMACIN
VISUAL.

La creacin de un programa bajo Visual Basic lleva los


siguientes pasos:

- Creacin de un interfase de usuario. Este interfase ser la


principal va de comunicacin hombre mquina, tanto para
salida de datos como para entrada. Ser necesario partir de una
ventana - Formulario - a la que le iremos aadiendo los
controles necesarios.

- Definicin de las propiedades de los controles - Objetos - que


hayamos colocado en ese formulario. Estas propiedades
determinarn la forma esttica de los controles, es decir, como
son los controles y para qu sirven.

- Generacin del cdigo asociado a los eventos que ocurran a


estos objetos. A la respuesta a estos eventos (click, doble click,
una tecla pulsada, etc.) le llamamos Procedimiento, y deber
generarse de acuerdo a las necesidades del programa.

- Generacin del cdigo del programa. Un programa puede


hacerse solamente con la programacin de los distintos
procedimientos que acompaan a cada objeto. Sin embargo, VB
ofrece la posibilidad de establecer un cdigo de programa
separado de estos eventos. Este cdigo puede introducirse en
unos bloques llamados Mdulos, en otros bloques llamados
Funciones, y otros llamados Procedimientos. Estos
Procedimientos no responden a un evento acaecido a un objeto,
sino que responden a un evento producido durante la ejecucin
del programa.

No es necesario entender de momento lo anterior. Visual Basic


introduce un concepto nuevo de programacin, y es necesario

cambiar hasta el argot del programador. Posiblemente se le


habrn acumulado demasiados trminos de una sola vez. Es
normal. A poco que siga leyendo ver las cosas mas claras
cuando se explique una por una.

PROCEDIMIENTOS DE EVENTO

En Visual Basic existen dos clases de procedimientos:


procedimientos generales o procedimientos de evento. Un
procedimiento de evento es invocado cuando un objeto en la
aplicacin reconoce que el evento ha tenido lugar. Los
procedimientos de eventos para un control combinan el nombre
del objeto con un subrayado y, el nombre del evento. Po
ejemplo cmdOK_Click(). Los procedimientos de eventos para un
formulario combinan la palabra reservada Form con un
subrayado y, el nombre del evento. Form_Load. Los
procedimientos de eventos para un formulario MDI combinan la
palabra reservada MDIForm con un subrayado y, el nombre del
evento. Por ejemplo MDIForm_Unload.
Un procedimiento general indica cmo realizar una tarea
determinada. Se ejecutar solo si es invocado especficamente
en la aplicacin.
VARIABLES. DEFINICIN Y ENTORNO

Basic, desde siempre, al contrario de otros sistemas de


programacin, no exigi la definicin previa de una variable.
Una variable, como Vd. seguro que conoce, es un nombre que
en el programa le asignamos a un dato. Ese dato podr cambiar.
Piense por ejemplo, en un programa consistente en la toma de
datos de los alumnos de un centro escolar. Existirn varias
variables para poder introducir los datos de los alumnos. Estas
variables pueden tener nombre tales como:

Nombre
Apellido1
Apellido2
Direccin
Telfono
DNI

La variable Nombre tomar valores distintos segn vayamos


introduciendo los datos de los distintos alumnos. Es posible, que
a lo largo de la ejecucin del programa, esta variable Nombre
valga:

Jos
Pedro
Mara
Luis

Espero que su intuicin o conocimiento anterior le lleve a


conocer el concepto de variable. Mas adelante lo ver mas claro.

Decamos que Basic no exige la definicin previa de las


variables. Otras herramientas exigen que se haga as. Por lo
tanto es normal encontrar, en otros sistemas de programacin,
que un programa comienza de la siguiente forma:

Declare Nombre As String

'Le dice que Nombre es una sucesin

de letras
Declare Apellido1 As String
Declare Apellido2 As String
Declare Direccin As String
Declare Telfono As String

'Le dice que Telfono es una sucesin

de letras
Declare DNI As Nmero

'Le dice que DNI es un nmero

Mediante estas declaraciones, el programa sabe de que tipo de


dato se trata y por tanto cmo debe trabajar con l. En otros
sistemas de programacin distintos de Basic, es necesario
realizar esta declaracin antes de introducir una variable.

Basic permite que no se declaren. Cuando a lo largo del


programa le introducimos una variable nueva, asume que es
una variable y que el tipo es el adecuado para el valor que le
estamos introduciendo en ese momento.

Por ejemplo, si Basic encuentra estas instrucciones

DNI=50000000
Nombre ="Pedro"
Telfono = "1234567"

entiende que DNI, Nombre y Telfono son variables, que DNI es


un nmero (No hemos metido su valor entre comillas), y que
Nombre y Telfono son sucesiones de caracteres alfanumricos
(su valor est entre comillas)

Esta particularidad de no necesitar declarar las variables hace


que sea sencillo introducir una variable nueva. Sin embargo
entraa un gran peligro. Imagnese que en un paso posterior del
programa, le mandamos escribir esos tres datos anteriores con
la instruccin PRINT

Print DNI
Print Nombre
Print Telwfono

Habr observado en tercer lugar la palabra Telwfono, que por


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

Basic ha pensado en ese problema, y se puede solucionar con


esta que ser la primera instruccin BASIC que vamos a
estudiar:

OPTION EXPLICIT
Obliga a declarar previamente las variables que se vayan a usar.
De no haberla declarado antes de usarla, el programa dar una
comunicacin de error.

TIPOS DE VARIABLES

Las variables pueden ser de los siguientes tipos: (El nmero


indicado en segundo lugar indica el nmero de Bytes que ocupa
en memoria.)

Booleana
(falso)

(2)

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

Byte

(1)

Integer
Long

Nmeros enteros, en el rango de 0 a 255


(2)

(4)

Nmeros enteros en el rango de -32768 a 32767

Nmeros enteros en el rango de -2147483648 a

2147483647
Single

(4)

Punto flotante, simple precisin

Doble

(8)

Punto flotante, doble precisin.

Currency

(8)

Entero, con punto decimal fijo (Tpico de monedas)

String

(*)

Cadenas alfanumricas de longitud variable o fija

Date

(8)

Fechas

Objet

(4)

Referencia a objetos

Variant

(**)

Otros tipos de datos

(*) Una variable tipo String ocupa el mismo nmero de bytes que
caracteres tenga la cadena.
(**) Una variable tipo Variant ocupa 16 bytes si se trata de un nmero y
22 bytes + longitud de la cadena si se trata de un dato tipo cadena de
caracteres.

Existen tambin variables definidas por el usuario (Ya ver la


sentencia Type). En este tipo de variables se pueden introducir
muchos datos de distinto tipo. Los bytes necesarios para
almacenar esa variable depender de los datos que se hayan
definido.

Dentro de las variables Objet (variables que se refieren a


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

Cada tipo de variable ocupa unos determinados bytes. Si no se


define una variable, VB toma como tipo por defecto para la
variable el tipo Variant. Este tipo ocupa mas bytes que, por
ejemplo, un integer. Si el tipo de dato que vamos a introducir en
una variable es un integer, y no la hemos declarado como tal,
VB asumir para esa variable que es del tipo Variant, lo que le
llevar a gastar mas bytes de memoria (16) que los que
necesitara (2) si la hubisemos declarado previamente. Si esa
variable va a estar en el rango de 0 a 255, y no declaramos
previamente que la variable va a se del tipo Byte, o la
declaramos como integer, p. e., estamos desperdiciando
memoria RAM y posiblemente, retardando la ejecucin del

programa. Lo mismo podemos decir del resto de las variables, y


lo importante que es definirlas y definirlas bien.

NOTA. Observe en la lista anterior que un dato Booleano ocupa


2 Bytes, mientras que un dato tipo Byte ocupa un byte. En
muchas ocasiones declaramos variables tipo Boolean con la
intencin de que ocupen menos espacio. Paradoja del VB. Si la
declaramos como Byte ocupamos menos espacio en memoria.
Declarar una variable como Boolean tiene tambin sus ventajas
(escribir menos cdigo por lo general cuando necesite leer o
escribir una variable tipo Boolean), pero tenga presente esta
observacin respecto a los datos Boolean.
Puede declarar el tipo de la variable mediante un carcter despus del nombre de
la variable. Esta tcnica, obligatoria en Quick-Basic, est en desuso en VB. No es
recomendable definir el tipo de esta forma, pues existe un serio peligro de error.
De cualquier forma, eso es potestativo del programador y de sus costumbres.

Los caracteres que definen cada tipo de variable son:

Integer

&

Long

Single

Double

Currency

String

Ejemplos Prcticos de declaracin de variables

En Visual Basic, cuando declaramos una variable como String


(Cadena de caracteres), no es necesario declarar su longitud.
VB aceptar cualquier nmero de caracteres. Si desea evitar
que se puedan introducir ms de un determinado nmero de
caracteres, debe declarar su nmero. Por ejemplo :

Dim Var1 as String

'Var1 puede tener cualquier nmero

de caracteres

Dim Var2 as String * 15

'Var2 puede tener un mximo de 15

caracteres.

En este segundo caso, si se introduce como Var2 una cadena de


caracteres con mas de 15 caracteres, Var2 tomar solamente
los 15 primeros. Visual basic no presenta ningn aviso de que
esa variable ha omitido los caracteres que han sobrepasado la

cifra de 15. Si desea que el usuario conozca esa circunstancia,


debe introducir el cdigo oportuno para producir el aviso.

La declaracin de variables tipo String con nmero de caracteres


predefinido presenta tambin inconvenientes a la hora de tratar esa
cadena de caracteres con sentencias tales como Mid, Left y Right, o a la
hora de aadir una cadena a otra. La experiencia nos indica que NO
merece la pena declarar variables tipo String con el nmero de
caracteres prefijado.

En una gran parte de los casos una variable que se compone de


nmeros debe declararse como una variable de cadena de
caracteres (String), y no como numrica. Cuando pensamos por
ejemplo en un nmero de DNI, compuesto por 7 u 8 cifras, un
cdigo postal, el nmero de una calle, el piso de un edificio,
parecen invitar a que la variable que los contenga sea una
variable de tipo numrico (Byte, Integer, Long, ...). Estas
variables, aunque su contenido sean nmeros, siempre se deben
declarar como String, ya que se tratan en realidad de cadenas
de caracteres, aunque estos sean nmeros. Para aclarar mas
estas ideas, piense en el nmero del DNI con la letra del NIF
incluido, o que el lugar del DNI se deba rellenar con el nmero
del permiso de residencia, (lleva letras). Piense en el cdigo
postal de una provincia que comienza por 0 ( 08XXX =
Barcelona ) . Si la variable que va a contener ese cdigo postal

se declara como numrica, el cero de la izquierda lo desprecia,


por lo que ese cdigo postal quedara reducido al 8XXX, nmero
de 4 cifras que el cartero nunca reconocera como un cdigo
postal, que necesariamente ha de tener 5 cifras. Para terminar,
piense la forma de introducir en una variable numrica el
nmero 32Bis de una calle o el piso S2 de un edificio. O piense
en una variable que va a contener un cdigo de un producto.
Ese cdigo siempre va a ser un nmero, por ejemplo de 9 cifras.
Ha pensado como tratara el ordenador una variable numrica
que contiene el cdigo 000100123 ?. El resultado sera que
convertira ese cdigo en la cifra 100123, y Vd. deber buscarse
la vida para aadir los ceros iniciales a la hora de sacarlo a una
impresora, por ejemplo.

En todos los casos anteriores, el nmero no representa una


cantidad numrica, sino un nombre. Lo que ocurre es que ese
nombre contiene solamente nmeros.

Qu variables debemos declarar entonces como numricas ? La


respuesta es bien sencilla : Aquellas que van a contener datos con
lo que vamos a realizar operaciones matemticas.

Las variables booleanas (True/False) pueden en muchos casos


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

Una variable byte ocupa muy poco, simplemente 1 byte como su


nombre indica. Pero no puede contener nmeros mayores de
255 ni nmeros negativos.

Cada vez que declare una variable numrica piense en los


valores que puede tener, sobre todo cuando esa variable va a
ser el resultado de una operacin matemtica. Recuerde el
escaso margen de una variable tipo Integer ( de -32768 a
32767)

Si la aplicacin va a tratar moneda, piense en la forma de


expresar los nmeros decimales y el nmero de ellos
permitidos, as como el redondeo. La variable correcta para
este caso es Currency, pero Currency le aade automticamente
el tipo de moneda de cada pas (Pts. Para Espaa) lo que con
frecuencia es un engorro. Los datos del tipo de moneda los toma
del sistema operativo del ordenador, por lo que no se extrae si

le expresa el nmero de pesetas en dlares. Cambie el pas en


su S. O.

mbito de las variables.

Denominamos mbito de una variable a las partes del programa donde


esa variable est declarada. Para entenderlo mejor, veamos
someramente la forma de un programa desarrollado en VB.

Un programa VB tiene uno o varios formularios. Cada formulario tiene


varios controles. Tanto el formulario como cada uno de sus controles
tienen una parte del programa, justamente la parte relacionada con cada
uno de los eventos que pueden suceder bien al formulario o a los
controles. A estas partes las habamos llamado Procedimientos.
Podemos tener procedimientos que no estn relacionados con ningn
evento ocurrido al formulario o a sus controles. (Los Procedimientos que
iremos insertando a lo largo de la aplicacin)
Aparte de formularios y controles, un programa puede tener Mdulos, y
en cada uno de los mdulos podemos insertar cuantos Procedimientos y
Funciones queramos. La estructura de un programa VB puede ser de la
siguiente forma:

Formulario1

Formulario2

Formulario3

Mdulo1

Modulo2

Declaraciones

Declaraciones

Declaraciones

Declaraciones

Declaraciones
Proc. A1

Proc.B1

Proc.C1

Proc.D1

Proc.E1

Proc. A2

Proc.B2

Proc.C2

Proc.D2

Proc.E2

Proc. A3

Proc.B3

Proc.C3

Proc.D3

FuncinE1

Proc. A4

Proc.B4

Proc.C4

Proc.D4

FuncinE2

Proc. A5

Proc.BB1

Proc.CC1

FuncinE3

Proc. AA1 Proc.BB2

Proc.CC2

FuncinE4

Proc. AA2 Proc.B33

Proc.CC3

FuncinE5

Proc. AA3

Proc.CC4

FuncinE6

Si se declara una variable dentro de un procedimiento o Funcin, esa


variable "NO SALE" del Procedimiento o Funcin donde se declar. El
procedimiento puede estar en un Formulario (Cualquier procedimiento de
un control o un procedimiento creado por nosotros) o en un Mdulo (En
este caso, el procedimiento solo puede ser creado por nosotros)

En un Formulario, una variable puede declararse de dos formas :


Privada o Pblica. Para declarar una variable a nivel de formulario debe

hacerse en la seccin de declaraciones, que est la ventana de cdigo


Objeto = General, Proc. = Declaraciones. Si se declara Privada, esa
variable se puede mover por todo el formulario, (es decir, por todos los
procedimientos de todos los controles del formulario y por los
Procedimientos que pudisemos insertar en ese formulario), pero no sale
de dicho formulario. Si se declara como Pblica, esa variable puede
moverse por todo el formulario, de la misma forma que lo hara declarada
como Privada, y adems puede ser usada desde otro Formulario o
Mdulo, citndola con el nombre del Formulario, seguido del nombre de
la variable ([Link])

En un Mdulo una variable puede declararse como Privada, con lo que


no saldr de ese Mdulo, o Pblica, pudiendo en este caso usarse en
todo el programa. Cuando se declara una variable como pblica en un
Mdulo, basta referirse a ella por su nombre, sin citar el nombre del
Mdulo donde se declar.

En VB es posible declarar varias veces las variables, es decir, pueden


declararse a nivel de formulario, en su apartado de declaraciones, y esa
variable conservar su valor en todas las partes de ese formulario. Sin
embargo, si se declara una variable con el mismo nombre a un nivel
inferior, por ejemplo al principio de un procedimiento, esa variable ser
una variable distinta a la anterior, aunque tenga el mismo nombre, a al
declararla en un Procedimiento, solamente ser vlida en ese
Procedimiento. Una vez que hayamos salido de ese procedimiento, la

variable con ese nombre volver a ser la declarada en el Formulario. En


realidad, lo que tenemos son dos variables distintas, pero con el mismo
nombre, una declarada para todo el formulario excepto para el
procedimiento donde se volvi a declarar, y otra para ese procedimiento
concreto.

NOTA.- No es recomendable declarar una variable a dos niveles. Es


mucho mejor utilizar otro nombre para esa variable dentro del
procedimiento donde se le declarara por segunda vez. A esta nota cabe
exceptuar cuando declaramos variables para una operacin tipo contador

For I = 1 To N

Esa variable I es prctico declararla con el mismo nombre en cada


Procedimiento donde se use.

Tipos de declaracin de variables.

Sentencia DIM
variable como

Es la forma mas comn de declarar una

Privada. Puede emplearse en un Procedimiento,


Funcin, Formulario o Mdulo. La sintaxis es de
la siguiente forma:

Dim nombrevariable As Integer

(o el tipo que sea)

Declarando una variable con la sentencia DIM, en un formulario,


Funcin, procedimiento o mdulo, el entorno de la variable ser el
explicado anteriormente para una variable declarada como Privada. Es
decir, esa variable no sale del formulario, procedimiento mdulo donde
se declar. Cada vez que entremos al formulario, procedimiento o
mdulo, esa variable tomar el valor cero (si es numrica) o nulo (si es
string).

Sentencia PRIVATE

Es la forma de declarar una variable como

Privada. Puede
emplearse solamente en la seccin de
declaraciones de un Formulario o Mdulo. La
sintaxis es de la siguiente forma:

Private

nombrevariable As Tipovariable

Declarando una variable mediante la sentencia PRIVATE en un


Formulario o Mdulo, esa variable puede usarse en todo ese Formulario
o Mdulo (En todos sus Procedimientos y Funciones), pero NO fuera del
Formulario o Mdulo donde se declar.

La sentencia Private no puede usarse en un procedimiento o funcin.

Sentencia PUBLIC

Es la forma de declarar una variable como

Pblica. Puede
emplearse solamente en la seccin de
declaraciones de un Formulario o Mdulo. La
sintaxis es de la siguiente forma:

Publicnombrevariable

As

Tipovariable

Declarando una variable de esta forma en la seccin de declaraciones de


un Mdulo, esa variable puede usarse en cualquier parte del programa
citndola simplemente por su nombre.
Si se declara de esta forma en la seccin de declaraciones de un

Formulario, esa variable puede usarse en toda el programa. Para


nombrarla, si estamos en el Formulario donde se declar basta con
citarla por su nombre. Si no estamos en ese Formulario, habr que citarla
por el nombre del Formulario, seguido del nombre de la variable,
separados por un punto :

[Link]

En un Mdulo puede usarse tambin la sentencia Global en vez de


Public :

Sentencia GLOBAL
el programa. La

Global

Declara una variable que es vlida en todo


sintaxis es:

nombrevariable As

tipovariable

La sentencia Global slo puede usarse en el apartado de declaraciones


de un Mdulo.

Mediante la sentencia Global la variable puede usarse en todo el espacio


del programa.

Sentencia STATIC

Como se dijo anteriormente, una variable declarada en un procedimiento


pierde su valor al salir de l. Lo peor es que una vez que el programa
vuelva a entrar en ese procedimiento, la variable estar puesta a cero.
Afortunadamente, esto ltimo tiene solucin. Si declarsemos una
variable en un procedimiento o funcin, como esttica, esa variable,
aunque no la podremos utilizar fuera de ese procedimiento o funcin,
cuando volvamos a l conservar el valor que tena cuando lo
abandonamos. Esta declaracin como esttica se realiza mediante la
instruccin Static

Static

nombrevariable

As

tipovariable

El nombre de una variable puede ser tan largo como queramos. hasta un
mximo de 40 caracteres. En la versin VB para Espaa se pueden usar
incluso la y vocales acentuadas. Es indiferente usar mayscula
minsculas. No se sorprenda, si por ejemplo, la ha declarado con
maysculas y luego la cita con minsculas al escribir el cdigo, que
automticamente se cambie a maysculas. El nombre de una variable
siempre debe comenzar por una letra.

No hay problema por utilizar variables largas. Al compilar el programa no


se lleva el nombre, es decir, no le va a ocupar mas espacio. Utilice
siempre nombres que le definan la variable con algn sentido. Es muy til
a la hora de acordarse como se llaman, y sobre todo, a la hora de
rehacer un programa que realiz hace seis meses.

Pese a que Visual Basic no obliga a declarar variables, es muy til


hacerlo. De esta forma se tiene control sobre el programa. La experiencia
se lo ir demostrando.

Resumimos la forma de declarar una variable :

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


Procedimiento)

Dim Variable As Tipovariable

En un Procedimiento, como permanente (La variable no puede usarse


fuera de este procedimiento, y dentro de l conserva el valor aunque se
salga y se vuelva a entrar)

Static Variable As Tipovariable

En un Formulario (En su seccin de declaraciones)

Como Privada (Solamente se puede usar en ese Formulario)

Dim Variable As Tipovariable

Private Variable As Tipovariable

Como Pblica

(Puede usarse en toda la aplicacin)

Public Variable As Tipovariable

En un Mdulo

Como Privada (Solamente puede usarse en ese Mdulo)

Dim Variable As Tipovariable

Private Variable As Tipovariable

Como Pblica

(Puede usarse en toda la aplicacin)

Public Variable As Tipovariable

Global Variable As Tipovariable

Error tpico de un programador en Visual Basic

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

Dim Variable1, Variable2, Variable3, Variable4 As String

Esta declaracin est MAL hecha. Visual Basic interpretar que


Variable1, Variable2 y Variable3 son del tipo Variant, y solamente
Variable4 la supone como tipo String

La forma correcta de hacerlo, si queremos declarar esas variables un una


sola lnea, es la siguiente :

Dim Variable1 As String, Variable2 As String, Variable3 As String,


Variable4 As String.

Lenguaje Basic del Visual Basic.

No ha sido un juego de palabras. VB emplea unas instrucciones casi


iguales a las que emplea Quick Basic. Sin embargo ha aadido otras
nuevas instrucciones, inherentes con la programacin visual. Vamos a
estudiar aqu las instrucciones y definiciones mas sencillas, comunes a
QB y VB.

Sentencias condicionales.

Llamamos sentencias condicionales a aquellas que se realizan si se


cumple una determinada condicin. Son las sentencias por las que
empieza cualquier texto de Basic, y este no va ser menos.

La sentencia condicional mas usada es:

Si se cumple una condicin Entonces

Realiza estas instrucciones

Si no se cumple

Realiza estas otras instrucciones

Fin de la sentencia.

As de fcil es programar en Basic. Lo que ocurre es que esta


herramienta habla ingls, y lo descrito anteriormente toma la forma:

If condicin Then
Instrucciones
Else
Otras instrucciones
End If

En este ejemplo, la condicin era que, o se cumple una condicin y

ejecuta unas determinadas instrucciones, o no se cumple, y ejecuta otras


condiciones distintas. Puede ocurrir que, caso de no cumplirse la
condicione primera, se abra un abanico de dos o tres posibilidades. La
sentencia condicional tendra entonces la forma:

If condicin 1 Then
Instrucciones
ElseIf Condicin 2
Otras instrucciones
ElseIf Condicin 3
Otro juego de instrucciones
Else
Instrucciones que debe realizar caso de no cumplir las condiciones
1, 2 y 3.
End If

Como decamos anteriormente, este es el tipo de sentencia condicional


mas usada. Existe otra:

Select Case

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

Select Case variable


los valores (p.e.)

' variable es una variable que puede tomar


de 1 a 4

Case 1
Instrucciones a ejecutar en caso de que variable = 1
Case 2
Instrucciones a ejecutar en caso de que variable = 2
Case 3
Instrucciones a ejecutar en caso de que variable = 3
Case 4
Instrucciones a ejecutar en caso de que variable = 4
End Select

Este procedimiento resulta mucho mas sencillo y rpido que las


sentencias If Then Else
vistas anteriormente, cuando el margen de eleccin es mayor que 2.

Cuando lo que queremos es elegir un valor, no ejecutar instrucciones


como hacamos anteriormente, disponemos de otras dos funciones:
Choose y Switch.

Switch toma una serie de parmetros, todos por parejas. El primer


trmino de cada pareja es la expresin a evaluar. El segundo es el valor
que tiene que devolver. En realidad Switch es una funcin (las funciones
las veremos muy pronto)

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

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

La sentencia Choose es casi igual, cambia solamente la forma. La


misma intruccin anterior puede realizarse con Choose de la siguiente
forma:

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

En estas sentencias, Switch y Choose, si el valor de B no coincide con


ninguno de los valores que se le haban establecido (1, 2 3 en nuestro
caso), la sentencia devuelve el valor Nulo ( Null ). Esto puede producir
algn error si no se contempla esa posibilidad.

Con estas sentencias condicionales es posible realizar bifurcaciones del


programa, cambiar las propiedades de un objeto, obtener resultados de
operaciones, ....

Sentencias de bucle.

Es muy comn utilizar bucles a lo largo de un programa. Un bucle es una


sucesin repetitiva de instrucciones, que se estarn realizando mientras
se cumpla una condicin o mientras no se cumpla otra condicin. Es tan
sencillo como esto:

Mientras condicin

Instrucciones

Fin del bucle

Existen dos formas de bucle: Una, que realiza un nmero determinado de


recorridos por el bucle. Es el denominado bucle por contador. Otra,
realiza el bucle hasta que se cumpla (o deje de cumplirse) una condicin.
Es el llamado bucle por condicin.

Bucle por contador

Realiza el bucle tantas veces como le indiquemos. Por ejemplo, en


este bucle nos va a presentar las 26 letras maysculas del alfabeto ingls

For N=65 To 90

[Link] = Chr ( N )

Next N

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

Bucles por condicin

Ejecuta las instrucciones del bucle mientras se cumple una


condicin

X=0
Do While X < 1000
X=X+1
Loop

El programa toma una variable ( X ) que previamente tuvimos la


curiosidad de ponerla a cero, e incrementa su valor una unidad. Analiza
si el valor de X es menor que 1000, y si es cierto, vuelve a realizar el
bucle. As hasta que X ya no sea menor que 1000. Al dejar de cumplirse
que X sea menor que 1000, sale del bucle. Acabamos de realizar un

temporizador, y tambin de exponer las sentencias condicionales y los


bucles, inicio de cualquier curso de Basic. Como final de leccin, se
propone un problema. Con el primer bucle, donde visualizbamos los
caracteres A a la Z, posiblemente no nos diese tiempo de ver cada una
de las letras que iban apareciendo en la pantalla, en la etiqueta Label1,
dado que cambiara con mucha velocidad, y solamente veramos la Z,
que es donde se detuvo el programa. Podemos poner un temporizador
cada vez que presente una letra, y as nos dar tiempo a verla. Con los
dos bucles vistos anteriormente ya podemos hacerlo.

Si lo que queremos es que el programa se ejecute mientras no se cumpla


una determinada condicin, la sentencia ser:

X=0
Do Until X > 1000
X=X+1
Loop

Observe que la diferencia entre una y otra es la condicin, While para


indicar Mientras se cumpla que ...
se cumpla que ....

y Until para indicar Mientras no

Para terminar bien el programa anterior utilizaremos la condicin de


While (Mientras se cumpla la condicin)

For N=65 To 90
[Link] = Chr ( N )
[Link]

' Refresca la etiqueta

X=0
Do While X < 1000
X=X+1
Loop
Next N

Este es nuestro primer programa en BASIC. En VISUAL BASIC es


idntico, pero nos falta la interface grfica. Para realizarla basta con abrir
el VB y sobre el formulario que aparece al abrirlo, introducir una etiqueta,
(Label) que llevar el nombre por defecto de Label1. Solo nos queda
pensar donde introducimos el cdigo anterior. Podemos introducir un
botn de comando (Command Button) que saldr con el nombre por
defecto de Command1. Haga doble click sobre el botn. Aparecer el
procedimiento Click. Este procedimiento es el que se realiza cuando
hacemos click sobre ese botn. Escriba en ese procedimiento este

cdigo.

Private Sub Command1_Click()

' Esta lnea sale

automticamente
For N=65 To 90
[Link] = Chr ( N )
[Link]

' Refresca la etiqueta

X=0
Do While X < 1000

' Bucle de temporizacin

X=X+1
Loop
Next N
End Sub

Funciones de cadenas

' Termina el bucle de temporizacin


' Esta lnea sale automticamente

Se denomina CADENA a una sucesin de caracteres. Una cadena


puede tener uno o varios caracteres alfanumricos. Una cadena es
tambin una sucesin de nmeros.

Ejemplo de cadenas:

Curso de Visual Basic


abcdefghijklmnopqrstuvwxyz1234567890
123456789

Hagamos una distincin entre una cadena que contenga nmeros y un


nmero. Un nmero tiene un valor, pero tambin tiene una presentacin
escrita. El valor es algo que estar en el ordenador como una sucesin
de bits. Dependiendo de como lo hayamos declarado, tendr mas o
menos bits. Pero esa informacin no es un nmero legible por el usuario.
Lo que s es legible por el usuario es la representacin en numeracin
decimal (u octal, o hexadecimal, o incluso en binario) de ese nmero.
Esa representacin del nmero en un determinado sistema de
numeracin es una cadena.

As, el nmero nueve, que en la memoria del ordenador ser una


sucesin de bits, el ordenador puede presentrnoslo como:

En numeracin decimal

En numeracin hexadecimal

11

En numeracin octal

1001

En numeracin binaria

Esas formas de presentarnos el nmero son CADENAS de caracteres. El


valor del nmero dentro del ordenador es un NUMERO.

Para presentar un nmero en la pantalla, el ordenador debe convertirlo


previamente a una cadena.

Cuando introducimos un valor numrico por teclado o pantalla, el


ordenador para hacer operaciones con l, debe transformarlo a un
nmero.

Estas consideraciones nos llevan a las dos primeras funciones con


cadenas:

Str

(nmero)

Convierte un nmero a una cadena en

numeracin

Val

(cadena numrica)

decimal.

Obtiene el valor (el nmero)

correspondiente a esa

cadena.

Ejemplos

Variablenumerica = Val ([Link])

Este ejemplo convierte la cadena de caracteres (numricos) que


hubiese en la caja de texto TextBox1 en un nmero, y asocia este
nmero a la variable Variablenumerica.
Si el contenido de la caja de textos no fuesen caracteres numrico
(abcd, por ejemplo), Variablenumerica tomara el valor 0.

[Link] = Str (Variablenumerica)

Este ejemplo pondra en la etiqueta Label1 los caracteres


correspondientes al valor que tuviese la variable Variablenumerica .

Nota para recordar: Siempre habr que convertir un nmero a una


cadena cuando queramos presentarlo en la pantalla. Siempre habr
que convertir a nmero la cadena de caracteres numricos que
hayamos introducido por teclado o por pantalla, cuando queramos
operar con ese nmero. Un Label, cuando tiene que presentar un
nico nmero, no le pedir que se lo convierta a cadena, pues VB
hace automticamente esa conversin. Sin embargo, cuando tiene
que presentar un nmero, y adems un texto en el mismo Label, VB
no realizar automticamente ese cambio, por lo que le dar un
error. Le recomiendo que convierta los nmeros a variables de
cadena siempre que los quiera presentar en un Label o TextBox.

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

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

Puede tambin transformar a una cadena de caracteres el valor de un


CheckBox o de un OptionButton. En estos casos devuelve 0 y 1 para el
CheckBox (Desactivado / Activado) y Verdadero Falso para el
OptionButton (Activado / Desactivado)

[Link] = CStr(booleana)

[Link] = Verdadero

si

booleana es true
[Link] = Falso

si booleana es

False

Label2 = CStr([Link])

[Link] = 1

si Check1 est

activado
[Link] = 0

si Check1 est

desactivado

Label3 = CStr([Link])

[Link] = Verdadero si

Check1 est activado


[Link] = Falso

si Check1 est

desactivado

Si se aplica Cstr a una variable tipo Fecha/Hora devuelve la fecha /

Hora en formato corto.

Mas funciones de cadena:

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

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

Resultado = Left (cadena, 10)

----> Resultado = Curso

de V

Right (cadena, n)

Extrae lo n ltimos caracteres de la cadena

Resultado = Right (cadena, 10)

----> Resultado = sual

Basic

Mid (cadena, m, n) Extrae n caracteres de la cadena, siendo el

primer carcter

extrado el que ocupa el lugar m.

(Vea Instruccin Mid mas abajo)

Resultado = Mid (cadena, 3, 10)

LCase (cadena)

----> Resultado = rso de Vis

Devuelve otra cadena igual, pero con todos los

caracteres en minsculas. (LCase = Lower Case)

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


basic

UCase (cadena)

Devuelve otra cadena igual, pero con todos los

caracteres en maysculas. (UCase = Upper Case)

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

VISUAL BASIC

Len (cadena)

Devuelve la longitud de la cadena

Resultado = Len (cadena)

LenB (Cadena)

----> Resultado = 21

Devuelve el nmero de Bytes empleados

para almacenar la
cadena. Sorprndase, es el doble que Len (Cadena)

String (n, carcter)

Devuelve una cadena de n caracteres como

el indicado

Resultado = String (8, "a")

Resultado = String (8, Chr(65))


AAAAAAAA

----> Resultado = aaaaaaaa

----> Resultado =

Resultado = String (8, 65)

Space

(n)

----> Resultado = AAAAAAAA

Devuelve una cadena formada por n

espacios.

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

LTrim

Elimina los posibles espacios que tenga

una cadena por su

izquierda.

Rtrim

Elimina los posibles espacios que tenga una

cadena por su

Trim
por su

derecha.

Elimina los espacios que tenga una cadena, tanto


izquierda como por su derecha. (No elimina

los espacios
centrales de la cadena)

Estas tres funciones se emplean para quitar los posibles espacios


que pueden resultar de una entrada de datos. Tienen especial
importancia cuando se toman los datos de un archivo o base de datos,
donde fueron introducidos por otro programa.

No se pone ningn ejemplo de estas funciones, pues sera difcil


verlo impreso.

InStr (cadena, cadena1)

Busca la cadena1 dentro de cadena y

devuelve el nmero de orden dentro de cadena donde se encuentra la


primera letra de cadena1

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

StrConv

Convierte una cadena de caracteres en otra, segn las

instrucciones
que le sigan. Puede sustituir a UCase o LCase si la instruccin es
UpperCase o LowerCase respectivamente, o poner la primera letra
de

todas las palabras de la cadena en maysculas, si la instruccin es


ProperCase.

Resultado = StrConv (cadena, UpperCase)

----> Resultado =

CURSO DE

VISUAL

BASIC

Resultado = StrConv (cadena, LowerCase)

----> Resultado =

curso de visual

basic

Resultado = StrConv (cadena, ProperCase)

----> Resultado =

Curso De Visual

Basic

Instruccin Mid

Mid puede usarse tambin para cambiar el contenido de una cadena.


Observe la sutileza entre Mid como Funcin de cadena y Mid como
Instruccin.

La Instruccin Mid reemplaza un nmero especificado de caracteres en


una variable de cadena con caracteres de otra cadena.

Sintaxis

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

Resultado Mid (cadena, 7,2)=Sobre

---- > Resultado =

Curso sobre Visual


Basic

FUNCIONES CON NMEROS


_________________________

Visual Basic puede operar con nmeros tal como lo hara cualquier
persona. Conoce las 4 reglas, y puede utilizar parntesis de la misma
forma que los escribimos sobre el papel.

Los operadores que utiliza para las operaciones bsicas son:

Suma

Resta

Multiplicacin

Divisin

Divisin sin decimales

Mod Resto de una divisin


^

Eleva a un exponente

Ejemplos

Resultado = 12 + 15

----> Resultado = 27

Resultado = 15 - 12

----> Resultado = 3

Resultado = 15 * 12

----> Resultado = 180

Resultado = 15 / 12

----> Resultado = 1.25

Resultado = 15 \ 12

----> Resultado = 1

Resultado = 15 Mod 12

----> resultado = 3

Resultado = 12 ^ 2

----> Resultado = 144

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

Estos operadores se denominan Operadores aritmticos.

Existen otras operaciones que se pueden realizar con nmeros:

comparaciones. Los operadores que realizan comparaciones se


denominan Operadores relacionales. El resultado de las operaciones
realizadas con estos operadores solamente admiten dos resultados: True
(Cierto) o False (Falso) Estos operadores son:

Igual que

<>

No igual que

<

Mayor que

<=

Mayor o igual que

>

Menor que

=>

Igual o menor que

Estos operadores se suelen utilizar en estructuras de programa donde se


tome una decisin.

El operador = puede usarse tambin para comparar cadenas o fechas.

Operadores Lgicos

Estos operadores slo tienen sentido cuando hablemos de variables


Booleanas, es decir, aquellas que solamente pueden tomar los valores
cero y uno.

Operador

Funcin

Devuelve True si Devuelve False si

And

Funcin AND

A=True y B=True Cualquier otro caso

Or

Funcin OR

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

Xor

Funcin XOR

A=True y B=False

A=True y

B=True
A=False y B=True

Eqv

F. Equivalente

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

A=False y B=False

Imp

A=False y B=False

A=False y B=True

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


A=False y B=True

A=False y B=False

Not

Negacin

Like Igualdad

A=False

A=True

A=True

A=False

Otras Funciones con nmeros

CInt

Parte entera

Devuelve la parte entera de un

nmero con decimales

Abs

Valor Absoluto

Devuelve el valor absoluto de un

nmero

Sgn

Signo

Sqr

Raz cuadrada

nmero

Devuelve el signo de un nmero

Devuelve la raz cuadrada de un

Exp

Exponenciacin Devuelve el nmero elevado al

exponente indicado

Log

Logaritmo Devuelve el logaritmo natural de ese

nmero

Trigonomtricas

Sin

Seno

Devuelve el valor del seno de un ngulo

(Expresado
en radianes)

Cos

Coseno

Devuelve el coseno de un ngulo (En

radianes)

Tan

Tangente

Devuelve la tangente de un ngulo

Atn

Arco Tang. Devuelve un arco cuya tangente sea el

nmero
(Angulo en radianes)

Una funcin curiosa

Timer

Tiempo acumulado

segundos) que ha

Devuelve el tiempo (en


pasado desde las

12 de la noche.

Generacin de nmeros aleatorios

Randomize (Numero) Inicia el generador aleatorio tomando como


dato de partida el

Numero. Devuelve el resultado

en una variable llamada Rnd.

NOTA MUY IMPORTANTE.- Los nmeros aleatorios generados de


esta forma son siempre iguales, eso s, dependiendo del nmero
que se le introduzca como parmetro. Esta generacin de nmeros
no produce nmeros aleatorios pues como se dijo, dependen del
numero que se meta como parmetro, y si este se repite, se repite la

sucesin de nmeros que nos crea el generador aleatorio.

La forma de obtener nmeros realmente aleatorios es introducir como


parmetro un nmero que sea variable con el tiempo. Ese nmero no
puede ser otro que el nmero timer visto antes. Y siempre con la
precaucin de que medie mas de un segundo entre dos instrucciones
Randomize. La funcin toma entonces la forma:

Randomize Timer

La funcin Randomize devuelve una variable Rnd con un nmero


comprendido entre 0 y 1 (Nunca ser 0 ni 1) Leyendo el valor de la
variable sucesivas veces, se puede obtener una sucesin de nmeros
aleatorios. No es necesario ejecutar la instruccin Randomize Timer
cada vez que se quiera obtener un dato de la variable Rnd.

Un ejemplo. Generador de nmeros para la Lotera Primitiva

Supongamos que tenemos un formulario con una etiqueta de nombre


Label1, un botn de comando de nombre Command1. Cuando hagamos
click sobre el botn de comando deber generar un nmero comprendido
entre el 1 y el 49. En el procedimiento click de Command1 pondremos el

siguiente cdigo:

Private Sub [Link]

Randomize Timer
A = Rnd
A = Rnd * 100
A = CInt(A)
Do While A > 49
A = A - 49
Loop
Do While A < 1
A = A + 49
Loop
[Link] = A
End Sub

Realice este pequeo programa, con la instruccin Randomize Timer y

sin ella.

Funciones con fechas.

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

Date

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

del ordenador.

Time

Devuelve la hora actual.

Now

Devuelve la fecha y hora actual.

WeekDay Devuelve el da de la semana (En nmero, 1=Domingo,


2=Lunes,...)

Day

Month

Obtiene el da, a partir de una fecha

Obtiene el mes a partir de una fecha.

Year

Obtiene el ao a partir de una fecha.

Hour

Obtiene la hora a partir de una hora

Minute

Obtiene el minuto a partir de una hora.

Second

Obtiene el segundo a partir de una hora.

DateAdd

Aade un intervalo de tiempo a una fecha

DateDiff

Obtiene el intervalo de tiempo entre dos fechas

DatePart

Devuelve una parte de una fecha (semana, trimestre,

etc.)

DateSerial Compone una fecha a partir de parmetros relativos

TimeSerial Compone una hora a partir de parmetros relativos.

DateValue Devuelve una fecha a partir de un dato que se le


parezca y VB pueda
obtener de l una fecha vlida

Mediante estas instrucciones podemos obtener el dato necesario de una


fecha u hora. Por ejemplo, para obtener el da de hoy solamente:

Da = Day (Now) Da ser un nmero

El da de la semana lo obtendramos

Diasemana = WeekDay (Now)

Diasemana ser un

nmero

DateValue, una instruccin que le sacar mucho provecho

Fecha = DateValue (120796)


Fecha = DateValue (12 07 96)

Fecha =12/07/96

Funcin FORMAT

Esta funcin permite presentar cadenas de numricas o fechas de una


determinada forma. Permite establecer el Formato de esa cadena.

Si recurre a la ayuda de VB acerca de esta funcin se va a enterar muy


poco de lo que puede dar de s. La sintaxis que presenta es :

Format(expresin[, formato[, primerdadesemana[,


primerasemanadelao]]])

Lo mejor que puede hacer con esta definicin de la sintaxis de Format es


olvidarla. No le aclara mucho lo que se puede hacer con Format. La
funcin Format se usa para poner una fecha en un determinado formato.
Con la expresin :

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

la variable FechadeHoy tendr el valor 1998-05-21, que se refiere al da


21 de mayo de 1998, segn el formato recomendado por la norma ISO8601 para la presentacin de fechas. Si hubisemos puesto la expresin
FechadeHoy = Format (Now, dd/mm/yy) , la variable FechadeHoy
contendra el valor 21/05/98 referido al da citado.

Las posibilidades de Format llegan tambin al campo de las cadenas


numricas. Por ejemplo la cifra 123456 se transformar en las siguientes
expresiones, segn como empleemos la funcin Format

Variable = Format(123456, "Currency")

Variable = 123.456

Variable = Format(123456, "Standard")

Variable =

Pts

123.456,00

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

Variable = Format (expresin[, formato[, firstdayofweek[,


firstweekofyear]]])

Donde

expresin es una cadena o fecha vlida


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

firstdayofweek. Especifica el primer da de la semana. Puede tomar uno


de estos valores o constantes :

Constante Valor

Descripcin

vbUseSystem

El especificado en el sistema operativo.

VbSunday 1

Domingo (valor por defecto)

vbMonday 2

Lunes

vbTuesday 3

Martes

vbWednesday

Mircoles

vbThursday

Jueves

vbFriday

Viernes

vbSaturday 7

Sbado

firstweekofyear

Especifica cual es la primera semana del ao. Puede

tomar uno de los siguientes valores o constantes :

Constante

Valor Descripcin

vbUseSystem
vbFirstJan1

0
1

Usa el valor del sistema operativo

La primera semana es la que contiene al da 1 de

Enero(Valor
por defecto
vbFirstFourDays 2

La primera semana es la que contiene al menos,

4 das de ese
ao (Rec. ISO - 8601)
vbFirstFullWeek 3

La primera semana es la que tiene todos sus das

en ese ao

No se complique la vida con el tema del primer da de la semana ni la


primera semana del ao. No lo usar con frecuencia. Centrmonos mas
en el parmetro Formato. Puede tomar muchos valores. Veamos los
principales. Primero para nmeros

Observe que usamos la expresin Variable =Format


(1234567,Formato) para todos los ejemplos de nmeros.

Para poner los nmeros separados por millares :

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

Variable =

1.234.567

(Cada carcter # indica que ah va un nmero. El separador debe ser


una coma, no un punto, aunque esto depende del idioma que est
usando)

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

General Number Muestra el nmero tal como lo tecle


Currency

En formato de la moneda de su sistema operativo

Fixed

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

Standard

Con separador de millares y dos decimales

(1.234.567,00)
Percent

Multiplica el nmero por cien y lo presenta cono

porcentaje(123456700,00%)
Scientific

Usa notacin cientfica (1,23E+06)

.
Para fechas

(Observe que usamos el ejemplo Format(Now, Formato)

y Now = 21/07/98
a las 22:16:00 y pico)

General Date

21/07/98 22:16:00

Long Date martes 21 de julio de 1998


Medium Date

21-jul-98

Short Date 21/07/98


yyyy-mm-dd

1998-05-21

yy-mm-dd 98-07-21
Long Time 22:19:53
Medium Time

10:20 PM

Short Time 22:20


hh :mm :ss 22 :21 :29
hh :mm

22 :21

Format dispone de mas opciones. Sera muy largo explicarlas aqu. Para
mas informacin, en la WEB de Microsoft puede encontrar mas formatos
posibles.

MATRICES
__________

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

Alumno (n)

Donde n es el nmero por orden de lista de ese alumno.

Las matrices normalmente comienzan a numerar por el nmero 0. Este comienzo


puede no ser el mas apropiado para la variable que estamos planteando, pues
ningn alumno tiene el nmero de orden 0. Para hacer que una matriz comience a
numerar por el 1 se debe definir mediante la instruccin:
Option Base 1

que debe colocarse al comienzo del mdulo o formulario donde declaremos la


matriz.

Para declarar la matriz se hace como con todas las variables, especificando entre
parntesis el nmero de elementos que componen la matriz:

Dim Alumno (25) as String

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

Una matriz tambin se puede declarar de la siguiente forma :

Dim Alumno(1 To 25) as String

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

Pero imaginemos que queremos meter en la misma matriz el nombre, primer


apellido y segundo apellido del alumno. Necesitaremos declarar una matriz de 25
por 3. Como todos los elementos sern cadenas de caracteres, podemos
declararla de la siguiente forma:

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

De esta forma, el primer apellido del alumno que ocupa el puesto nmero 15 de la
clase, ser el elemento:

Alumno (15, 2)

Podemos definir matrices de dimensin superior a dos. Podemos llegar a un


mximo de 60 dimensiones. Una matriz de 5 dimensiones se declarara:

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

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


respectivamente.

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

ReDim Alumno (1To 25)

Mediante esta instruccin, estamos ReDimensionando una matriz ya declarada.


No se puede redimensionar una matriz inexistente.
Mediante la declaracin 1 To 25 le estamos diciendo que el primer elemento de la
matriz es el 1, independientemente de lo que hayamos puesto en OPTION BASE.
Si se redimensiona simplemente con el nmero de elementos :

ReDim (25)

le estamos diciendo que tiene 25 elementos, pero que el primero sea el 0 el 1


depende de haber puesto OPTION BASE 0 u OPTION BASE 1.

Una matriz puede redimensionarse cuantas veces se quiera a lo largo de la


aplicacin, pero esa redimensin no puede afectar al nmero de dimensiones de
la matriz. Si redimensionamos la matriz perder la informacin existente. Para
evitar perder la informacin presente en la matriz, debe utilizar la sentencia ReDim
Preserve.

Si usa la palabra clave Preserve en matrices de dimensin superior a 1, va a


encontrarse con comportamientos no esperados. Como podr ver en la Ayuda de
VB, usando ReDim Preserve slo puede cambiar el tamao de la ltima
dimensin de matriz y no puede modificar en ningn momento el nmero de
dimensiones. NO es cierto del todo. S lo podr hacer una sola vez.

Respecto a cambiar el nmero de dimensiones, si ha declarado la matriz con unas

dimensiones determinadas, ya no podr cambiar las dimensiones ni con ReDim ni


con ReDim Preserve. Le saldr un error que dice que las dimensiones de la
matriz ya han sido declaradas.
Pero si ha declarado la matriz sin dimensiones :

Dim MiMatriz()

puede cambiar las dimensiones

Dim MiMatriz (1 To 5, 1 To 9)

y volver a cambiarlas

Dim MiMatriz (1 To 8, 1 To 15, 1 To 6)

Observe que no solamente la hemos cambiado dos veces de dimensiones (la


primera a 2 y la segunda a 3), sino que tambin hemos cambiado el nmero de
elementos en cada dimensin.

Si hubisemos utilizado ReDim Preserve solamente podramos haber usado la


primera de las dos lneas anteriores :

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

pero ya no podramos volver a cambiar el nmero de dimensiones con la segunda


lnea. Nos dara un error.

Con ReDim podemos cambiar el nmero de elementos de cada dimensin


cuantas veces queramos. Por ejemplo, podemos redimensionar MiMatriz de las
siguiente forma :

ReDim MiMatriz (1 To 5, 1 To 9)

ReDim MiMatriz (1 To 15, 1 To 20)


ReDim MiMatriz (1 To 25, 1 To 30)
...........................

Si hubisemos empleado ReDim Preserve, podramos cambiar los elementos de


todas las dimensiones de la matriz una vez :

ReDim Preserve (1 To 5, 1 To 9)

a partir de ahora, solamente podemos cambiar los elementos de la ltima


dimensin :

ReDim Preserve (1 To 5, 1 To 20)


ReDim Preserve (1 To 5, 1 To 30)

es decir, no podremos hacer esto :

ReDim Preserve (1 To 10, 1 To 30)

donde se seala en negrita el error.

Esto no causa ningn error en una matriz de una dimensin, ya que si la matriz
tiene slo una dimensin, puede cambiar el tamao de esa dimensin porque es la
nica y la ltima.

Cuando a lo largo de la aplicacin se va redimensionando una matriz, podemos


llegar la circunstancia de que, en un momento determinado, no sepamos las
dimensiones de esa matriz.

Para conocer el ndice mximo y mnimo de una matriz se usan las funciones
UBound y LBound.

UBound devuelve el mayor subndice disponible para la dimensin indicada de


una matriz.

Sintaxis

UBound(nombredelamatriz[, dimensin])

LBound devuelve el mayor subndice disponible para la dimensin indicada de


una matriz.

Sintaxis

LBound(nombredelamatriz[, dimensin])

Ejemplo Tengamos una matriz llamada Mimatriz, de tres dimensiones. En un


momento de la aplicacin se ejecut la siguiente instruccin vlida :

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

En otro momento queremos tener el control de los ndices de esa matriz, y


queremos averiguar el ndice menor y mayor de cada una de sus dimensiones :
(IID1= Indice Inferior Dimensin 1, ISD 1 = Indice Superior Dimensin 1, etc. )

IID 1= LBound (Mimatriz, 1)

IID1 = 1

ISD1 = UBound (Mimatriz, 1)

ISD1 = 100

IID 2= LBound (Mimatriz, 2)

IID1 = 0

ISD2 = UBound (Mimatriz, 2)

ISD1 = 3

IID 1= LBound (Mimatriz, 3)

IID1 = 5

ISD1 = UBound (Mimatriz, 3)

ISD1 = 20

VISUAL BASIC, SUENTORNO

Tras esta pequea introducin al lenguaje Basic ya estamos en disposicin de


encender el ordenador y comenzar a trabajar con Visual-Basic. Se supone que su
PC tiene instalado el programa Visual basic, bien en su versin de 16 bits si
dispone de Windows [Link] o la de 32 bits si dispone ce Win95 Windows NT.

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


Vers. 4)

Este es el comienzo del programa . Observe que en esta pantalla existen varias

cosas. En la parte superior , la barra de ttulo del programa Visual Basic, con el
texto :

Proyect1 - Microsoft Visual Basic (Diseo)

Por debajo de esta barra de Ttulo del VB, encontramos la barra de men de VB,
con las leyendas :

Archivo Edicin Ver Insertar Ejecutar Herramientas Complementos Ayuda

Por debajo de esta barra de men tenemos la barra de herramientas, donde


podr ver varios iconos, que cada uno representa un determinada operacin que
Vd. puede realizar. Estas operaciones est todas en la lnea de men, y puede
acceder a ellas abriendo los mens desplegables que existen en cada una de las
palabrea Archivo Edicin Ver ...... de esta lnea de men. El hecho de colocar
las operaciones mas usuales en un icono en la barra de herramientas se hace
para mayor comodidad del usuario.

A la izquierda de la pantalla tiene una caja rectangular con tres columnas de


iconos. Esa caja es la Caja de Herramientas (No la confunda con la barra de
herramientas de la parte superior)

Esta caja de herramientas es, salvando las distancias, lo mismo que una caja de
herramientas real que pueda tener un mecnico para realizar su trabajo. En ella
estn los iconos que representan a los controles con los que Vd. va a desarrollar
su aplicacin VB. No estn todos los que pueden estar, al igual que en una caja de
herramientas de un mecnico no estn todas las herramientas que puede usar.
Estn solamente las mas usuales. Si necesita alguna mas, puede cogerla de otra
parte (barra de Men, Herramientas, Controles personalizados) y agregarlos a esa
caja de herramientas, al igual que lo hara un mecnico con una herramienta
especial, que la metera en su caja slo cuando va a realizar un trabajo
determinado para el que la necesite.

Posiblemente esta caja de herramientas no le aparezca tal y como la ve en estos


apuntes. Eso depende si Ud. tiene la versin personal o la profesional, o si usa la
versin de 16 32 bits. Esa caja de herramientas puede personalizarla a su gusto.
Para ello, deber cargar un proyecto ya existente en los discos de distribucin de
Visual Basic, llamado [Link] (versin 32 bits) [Link]
(Versin 16 bits) que se encontrar en el directorio donde haya cargado el
programa Visual Basic. Este proyecto no tiene otra funcin que determinar las
herramientas con las que quiere abrir el VB. Para introducir herramientas nuevas
en la caja de herramientas, basta con desplegar el men Herramientas de la
barra de men, e ir a Controles personalizados. Haciendo click en esta lnea de
controles personalizados, podemos seleccionar nuevos controles para aadir a la
caja de herramientas, marcando la casilla que est a la izquierda del nombre del
control que quiere introducir. Una vez seleccionados todos los nuevos controles,
haga click en ACEPTAR, y podr observar que esos nuevos controles ya se le han
aadido a la caja de herramientas. Para que esos nuevos controles le aparezcan
de entrada cuando inicia una sesin de VB, debe salir de Visual basic guardando
los cambios. Vuelva a entrar y observar que ya le aparecen esos nuevos
controles en la caja. No es prudente meter muchos controles en la caja. Ponga
solamente los que necesite normalmente en sus aplicaciones. Ocupar menos
memoria y tardar menos tiempo en cargar el programa VB. Adems, cuando
realice una aplicacin y la distribuya una vez compilada, Visual Basic entregar en
los disquetes de distribucin las DLLs u OCXs correspondientes a todos los
controles personalizados que Vd. tenga en la caja de herramientas, los necesite el
programa o no los necesite. Esto le va a suponer que est cargando
subprogramas intiles en el ordenador destino de su aplicacin. A la hora de
compilar el programa (Crear archivo .EXE) quite todos los controles
personalizados que no necesite su aplicacin. (Slo los controles personalizados.
Los controles comunes - CommandButton, Label, TextBox, etc.-, no se pueden
eliminar de la caja de herramientas)

Para quitar controles de su caja de herramientas, debe proceder de forma


anloga, cargando el programa [Link], abriendo men de herramientas,
Controles personalizados, quitando la marca al cuadro situado en la parte
izquierda del control a eliminar, y guardando el proyecto al salir.

En el centro, y ocupando casi toda la pantalla, tenemos el Formulario. Este


Formulario es la interface grfica de su aplicacin, sobre el que podr aadir los
controles que necesite. Lo veremos mas adelante con todo detalle.

Observa dos ventanas, una denominada Ventana de Propiedades, donde puede


ver las propiedades del formulario, Form1, y otra, denominada Ventana de

Proyecto. Existe otra ventana, que no est en la figura anterior, la Ventana de


Depuracin. Por cada formulario y cada control que introduzca en el proyecto, le
aparecer otra ventana, denominada ventana de cdigo.

No se extrae de que esta presentacin grfica del Visual Basic coincida con otros
sistemas de desarrollo (Delphi, p.e.). La lgica de desarrollo de una aplicacin en
Windows ha llevado a varios fabricantes de software a utilizar un entorno grfico
similar (diramos idntico). A Visual basic le queda el orgullo de ser el primero en
utilizarlo.

Con lo descrito anteriormente ya tenemos, al menos, fijado el argot con el que


expresarnos para comenzar a estudiar el VISUAL BASIC. Veamos con un poco
mas detalle la Ventana de Cdigo.

Esta figura le muestra un Formulario con su ventana de cdigo. Cada objeto


grfico de VB tiene su propia ventana de cdigo. As, si en este formulario
hubisemos introducido un Label y dos CommandButton, todos ellos tendran su

propia ventana de cdigo. La ventana de cdigo la podemos ver haciendo doble


click sobre cualquier objeto de nuestro proyecto. En este caso hemos hecho doble
click sobre el nico objeto que tenamos : el formulario.

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

Haciendo click sobre la flecha de cada lista, se despliega un men, en la lista de


objetos se desplegar una lista con los nombres de cada objeto existente en ese
momento dentro del formulario. Haciendo click sobre uno de los nombres, nos
presentar la ventana de cdigo de ese objeto. Todos los objetos grficos
(controles) existentes dentro de un formulario y el propio formulario aparecern en
la misma lista de objetos.

Haciendo click sobre la flecha de la lista de procedimientos, se despliega la lista


con todos los procedimientos posibles para ese objeto. Siempre saldr uno. Si
tenemos escrito cdigo en uno de los procedimientos, saldr por defecto ese
procedimiento para el cual hemos escrito el cdigo. Si no hay cdigo en ninguno
de los procedimientos, saldr el que tenga por defecto cada objeto.

Procedimiento
Solamente nos queda por decir, para cerrar este captulo, que es un
procedimiento.

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

Esa respuesta, esa forma de Proceder del objeto al evento que le est

sucediendo, debemos programarla segn nuestras necesidades, es decir,


debemos escribir el cdigo que necesite nuestra aplicacin como respuesta al
evento que acaba de ocurrir. Posiblemente, no queramos ninguna respuesta a
muchos de los eventos que pueden acaecer a un objeto. Cada objeto tiene
muchos eventos y solamente queremos aprovechar los que nos interesan. Para
que un evento no produzca ningn efecto, basta con dejar sin cdigo el
procedimiento correspondiente a ese evento. En los eventos que queramos que
realice alguna operacin, le escribiremos en su procedimiento el cdigo necesario
para que esa operacin se realice. Sin darnos cuenta, hemos comenzado a
escribir el cdigo de la aplicacin.

Observar que el primer elemento del men desplegable de la lista de objetos se


denomina General. Este no es en realidad ningn objeto, sino un apartado
existente en cada formulario, que, al desplegar su lista de procedimientos tiene la
seccin de declaraciones, donde debemos declarar las variables que queremos
que afecten a todo el formulario y sus controles, y tendr adems, los nombres de
todos los procedimientos que introduzcamos (vase un poco mas adelante).
En este men desplegable de la lista de procedimientos del General ver con
frecuencia cosas que Vd. no puso all. Cosas tales como Command1_click, y en
la ventana un determinado cdigo. Esto ocurre cuando se borra algn control que
tena escrito cdigo en alguno de sus procedimientos. Visual Basic sabe lo mucho
que cuesta escribir el cdigo asociado a un control. Si borramos un control de
nuestro formulario accidentalmente, despus de haber introducido todo el cdigo
asociado a l, Visual Basic nos sorprende con que ese cdigo no lo tira
inmediatamente, sino que lo reserva como un procedimiento en ese apartado
General del formulario. Si en realidad queramos borrar el control y todo su
cdigo, debemos quitarlo de ese apartado General de nuestro formulario, pues en
realidad, si no lo queremos, no har otra cosa que estorbar. Para quitarlo basta
con borrar todo el cdigo que aparece en la ventana de cdigo cuando hacemos
click sobre el nombre del control eliminado. Deberemos borrar todo el cdigo,
incluida la cabecera donde figura el nombre del control eliminado, y la parte final,
que siempre termina con EndSub.

El primer estorbo lo observar si crea otro control con el mismo nombre, cosa fcil
ya que VB da un nombre por defecto a cada control (Command1, Command2....).
El cdigo asociado al control eliminado pasar automticamente al nuevo control
con el mismo nombre.

Una aplicacin puede tener todo su cdigo escrito en los sucesivos


procedimientos del formulario y de los controles que tenga ese formulario.

Puede ocurrir que un determinado evento no est entre los posibles eventos de los
controles de nuestra aplicacin. Piense por ejemplo, el evento de que la variable A
sea igual a la variable B. No existe en ninguno de los controles ese procedimiento.
No se preocupe, puede crear un procedimiento que se ejecute cuando su
programa lo decida. Podemos aadir cuantos procedimientos queramos. Estos
procedimientos se aaden al formulario, y debern definirse por un nombre que
Vd. debe elegir. Para que se ejecuten las instrucciones (cdigo) incluido en ese
procedimiento, basta simplemente con nombrarlo por ese nombre.
Para insertar un procedimiento debe ir a la barra de men, hacer click sobre
Insertar, y en el men que le desplegar, volver a hacer click sobre Procedimiento.
VB le presentar un cuadro donde le pedir el nombre, si quiere que sea un
procedimiento, una funcin o una propiedad. A lo largo del curso ir viendo que es
cada cosa.

Escribiendo el cdigo en los sucesivos procedimientos, bien en los propios de


cada objeto, bien en los procedimientos que vayamos creando, es posible
completar la aplicacin. Pero en una aplicacin larga esta forma de escribir el
cdigo no sera la mas adecuada. Es mas, posiblemente sera demasiado
engorroso escribirla de esta forma, y muy probablemente deberamos escribir el
mismo cdigo para varios procedimientos, lo que alargara intilmente el programa
y el tiempo de desarrollo.

Para disponer de un sitio donde escribir parte (o la mayor parte) de su programa,


puede introducir uno o varios mdulos. Expliquemos lo que es un mdulo.

Un Mdulo es una parte del programa donde solamente puede escribir cdigo. Es
igual que un formulario, sin interface grfica. Un profesor de Visual Basic lo
expresaba diciendo que un Mdulo es un Formulario sin cara. En un mdulo
pueden existir procedimientos al igual que en los formularios, pero como un
mdulo no tiene interface grfica, esos procedimientos debe introducirlos el
programador tal y como explicamos un poco mas atrs. El mdulo tiene su propia
ventana de cdigo, al igual que un formulario, con un objeto nico, el apartado
General. Aqu tambin tenemos la seccin de declaraciones, al igual que los
formularios. En esta seccin de declaraciones se comporta de manera similar a la
de los formularios, pero permite algo que no nos permite la seccin de
declaraciones de un formulario : Declarar variables que se pueden utilizar en todo
el programa. Esto ya lo ha visto mas atrs, con las sentencia de declaracin
Global y Public.

Los mdulos se emplean para la declaracin de variables globales, y para escribir


el cdigo de la aplicacin que sea comn a varios formularios. Esto nos evita tener
que repetir cdigo intilmente. Ese cdigo comn se escribir en un procedimiento
que previamente habremos insertado en este mdulo, y lo citaremos por su
nombre desde cualquier parte del programa.

Cual es el nombre de un procedimiento existente dentro de un mdulo ?


Depende. Si estamos ejecutando cdigo escrito en otro procedimiento dentro del
mismo mdulo, es decir, si estamos dentro de ese mismo mdulo, basta con
citarlo por su nombre : p.e., si en el MduloA tenemos un procedimiento llamado
Procedimiento1, y queremos llamarle desde una lnea de cdigo dentro de ese
mismo mdulo, basta con referirse a l con :

Procedimiento1

Si la lnea de cdigo donde nos vamos a referir a l est fuera de MduloA,


deberemos referirnos a ese procedimiento con :

MduloA.Procedimiento1

Lo mismo podemos decir para cualquier procedimiento insertado en un formulario.


Desde dentro del formulario basta con referirse a l citndolo por su nombre.
Desde fuera de ese formulario deberemos citarle como :

[Link]

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

Fjese en el punto usado como separador entre el nombre del formulario y el

nombre del procedimiento. VB usa como separador un punto. Usa el separador


para separar el nombre de un control y una de sus propiedades ([Link]),
para separar el nombre del formulario del nombre de uno de sus controles
([Link]) Se ir familiarizando con la terminologa VB segn
vayamos avanzando en el curso.

Funciones

Al igual que introducimos Procedimientos, podemos introducir Funciones en


nuestra aplicacin. Una Funcin es un Procedimiento al que le pasamos uno o
varios parmetros. (O Ninguno) Ver los Procedimientos y funciones mas
adelante (Cap. 15). Al igual que los Procedimientos, pueden ser pblicas (se
vern en toda la aplicacin) o privadas (se vern solamente en el formulario
donde estn.

Main

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

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

Si hacemos click en la Barra de Men de Visual Basic, en Herramientas |


Opciones obtendremos el siguiente cuadro de dilogo :

Ver que tiene 4 pestaas, y actualmente tiene abierta la pestaa correspondiente


a Proyecto, y tiene desplegada una lista donde nos pide el Formulario Inicial. En
esa lista figura tambin la expresin Sub Main. Si ponemos como formulario
inicial uno de los formularios, la aplicacin comenzar por ese formulario. Si en
uno de los Mdulos existentes en el proyecto, ponemos un procedimiento llamado
Main, podemos comenzar la ejecucin de la aplicacin justamente por ese
procedimiento. En ese procedimiento pondremos el cdigo necesario para que,
posteriormente, se muestre uno de los formularios. Esto es muy practico cuando
queremos hacer una funcin previa a mostrar cualquier formulario (abrir una base
de datos, por ejemplo). Para comenzar la aplicacin por Main se elige esa opcin
en la lista Formulario Inicial.
Recuerde que Main debe estar en un Mdulo !

El cuadro de dilogo anterior sirve adems para otras cosas. Entre ellas poner el
nombre del proyecto (nombre que no aparecer por ninguna parte, solo en los
datos internos de la aplicacin) y su descripcin.

En otra pestaa podemos configurar varias prestaciones del entorno de trabajo :

Guardar la aplicacin antes de ejecutar. Esta prestacin nos va a evitar muchos


disgustos. Es muy prctico guardar la aplicacin antes de ejecutarla, pues de esta
forma evitamos que, si nuestra aplicacin tiene un error tal que hagamos colgarse
a Windows, siempre tendremos la aplicacin metida en el disco duro. Pero
tambin es una pequea pesadez tener que esperar a que se guarde cada vez
que la ejecutamos.

Si tenemos la activada la casilla Declaracin de variables requerida nos pondr


automticamente Option Explicit en el encabezamiento de todas las secciones
de declaraciones de la aplicacin.

Podemos elegir tambin las ventanas que queremos que estn siempre visibles, y
que verifique automticamente la sintaxis de una instruccin en el momento de
escribirla.

La pestaa de Editor nos permite fundamentalmente 2 cosas :

Ver solamente el cdigo correspondiente al procedimiento que estamos


escribiendo Ver el cdigo del Mdulo (o Formulario) completo. En este ltimo
caso es un poco mas difcil de manejar la ventana de cdigo, sobre todo si el
programador no est muy habituado a ello. Le presenta procedimiento tras
procedimiento, separados por una lnea. Para seleccionar una u otra opcin hay
que seleccionar o deseleccionar la casilla Ver mdulo completo.

Cambiar el color de la letra y del fondo del cdigo, segn el tipo que sea (cdigo,
comentario, error devuelto, etc.). Los alumnos mas aventajados y con ganas de
marear al profesor y, lo que es peor, a sus compaeros, conocen la forma de
poner como invisible una parte del texto del cdigo. Si observa comportamientos
raros en el texto donde escribe el cdigo, revise el cuadro de Colores de Cdigo.

FORMULARIO
____________

El primer objeto Visual Basic con que nos encontramos es el FORMULARIO. De


hecho, cada vez que iniciamos Visual Basic (VB) nos presenta en pantalla un
nuevo formulario, que tiene por defecto el nombre de Form1

El Formulario es un objeto, que sirve de soporte de otros objetos. El nombre de


FORMULARIO lo toma precisamente porque, al igual que un formulario de papel
contiene textos escritos, lugares donde podemos escribir, figuras, cajas donde
podemos elegir una u otra opcin, etc., en este cuadro grfico que llamamos
formulario, podemos introducir textos escritos, lugares donde podemos escribir,
figuras, cajas donde podemos elegir una u otra opcin ....

En realidad un formulario es lo que normalmente conocemos por VENTANA. El


nombre de formulario le viene muy bien cuando ese formulario es una ventana
donde vamos a introducir datos alfanumricos. Cuando en vez de introducir datos,
lo que tenemos es, por ejemplo, una ventana donde se reproducen exactamente
los controles de operacin de una mquina, parece en principio que sera mas
correcto el nombre de "ventana". De alguna forma lo hay que llamar, y esa forma
es FORMULARIO. Posiblemente a lo largo de estos apuntes nos referiremos al
formulario con el nombre de ventana, o incluso, pantalla. Procuraremos usar el
nombre apropiado: FORMULARIO.

Forma inicial del formulario.

Ejemplo de un formulario para una aplicacin industrial. Este formulario reproduce


el panel de control de un transmisor - receptor de radio. En este caso, parece que
el nombre de ventana le viene mejor que el de formulario. Observe que dentro del
formulario existen gran cantidad de objetos. Botones, que hacen la misma funcin
que el botn real en el equipo de radio, y un par de displays, que muestran un
texto, en este caso las frecuencias de transmisin y recepcin.

Como cualquier objeto Visual Basic, un formulario tiene propiedades y


procedimientos:

PROPIEDADES.

Name

Nombre

Define al objeto durante la ejecucin del programa. Se introduce en tiempo


de diseo y no se puede variar durante la ejecucin. Nombre por defecto:
Form1 (Form2 y sucesivos) Este nombre por defecto debe cambiarse,
(debera cambiarse por norma en el momento de introducir el formulario),
ya que de no hacerlo corremos el riesgo de borrar el cdigo existente de
otro formulario del mismo nombre en el momento de guardar la aplicacin.

Caption

Ttulo

Es el texto que aparecer en la barra de Ttulo cada vez que aparezca en


pantalla este formulario. No tiene otra funcin dentro del programa. El
programa no accede a este formulario por el ttulo, sino por el nombre.
Puede cambiarse en tiempo de ejecucin.

NOTA.- No confundir Nombre (Name) con Ttulo (Caption)

Control Box Control menos del Formulario

Valor por defecto : True

Propiedad booleana que admite los valores de true (verdadero) o False


(Falso). Si esta propiedad es True, aparecer en la esquina superior
izquierda el "menos" para desplegar el men de control de este formulario.
Si esta propiedad se pone como False, no existir dicho "menos" y por
tanto no se puede desplegar dicho men.

MinButton
MaxButton

Valor por defecto: True

Botones (flechas) de minimizar y maximizar este formulario. Son igualmente


propiedades booleanas, que admiten el valor True o False. Si estn en true,
aparecer la flecha correspondiente. Si estn en False, no aparecer dicha
flecha. Deben configurarse de una u otra forma, dependiendo si se quiere
minimizar / maximizar este formulario durante la ejecucin.

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

BorderStyle Tipo de borde

Define el tipo de borde que tendr el formulario durante la ejecucin. No se


puede cambiar en tiempo de ejecucin,
Admite los siguientes valores:

0 - None

El formulario no tiene borde alrededor

1 - Fixed Single
El formulario tendr un borde fino, y no podr cambiarse su
tamao durante el tiempo de ejecucin. Con este valor, el
formulario puede tener un men de control, barra de ttulo y
botones de maximizar y minimizar. Solo podr cambiarse de
tamao utilizando estos botones.
2-Sizable
El formulario tendr borde grueso, y se podr cambiar su
tamao en tiempo de ejecucin mediante los botones de
maximizar y minimizar, y mediante el arrastre de uno de los
bordes con el ratn.

3 - Fixed Dialog
El formulario tendr borde grueso, y no se podr
redimensionar durante la ejecucin. No puede tener los
botones de maximizar ni minimizar.

4 - Fixed ToolWindow
En las versiones de 16 bits de Windows y Windows NT 3.51 y
anteriores se comporta como Fixed Single. No puede cambiar
de tamao. En Windows 95 muestra el botn Cerrar, y el texto
de la barra de titulo aparece con un tamao de fuente
reducido. El formulario no aparece en la barra de tareas de
W95.

5 - Sizable ToolWindow
En las versiones de 16 bits se comporta como Sizable. En
W95 muestra el botn Cerrar y el texto de la barra de titulo
aparece con un tamao de fuente reducido. El formulario no
aparece en la barra de tareas de W95.

Valor por defecto: 2 . Sizable

Nota: Al cambiar a determinados valores, las propiedades


MaxButton y MinButton se ponen a False. Pueden cambiarse
a True posteriormente.

Appearance Apariencia

Valor por defecto: 3D

Admite los valores 0 (=Flat, plano) y 1 (=3D) Si tiene el valor 1 (3D), el


formulario aparecer con cierto efecto tridimensional, y los controles que le
introduzcamos a este formulario aparecern como esculpidos dentro de l.
Con valor 0 (Flat) en esta propiedad, el formulario aparecer durante la

ejecucin como una superficie plana. El color de fondo se ve afectado al


cambiar esta propiedad. Si se cambia a 3D, el fondo (Backcolor) toma el
color definido en Windows en el Panel de Control. Si se cambia a Flat, toma
el color blanco

Autoredraw

Valor por defecto: False

Propiedad booleana. Esta propiedad, estando en True, permite actualizar el


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

Backcolor

Color del fondo

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


ejecucin.

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

ClipControls

Valor por defecto: False

Propiedad Booleana. Establece si un evento Paint vuelve a dibujar el objeto entero


(True) o si solamente dibujan las partes que han sufrido cambios (False)

DrawMode

Establece un valor que determina el aspecto de la salida de un mtodo grfico o el


aspecto de un control Shape o Line. Ver mas adelante los efectos de esta
propiedad.

DrawStile

Valor por defecto : 0

Establece el estilo de lnea de la salida de mtodos grficos:

Valores:

0 - Lnea continua
1 - Rayas
2 - Puntos
3 - Raya-Punto
4 - Raya - Punto - Punto
5 - Transparente
6 - Continuo interior.

DrawWidth

Valor por defecto: 1

Establece el ancho de una lnea dibujada. El valor debe expresarse en


pixeles.

Enabled

Activado

Valor por defecto: True

Propiedad booleana. Si est en True, el formulario est activado y se puede


interactuar con l. Si est en False, se desactiva el formulario, impidiendo de esta
forma, que se pueda trabajar con l.

ForeColor

Valor por defecto: Negro

Establece el color del primer plano del formulario. Es el color que tendrn las letras
si escribimos en l, o los dibujos, si lo que hacemos es dibujar. En tiempo de
diseo, determina el color de la rejilla,.

FillStyle

Tipo de relleno

Valor por defecto: 2

Establece el modo de rellenar controles Shape, o figuras (crculos o cuadrados)


creados con los mtodos grficos Circle y Line.

Valores:

0 - Continuo
1 - Transparente
2 - Lnea Horizontal
3 - Lnea Vertical
4 - Diagonal hacia arriba
5 - Diagonal hacia abajo
6 - Cruzado
7 - Diagonal cruzada

FillColor

Color de relleno

Especifica el color del relleno contemplado en FillStyle.

Font
Tipo de letra Valor por defecto: El determinado en la
personalizacin.

Especifica el tipo y tamao de la letra que se usar en el formulario. Al


seleccionar esta propiedad en la ventana de propiedades, aparece un
cuadro de dialogo donde se eligen ambos parmetros.
Cuando introduzca nuevos controles en el Formulario, la propiedad Font de
estos controles tomar el valor que tenga esta propiedad en el Formulario.
Puede servirle este pequeo truco para utilizar en todos los controles una
determinada fuente sin tener que teclearla para cada control.

FontTranparent

Texto Transparente Valor por defecto: True

Establece si el texto o grfico de fondo del formulario se muestra (True) o


no se muestra entre los caracteres de texto escritos en el propio formulario.

FontSize

Tamao de letra

Establece el tamao de la letra. Esta propiedad, que puede variarse en


tiempo de ejecucin, vara solamente el tamao, y no el tipo de letra. El
tamao debe expresarse en puntos. Mximo, 2160 puntos.

FontBold, FontItalic, FontStrikethru, FontUnderline

Permiten, en tiempo de ejecucin, cambiar un texto a negrita, cursiva,


tachado y subrayado. Son propiedades booleanas True / False

Height

Altura

Valor por defecto: No existe

Define la altura del formulario. El valor de esta propiedad no se introduce


normalmente como un dato numrico, sino que toma el valor
automticamente, dependiendo de las dimensiones del formulario durante
el tiempo de diseo. Puede cambiarse durante el tiempo de ejecucin.

HelpContextID

Valor por defecto: 0

Establece un nmero de contexto asociado para este formulario. Este


nmero se aplica para determinar la ayuda interactiva asociada a este
formulario. Vea mas adelante, el tema Ayuda de Windows.

Puede tomar los siguientes valores :


contexto

0 - No se especifica nmero de

>0 Un entero que especifique un contexto


vlido.
Icon

Icono

Esta propiedad define el icono que va a representar a este formulario


cuando est minimizado. Si el formulario es el formulario padre o formulario
de inicio de una aplicacin, este icono es el que toma el Asistente de
Instalacin para colocarlo como icono de apertura del programa en el grupo
de programas Windows correspondiente. Como valor de esta propiedad se
le puede asignar directamente el icono o el nombre de un archivo (con su
path correspondiente) que lo contiene, hacindolo directamente sobre la
caja de propiedades.

Valor por defecto: el icono que se le haya programado en la


personalizacin.

KeyPreview

Valor por defecto: False

Propiedad Booleana. Cuando un formulario tiene dentro de s varios controles, uno


de ellos es el que est activo. En estas condiciones, si se pulsa una tecla, esa
pulsacin la recibe en primer lugar el control que est activo, y si ste no la
procesa, pasa esa pulsacin al formulario. Para hacer que esa pulsacin pase
directamente al formulario, debe ponerse esta propiedad en True.

Left

Borde Izquierdo

Valor por defecto: No existe

Indica la posicin del borde izquierdo del formulario. Normalmente no se


introduce como valor numrico, sino que lo toma automticamente de la
posicin que tenga el formulario en el tiempo de diseo. Puede cambiarse
en tiempo de ejecucin, para mover el formulario.

LinkMode

Valor por defecto: 0

Permite que una aplicacin destino inicie una conversacin DDE con el
formulario (origen de datos). Puede tomar los siguiente valores:

0 - No hay interaccin DDE


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

LinkTopic

Establece el tema al que este formulario va a responder a una conversacin


DDE, cuando funciona como origen. Es por este tema por el que se debe
llamar a este formulario cuando acta de origen en una conversacin DDE

MDIChild

Valor por defecto: False

Establece que este formulario es un formulario Hijo dentro de un formulario


MDI. No se puede cambiar en tiempo de ejecucin. Es una propiedad
booleana
True = es formulario hijo

MouseIcon

False =No lo es

Valor por defecto: ninguno

Establece un icono personalizado para el puntero del ratn cuando est


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

MousePointer

Valor por defecto: flecha

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

Picture

Grfico

Valor por defecto: No existe

Mediante esta propiedad podemos poner un grfico como fondo del


formulario. El grfico puede ser un bit-map o un fichero .ICO

ScaleHeight, ScaleWidth, ScaleMode,

Indican la unidad de medida de dimensin de altura y anchura del


Formulario. ScaleMode indica en qu unidades de medida se van a medir
esas dimensiones. Acepta Twips (1), Point(2), Pixel (3), Character (4),
Pulgadas (Inch) (5), Milmetros (6), Centmetros (7). Si colocamos la
propiedad ScaleMode en cualquiera de estos valores, las propiedades
ScaleHeight y ScaleWidth nos vendrn dadas automticamente
dependiendo del ancho del Formulario, y no se extrae si encuentra para
estas propiedades valores tan peregrinos como 4815 y 7423. Al haber
elegido la unidad de medida, los valores de ancho (ScaleWidth) y alto
(ScaleHeight) sern los que tengan que ser, medidos en la unidad que
hemos elegido. Podemos elegir una cifra para el ancho y el alto del
Formulario de forma que podamos controlar mejor las distintas posiciones
que van a ocupar en l los controles, los textos o los dibujos. Podemos
poner, por ejemplo, que el Formulario mida 400 de ancho (ScaleWidth =
400) y 300 de alto (ScaleHeight = 300) forzndole estas propiedades, bien
en tiempo de diseo en la caja de propiedades, o en tiempo de ejecucin
mediante cdigo. Entonces sabemos que el formulario, independientemente
de las dimensiones fsicas que tenga sobre la pantalla, medir 400 de
ancho y 300 de alto, y si en estas condiciones queremos colocar un control
o un dibujo justo en el medio del Formulario, sabemos que tenemos que
colocarle en las coordenadas 200, 150. Que unidad de medida estaremos
utilizando entonces en el Formulario ?
Unas definidas por el usuario
(distintas para el ancho y el alto) que sern las necesarias para que el
Formulario mida de ancho lo que le hayamos puesto en la propiedad
ScaleWidth y de alto lo que le hayamos puesto en la propiedad
ScaleHeight. Observe que la propiedad ScaleMode se ha cambiado
automticamente a User (0) al introducir las dimensiones de ancho y alto
que nosotros queremos.

Estas unidades de medida afectarn a los controles que metamos en este


Formulario. Se medirn en su ancho y alto con la unidad de medida definida
para el ancho y alto del Formulario. Lgicamente tambin afectar a las
propiedades Left y Top de los controles, pero estas propiedades se vern
afectadas adems por las propiedades ScaleLeft y ScaleTop del
Formulario que se vern a continuacin.

ScaleLeft, ScaleTop

Estas propiedades, medidas en la unidad de medida elegida para el ancho


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

Recuerde que las medidas de un formulario crecen, desde la esquina


superior izquierda, segn avanzamos hacia abajo y hacia la derecha.

Como aclaracin de las relaciones entre distintas unidades de medida,


puede ver en la siguiente table la correspondencia entre cada una de ellas
y la unidad imaginaria Twip.

1 Point=20 Twips ; 1Pixel=15 Twips : 1 Charecter=240 Twips ; 1 Inch (pulgada)


=1440 Twips 1mm=56,52 Twips 1 cm=566 Twips

Tag

Valor por defecto: No existe

Esta propiedad no la usa directamente Visual-Basic. Sirve para asociar al


formulario informacin adicional para fines externos a la programacin.
Pero tambin le puede servir para almacenar en ella una variable para que
la use un cdigo ajeno al formulario. El autor de estos apuntes tiene por
costumbre utilizar la propiedad Tag del formulario inicial para guardar el
parmetro que se le pasa a algunos programas para acceder a ellos con
unos determinados privilegios. Resumiendo, est ah para lo que el
programador quiere.

Top

Posicin del borde superior

Valor por defecto: No existe

Esta propiedad establece la posicin del borde superior del formulario.


Normalmente no se introduce como valor numrico sino que lo toma
automticamente de la posicin que tenga el Formulario durante el tiempo
de diseo Este valor puede cambiarse durante la ejecucin para,
conjuntamente con Left, variar la posicin del Formulario. Los valores de
Top y Left definen la esquina superior izquierda del Formulario.

Visible

Valor por defecto: True

Propiedad Booleana. Asignndole el valor True la pantalla es visible, y


asignndole el valor False, no se ve. Este valor puede cambiarse durante
el tiempo de ejecucin para ocultar y hacer visible el formulario.

Width

Ancho

Valor por defecto: No existe

Define la anchura del formulario. Normalmente no se introduce como valor


numrico sino que lo toma automticamente del tamao que tenga el
formulario durante el tiempo de diseo. Juntamente con Height define el
tamao del formulario. Puede cambiarse durante el tiempo de ejecucin.

WindowState

Establece el estado en el que aparecer el formulario cuando se activa y


presenta en pantalla. Admite tres opciones:
0 - Normal El formulario recupera la posicin y tamao que tena en
el tiempo de diseo.
1 - Minimizado El formulario aparece minimizado, representado por
su icono.
2 - Maximizado
la pantalla.

El formulario aparece maximizado, ocupando toda

PROCEDIMIENTOS

Activate

Activacin

Click

DblClick

Doble click

Deactivate Desactivacin

DragDrop

Arrastrar y soltar

DragOver

GotFocus
tecla

Obtener el foco

KeyPress

Pulsar una tecla

Romper el enlace

Arrastrar por encima

KeyDown
KeyUp

LinkError Error de enlace


enlace de datos
LinkOpen

Click

Mantener pulsada una


Soltar una tecla

LinkExecuteEjecucin de un
Load

LostFocus Perder el foco


ratn

Cargar el formulario
MouseDownPulsar una tecla del

MouseMove Mover el ratn (Detecta la posicin del ratn sobre el formulario)


MouseUp

Soltar una tecla del ratn Paint

Pintar

QueryUnload
tamao

Confirmacin de descarga Resize

Unload

Descargar el formulario

Cambio de

Un Formulario sirve, fundamentalmente, de contenedor de controles. Es la


ventana de Windows de nuestra aplicacin. Una aplicacin puede tener varios
Formularios y dentro de cada uno de ellos, los controles necesarios para cada
paso o estado de la aplicacin.

Un Formulario puede servir tambin como soporte de textos o dibujos.

CONTROLES

Una vez introducido un Formulario, se pueden colocar los objetos (controles) que
forman parte de la aplicacin. Estos controles se irn viendo en prximos
captulos.

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


Procedimientos.

Las Propiedades definen las caractersticas del Control. Los Procedimientos


definen la forma de actuar (la forma de proceder) de un control frente a un evento.

Tanto las propiedades como los procedimientos deben ser definidos por el
programador. Las propiedades dejan un pequeo margen de actuacin, los
procedimientos son en su totalidad, definidos por el programador. Estos

procedimientos forman parte del programa. Podra incluso hacerse una aplicacin
que no tuviese mas cdigo que el introducido en los procedimientos.

Para colocar un control en un Formulario, basta con tomarlo de la caja de


herramientas existente en la parte izquierda de la pantalla de VB y llevarlo al
Formulario. Si no existiese el control deseado en la caja de herramientas,
deberemos ir a cogerlo a Controles personalizados que est en el men
desplegable Herramientas de la barra de Men de VB. Se elige el nuevo control,
marcando la caja de opcin a la izquierda de su nombre, y haciendo click en
ACEPTAR. Este control ya pasa a la caja de herramientas.

COMMAND BUTTON

BOTN DE COMANDO

_______________________________________

El Command Button es un objeto que sirve para introducir datos a travs de la


pantalla. El Botn de Comando tiene la siguiente forma:

El botn de comando puede usarse para la entrada de datos con el ratn, o para
validar cualquier operacin. El tamao puede cambiarse a voluntad, pero la forma
siempre es rectangular. En la figura anterior vemos dos botones de comando, uno
de ellos (el Command2) marcado con unos puntos en su contorno. Estos puntos
nos permiten variar su tamao en tiempo de diseo. Tambin puede cambiarse su
tamao y posicin en tiempo de ejecucin.

PROPIEDADES BC

Name

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

Caption

Ttulo
Es el texto que aparece en el botn. Puede cambiarse en

tiempo de ejecucin. No tiene otra funcin dentro del


programa.

NOTA.- No confundir Nombre (Name) con Ttulo (Caption)

Appearance Apariencia
Determina la forma del botn. Admite los valores de Flat
(Plano) y 3D. No se aprecia en gran medida la diferencia.

Backcolor

Color de fondo
Es el color de un pequeo cuadrado que aparece rodeando el
ttulo, NO el color del botn, que es invariable. Puede
cambiarse en tiempo de ejecucin.

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

Default
Establece un valor que determina el control CommandButton
que es el botn de comando predeterminado de un formulario.
Slo un botn de comando de un formulario puede ser el
botn de comando predeterminado. Cuando Default se define
a True para un botn de comando, se define automticamente
a False para el resto de los botones de comando del
formulario. Cuando la propiedad Default del botn de
comando est establecida a True y su formulario primario est

activo, el usuario puede elegir el botn de comando


(invocando su evento Click) presionando ENTRAR. Cualquier
otro control que tuviera el enfoque no recibe evento de teclado
(KeyDown, KeyPress o KeyUp) de la tecla ENTRAR a menos
que el usuario haya movido el enfoque a otro botn de
comando del mismo formulario. En este caso, al presionar
ENTRAR se elige el botn de comando que tiene el enfoque
en lugar del botn de comando predeterminado.

DragIcon
Establece el icono que se presenta como puntero en una
operacin de arrastrar y colocar.

DragMode
Establece un valor que determina si se usa el modo de
arrastre manual o automtico en una operacin de arrastrar y
colocar. Los valores posibles de nmero son:

Enabled

Manual (Predeterminado)

Automtico

Habilitado
Propiedad Booleana que habilita o deshabilita el botn.
Cuando est deshabilitado (Enabled = False), el botn no
tiene efecto, y su apariencia vara, presentando un tono plido
tanto en su cuerpo como en su ttulo. Puede variarse en
tiempo de ejecucin.

Font

Fuente
Es el tipo de letra para el ttulo. Puede cambiarse en tiempo
de ejecucin.

Height

Altura
Establece la altura del botn. Normalmente esta propiedad no
se introduce numricamente, sino
que la toma
automticamente de las dimensiones que se le den al botn
en tiempo de diseo. Puede cambiarse, cambiando el valor a
esta propiedad, en tiempo de ejecucin.

HelpContextID
Establece un nmero de contexto asociado para este control.
Este nmero se aplica para determinar la ayuda interactiva.

Puede tener los siguientes valores:


0 = No se especifica nmero de contexto
>0 Un entero que especifica un contexto vlido.

Index

Indice
En el caso de que se tengan varios botones que realicen una
funcin similar (Las teclas numricas de una calculadora, p.e.)
puede hacerse un array con estos botones de comando.
Todos tendrn el mismo nombre, y se diferencian por un
ndice. Esta propiedad Index toma el nmero de ese ndice.

Left
Posicin de su parte izquierda. Indica la posicin del botn,
concretamente de la parte izquierda del mismo. Normalmente
esta propiedad no se introduce numricamente, sino que la
toma automticamente de la posicin que se le de al botn en
tiempo de diseo. Puede cambiarse, cambiando el valor a
esta propiedad, en tiempo de ejecucin.

MouseIcon Icono para el puntero del ratn


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

MousePointer

Puntero ratn
Determina la forma del puntero del ratn cuando ste pasa
por encima del botn. Puede elegirse uno de los punteros
preestablecidos (15) o incluso uno diseado especialmente.
Para especificar que el puntero es uno diseado
especialmente, hay que poner a esta propiedad el valor 99
(Custom), y en este caso aparecer el icono determinado por
la propiedad MouseIcon

TabIndex

N de orden para tabulador


Cuando disponemos de varios controles en un mismo
formulario, solamente uno de ellos tiene el foco. Esta
expresin de tener el foco significa que ese control est
remarcado y en esa condicin, si pulsamos la tecla ENTER
hara el mismo efecto que hacer click con el ratn en ese
control. Esto es necesario, ya que existen ordenadores que no
disponen de ratn (tpico de algunos porttiles). En estos
casos, para elegir uno u otro control debemos pulsar repetidas
veces la tecla TABulador. El foco ir cambiando de uno a otro
control (pueden ser controles de distinto tipo) cada vez que
pulsemos la tecla TABulador. Esta propiedad TabIndex marca
el orden que seguir el foco a travs de cada control.

TabStop

Sale del control de la tecla TAB


Propiedad booleana. Cuando esta propiedad est a False, el
botn no tomar el foco cuando se pulse la tecla del
Tabulador. Sin embargo sigue manteniendo el ndice de la
propiedad TabIndex descrita anteriormente. Puede cambiarse

en tiempo de ejecucin. Esto nos permite descartar algn


botn de tomar el foco, cuando por facilidad para el usuario,
sea conveniente en determinados puntos del programa.

Tag
Esta propiedad no la usa directamente Visual-Basic. Sirve
para asociar a este control alguna informacin adicional para
fines externos a la programacin. Similar a la del formulario.

Top
Indica la coordenada de la parte superior del control. Puede
variarse durante el tiempo de ejecucin. Esta propiedad,
juntamente con Left definen la esquina superior izquierda del
botn de comando. Normalmente esta propiedad no se
introduce numricamente, sino que la toma automticamente
de la posicin que se le den al botn en tiempo de diseo.
Puede cambiarse, cambiando el valor a esta propiedad, en
tiempo de ejecucin.

Visible

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

WhatThisHelpID

(Propiedad, Windows 95)

Devuelve o establece un nmero de contexto asociado a un


objeto. Se utiliza para dotar a las aplicaciones de Ayuda
interactiva con el men emergente Qu es esto? de la Ayuda
de Windows 95.

Width

Ancho
Define el ancho del botn. Con Height determina la dimensin
del botn.

PROCEDIMIENTOS DEL BOTON DE COMANDO

Click

DragDrop

DragOver

KeyDown

KeyPress

KeyUp

MouseDown

MouseMove

MouseUp

GotFocus
LostFocus

El botn de Comando no tiene el procedimiento DbClick !

LABEL

ETIQUETA

____________________

Una etiqueta es un control que nos permite presentar un texto. La etiqueta debe
usarse en aquellos casos en los que exista una informacin esttica o dinmica
que no deba ser cambiada por el operador.

Puede adoptar estas formas: con borde tridimensional, borde plano o sin borde, y

el texto justificado a la izquierda, a la derecha o centrado.

Se ha incluido la trama para poder observar los lmites de la etiqueta sin borde.

PROPIEDADES ET

Alignment

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

Appearance Apariencia

Autosize

Plana o tridimensional.

Tamao
Propiedad booleana. Si se pone a True, el tamao de la
etiqueta se ajusta al texto que contiene.

Backcolor

Color de fondo
Es el color de fondo de la etiqueta. Puede cambiarse en
tiempo de ejecucin.

BackStyle

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

BorderStyle Tipo de borde


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

Caption

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

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

DragIcon
Establece el icono que se presenta como puntero en una
operacin de arrastrar y colocar.

DragMode
Establece un valor que determina si se usa el modo de
arrastre manual o automtico en una operacin de arrastrar y
colocar. Los valores posibles de nmero son:

Enabled

Manual (Predeterminado)

Automtico

Habilitado
Propiedad Booleana que habilita o deshabilita la etiqueta
Cuando est deshabilitado (Enabled = False), no tienen
efecto los eventos que se produzcan sobre ella, y su
apariencia vara, presentando un tono plido tanto en su
cuerpo como en su ttulo. Puede variarse en tiempo de
ejecucin.

Font

Fuente
Es el tipo de letra para el ttulo. Puede cambiarse en tiempo
de ejecucin.

ForeColor
Es el color de la letra de la etiqueta. Puede cambiarse en
tiempo de ejecucin.

Height

Altura
Establece la altura de la etiqueta.
Normalmente esta
propiedad no se introduce numricamente, sino que la toma
automticamente de las dimensiones que se le den a la
etiqueta en tiempo de diseo.

Index

Indice
En el caso de que se tengan varios etiquetas que realicen una
funcin similar puede hacerse un array con etiquetas. Todas
tendrn el mismo nombre, y se diferencian por un ndice. Esta
propiedad Index toma el nmero de ese ndice.

Left

Posicin de su parte izquierda


Indica la posicin de la etiqueta, concretamente de su parte
izquierda. Normalmente esta propiedad no se introduce
numricamente, sino que la toma automticamente de la
posicin que ocupaba en tiempo de diseo. Puede cambiarse,
cambiando el valor a esta propiedad, en tiempo de ejecucin.

LinkItem LinkMode LinkTimeout LinkTopic


Estas propiedades establecen la forma en que debe llevarse a
cabo una conexin DDE con otra aplicacin. Se vern con
mas detalle al estudiar los enlaces DDE

MouseIcon Icono del puntero del ratn


MousePointer

Puntero ratn
Para estas propiedades es aplicable todo lo dicho para las
mismas en el Botn de Comando

Name

Nombre

Es el nombre de la etiqueta con el que se le conocer a lo


largo del programa

TabIndex

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

Tag
Esta propiedad no la usa directamente Visual-Basic. Sirve
para asociar a este control alguna informacin adicional para
fines externos a la programacin.

Top
Indica la coordenada de la parte superior del control. Puede
variarse durante el tiempo de ejecucin. Esta propiedad,
juntamente con Left definen la esquina superior izquierda del
botn de comando. Normalmente esta propiedad no se
introduce numricamente, sino que la toma automticamente
de la posicin que se le den a la etiqueta en tiempo de diseo.
Puede cambiarse, cambiando el valor a esta propiedad, en
tiempo de ejecucin.

UseMneumonic
Devuelve o establece un valor que indica si al incluir el signo
(&) en el texto de la propiedad Caption del control Label se
define una tecla de acceso. Es una propiedad Booleana.

Los valores que puede tomar son True o False.

True (Predeterminado) Los caracteres (&) que aparezcan en


el texto de la propiedad Caption definen al carcter siguiente
como tecla de acceso. El signo (&) no aparece en la interfaz
del control Label.
False Los caracteres (&) que aparezcan en el texto de la
propiedad Caption aparecen como tales en la interfaz del
control Label.

En tiempo de ejecucin, al presionar ALT+ la tecla de acceso


definida en la propiedad Caption del control Label, el enfoque
se desplaza al control siguiente al control Label en el orden de
tabulacin.

Visible

Visible
Propiedad Booleana. Si es true, la etiqueta se ve, si es False
no se ve. Puede cambiarse en tiempo de ejecucin.

WhatThisHelpID

(Propiedad, Windows 95)

Devuelve o establece un nmero de contexto asociado a un


objeto. Se utiliza para dotar a las aplicaciones de Ayuda
interactiva con el men emergente Qu es esto? de la Ayuda
de Windows 95.

Width

Ancho
Define el ancho de la etiqueta. Con Height determina la
dimensin de la misma.

WordWrap
Devuelve o establece un valor que indica si un control Label

con el valor True en su propiedad AutoSize se expande


vertical u horizontalmente para adaptarse al texto especificado
en su propiedad Caption. Es una propiedad Booleana.

Esta propiedad puede cambiarse en tiempo de ejecucin

True
El control Label se expande o contrae horizontal y
verticalmente para adaptarse al texto y al tamao de la fuente.
Contempla para la expansin horizontal la colocacin de los
espacios del texto.
False (Predeterminado) El texto no se ajusta a la siguiente
lnea; el control Label se expande o contrae horizontalmente
para adaptarse a la longitud del texto y verticalmente para
adaptarse al tamao de la fuente y al nmero de lneas.

Nota Si se establece False en AutoSize, el texto siempre se


ajustar a la lnea siguiente, independientemente del tamao
del control Label y del valor de la propiedad WordWrap. Esto
puede ocultar parte del texto, ya que el control Label no se
expande en ninguna direccin.

PROCEDIMIENTOS DEL LABEL

Click

Change

DbClick

DragDrop

DragOver

LinkClose

LinkError

LinkNotify

TEXT BOX CAJAS DE TEXTO


_____________________________

Las cajas de texto son los controles en los que Visual Basic presenta o introduce
textos. Es por tanto un control bidireccional. Normalmente se usan para
introducin de textos, o para la presentacin de aquellos que el operador pueda
cambiar. Para cambiar o escribir un texto en una caja de texto, basta con
conseguir que esa caja de texto tenga el foco y teclear el texto en el teclado. Esto
se puede lograr, bien haciendo click con el ratn en esa caja de texto, bien con la
tecla TAB, bien por programa.

La caja de texto no se debe usar nunca para presentar textos que el operador de
la aplicacin no deba cambiar. sese para ello la etiqueta, control no bidireccional,
que adems tiene la ventaja de ocupar menos memoria de programa.

Las cajas de texto pueden tener una o varias lneas, segn est la propiedad
Multiline. La capacidad mxima de una caja de textos es de 64 Kbytes.

La forma de una caja de texto es la siguiente, dependiendo de las propiedades


BorderStyle y Appearance:

PROPIEDADES CT

Alignment

Justificacin
Establece si el texto se justifica a la izquierda, a la derecha, o
se centra sobre la etiqueta. Esta propiedad solamente tiene
efecto cuando la propiedad Multiline est a True, ignorndose
en caso contrario. Es decir, permite colocar el texto justificado
a la derecha cuando ese texto puede ser de varias lneas.
Para una nica lnea, se justifica siempre a la izquierda.
Esta propiedad no puede cambiarse en tiempo de ejecucin,
pero s puede leerse en que condicin est.

Appearance Apariencia
Plana o tridimensional.

Backcolor

Color de fondo
Es el color de fondo de la caja de texto. Puede cambiarse en
tiempo de ejecucin.

BorderStyle Tipo de borde


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

DataField
DataSource Fuente de Datos
Establecen la base de datos y el campo donde est el texto
que se llevar a la propiedad Text. Estas propiedades
permiten presentar de una forma muy sencilla datos de una
Base de Datos. Se vern cuando se estudie el control Data y
el motor de bases de datos

DragIcon
Establece el icono que se presenta como puntero en una
operacin de arrastrar y colocar.

DragMode
Establece un valor que determina si se usa el modo de
arrastre manual o automtico en una operacin de arrastrar y
colocar. Los valores posibles de nmero son:

Enabled

Manual (Predeterminado)

Automtico

Habilitado
Propiedad Booleana que habilita o deshabilita la etiqueta
Cuando est deshabilitado (Enabled = False), no tienen
efecto los eventos que se produzcan sobre el TextBox. No se
puede escribir el l ni pasarle el foco, pero s se le puede
cambiar el texto mediante el programa. Puede ser una buena
alternativa para impedir que el usuario pueda cambiar un
determinado texto. Esta propiedad puede variarse en tiempo
de ejecucin.

Font

Fuente
Es el tipo de letra que se utilizar en el TextBox. Puede
cambiarse en tiempo de ejecucin.

ForeColor

Color de la letra
Determina el color de las letras del texto.

Height

Altura
Establece la altura de la caja de texto. Normalmente esta
propiedad no se introduce numricamente, sino que la toma
automticamente de las dimensiones que se le den a la caja
en tiempo de diseo.

HelpContextID
Establece un nmero de contexto asociado para este control.
Este nmero se aplica para determinar la ayuda interactiva.

Puede tener los siguientes valores:


0 = No se especifica nmero de contexto
>0 Un entero que especifica un contexto vlido.

Index

Indice
En el caso de que se tengan varias cajas de texto que realicen
una funcin similar puede hacerse un array con ellas. Todas
tendrn el mismo nombre, y se diferencian por un ndice. Esta
propiedad Index toma el nmero de ese ndice.

Left

Posicin de su parte izquierda.


Indica la posicin de la caja de texto, concretamente de su
parte izquierda. Normalmente esta propiedad no se introduce
numricamente, sino que la toma automticamente de la
posicin que ocupaba en tiempo de diseo. Puede cambiarse,
cambiando el valor a esta propiedad, en tiempo de ejecucin.

LinkItem LinkMode LinkTimeout LinkTopic


Estas propiedades establecen la forma en que debe llevarse a
cabo una conexin DDE con otra aplicacin. Se vern con
mas detalle al estudiar los enlaces DDE

Locked
Establece si el texto se puede editar, es decir, cambiar.
Cuando se pone esta propiedad a True, el texto existente en
la caja puede resaltarse con el ratn, e incluso copiarlo al
portapapeles, pero no puede variarse tecleando un nuevo
texto. Se puede cambiar por programa, cambiando la
propiedad Text.
Si est en False, puede cambiarse el texto mediante teclado.

MaxLenght
Indica, si se establece, la longitud mxima del texto.

MouseIcon Puntero del ratn personalizado


MousePointer

Puntero ratn

Determina la forma del puntero del ratn cuando ste pasa


por encima de la caja de texto. Puede elegirse uno de los
punteros preestablecidos en esta propiedad, (15 en total) e
incluso un puntero personalizado en la propiedad MouseIcon.
Para
que
aparezca
este
puntero
personalizado,
MousePointer debe ponerse al valor 99. Lo tpico para esta
propiedad es el I-Beam (barra vertical)

Name

Nombre
Es el nombre de la caja de texto con el que se le conocer a
lo largo del programa

PasswordChar
En ocasiones, es conveniente que no se pueda leer lo que se
escribe en la caja de texto, caso por ejemplo de la entrada de
un password o palabra de paso. Esta propiedad nos permite
indicar un carcter que sustituye a cualquier carcter que
tenga la caja de texto. (Tpicos el * o ?). El texto que tenga en
la propiedad Text no cambia por el hecho de presentar en
pantalla un carcter distinto. Esta propiedad puede cambiarse
en tiempo de ejecucin. Para quitar el PasswordChar basta
con forzarlo al carcter nulo :
[Link] =

Esta propiedad se ignora cuando la propiedad Multiline est a


True.

ScrollBars
Cuando la propiedad Multiline de la caja de texto est a True,
se pueden colocar barras de desplazamiento del texto hacia
arriba y abajo, o hacia los lados. Esto nos permite tener una
caja de texto de tamao reducido y poder leer en ella un texto
mayor que la propia caja. Esta propiedad puede tomar los
siguiente valores :

0 - No salen barras
1 - Barras de desplazamiento horizontal
2 - Barras de desplazamiento vertical
3 - Ambas barras.

TabIndex

N de orden para obtener el foco


Al igual que para los botones de comando, esta propiedad
para tabulador marca el orden en el que le llegar el foco al
pulsar la tecla TAB

Tag
Esta propiedad no la usa directamente Visual Basic. Sirve
para asociar a este control alguna informacin adicional para
fines externos a la programacin.

Top
Indica la coordenada de la parte superior del control. Puede
variarse durante el tiempo de ejecucin. Esta propiedad,
juntamente con Left definen la esquina superior izquierda de
la caja de texto. Normalmente esta propiedad no se introduce
numricamente, sino que la toma automticamente de la
posicin que se le de en tiempo de diseo. Puede cambiarse,
cambiando el valor a esta propiedad, en tiempo de ejecucin.

Visible

Visible
Propiedad Booleana. Si es true, la caja de texto se ve, si es
False no se ve. Puede cambiarse en tiempo de ejecucin.

WhatThisHelpID

(Propiedad, Windows 95)

Devuelve o establece un nmero de contexto asociado a un


objeto. Se utiliza para dotar a las aplicaciones de Ayuda
interactiva con el men emergente Qu es esto? de la Ayuda
de Windows 95.

Width

Ancho
Define el ancho de la caja de texto. Con Height determina la
dimensin de la misma.

PROCEDIMIENTOS DE LA CAJA DE TEXTO

Click

Change

DblClick

KeyDown

KeyPress

KeyUp

FRAME

RECUADRO

DragDrop

DragOver

LinkClose

Se obtiene directamente de la caja de herramientas

GotFocus

Tiene la siguiente forma :

Un control Frame proporciona un agrupamiento identificable para


controles. Tambin puede utilizar un Frame para subdividir un formulario
funcionalmente por ejemplo, para separar grupos de controles
OptionButton.

Para agrupar controles, en primer lugar trace el control Frame y, a


continuacin, meta los controles dentro de Frame. De este modo podr
mover al mismo tiempo el Frame y los controles que contiene. Si traza un
control fuera del Frame y, a continuacin, intenta moverlo dentro de ste,
el control se colocar sobre el Frame, pero no pertenecer a el. Es decir,
si es un OptionButton este se comportar como si estuviese fuera del
Frame, aunque fsicamente est dentro de el.

Cuando un control Frame tiene dentro otros controles, y hacemos


invisible al Frame, mediante su propiedad Visible = False, los controles
interiores al Frame quedan tambin invisibles.

PROPIEDADES
Las sealadas con (*) no presentan novedades
respecto a las ya comentadas para los controles
precedentes.

Appearance

(*)

Backcolor

(*)

Caption

Es el ttulo que aparece en el borde del Frame.

ClipControls
Si esta propiedad est a True, los mtodos grficos en
eventos Paint vuelven a dibujar el objeto entero. Antes
del evento Paint se crea una zona de recorte alrededor

de los controles no grficos del formulario. Si esta


propiedad est a False dibujarn solamente las reas
ltimamente expuestas. En tiempo de ejecucin, esta
propiedad es de slo lectura.

DragIcon

(*)

DragMode

(*)

Enabled
Cuando esta propiedad est a False, tanto los
procedimientos asociados al propio control Frame
como todos los controles dentro del Frame estarn
inhabilitados. Si esta propiedad est a True, todos ellos
estn habilitados.

Font
En esta propiedad, el tipo de letra afecta solamente al
ttulo del Frame, no a los controles internos a el.

ForeColor
Color de las letras del ttulo del Frame.

Height

(*)

HelpContextID

(*)

Index

(*)

Left

(*)

MouseIcon

(*)

MousePointer

(*)

Name

(*)

TabIndex

(*)

Tag

(*)

Top

(*)

Visible
Cuando un Frame est con la propiedad Visible =
False, tanto el propio Frame como todos los controles
interiores a el sern invisibles.
WhatsThisHelpID

(*)

Width

(*)

PROCEDIMIENTOS DEL FRAME

Click

DblClick

MouseMove

DragDrop DragOver MouseDown

MouseUp

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 verificacin, permite elegir una opcin


(activada/desactivada, True/False) que el usuario puede establecer o
anular haciendo click. Una X en una casilla de verificacin indica que
est seleccionada, activada, o con valor True. Cada casilla de verificacin
es independiente de las dems 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 opcin 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 slo puede
seleccionar una. Los controles OptionButton se agrupan dibujndolos
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
continuacin, dibuje dentro los controles OptionButton. Todos los
controles OptionButton que estn dentro del mismo contenedor actan
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 automticamente. Por
contraste, se puede seleccionar cualquier nmero de controles
CheckBox.

En el ejemplo de la figura, existen tres grupos de OptionButton, uno en


un PictureBox, que acta, al tiempo que como cuadro de imagen, como
contenedor de controles OptionButton. Otro grupo est en el interior de
un control Frame, y el otro grupo est en el formulario. Los tres grupos
son independientes entre s, pero interiormente al grupo solamente
puede seleccionarse uno de los OptionButton que lo componen.

En el formulario tambin existen tres CheckBox, que como puede verse,


se pueden seleccionar los que se desee, sin ningn tipo de exclusin
entre ellos.

PROPIEDADES

Las sealadas con (*) son comunes a ambos controles


y no presentan novedades respecto a las ya
comentadas para los controles precedentes.

Alignment

Comn a ambos controles.

Admite los siguientes valores :

0 - Left Justify
1 - Right Justify

Cuando se elige el valor 0, justificado a la izquierda, el ttulo del control

aparece a la derecha del botn, pegado a la figura del botn. Cuando se


elige el valor 1, justificado a la derecha, el ttulo (Caption) aparece a la
izquierda del botn, comenzando en la parte izquierda del cuerpo total
del control, es decir, no tiene porqu aparecer con su parte derecha
pegado al botn, caso que el cuerpo total del control se haya hecho mas
largo que la palabra del ttulo.

Appearance

(*)

Backcolor

(*)

Caption

(*).

DataField DataSource

Propiedades del CheckBox

solamente.
Establecen la base de datos y el campo donde estn
los datos (True / False) que se llevarn a la propiedad
Value . Al igual que en los controles Label y TextBox
esta propiedad nos permite visualizar datos de una
base de datos de una forma muy sencilla. En este
caso, el CheckBox solamente permite presentar
(logicamente) datos de tipo Booleano.

DragIcon

(*)

DragMode

(*)

Enabled

(*)

Font

(*)

ForeColor

(*)

Height

Comn a ambos controles.


La altura del control solamente afecta a la colocacin
del Titulo (Puede ponerse un ttulo largo en varias
lneas), no al tamao del botn, que es invariable.

HelpContextID

(*)

Index

(*)

Left

(*)

MouseIcon

(*)

MousePointer

(*)

Name

(*)

TabIndex

(*)

TabStop

(*)

Tag

(*)

Top

(*)

Value

Comn a ambos controles


El valor de esta propiedad indica si el control est
seleccionado (Value = 1) o no seleccionado (Value = 0
Value = False). Esta propiedad puede cambiarse en
tiempo de ejecucin. Mediante esta propiedad,
podemos tanto forzar el valor como leerlo.

Atencin. Presenta una diferencia entre uno y otro


control respecto a la forma de expresarse respecto a su
valor cuando est seleccionado. Para forzar que el
control NO est seleccionado, o para leer el Value
cuando no est seleccionado, podemos utilizar tanto
Value = 0 como Value = False. Sin embargo, cuando
lo que se quiere es poner la propiedad a True hay una
diferencia entre ambos controles.
Para el OptionButton podemos utilizar indistintamente
las siguiente formas :

[Link] = True

[Link] = 1

Con cualquiera de ellas seleccionaremos ese control


por programa.
Para el CheckBox solamente se podr usar para este
propsito la instruccin :

[Link] = 1

El poner como Value el valor True nos dar en este


control un error.

Para la lectura del Value, existe una diferencia entre el


valor devuelto por el CheckBox y el devuelto por el
OptionButton.

Para leer el dato existente en un CheckBox es


necesario utilizar la forma :

variable = [Link] donde variable tomar el


valor 1 (no True)

Para el control OptionButton emplearemos una


instruccin igual :

variable = [Link]

donde variable tomar el

valor True (no 1)

Visible

(*)

WhatsThisHelpID

(*)

Width

(*)

PROCEDIMIENTOS

Click

DblClick (Solo OptionButton)DragDrop DragOver


GotFocus

KeyDown KeyPress KeyUp

LostFocus

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 ms. Si el nmero de elementos supera el
nmero que puede mostrarse, se agregar automticamente una barra
de desplazamiento al control ListBox.

Un control ComboBox combina las caractersticas de un control TextBox


y un control ListBox. Los usuarios pueden introducir informacin 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 combinacin de un


ListBox, que se comporta como si de un ListBox se tratase, y de un
TextBox, con comportamiento anlogo a un TextBox sencillo, con la
particularidad aqu de que el texto se le puede introducir por teclado, o
elegir uno de los que figuran en la parte ListBox del Combo.

Estos controles toman la siguiente forma :

Puede verse en la figura un ejemplo de presentacin de un ListBox


(izquierda), un ComboBox con la lista desplegada (Centro) y un
ComboBox con la lista sin desplegar (Combo2 a la derecha).

La lista tiene varios elementos. Cada lnea de esta lsta es un elemento


de la lista. Como el nmero de elementos de la lista tiene mas elementos
de los que le podan caber, gener automticamente la barra de

desplazamiento vertical.

El ComboBox est normalmente sin desplegar. Se despliega cuando se


hace click con el ratn en la flecha que tiene en su parte derecha (vase
fig. Anterior). Al desplegarse, muestra la lista con todos sus elementos.
Haciendo click con el ratn en cualquiera de sus elementos, el elemento
elegido pasa a la parte TextBox del Combo y la lista vuelve a replegar.

El ListBox (y por tanto el ComboBox) tiene unas propiedades y


mtodos particulares que solamente se pueden aplicar durante el tiempo
de ejecucin :

ListCount - Indica el nmero de elementos que tiene la lista


ListIndex - Indica el nmero de orden del elemento seleccionado
dentro de la lista.
AddItem - Aade un elemento a la lista.
RemoveItem - Elimina un elemento de la lista.
Text - Obtiene el elemento seleccionado.
List (n) - Obtiene el elemento cuyo orden dentro de la lista es n.

ListCount valdr 0 si la lista no tiene ningn elemento, y n si tiene n


elementos.

Para seleccionar un elemento de la lista, basta con hacer click con el


ratn sobre l. Ese elemento se resaltar con fondo en azul. Una vez
seleccionado un elemento, la propiedad ListIndex tomar el valor del
nmero de orden que ocupa ese elemento en la lista, comenzando por el
0 para el elemento que ocupa el primer lugar. Si no se selecciona ningn
elemento, el valor de la propiedad ListIndex ser -1. El primer elemento
de la lista es ListIndex 0, y el valor de la propiedad ListCount siempre
es uno ms que el valor mayor de ListIndex.

En el ComboBox la propiedad Text contiene el texto que contenga la


parte TextBox del Combo, bien haya sido introducida desde teclado o
mediante la recuperacin de un elemento la parte ListBox del mismo.

Ejemplos

Supongamos que tenemos un ListBox llamado List1, y un ComboBox


llamado Combo1. Se enumeran distintas formas de obtener informacin
de ellos.

Variable = [Link]
Variable contendr un nmero con el nmero total de
elementos de la lista List1.

Variable = [Link]
Variable contendr un nmero con el nmero de orden del
elemento de la lista seleccionado en ese momento.

[Link] ELEMENTO NUEVO


Aade un elemento a List1. En este caso, el elemento
aadido es la palabra ELEMENTO NUEVO.

Variable = VISUALBASIC
[Link] Variable
Aade un elemento a List1. En este caso, el elemento
aadido es la palabra VISUALBASIC.

Variable = [Link]

Variable contendr el elemento que estaba seleccionado en


List1. (Variable ser una cadena de caracteres)

Variable = [Link] (n)


Variable contendr el elemento que ocupa el nmero de
orden n dentro de la lista.

Variable = [Link] ([Link])


Variable contendr el elemento que estaba seleccionado en
List1. Se ha utilizado la propiedad List para obtener el
elemento, y en vez de introducir un nmero para definir el
elemento que se desea, se introdujo el valor ListIndex de
List1, que es concretamente, el nmero de orden del
elemento seleccionado en ese momento. Observe que poner
[Link] ([Link]) es idntico a poner [Link].

[Link] (n)
Elimina el elemento n de List1.

[Link] ([Link])
Elimina el elemento que estaba seleccionado en ese

momento.

[Link] = n
Selecciona el elemento n de List1 (Se resalta en azul el
elemento n)

PROPIEDADES DE ListBox y de ComboBox

Las sealadas con (*) son comunes a ambos controles y no presentan


novedades respecto a las ya comentadas para los controles precedentes.

Appearance

(*)

Backcolor

(*)

Columns

Propiedad de ListBox solamente.

Determina si los elementos se presentan en una sola columna o en


varias columnas, y la forma de presentar los elementos en el ListBox. Si
esta propiedad se pone a 0 la lista tendr solamente una columna, y
presentar los elementos uno debajo de otro. Cuando los elementos
sean mas que los que se pueden presentar en la lista, aparecen

automticamente unas barras de desplazamiento vertical.


Si la propiedad se pone a un nmero distinto a 0, el ListBox es de tipo
multicolumna, presentar en cada columna los elementos que le quepan
dependiendo de su dimensin vertical, y tendr tantas columnas como
sea necesario para albergar el nmero de elementos que tenga.
Presentar en su cuadro tantas columnas como se le indique en el valor
de esta propiedad, y si no puede presentar todos los elementos en las
columnas que muestra, le aparecern barras de desplazamiento
horizontales para poder movernos por todas las columnas que tenga.
Recuerde : El nmero que se le asigna a la propiedad Columns no
indica el nmero de columnas que tendr el ListBox sino el nmero de
columnas que presenta.

Esta propiedad puede asignarse en diseo, mediante la caja de


propiedades, o en tiempo de ejecucin mediante una instruccin como
esta :

[Link] = nmero
.
Esta propiedad no puede definirse a 0 o cambiada desde 0 en tiempo de
ejecuciones decir, no se puede convertir en tiempo de ejecucin un
ListBox de mltiples columnas en un ListBox de columna nica o un
ListBox de columna nica en un ListBox de mltiples columnas. Sin

embargo, s es posible cambiar durante la ejecucin el nmero de


columnas de un ListBox de mltiples columnas.

DataField DataSource

Establecen la base de datos y el campo donde estn


los datos que se llevarn al TextBox o ComboBox para
presentar datos procedentes de una Base de Datos.

DragIcon

(*)

DragMode

(*)

Enabled

(*)

Font

(*)

ForeColor

(*)

Height

(*)

HelpContextID

(*)

Index
IntegralHeight
ItemData

(*)
No aplicable a ListBox o ComboBox
Propiedad muy importante.

Devuelve o establece un nmero especfico para cada elemento de un


control ComboBox o ListBox.

Sintaxis
[Link](ndice) [= nmero]

La sintaxis de la propiedad ItemData tiene las siguientes partes:

objeto

Nombre del ListBox o ComboBox.

ndice

El nmero de un elemento concreto del objeto.

nmero

El nmero que se asocia con el elemento especificado.

Comentarios

La propiedad ItemData es una matriz de valores enteros largos cuyo


nmero de elementos es el valor de la propiedad ListCount del control.
Los nmeros asociados con cada elemento se pueden usar para
cualquier fin. Por ejemplo, se puede usar en la confeccin de una lista de

telfonos, el nmero de identificacin de un empleado, etc. Cuando se


rellena el ListBox, tambin se rellena los elementos correspondientes de
la matriz ItemData con los nmeros correspondientes.
La propiedad ItemData se usa a menudo como ndice de una matriz de
estructuras de datos asociados con los elementos de un control ListBox.

Nota Cuando se inserta un elemento en una lista con el mtodo


AddItem, el elemento tambin se inserta automticamente en la matriz
ItemData. Sin embargo, el valor no se reinicializa a cero; retiene el valor
que estaba en esa posicin antes agregar el elemento a la lista. Cuando
se usa la propiedad ItemData, asegrese de establecer su valor al
agregar nuevos elementos a la lista.

Left

(*)

List

Es el contenido de la lista.

Si la lista de elementos es corta e invariable, pueden introducirse los


elementos en el cuadro de propiedades durante el diseo.

MouseIcon
MousePointer

(*)
(*)

Name

(*)

Sorted

Establece o devuelve un valor que indica si los elementos de un


ListBox o ComboBox se colocan automticamente en orden
alfabtico. Los valores que puede adoptar son True o False.

True Los elementos de la lista se ordenan alfabticamente (sin


distinguir entre maysculas y minsculas).
False(Predeterminado) Los elementos de la lista no se ordenan
alfabticamente.

Cuando esta propiedad tiene el valor True, Visual Basic se encarga


de casi todo el procesamiento de cadenas necesario para
mantener el orden alfabtico, incluyendo el cambio de los nmeros
de ndice cuando se agregan o eliminan elementos.

Nota El uso del mtodo AddItem para agregar un elemento en


una posicin especfica de la lista puede romper el orden
alfabtico, y los elementos agregados con posterioridad pueden no

ordenarse correctamente.

TabIndex

(*)

TabStop

(*)

Tag

(*)

Top

(*)

Visible

(*)

WhatsThisHelpID

(*)

Width

(*)

PROCEDIMIENTOS

Click

Change (Solo ComboBox)

DblClick

DragDrop

DragOver

DropDown (Solo ComboBox)

GotFocus KeyDown

KeyPress

KeyUp

LostFocus MouseDown (Solo ListBox) MouseMove

(Solo ListBox)

MouseUp (Solo ListBox)

NOTA MUY IMPORTANTE

El procedimiento Change del ComboBox solamente se efecta cuando


el cambio se produce mediante la entrada de un texto DESDE EL
TECLADO, no por un cambio en la parte Text de este control, producido
al llevar un elemento desde la parte List a la parte Text.

CONTROLES HScrollBar y VScrollBar

Son dos controles similares, para introducir un dato cuasi-analgico en


una aplicacin. Se toman directamente de la caja de herramientas, y
tienen un aspecto parecido al de un control de volumen de un equipo de

msica. El HScrollBar est en posicin horizontal, y el VScrollBar en


posicin vertical.

Mediante estos controles se pueden introducir datos variando la posicin


del cursor.

PROPIEDADES de HScrollBar y VScrollBar

Las sealadas con (*) son comunes a ambos controles y no presentan


novedades respecto a las ya comentadas para los controles precedentes.

DragIcon

(*)

DragMode

(*)

Enabled

(*)

Height

(*)

HelpContextID

(*)

Index

(*)

LargeChange
Esta propiedad establece la variacin de la propiedad Value
cada vez que se hace click en el interior de la barra de
desplazamiento, en la parte por donde pasa el cursor.

Left

(*)

Max
Esta propiedad establece el valor mximo para la propiedad
Value, es decir, el valor de esta propiedad cuando el cursor
est en su parte mxima. (Recuerde que el cursor est en el
mximo, cuando est mas a la derecha, caso del HScrollBar,
o cuando est en la parte mas baja, caso del HScrollBar.

Min
Esta propiedad establece el valor mnimo para la propiedad
Value, es decir, el valor de esta propiedad cuando el cursor
est en su parte mnima. (Recuerde que el cursor est en el
mnimo, cuando est mas a la izquierda, caso del HScrollBar,
o cuando est en la parte mas alta, caso del HScrollBar.

MouseIcon

(*)

MousePointer

(*)

Name

(*)

SmallChange
Esta propiedad establece la variacin de la propiedad Value
cada vez que se hace click en las flechas superior o inferior
de la barra de desplazamiento.
TabIndex

(*)

TabStop

(*)

Tag

(*)

Top

(*)

Value
Esta propiedad lee o establece el valor dado por la posicin
del cursor. Este valor tiene un mnimo, establecido por Min y
un mximo, establecido por Max. Esta propiedad es la que
se debe leer para conocer la posicin del cursor.

Visible

(*)

WhatsThisHelpID

(*)

Width

(*)

PROCEDIMIENTOS DE HScrollBar y VScrollBar

Change

DragDrop DragOver GotFocus KeyDown KeyPress

KeyUp

LostFocus Scroll

Comentario

El Procedimiento Change se produce cuando, tras

mover el cursor, se suelta el botn del ratn. Esto produce el efecto de

que el cambio que se tenga que producir con el movimiento del cursor no
se realiza de una manera continua. El procedimiento Scroll se realiza en
el instante que se est moviendo el cursor. Por lo tanto, es este
procedimiento el que se debe usar para conseguir el efecto de un cambio
continuo mientras se est moviendo el 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 diseo. En tiempo de ejecucin, el
control permanece invisible.

La temporizacin producida por el Timer es independiente de la


velocidad de trabajo del ordenador. (Casi independiente. El timer no es
un reloj exacto, pero se le parece)

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


siguiente :

PROPIEDADES

Enabled

(*)

Index

(*)

Interval
El valor de esta propiedad nos dar el intervalo de tiempo (en
milisegundos) en que se producir un evento Timer y consecuentemente,
realizar el procedimiento asociado a este evento. Si el valor de la
propiedad Interval est a 0 (Predeterminado), no se produce el evento
Timer. (El control Timer est deshabilitado cuando se pone la
propiedad Interval = 0)

Left

(*)

Name

(*)

Tag

(*)

Top

(*)

PROCEDIMIENTOS

Timer

Se produce cada vez que se cumple un intervalo completo.

SHAPE

Se toma directamente de la caja de herramientas :

Shape es un control grfico que se muestra como un rectngulo, un


cuadrado, una elipse, un crculo, un rectngulo redondeado o un
cuadrado redondeado.

Utilice controles Shape en tiempo de diseo en lugar o adems de


invocar los mtodos Circle y Line en tiempo de ejecucin. 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 grfico, envolver grficamente a otros controles,
pero no tiene ninguna aplicacin en cuanto a programa. Es un adorno
para sus aplicaciones.

PROPIEDADES

Backcolor

BackStyle

(*)

Esta propiedad establece si Shape permite ver a su travs


(Transparent) o n lo permite (Opaque)
BorderColor
Establece el color del borde.
BorderStyle
Establece el tipo de borde. Puede ser : Transparent, (No se
ve el borde), Solid, (Borde de lnea continua),Dash, (lnea a
rayas), Dot, (lnea a puntos), Dash-Dot, (lnea de raya punto), dash-Dot-Dot, (lnea de raya - punto - punto),
InsideSolid, (raya continua)

El efecto de establecer la propiedad BorderStyle depende del


valor de la propiedad BorderWidth. Si BorderWidth no es 1 y
BorderStyle no es 0 o 6, BorderStyle se establece como 1.

BorderWidth
Establece el ancho de la lnea.

DrawMode

(*)

FillColor

(*)

FillStyle

(*)

Height

(*)

Index

(*)

Left

(*)

Name

(*)

Shape
Establece la forma del control. Puede ser : Rectangular,
cuadrado, redondo, ovalado, cuadrado con esquinas
redondeadas y rectangular con esquinas redondeadas.

Tag

(*)

Top

(*)

Visible

(*)

Width

(*)

PROCEDIMIENTOS

No tiene.

.LINE

Se toma directamente de la caja de herramientas

Line, al igual que Shape, es un control grfico que solamente sirve para
poner una lnea en un formulario. Del mismo modo, no tiene
procedimientos, por lo que no sirve para aportar cdigo al programa.
Solo sirve para aportar una caracterstica grfica, es un adorno.

PROPIEDADES

BorderColor
Establece el color de la lnea.

BorderStyle
Establece el tipo de lnea : Puede ser : Transparent, (No se
ve la lnea), Solid, (Lnea continua),Dash, (lnea a rayas),
Dot, (lnea a puntos), Dash-Dot, (lnea de raya - punto), dashDot-Dot, (lnea de raya - punto - punto), InsideSolid, (raya
continua)

BorderWidth
Establece el ancho de la lnea.

DrawMode

(*)

Index

(*)

Left

(*)

Name

Tag
Visible

(*)

(*)
(*)

X1, X2

Establece las coordenadas x del inicio y final.

Y1, Y2

Establece las coordenadas y del inicio y final

PROCEDIMIENTOS

No tiene.

CONTROL GAUGE

Este control presenta una informacin numrica de forma grfica, bien


como un display lineal (tpico 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 [Link], (Ver. 16 bits)
[Link] (Ver. 32 bits)

Mediante este control, podemos presentar una magnitud numrica de


una forma cuasi-analgica. Podramos decir que es un control similar al

HScrollBar, que en vez de meter informacin a la aplicacin, la presenta.

Este control puede servir, por ejemplo, para presentar el tanto por ciento
de ejecucin de una tarea, como elemento tranquilizante. Puede
presentar el nivel de un depsito 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 presentacin, el Gauge permite
poner un grfico 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 distribucin 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 instalacin
que incluye Visual Basic, le proporciona herramientas para escribir los
programas que instalan las aplicaciones correctamente.

PROPIEDADES

Autosize, Backcolor, DragIcon, DragMode, Enabled, ForeColor,


Height, HelpContextID,
Index, InnerBottom, InnerLeft, InnerRight, InnerTop, Left, Max, Min,
MouseIcon, MousePointer, Name, NeedleWidth, Picture, Style,
TabIndex, Tabstop, Tag, Top, Value, Visible, WhatsThisHelpID, Width.

Son destacables por nuevas o particulares, las siguientes propiedades :

ForeColor Color de la barra


InnerBottom

Distancia entre la parte baja del control y el comienzo

de la barra o aguja.
InnerLeft, InnerRight, InnerTop.

Idntico al anterior, respecto a

otros lados.
Max

Valor de la propiedad Value a fondo de escala

Min

Valor de la propiedad Value para indicacin cero.

NeedleWidth
Style

Ancho de la aguja

Tipo de marcador. Puede tomar los siguientes valores :


0 = de barra, horizontal.
1 = de barra, vertical.
2 = de aguja, de 180 grados
3 = de aguja, de 360 grados.

Value
Valor numrico a presentar. Debe ser igual o menor que la
propiedad Max, e igual o mayor que la propiedad Min.

PROCEDIMIENTOS

Change

DblClick

DragDrop DragOver GotFocus KeyDown

KeyPress KeyUp

LostFocus MouseDown

MouseMove

MouseUp

El CommonDialog

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 Gua del Estudiante.

CUADRO DE DIALOGO

CommonDialog

Normalmente se encuentra en la caja de herramientas

Este control no se presenta en tiempo de diseo mas que con un simple


icono :

El cuadro de dilogo, 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 dilogo permite conocer datos con los cuales, y


mediante el cdigo 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 cdigo,
abramos esos ficheros o usemos una determinada fuente.

Dependiendo de la aplicacin para la que vaya a usarse se deber


activar de distintas formas. Si el cuadro de dilogo se va a usar para
seleccionar la impresora y para otras aplicaciones, es
recomendable usar uno exclusivamente para seleccionar la
impresora.
Esta ltima recomendacin se debe a que, para el control de la
impresora, el CommonDialog SI realiza las funciones de seleccin 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.

El control CommonDialog es un control personalizado (Microsoft


CommonDialog Control [Link] / [Link]), y como
casi todos los controles personalizados presenta un asistente de
propiedades propio. Puede accederse a las propiedades mediante el
cuadro de propiedades tpico de otros controles, o mediante el asistente,
pulsando el botn derecho del ratn con el puntero colocado encima del
icono del cuadro de dilogo.

Analizando las propiedades, vemos que tiene gran cantidad de ellas.


Esto es porque agrupa todas las propiedades correspondientes a la cinco
funciones que puede desarrollar. Se detalla a continuacin la forma de

usar el CommonDialog para cada aplicacin.

Se entiende que el nombre - Name - que se ha puesto para el cuadro de


dilogo en todos los ejemplos es CD1)

FUENTES

Para mostrar el cuadro de dilogo correspondiente a Tipos de Letra (


Fonts ), debe ejecutarse la instruccin:

[Link]

y haber puesto, en la propiedad Flags del cuadro de dilogo, el valor de


1, 2 3, correspondiente respectivamente a los tipos de letra de la
pantalla, de la impresora o ambos. (Vase la propiedad Flags mas
adelante) Si no pone uno de estos valores, le dir que no tiene fuentes
instaladas.

El cuadro de dilogo que se presenta es el siguiente:

Los valores que se pueden obtener de este cuadro de dialogo son:

[Link]

Indica el nombre de la fuente

[Link]

Indica el tamao de la fuente

[Link]

Indica el color de la fuente (Abrir con Flags=256+1, 2

3)
[Link] = (True / False)

Si es True, se ha elegido "Negrita"

[Link] = (True / False)

Si es True, se ha elegido "Cursiva"

[Link] = (True / False)

Si es True, se ha elegido

"Tachada "
[Link] = (True / False)

Si es True, se ha elegido

"Subrayada"
Si se elige una versin Negrita Cursiva seran True las opciones
FontBold y FontItalic

El objeto Font no puede aplicarse al CommonDialog. Es decir, no


podemos poner :

Variable = [Link]

sino Variable = [Link]

En el ejemplo que acompaa a este captulo, puede ver como se


introducen las caractersticas de una determinada fuente elegida en un
cuadro de texto.
COLOR

Para mostrar el cuadro de dilogo correspondiente al color, se deber


ejecutar la instruccin:

[Link]

El cuadro de dilogo presentado tiene esta forma:

(La parte derecha del cuadro puede no salir. Depende del valor de la
propiedad Flags. Se saca haciendo click en Definir colores
personalizados, si est activado. Tambin depende de la propiedad
Flags)

El nmero correspondiente al color elegido se puede conocer analizando


la propiedad color de cuadro de dilogo. En nuestro ejemplo, lo
obtendramos con

Variablecolor = [Link]

donde Variablecolor contendr un nmero correspondiente al color


elegido.

Nota acerca del nmero del color.

Para establecer un color por medio de cdigo, se pondr un valor de


color a la propiedad correspondiente de ese objeto. El valor del color
puede establecerse de tres formas que se comentan a continuacin.

Colores en Visual Basic.

Visual Basic acepta para especificar un color, tres procedimientos:


Mediante el nmero de color, mediante la sentencia RGB ( rojo, verde,
azul ) o mediante la funcin QBColor.

Por nmero

El nmero que representa el color en VB est formado por la suma de la


componente roja, la componente verde y la componente azul. Podramos
verlo muy bien en numeracin Hexadecimal:

Color = Hex XX YY ZZ

Donde ZZ es un nmero Hexadecimal que representa la cantidad del


color rojo. El mnimo estara en 0 (H00) y el mximo en 255 (HFF)

YY representara la cantidad de color verde y XX la de color azul, ambos


con los mismos lmites explicados para el rojo.

Por ejemplo: el rojo puro sera:

Hex(0000FF) = 255

el verde puro sera:

Hex(00FF00) = 652280

el azul puro sera:

Hex(FF0000) = 16711680

Una mezcla de un poco de rojo (HB1), otro poco de verde (H56) y otro
poco de azul (H1F) dara el siguiente nmero:

Hex(1F56B1) = 2053809

El nmero de color puede estar comprendido entre 0 (correspondiente al


negro) y el 16777215 (correspondiente al blanco. Observe que esa
cantidad, 16.777.215 (FFFFFF en hexadecimal) corresponde a los
famosos 16 millones de colores de las tarjetas grficas.

Si queremos poner el color de fondo a un control Label, usaremos la


propiedad Backcolor. Si el Label se llama Label1, pondramos la
instruccin

[Link] = 12345678

Por la sentencia RGB

Se puede expresar el color, poniendo simplemente RGB (rojo, verde,


azul), donde rojo es un nmero entre 0 y 255 que indica la cantidad de
color rojo que se aporta al color, verde un nmero comprendido entre 0 y
255 indicando la cantidad de verde, y lo mismo para azul.
Esta es la forma mas sencilla de poner la propiedad color, y con la que
mejor controlaremos el mismo.

Si queremos poner al Label anterior un color mediante la sentencia RGB,


ejecutaramos la sentencia :

[Link] = RGB (128, 30, 100)

Mediante la Funcin QBColor

Esta funcin se ha puesto en Visual Basic para compatibilidad con los


colores que se usan en Quick-Basic y Qbasic. Mediante esta funcin se
obtienen solamente 16 colores.

Sintaxis

[Link](color)

El argumento color es un nmero entero entre 0 a 15, segn la siguiente


lista:

Nmero

Color

Nmero

Color

Negro

Azul

Azul claro

Verde

10

Verde claro

Aguamarina

11

Rojo

Rojo claro

Fucsia

Amarillo

Blanco

12

13
14

Gris

Aguamarina claro

Fucsia claro

Amarillo claro
15

Blanco brillante

Para el mismo Label anterior, usaramos la sentencia :

[Link] = QBColor (12)

Fin de la nota acerca del nmero del color

CONTROLES PARA MOSTRAR IMGENES


_____________________________________

Una imagen representa una figura, bien natural (tipo fotografa) o


sinttica. Para presentar una imagen es necesario hacerlo sobre un
objeto que la admita. Los objetos que admiten una imagen son:

Formularios
PictureBox
Image

Existen mas controles grficos que se irn viendo a lo largo del curso.
Estos tres son los mas usados y con los que comenzaremos a trabajar.

Para mostrar una imagen en cualquiera de estos objetos, es necesario


especificarlo en su propiedad Picture. La forma de especificarle al
objeto la imagen que debe presentar puede hacerse de dos formas:

En la caja de propiedades, si no se va a variar la imagen durante la


aplicacin.
Mediante una instruccin para cambiar esta propiedad. La
instruccin es la siguiente:

[Link] = LoadPicture (Path, Fichero)

Por ejemplo, si tenemos un formulario llamado Form1 y queremos


rellenarlo con una imagen contenida en el fichero de Windows metafile
[Link] que se encuentra en el directorio
C:\VB\METAFILE\BUSINESS, deberemos ejecutar la instruccin:

[Link] = LoadPicture
(C:\VB\METAFILE\BUSINESS\[Link])

Para "descargar" esa imagen de ese formulario, basta con ejecutar la


misma instruccin sin fichero alguno:

[Link] = LoadPicture ( )

Tambin pueden tomar la imagen desde otro control de imagen,


mediante un procedimiento de Intercambio Dinmico de Datos (DDE)
(Solo el PictureBox)

Puede tambin meter una imagen en una variable, y luego poner en uno
de los controles citados anteriormente la imagen guardada en la variable.
Este mtodo es muy rpido, ya que no necesita acceder al disco para
buscar una imagen, pero emplea mucha memoria RAM, ya que la
variable )o variables conteniendo la(s) imgenes estn en la RAM.

Para ello debemos declarar una o varias variables tipo Picture, y meter
en ellas una imagen mediante el mtodo LoadPicture. Vea en el capitulo
7 (Mtodos Grficos - Mtodo LoadPicture) un ejemplo muy ilustrativo.

EL FORMULARIO
Ya hemos visto lo que es el Formulario. Simplemente podemos aadir a
lo ya dicho, que un formulario tiene la propiedad Picture, con lo que
podemos poner como fondo un bit-map, un fichero de icono ( .ICO) o un
Metarchivo (.WMF). Un fondo grfico sobre el Formulario puede
convertir una aplicacin de buena a excelente. No intente nunca mejorar
una aplicacin mediocre con un fondo artstico en un Formulario.

CONTROL PICTURE BOX

Este objeto se encuentra en la caja de herramientas estndar:

Este objeto permite presentar todo tipo de ficheros grficos (.BMP,


WMF, .ICO, .CUR)

Las dimensiones del PictureBox se establecen en el diseo o mediante


programa, variando las propiedades Height y Width. Tambin puede
cambiarse su posicin mediante las propiedades Top y Left. Dispone de
una propiedad, Align que permite colocarlo adosado a uno de los lados
del formulario que lo contiene.

El Control PictureBox puede ser destino de los datos de un enlace DDE.


(Los datos sern, lgicamente, grficos. Por ello, tiene las propiedades
LinkMode, LinkItem, LinkTimeout y LinkTopic.

Tambin puede tomar el dato del grfico de una Base de Datos. (A travs
de un control Data o un objeto Recordset)

Las propiedades de un PictureBox son:

Align

Appearance

Autoredraw

Autosize

Backcolor

BorderStyle
ClipControls

DataField DataSource

DragIcon DragMode

DrawStile
DrawWidth

Enabled

FillColor

FiilStyle

Font

Fontransparent
ForeColor

Height

HelpContextID Index

Left

LinkItem
LinkMode

LinkTimeout

LinkTopic MouseIconMousePointer

Picture

ScaleHeight

Name
Negotiate

ScaleMode
ScaleWidth

ScaleLeft

ScaleTop
TabIndex TabStop

Tag

Top

Visible
WhatThisHelp

Width

Un PictureBox puede disponer de los siguientes procedimientos :

Click

Change

KeyDown

DblClick

DragDrop DragOver GotFocus

KeyPress

CONTROL IMAGE

Este control se encuentra en la caja de herramientas estndar:

Este control permite presentar todo tipo de ficheros grficos (.BMP, WMF,
.ICO, .CUR)

El control Image no puede ser destino de una comunicacin DDE. Puede


tomar la imagen de una base de datos, bien a travs de un control Data o
a travs de un objeto Recordset.

El control Image utiliza menos recursos del sistema y repinta con ms


rapidez que un control PictureBox, pero slo admite una parte de las
propiedades, los eventos y los mtodos de PictureBox. Use la propiedad
Stretch para determinar si el grfico se escala para que se ajuste al
control o viceversa. Poniendo esta propiedad a True el grfico se
adaptar a las dimensiones del control Image. Si se pone a False, el
control Image tomar las medidas del grfico que contenga. Si el grfico
es un bit-map (Fichero .BMP), con la propiedad Stretch a True podemos
variar el tamao del bit-map, variando las propiedades Width y Height del
control Image, propiedades que se pueden cambiar en tiempo de
ejecucin. Si esta propiedad est a False, el tamao del bit-map no
cambiar, presentndose solamente una porcin del bit-map, caso que el
control Image sea menor que el tamao del bit-map, o sobrar espacio en
el control, en caso contrario. Aunque puede colocar un control Image en
un contenedor, un control Image no puede actuar como contenedor. Esto
se entiende mejor con un ejemplo. Prepare un formulario con un
PictureBox y con un control Image. Introduzca dos OptionButton en
cada uno de ellos, y otro en otra parte del formulario, fuera de ambos.
Ejecute la aplicacin. Los OptionButton colocados dentro del
PictureBox se comportan entre ellos independientes de los otros tres
OptionButton presentes en el formulario, exactamente igual que si se les
hubiera introducido en un Frame. Los controles colocados dentro del
control Image cambian formando conjunto con el que se coloc en el

formulario, fuera de los dos controles. El PictureBox funciona como un


contenedor de esos dos OptionButton que tiene en su interior, mientras
que el control Image, no. (Vea el ejemplo del captulo 2, Oficina de
cambio de divisas)

Un Image es transparente, es decir, deja ver el fondo del formulario en las


partes no ocupadas por su grfico. Por lo tanto, no tendran sentido en
este control propiedades como Backcolor, FillColor, o FillStyle.

Las propiedades de un Image son:

Appearance

BorderStyle

DragIcon
Enabled

Index

MousePointer Name

WhatThisHelp

DataSource

DragMode

Height
Tag

Datafield

Top

Left
Picture

MouseIcon
Stretch

Visible

Width

Un Image puede disponer de los siguientes procedimientos :

Click

DblClick

MouseMove

DragDrop DragOver GotFocus MouseDown


MouseUp

PROPIEDADES DE LOS CONTROLES PictureBox e Image

Align

(PictureBox solamente)

Permite colocar el control en el borde superior (Align Top), en el


inferior (Align Bottom), en el izquierdo (Align Left) o en el
derecho (Align Right) del formulario que lo contiene. Para no
alinearlo con ningn borde basta con poner la propiedad Align a
0-None.

Cuando se adosa a uno de los bordes, el tamao del control se


ajusta automticamente a la anchura o altura del formulario.

Sintaxis

[Link] [= nmero]

nmero Un entero que especifica cmo se presenta el control.


Puede tomar los

siguientes valores :

0-None (Predeterminado cuando el control se coloca en un


formulario no MDI).

Con este valor, el control

mantiene el tamao y la posicin asignada en

tiempo

de diseo.
1-Top

(Predeterminado cuando el control se coloca en

formularios MDI) El control

se coloca en la parte superior

del formulario y su anchura es igual a la

anchura del

formulario.
2-Bottom

El control se coloca en la parte inferior del

formulario y su anchura es igual

a la anchura del

formulario.
3-Left

El control se coloca en la parte izquierda del formulario y

su altura es igual

a la altura del formulario.

4-Right El control se coloca en la parte derecha del formulario y


su altura es igual a

la altura del formulario.

Se puede usar propiedad Align para crear rpidamente una


barra de herramientas o una barra de estado en la parte superior
o inferior de un formulario. Cuando un usuario cambie el tamao
del formulario, un control con la propiedad Align establecida a 1
2 modificar su tamao de forma automtica para ajustarse a
la anchura del formulario.

De la misma forma se puede crear barras de herramientas a los


lados izquierdo o derecho de un formulario. Si en un formulario
hay dos barras de herramientas, una en la parte superior (o
inferior) y otra en un lateral, la de la parte superior o inferior es la
que se extiende hasta la esquina, teniendo preferencia sobre las
colocadas verticalmente a la izquierda o a la derecha.

Al ser el PictureBox un contenedor, puede poner un


PictureBox en la parte superior de un Formulario, y colocar en
este PictureBox varios controles Image, a los que se les puede
poner un icono. De esta forma realizamos una barra de
herramientas.

Negotiate

(PictureBox solamente)

Establece un valor que determina si se muestra un control que


puede alinearse cuando un objeto activo del formulario muestra
una o ms barras de herramientas. No est disponible en tiempo
de ejecucin.

La propiedad Negotiate puede tener los valores True o False:

True

Si el control se alinea en el formulario (la propiedad

Align se establece como un valor no cero), el control


permanecer visible cuando un objeto activo del formulario
muestre una barra de herramientas.
False

(Predeterminado) El control no se muestra cuando un

objeto activo del formulario muestra una barra de herramientas.


La barra de herramientas del objeto activo se muestra en lugar
del control.

Appearance

(PictureBox e Image) 3D o Flat, como en otros

controles

Autoredraw

(PictureBox solamente)

Permite que el Formulario o PictureBox (El control Image no


tiene esta propiedad), mantenga siempre la imagen presente. Si
Autoredraw est a False, el control no presentar las imgenes
que no se hayan dibujado realmente (caso por ejemplo de un
formulario minimizado) o que se hayan borrado por haber sido
puestas tras otro control.

Sintaxis [Link] [= valor]

Los valores posibles de valor son:

True

Activa el redibujado automtico de un control

PictureBox. Los grficos y el texto se escriben en la pantalla y


en una imagen almacenada en memoria. El control no recibe
eventos Paint; se vuelve a dibujar cuando es necesario, usando
la imagen almacenada en memoria.

False

(Predeterminado) Desactiva el redibujado automtico de

un control y escribe los grficos y el texto solamente en la


pantalla. Visual Basic invoca el evento Paint del control cuando
se necesita volver a dibujar dicho control.

Autosize(PictureBox solamente)

Devuelve o establece un valor que determina si el tamao de un


control se cambia automticamente para presentar su contenido
completo.

Sintaxis [Link] [= valor]

Los valores posibles de valor son:

True

El tamao se cambia automticamente para presentar el

contenido completo.
False

(Predeterminado) Mantiene constante el tamao del

control. El contenido se recorta cuando excede el rea del


control.

BackColor

(PictureBox solamente)

Color de fondo. Igual que otros controles

BorderStyle

(PictureBox e Image)

Tipo de borde. Ninguno o fijo. Igual que otros controles.

ClipControls

(PictureBox solamente)

Devuelve o establece un valor que determina si los mtodos


grficos en eventos Paint vuelven a dibujar el objeto entero o
solamente las reas ltimamente expuestas. Tambin determina
si el entorno operativo Microsoft Windows crea una zona de
recorte que excluya los controles no grficos contenidos en el
objeto. En tiempo de ejecucin es de slo lectura.

Sintaxis [Link] [= booleano]

Los valores posibles de booleano son:

True

(Predeterminado) Los mtodos grficos de los eventos

Paint vuelven a dibujar completamente el objeto. Antes del

evento Paint se crea una zona de recorte alrededor de los


controles no grficos del formulario.
False

Los mtodos grficos de los eventos Paint solamente

vuelven a dibujar las partes recin expuestas. Antes del evento


Paint no se crea una zona de recorte alrededor de los controles
no grficos. Los formularios complejos se cargan normalmente
ms rpido cuando ClipControls est establecido a False.

DataField

(PictureBox e Image)

Devuelve o establece un valor que indica el nombre del campo


de una Base de datos de donde se tomar la imagen a
presentar. (Vea controles enlazados a datos)

Sintaxis [Link] =NombredelCampo

Para poder presentar una imagen contenida en una base de


datos, el control
PictureBox o Image deben estar enlazados a una base de datos
mediante un control
Data.

DataSource

(PictureBox e Image)

Establece un valor que especifica el control Data a travs del


cual el control Picture Image se enlaza a una base de datos.
No est disponible en tiempo de ejecucin.

Ver esto con mas detalles cuando estudie los Objetos


enlazados a Datos.

DragIcon
DragMode

(PictureBox e Image)

DrawMode

(PictureBox solamente)

Igual que otros controles

Devuelve o establece un valor que determina el aspecto de la


salida de un mtodo grfico.

DrawStyle

(PictureBox solamente)

Devuelve o establece un valor que determina el estilo de lnea


de la salida de mtodos grficos.

Sintaxis [Link] [= nmero]

Los valores posibles de nmero son: 0

(Predeterminado)

Continuo.

DrawWidth

Rayas.

Puntos.

Raya-punto.

Raya-punto-punto.

Transparente.

Continuo interior.

(PictureBox solamente)

Devuelve o establece la anchura de lnea de lo dibujado con los


mtodos grficos.

Sintaxis [Link] [= tamao]

tamao Expresin numrica comprendida entre 1 y 32.767 que


representa la anchura de la lnea en pixeles. El valor
predeterminado es 1, es decir, un pxel de ancho.

Enabled

(PictureBox e Image)

Habilitado. Igual que otros controles.

FillColor, FillStyle, Font, Fontransparent, ForeColor


solamente)

Igual que otros controles.

Height, Width , Left, Top

(PictureBox e Image)

(PictureBox

Definen el tamao y la posicin del control. En el control Image


el tamao puede depender del grfico que se introduzca y del
valor de la propiedad Stretch.

HelpContextID

(PictureBox solamente)

Igual que otros

controles

Index

(PictureBox e Image)

Igual que otros controles

LinkItem, LinkMode, LinkTimeout, LinkTopic

(PictureBox

solamente)

Propiedades que afectan al comportamiento de este control


como DESTINO de una conversacin DDE. Se estudiar con
mas detalles al estudiar el Intercambio Dinmico de Datos.

MouseIcon, MousePointer (PictureBox e Image)

MouseIcon Establece un icono de mouse personalizado.

(Una vez que comenzamos a estudiar las propiedades grficas, se


comenta cmo se puede cambiar el icono de la propiedad MouseIcon de
todos los controles)

Sintaxis
[Link] = LoadPicture(ruta)

[Link] = imagen

donde :
objeto Nombre del objeto PictureBox o Image
ruta

Expresin de cadena que especifica la ruta y el nombre

del archivo que contiene el icono personalizado. As podemos


cargar un icono de los existentes en el disco. Ej.
[Link] =
LoadPicture("C:\vb\icons\computer\[Link]")
imagen Propiedad Picture de un objeto Form, de un control
PictureBox o de un control Image, o nombre de una variable tipo
Picture. De esta forma podemos cargar como un icono el grfico
que tengamos en otro objeto o en una variable tipo Picture.
Ej. [Link] = [Link]

La propiedad MouseIcon proporciona un icono de mouse


personalizado que se utiliza cuando el valor de la propiedad
MousePointer es 99.

MousePointer devuelve o establece un valor que indica el tipo


de puntero de mouse que aparece cuando se pasa el puntero
del ratn por encima de un objeto en tiempo de ejecucin.

Sintaxis [Link] [= valor]

objeto Nombre del objeto PictureBox o Image


valor

Nmero entero que especifica el tipo de puntero de

mouse que aparece, segn se describe mas adelante.

Las opciones para valor son:

0 (Predeterminado) Forma que determine el objeto.


1 Flecha.
2 Cruz (puntero en forma de cruz).
3 Forma de I.

4 Icono (pequeo cuadrado dentro de otro cuadrado).


5 Tamao (flecha de cuatro puntas: norte, sur, este y oeste).
6 Tamao NE SO (flecha doble apuntando al nordeste y al
sudoeste).
7 Tamao N S (flecha doble apuntando al norte y al sur).
8 Tamao NO SE (flecha doble apuntando al noroeste y al
sudeste).
9 Tamao O E (flecha doble apuntando al oeste y al este).
10

Flecha hacia arriba.

11

Reloj de arena (espera).

12

No soltar.

13

Flecha y reloj de arena.

14

Flecha e interrogacin.

15

Tamao de todo (personalizable en Microsoft Windows

NT 3.51)
99

Icono personalizado especificado en la propiedad

MouseIcon explicada anteriormente.

Name

(PictureBox e Image)

Picture

(PictureBox e Image)

Nombre del control

Devuelve o establece un grfico mostrado en un control.

Ya se ha estudiado mas atrs como cambiar la propiedad


Picture.

ScaleHeight, ScaleWidth, ScaleLeft, ScaleTop, ScaleMode


Propiedades del PictureBox solamente.

Todas las propiedades Scale ? ? ? ? afectan a las coordenadas, no


a la escala !

ScaleHeight, ScaleWidth

Devuelven o establecen el nmero de unidades de medida


horizontal (ScaleWidth) y vertical (ScaleHeight) del interior de un
objeto al utilizar mtodos grficos o al colocar controles.

Sintaxis [Link] [= valor]


[Link] [= valor]

objeto Nombre del Control


valor

Expresin numrica que especifica la medida horizontal

o vertical.

Nota Las propiedades ScaleHeight y ScaleWidth son distintas


de las propiedades Height y Width.

ScaleLeft, ScaleTop

Devuelven o establecen las coordenadas horizontal (ScaleLeft) y


vertical (ScaleTop) de los bordes izquierdo y superior de un
objeto al utilizar mtodos grficos o al situar controles. Estas
coordenadas estn medidas de acuerdo con la unidad de
medida establecida en las propiedades ScaleHeight y
ScaleWidth

ScaleMode

Devuelve o establece un valor que indica la unidad de medida


de las coordenadas de un objeto al utilizar mtodos grficos, o al
situar controles.

Sintaxis [Link] [= valor]

Nombre del Control

objeto Nombre del Control


valor

Nmero entero que especifica la unidad de medida,

segn se describe a continuacin.

0 Indica que una o ms de las propiedades ScaleHeight,


ScaleWidth, ScaleLeft y ScaleTop tienen valores personalizados.
Se usa entonces una unidad de medida definida por el usuario
(User)
1 (Predeterminado) Twip (1440 twips por pulgada lgica; 567
twips por centmetro lgico).
2 Punto (72 puntos por pulgada lgica).
3 Pxel (la unidad mnima de la resolucin del monitor o la
impresora).
4 Carcter (horizontal = 120 twips por unidad; vertical = 240
twips por unidad).
5 Pulgada.
6 Milmetro.
7 Centmetro.

Utilizando las propiedades relacionadas ScaleHeight,


ScaleWidth, ScaleLeft y ScaleTop, puede configurar un sistema
de coordenadas completo, con coordenadas positivas y
negativas. Estas cuatro propiedades de escala se relacionan
con la propiedad ScaleMode de la siguiente forma:

Al establecer un valor en cualquier otra propiedad de escala, en


ScaleMode se establece automticamente 0.
Al establecer en ScaleMode un nmero mayor que 0,
ScaleHeight y ScaleWidth cambian a la nueva unidad de
medida, y en ScaleLeft y ScaleTop se establece 0. Adems, los
valores de CurrentX y CurrentY cambian para reflejar las nuevas
coordenadas del punto actual.

Stretch

(Solo control Image)

Devuelve o establece un valor que indica si un grfico cambia su


tamao para ajustarlo al de un control Image.

Sintaxis [Link] [= lgico]

objeto Nombre del control Image


lgico

Expresin booleana que especifica si el grfico adapta

su tamao, segn se describe a continuacin.

True

El grfico cambia su tamao para ajustarlo al del

control.
False

(Predeterminado) El control cambia su tamao para

ajustarlo al del grfico.

Si Stretch tiene el valor True, al cambiar el tamao del control


tambin se cambiar el del grfico que contenga. Cuando
aumenta el tamao del control, mantiene las nuevas medidas
aunque se le introduzca un grfico de menor tamao. Debe
controlarse por programa el tamao del mismo.

TabIndex, TabStop

(Solo control PictureBox)

Igual que otros controles

Tag
Top

Visible
WhatsThisHelpID
Width

Comunes a ambos. Igual que resto de controles.

Otros controles que pueden manejar imgenes

IMAGE LIST

Este control no est normalmente en la caja de herramientas. Solamente


est disponible en la versin de 32 bits. Hay que introducirlo mediante los
Herramientas | Controles Personalizados y pertenece al grupo
Microsoft Windows Common Controls ([Link]) (Vea Nota
1)

Este control nos permite almacenar varias imgenes. Es, tal como indica
su nombre, como un ListBox pero que en vez de contener textos, contiene
imgenes.
La utilidad de este control es para almacenar en l distintas imgenes, y
servirlas desde l a otro control, un PictureBox o un control Image, sin
necesidad de tener que acceder a leerlas en el disco, que conllevara una
importante prdida de tiempo si el cambio de imgenes debe ser rpido.
Este control es necesario para almacenar las imgenes que se mostrarn
en los iconos de la barra de herramientas. Ver mas adelante como se
realiza una barra de herramientas (La barra de herramientas solo est
disponible para la versin de 32 Bits)

Un ImageList permite tener varias imgenes dentro de l, pero este


control no las presenta. Solamente sirve de almacn para pasarlas
rpidamente a otro control (PictureBox, p.e.) que ser el que las
presenta en pantalla.

En la siguiente figura, pueden verse las propiedades de un ImageList con


varias imgenes cargadas.

Nota 1. El grupo de controles Microsoft Windows Common Controls


([Link]) incluye adems de este los controles TabStrip,
Toolbar, StatusBar, ProgressBar, TreeView, ListView y Slider.

Para introducir imgenes en el control ImageList deberemos acceder a


sus propiedades, bien mediante F4 y luego haciendo click sobre
Personalizado, bien pulsando el botn derecho del ratn sobre el icono
del control. Aparecer un cuadro donde podemos insertar imgenes

El tipo de imgenes pueden ser mapas de bits :BMP o iconos .ICO

El control ImageList tiene una coleccin llamada ListImages. Esta


coleccin contiene todas las imgenes introducidas en el ImageList y las
propiedades de cada imagen. Como toda coleccin, ser un array donde
podemos elegir uno de sus elementos designndolo por su nombre
seguido de su nmero (Index) encerrado entre parntesis. As la imagen
nmero 3 ser :

[Link] (3)

Si tenemos un control Picture llamado Picture1 y queremos poner en su


propiedad Picture la imagen cargada en el ImageList1, en su posicin 3,
usaramos la expresin :

Set [Link] = [Link] (3) . Picture

Observe que tras ListImages ( ) es necesario poner la propiedad Picture,


ya que Picture es una propiedad de la coleccin ListImages

Como cualquier coleccin, ListImages tiene la propiedad Count, que nos


servir para contar el nmero de imgenes que guarda.

Numerodeimgenes = ImageList1. [Link]

Dado que al guardar imgenes en un ImageList, estas imgenes estn


guardadas en la memoria RAM, es fcil realizar una animacin. Para ello
necesitamos varias imgenes que poniendo una tras otra, d la sensacin
de movimiento. Imaginemos un nmero indeterminado de imgenes
dentro de un ImageList, y un control Picture llamado Picture1 donde
queremos presentar la animacin. En el procedimiento Timer de un Timer
pondramos

Static pepe As Integer


pepe = pepe + 1
If pepe > [Link] Then pepe = 1
Set [Link] = [Link](pepe).Picture

Una de las mayores aplicaciones del ImageList es proporcionar imgenes


para otros controles. Entre ellos el TOOLBAR

Barra de Herramientas. Control Toolbar

Este control permite realizar una barra de herramientas. La barra de


herramientas es, como ya conocer, una barra donde existen varios
iconos. Estos iconos realizan una determinada funcin. Normalmente se
ponen en la barra de herramientas los iconos que representan las
acciones mas frecuentes de una aplicacin. Esto facilita la operacin al
no tener que desplegar mens para buscar la operacin a realizar.

Como el espacio que ocupan los iconos es grande, es tambin bastante


normal que no estn representados en la barra de herramientas todas las
funciones posibles de la aplicacin, sino como decamos, solamente las
mas frecuentes. Pero ocurre que la funcin que para un usuario es muy

frecuente, para otro no lo es, por lo que tambin es habitual poder


programar los iconos que aparecen en la barra de herramientas.

Todo ello lo puede hacer el control Toolbar.

Para introducir el Toolbar es necesario que est presente en la caja de


herramientas el control personalizado Microsoft Windows Common
Controls ([Link]).

El control Toolbar es un contenedor de un array de iconos. Estos iconos


forman botones sobre los que se puede insertar cdigo en sus
procedimientos. A cada botn se le denomina Button y a la coleccin de
botones se le denomina Buttons. Cada Button es un elemento de la
coleccin Buttons y por lo tanto podemos referirnos a cada uno de ellos
por el ndice que tiene dentro de la coleccin.

Los iconos de cada uno de los botones del Toolbar debe introducirse
previamente en un control ImageList. Como se recordar, un control
ImageList es un almacn de imgenes, que podemos usar en cualquier
parte de la aplicacin. Una de esas partes es la confeccin de la barra de
herramientas. Por lo tanto, es necesario introducir un control ImageList
en cualquier aplicacin que use un control Toolbar. Todas las imgenes

del Toolbar deben estar en un nico ImageList. Y este ImageList debe


estar en el mismo formulario que el Toolbar

La barra de herramientas puede realizarse en tiempo de diseo (este


sera el caso para cuando no existiese variacin ni eleccin de botones a
lo largo de la ejecucin de la aplicacin)
o en tiempo de ejecucin (caso que correspondera con una aplicacin
que tuviese una barra de men programable o que variase esta barra de
men dependiendo de cada operacin que se est ejecutando en la
aplicacin).

Para realizar la barra de herramientas en tiempo de diseo, basta con


visualizar el cuadro de propiedades que aparece pulsando el botn
derecho del ratn sobre el control Toolbar. Aparecer un cuadro de
dilogo como este :

Puede ver que en el cuadro ImageList aparece el nombre de un


ImageList. Al desplegar la lista aparecern todos los ImageList que
existan en el formulario. El ImageList debe estar en el mismo formulario
que el Toolbar. Deber elegirse el ImageList que contenga las imgenes
de los iconos que queremos introducir en el Toolbar.

Este cuadro nos permite tambin introducir la forma que adoptar el


puntero del ratn cuando entre en el Toolbar (MousePointer), si el Toolbar
aparece por defecto habilitado o deshabilitado (Enabled) y si muestra o
no un rtulo programable al pasar el ratn por encima de cada botn del
Toolbar. (ShowTips). (El uso de estos pequeos rtulos pueden hacer
una aplicacin muy bonita) La propiedad AllowCustomize permite, si es
True, cambiar el orden de los botones e introducir separadores (vea
evento DobleClick).

En el cuadro botones podemos introducir los datos deseados para cada


uno de los botones que compondrn la coleccin Buttons.

Para insertar un nuevo botn hay que hacer click sobre Insertar botn e
insertar un nuevo botn inmediatamente despus del que figura en la
propiedad Index (en la figura del ejemplo, lo insertara en segundo lugar,
no en el ltimo lugar como podra creerse). Tambin podemos eliminar un
botn haciendo click sobre Eliminar botn.

El Caption (opcional) es la palabra que figurar debajo del icono del


botn.

Un botn se identifica por su ndice. ( [Link](1) )

La propiedad Key es un nombre que se puede aadir a cada botn. Esta


propiedad sirve para identificar el botn que se ha pulsado, pero no para
nombrar al botn.

La propiedad Value es el valor por defecto, con el que aparecer el botn


al comienzo de la aplicacin. (Unpressed, no pulsado, Pressed, pulsado).

La propiedad Style define el tipo de botn :

0 - Default

Botn monostable. (Se pulsa, pero no se

mantiene pulsado)
1 - Check

Botn Biestable. (Se mantiene pulsado y se

levanta con otro click)


2 - Button Group Solo uno de los botones del grupo puede estar
pulsado. Esta
propiedad lleva implcito que los botones que
forman un grupo son biestables. Pueden hacerse
varios grupos independientes introduciendo un

botn que no pertenezca a un grupo (tipos 0, 1, 3


4) entre los dos grupos que se independientes
que se pretenden formar
3 - Separator

El botn se convierte en un separador de

anchura fija.
4 - PlaceHolder

El botn se convierte en un separador de

anchura variable.

ToolTipText es el texto que aparecer al lado del botn cada vez que se
ponga el cursor del ratn sobre el botn. Para que aparezca debe estar
habilitada la propiedad ShowTips.

Image es el nmero de la imagen en el ImageList.

El control Toolbar tambin puede realizarse en tiempo de ejecucin. Para


introducir u botn en el Toolbar hay que crear el botn y aadirlo a la
coleccin Buttons de Toolbar. Podemos hacerlo en una sola instruccin :

Set NombreBotn = [Link] ( [Indice], [Key],


[Caption], [Style], [Imagen])

NombreBotn puede ser cualquier nombre (es el nombre del objeto


botn)
NombreToolbar es el nombre del Toolbar
Indice es el nmero de orden de ese botn dentro del Toolbar
Key es el valor de la propiedad Key del botn. Este valor debe ser nico
para cada botn.
Style es un nmero del 0 al 4 con el tipo de botn. Vea lista mas arriba
Imagen es el nmero de la imagen para ese botn, dentro del ImageList
que las contiene.

Los botones pueden habilitarse y deshabilitarse usando la propiedad


Enabled (True / False). Recuerde que los botones se identifican por su
ndice :

[Link](Indice).Enabled = False

Para saber que botn se ha pulsado, puede leerse la propiedad Key :

[Link] = [Link]
en la propiedad

presenta en Text1 el texto introducido

Key del ltimo botn pulsado.

Con la lectura de la propiedad Key, y la sentencia Case o If ... Then


podemos iniciar la parte de la aplicacin asociada a cada botn.

El control Toolbar tiene los siguientes eventos :

ButtonClick

Este evento se produce cada vez que se hace click sobre un botn del
Toolbar. Pasa como parmetro el ndice del botn pulsado. Podremos
saber que botn se ha pulsado mediante sentencias condicionales :

Private Sub Toolbar1_ButtonClick(ByVal Button As Button)

If [Link] = 1 Then . . . .
If [Link] = 2 Then . . . .

Tambin podramos usar la propiedad Key como se dijo mas atrs.

Click

Este evento se produce cuando se hace click sobre cualquier botn del
Toolbar, pero no pasa parmetros. (No distingue sobre que botn se ha
hecho click) Podemos utilizarlo cuando se quiera realizar una operacin
comn para todos los botones (Que suene un Beep, por ejemplo)

DobleClick

Este evento solamente se produce cuando se hace doble click en la parte


del Toolbar donde no hay botones, y la propiedad AllowCustomize est
a True. Si se hace doble click sobre un botn se produce solamente el
evento click (dos veces). Haciendo doble click en una zona libre de
botones, con la propiedad AllowCustomize = True nos permite cambiar el
orden de los botones e introducir separadores.

Change

Se produce solamente cuando se ha realizado algn cambio del orden


por el procedimiento anterior.

DragDrop, DragOver

Igual que cualquier control.

MouseMove, MouseUp, MouseDown

Igual que el resto de los controles Pasa como parmetro el ndice del
botn, la tecla de maysculas, y las posiciones x e y del ratn.

Private Sub Toolbar_MouseDown(Button As Integer, Shift As Integer, x


As Single, y As Single)

Este control solamente funciona en la versin de VB de 32 Bits. Pero


para 16 bits puede hacerse una cosa parecida (y mas sencilla) utilizando
un control Picture como contenedor de tantos controles Image como
necesitemos. Dado que el control Picture dispone de propiedad Align y
puede servir como contenedor de otros controles, puede realizarse una
barra de herramientas similar a esta, y posiblemente de forma mas
sencilla.

El control Toolbar NO sirve de contenedor de otros controles, a


excepcin de sus botones ! ! !

LA BARRA DE ESTADO

Este control es muy parecido a la barra de herramientas, y suele usarse,


colocndolo en la parte inferior de la ventana, para indicar el proceso que
est en curso en la aplicacin. La barra de estado, control StatusBar se
introduce en la caja de herramientas al mismo tiempo que el control
Toolbar, mediante el control personalizado mltiple Microsoft Windows
Common Controls ([Link]).

La barra de estado puede albergar hasta 16 paneles, que pueden


contener texto o grficos. Tambin pueden contener informacin del
Hardware, tal como el estado de la tecla Bloqueo de Maysculas,
Bloqueo del teclado numrico, tecla Insert activada, tecla Scroll Lock
activada, o mostrar la fecha y la hora

La barra de estado puede configurarse como de un solo panel o de


mltiples paneles. (Propiedad Style. 0=mltiples paneles, 1= panel nico)

Las dimensiones de cada panel pueden configurarse como fijas o


ajustadas al tamao del texto o imagen que presentan.

Las propiedades pueden establecerse en tiempo de diseo, mediante el


siguiente cuadro.

En este control las imgenes no es necesario introducirlas previamente


en un ImageList. Pueden introducirse directamente sobre el cuadro de
dilogo que sale pulsando el botn derecho del ratn - propiedades - en
la ventana correspondiente a paneles. Acepta imgenes tipo Bit-map o
.ICO. Los paneles pueden combinar una grfico y un texto.

La barra de estado puede realizarse en tiempo de diseo o en tiempo de


ejecucin. Para realizarla en tiempo de ejecucin basta con visualizar la
ventana de propiedades, muy similar a la del control Toolbar.

Para aadir un panel en tiempo de ejecucin basta con aadirlo a la


coleccin Panels del control StatusBar mediante la sentencia :

Set PanelNuevo = [Link].( [ndice],[key],


[Text],[estilo],[grfico]

Donde PanelNuevo es el nombre con el que se va a conocer ese panel


que acabamos de crear. PanelNuevo debe declararse como variable
objeto Panel donde sea necesario segn el mbito que le queramos dar.
De esta forma, una vez creado, nos podremos referir a ese panel
simplemente citndolo por su nombre (En este caso, PanelNuevo)

Los trminos

[ndice],[key],[Text],[estilo],[grfico] que entran a formar

parte en la sintaxis de creacin del panel se explican a continuacin.

Indice - Necesario. Es el ndice que define al panel dentro del StatusBar.

Key - Opcional. Es la propiedad Key de ese panel (El contenido de esta


propiedad lo podemos
leer desde cada panel
Variable = [Link]([Link]).Key
Text - El texto que queremos figure en el panel (Solo si la propiedad
Estilo est en sbrText
Estilo - Propiedad estilo del panel.
0 - sbrText

El panel mostrar el Texto de la propiedad

Text de ese panel


1 - sbrCaps

El panel muestra el estado de la tecla Bloqueo

Maysculas
2 - sbrNum

El panel muestra el estado de la tecla Bloq.

3 - sbrIns

El panel muestra el estado de la tecla Insert

4 - sbrScrl

El panel muestra el estado de la tecla

Nmeros

Scroll / Lock
5 - sbrTime
6 - sbrDate

El panel muestra la hora


El panel muestra la fecha

Grfico - Es el grfico que va a tener el panel. Este grfico puede


obtenerse desde un ImageList,

[Link](n).Picture - o directamente desde el


disco duro, mediante el
mtodo LoadPicture LoadPicture("C:\vb\icons\comm\[Link]") -

Si no se pone alguna de las propiedades opcionales intermedias, deben


mantenerse las comas separadoras.

Como ejemplo, podemos aadir varios paneles de la siguiente forma :

Dim PanelNuevo As Panel

Donde deba declararse a efectos del

mbito
Dim pepe As Integer

Set PanelNuevo = [Link](pepe, "Contenido del Key " &


Str(pepe), "Texto " & Str(pepe), ,
LoadPicture("C:\vb\icons\comm\[Link]"))

Estos son los controles grficos mas importantes. Ver a lo largo del
curso que existen otros, y ms que podr encontrar entre diferentes
suministradores de controles, ya que VB ha dejado una puerta abierta
para realizar controles a medida. Existen varias empresas de software
dedicadas a la fabricacin de controles personalizados, y en el aspecto de
controles grficos, podr encontrar una amplia gama de fabricantes y
controles. Puede obtener muchos controles en el CD-ROM que
acompaa a varias revistas especializadas en programacin VB, y a
travs de la red Internet.
CONTROLES DE BUSQUEDA DE FICHEROS Y DIRECTORIOS

DriveListBox, DirListBox Y FileListBox.

Se obtienen directamente de la Caja de Herramientas, en los iconos siguientes:

DriveListBox permite elegir una unidad de disco.


DirListBox muestra los directorios existentes en un rbol.
FileListBox muestra los ficheros existentes en un determinado directorio.

Tal como indica su nombre, estos controles son listas. Repase el control ListBox
para recordar sus propiedades.

DriveListBox

Este control permite elegir una unidad de disco vlida en tiempo de ejecucin.
Utilice este control para mostrar una lista de todas las unidades vlidas del
sistema de un usuario. Puede crear cuadros de dilogo que permitan al usuario
abrir un archivo de una lista en cualquier unidad disponible.

DriveListBox desplegado y sin desplegar Name (nombre) por defecto List1

Posee las propiedades tpicas de cualquier control VB respecto a su geometra y


color. Las Propiedades mas destacables de este control son : Drive, List,
ListCount y ListIndex

Drive devuelve el nombre de la unidad de disco seleccionada :

Variable = [Link] Variable = a :

( c :[MS-DOS_6] D )

Este control se trata de una lista como su nombre indica, y posee las propiedades
List, ListCount y ListIndex para permitir al usuario tener acceso a elementos de
la lista.

List (n) devuelve el texto que define a la unidad colocada en el lugar n. El nmero
n comienza por 0. Por ejemplo, en la figura anterior, [Link](1) devolver c :
[MS-DOS_6]

ListCount proporciona informacin acerca del nmero de unidades de disco


disponibles (En el ejemplo, [Link] ser 3, que corresponde a los tres
discos disponibles - disco C :, disco A : y disco D : )

ListIndex devuelve el ndice del disco seleccionado en la lista (0 para el primero,


n-1 para el ltimo)

Utilizando el control DriveListBox en combinacin con DirListBox y FileListBox,


podr realizar un explorador de ficheros en cualquier disco de su ordenador.

DirListBox.

Presenta un cuadro de la siguiente forma:

donde puede verse el rbol completo de un directorio. El DirListBox solamente


presenta directorios. No presenta ficheros.

Aparte de las propiedades geomtricas de todos los controles, el DirListBox


presentas las siguientes propiedades particulares :

Path
Devuelve o establece la ruta de acceso actual. No est disponible en tiempo de
diseo.

Sintaxis

[Link] [= pathname]

donde

Nombre

es el nombre del DirListBox

pathname Una expresin de cadena que evala en el nombre de va de acceso


del directorio por defecto del DirListBox..

El valor de la propiedad Path es una cadena que indica una ruta de acceso, como
C:\WINDOWS\SYSTEM. El valor predeterminado es la ruta de acceso actual

Cuando se cambia la propiedad Path en tiempo de ejecucin se genera un evento


Change.

Nota
El valor que devuelve Path es distinto del de List (ListIndex). Path
devuelve siempre un mismo camino, bien el que se le haya impuesto mediante
esta misma propiedad Path, y si no se le ha impuesto con anterioridad, el que
tenga por defecto. List (ListIndex) devuelve el camino completo del directorio

seleccionado, y, como era de esperar, cambia cada vez que cambiamos la


seleccin del directorio.

List, ListCount y ListIndex

Al igual que cualquier lista, el DirListBox tiene las propiedades List, ListCount y
ListIndex.

ListIndex devuelve el valor del ndice del directorio seleccionado. El valor devuelto
es cero cuando est seleccionado el primer directorio de los situados al final del
rbol, 1 para el siguiente, etc. Toma el valor -1 cuando se selecciona el directorio
inmediatamente superior al ltimo nivel, el valor -2 cuando se selecciona el
directorio situado 2 niveles jerrquicos por encima del ltimo nivel, etc.

ListCount devuelve un valor numrico igual al nmero de directorios existentes en


el ltimo nivel, independientemente de los directorios que tuviesen por arriba.

List (n) devuelve una cadena de caracteres con el camino completo del elemento
cuyo orden sea el sealado entre parntesis. Si en vez de n colocamos el
ListIndex nos devolver, logicamente, el camino del elemento seleccionado.

FileListBox

Esta lista nos presenta los ficheros existentes en un directorio.

Como se puede apreciar, cuando el nmero de ficheros supera el nmero que


puede presentar, aparecen automticamente las flechas de scroll verticales.

Esta lista de ficheros tiene las siguientes propiedades destacables :

Path

Devuelve o establece la ruta de acceso de su directorio actual. No est disponible


en tiempo de diseo. Este directorio puede ser el que se le haya impuesto
mediante esta propiedad Path, o el que tenga por defecto. (El directorio por
defecto sera el del ejecutable de la aplicacin)

Si le ponemos el nombre por defecto, List1, para todos los ejemplos :

variable = [Link]
Basic32
(p. e.)

Variable = C:\Archivos de programa\Microsoft Visual

ListCount

Devuelve el nmero total de ficheros que hay en ese directorio.

Variable = [Link] Variable = 19

(p. e.)

ListIndex

Devuelve un nmero con el ndice del elemento seleccionado. Como todas las
listas, devuelve -1 si no hay ningn elemento seleccionado. El primer elemento de
una lista tiene el ndice = 0.

Filename

Devuelve el nombre del fichero seleccionado.

List (n)

Devuelve el nombre del fichero que ocupa el lugar n en la lista.

Variable = [Link] (5)


lugar en la lista.

Variable = nombre del fichero que ocupa el 5

Si en lugar de n ponemos el valor de ListIndex :

variable = [Link] ([Link])


seleccionado.

obtendremos el nombre del fichero

Observe que en este ltimo caso, el resultado es el mismo que el de


[Link]

Veamos otras propiedades del FileListBox

Pattern
Devuelve o establece un valor que indica los nombres de archivo
mostrados en un control FileListBox en tiempo de ejecucin.

Sintaxis

[Link] [= valor]

La sintaxis de la propiedad Pattern consta de las siguientes partes:

objeto : Nombre del Control FileListBox

valor: Expresin de cadena que indica una especificacin de archivo, como *.* o
*.FRM. La cadena predeterminada es *.*, que obtiene una lista de todos los
archivos. Adems de utilizar caracteres comodn, tambin puede especificar varios
modelos, separndolos con caracteres punto y coma (;). Por ejemplo, con
*.EXE; *.BAT se obtendra una lista con todos los archivos ejecutables y todos los
archivos por lotes de MS-DOS.

Comentarios

La propiedad Pattern juega un papel clave en el diseo de las funciones de


examen y tratamiento de archivos de una aplicacin. Puede utilizar Pattern en
combinacin con otras propiedades de control de archivos para proporcionar al
usuario formas de explorar archivos o grupos de archivos similares. Por ejemplo,
en una aplicacin dedicada a iniciar otros programas, podra hacer que slo
apareciesen los archivos .EXE en el cuadro de lista de archivos (*.EXE).
Al modificar el valor de la propiedad Pattern se genera un evento PatternChange.

Archive, Hidden, Normal, System

Devuelven o establecen un valor que determina si un control FileListBox presenta


los archivos con los atributos Archive, Hidden, Normal o System.

El atributo Archive de un fichero indica si se ha variado ese fichero despus de la


ltima copia de seguridad.
El atributo Hidden indica si el fichero se trata de un fichero oculto.
El atributo Normal indica que el fichero es un fichero normal (No est oculto ni es
de sistema).
El atributo System de un fichero indica que el fichero es un fichero de sistema.

Sintaxis
[Link] [= booleano]
[Link] [= booleano]
[Link] [= booleano]
[Link] [= booleano]

Las sintaxis de la propiedades Archive, Hidden, Normal y System tiene la siguiente


partes:
objeto :Nombre del FileListBox
booleano :Una expresin booleana (True / False) que especifica el tipo de archivos
presentados.

El valor booleano puede presentar los siguientes valores :


True :(Predeterminado para Archive y Normal) Presenta archivos con el atributo de
la propiedad en el control FileListBox.
False : (Predeterminado para Hidden y System) Presenta archivos sin el atributo
de la propiedad en el control FileListBox.

Use estas propiedades para especificar el tipo de archivos a presentar en un


control FileListBox, basndose en los atributos de archivos estndar usados en el
entorno operativo. La definicin de estas propiedades en el cdigo en tiempo de
ejecucin hace que el control FileListBox presente slo aquellos archivos con los
atributos especificados.
Por ejemplo, en una operacin de buscar y reemplazar se podran presentar
solamente archivos del sistema estableciendo la propiedad System a True y las
dems propiedades a False. Tambin, como parte del procedimiento de copia de
seguridad, se podra establecer la propiedad Archive a True para relacionar
solamente aquellos archivos modificados a partir de la ltima copia de seguridad.

PROCEDIMIENTOS del FileListBox

Click

Change

KeyDown KeyPress

DragDrop

DragOver

GotFocus

KeyUp

SENTENCIAS DE MANEJO DE DIRECTORIOS Y FICHEROS

El Directorio Actual

Se llama directorio Actual al directorio que est actualmente en uso, bien porque
haya sido forzado el control correspondiente a tener ese directorio en su propiedad
Path, bien porque, al no haberse forzado ninguno, utilice el directorio por defecto.

El directorio por defecto es el ltimo que se ha seleccionado por algn


procedimiento. Por ejemplo, al arrancar una aplicacin, el directorio por defecto
ser el mismo donde se encuentra el ejecutable. Pero si a lo largo de la aplicacin
cambiamos el directorio, seleccionando otro mediante un CommonDialog, ese
directorio es el que queda por defecto. Asegrese en sus aplicaciones que
siempre elige la propiedad Path antes de presentar ficheros o directorios a travs
de los controles anteriores, para evitar que pueda mostrarle ficheros de un
directorio no deseado.

Puede comprobar cual es el directorio actual. La funcin CurDir nos devuelve el


directorio actual.

Ejemplo : Introduzca una lnea de cdigo con la siguiente sentencia

Variable = CurDir

Al ejecutarla la variable Variable contendr la informacin :

Variable = C:\Archivos de programa\Microsoft Visual Basic32

(p. e.)

Puede darse el caso de que desee conocer el directorio actual de varias unidades
de disco. Por ejemplo, puede estar trabajando en el directorio
C:\CursoVB\Ejemplos y ser este el directorio actual en el disco C :, y tener un
disquete en la unidad A : en el que la ltima vez que trabaj fue en el directorio
A :\ApVB\Tema1 y ese es su directorio por defecto en el disco A. Para conocer el
directorio actual del disco C : no necesit especificar la unidad, ya que era
precisamente la unidad C la unidad actual. Para conocer el directorio actual de la
unidad A empleara la expresin :

Variable = CurDir (A)


A :\ApVB\Tema1

Variable tomar entonces el valor Variable =

Decamos que el disco C era la unidad actual. Tambin podemos cambiar la


unidad actual, mediante la sentencia ChDrive seguida de una letra (entre comillas
dobles)

Ejemplo
que el

ChDrive A

cambia la unidad actual a la unidad A.

Observe

parmetro A no tiene que llevar los dos puntos ( : ),


aunque si lo
desea, puede ponerlos. Tambin es indiferente que la
letra sea
mayscula o minscula.

Tambin podemos forzar a que un directorio sea el directorio por defecto. La


sentencia que tendremos que usar en ChDir.

Ejemplo : ChDir C :\Windows\System cambiara el directorio actual al


especificado.

Podemos incluso crear un directorio. Usaremos para ello la sentencia MkDir. Esta
sentencia crea el directorio con el nombre indicado, sobre el directorio actual.

Si el directorio actual es el C:\VB\Icons y ejecutamos la sentencia :

MkDir Varios

crearamos el directorio C:\VB\Icons\Varios

Podemos incluso eliminar un directorio. La sentencia para eliminar un directorio es


RmDir

Cuidado !
Visual-Basic no le advertir que puede borrar algo que no
desea. Asegrese muy bien mediante un aviso al usuario cada vez que elimine un
directorio.

Vamos a ver ahora como podemos ver los nombres de los ficheros existentes en
un determinado directorio. Muy sencillo, con un FileListBox. Efectivamente, as
podra ser para presentarlos en pantalla. Sin embargo, si deseamos imprimir la
lista de ficheros existentes, guardarla en un fichero, etc., tenemos una forma que
facilita esta labor. Igual que en DOS. La funcin Dir

A esta funcin le debemos aadir como parmetro el criterio de bsqueda, criterio


formado por los caracteres o comodines que deseemos. Dir devuelve solamente
el nombre de un fichero, por lo que tendremos que repetirla tantas veces como
ficheros tenga el directorio. Pero solamente tendremos que introducir el criterio de
bsqueda la primera vez.

En el siguiente ejemplo, sacaremos por impresora los nombres de los ficheros


existentes en el directorio actual : (Este cdigo lo meteremos en el procedimiento
click de un botn de comando)

fichero = Dir("*.*")

Le decimos que imprima todos (*.*)

Do Until fichero = ""


cero..

Hasta que fichero sea una cadena de longitud

[Link] fichero

Imprime la variable fichero en la impresora

fichero = Dir
Loop

Toma el nombre de otro fichero


Vuelve a Do Until .....

[Link]

Termina la impresin y saca la hoja de la

impresora

Ya sabemos sacar el directorio. Vamos a ver que otras cosas se pueden hacer con
ficheros.

Funcin Kill. A poco Ingls que sepa se habr dado cuenta que esta funcin sirve
para quitarse algo de enmedio. Esta funcin borra un fichero del disco.

Kill C:\CursoVB\Ejemplos\[Link]

borra el fichero [Link], que se encuentra en el disco C, directorio \


CursoVB\Ejemplos

Funcin FileCopy. Copia un fichero. La sintaxis de esta funcin es la siguiente :

FileCopy Origen, Destino

Si tenemos un TextBox llamado Text1 donde vamos a introducir el nombre (con su


Path) del fichero origen, otro TextBox donde introduciremos el nombre (con su
Path) que queremos dar a la copia, para copiar ese fichero ejecutaremos la
sentencia :

FileCopy [Link], [Link]

Si queremos copiar un fichero del disco A, en el directorio CursoVB y de nombre


Ejemplo1 al disco y directorio C:\CursoVB\Ejemplos y con el mismo nombre que
tena en el disco A, es decir, Ejemplo1, ejecutaremos la sentencia :

FileCopy A :\CursoVB\Ejemplo1 , C:\CursoVB\Ejemplos\Ejemplo1

Observe la necesidad de dobles comillas para especificar que es, precisamente lo


escrito en el cdigo, lo que indica el origen y el destino. En el caso anterior no
llevaba dobles comillas, debido a que era el contenido de un TextBox lo que se
usaba para indicar el origen y el destino.

La instruccin Name cambia el nombre de un fichero. No solamente puede


cambiar un nombre, puede incluso moverlo de sitio, pero siempre en la misma
unidad de disco.

La sintaxis de Name es la siguiente :

Name nombrerutaantiguo As nombrerutanuevo

Donde nombrerutaantiguo es una expresin de cadena que indica el nombre del


fichero (con su path) al que se le quiere cambiar el nombre, y nombrerutanuevo
es una expresin de cadena que especifica el nombre nuevo y, si se desea mover
de directorio, la nueva ubicacin del archivo y la unidad de disco. El nombre y
ubicacin especificados en nombrerutanuevo no pueden ser los de un archivo
existente.

Tanto nombrerutanuevo como nombrerutaantiguo deben encontrarse en la


misma unidad de disco. Si la ruta de acceso especificada en nombrerutanuevo
existe y es distinta de la ruta de acceso especificada en nombrerutaantiguo, la
instruccin Name coloca el archivo en el nuevo directorio o carpeta y cambia el

nombre del archivo, de ser necesario. Si nombrerutanuevo y nombrerutaantiguo


tienen distintas rutas de acceso y el mismo nombre de archivo, Name coloca el
archivo en la nueva ubicacin, sin cambiar el nombre del archivo. Por medio de
Name se puede mover un archivo de un directorio o carpeta a otro, pero no se
puede mover un directorio o carpeta.

Si se utiliza Name con un archivo abierto se produce un error. Antes de cambiar el


nombre de un archivo, se debe cerrar.

En
el
ejemplo,
vamos
a
cambiar
el
nombre
del
C:\CursoVB\Ejemplos\Ejemplo1 por el de C :\CursoVB\Ejemplos\Prueba1

Name
C:\CursoVB\Ejemplos\Ejemplo1
C :\CursoVB\Ejemplos\Prueba1

fichero

As

En el siguiente, aparte de cambiarlo de nombre, le cambiamos de directorio.

Name
C:\CursoVB\Ejemplos\Ejemplo1
C :\CursoVB\Ejercic\Prueba1

As

Existe una funcin que le permite conocer el volumen de un fichero : FileLen.


Mediante esta instruccin podr saber, por ejemplo, si un fichero le va a caber en
lo que le queda libre de un disquete, el tiempo previsto para enviarlo por mdem,
etc.

La sintaxis es la siguiente :

Variable = FileLen("C:\CursoVB\Ejemplos\Ejemplo1")

Variable tomar un valor numrico igual al nmero de bytes del fichero.

Otra funcin para el tratamiento de ficheros es FileDateTime, que le permite


conocer la fecha y hora de creacin o de la ltima modificacin de un fichero.

La sintaxis es, para el caso del ejemplo :

Variable = FileDateTime ("C:\CursoVB\Ejemplos\Ejemplo1")

Variable puede tomar un valor como el siguiente : Variable = 13/02/97 14:59:20

(Observe que de esta funcin se obtiene una variable de cadena.) Puede


aprovechar esta funcin para borrar o hacer Backup de determinados ficheros que
tengan mas de un tiempo de permanencia, sustituir ficheros por versiones mas
recientes, etc.

Podemos obtener y modificar los atributos de un fichero. Los atributos de un


fichero se refieren a si son de solo lectura, ficheros ocultos, de sistema, si ha sido
modificado desde la ltima vez que se ha realizado un Backup,

Para conocer los atributos de un fichero, utilizaremos la funcin GetAttr. Esta


funcin devuelve un nmero, que representa la suma de los atributos de un
archivo, directorio o carpeta o una etiqueta de volumen.

Sintaxis

Variable = GetAttr (nombreruta)

Donde nombreruta es una expresin de cadena que especifica un nombre de


archivo, con su Path y unidad de disco.

El valor devuelto por GetAttr es un nmero, igual a la suma de los siguientes


valores de atributos:

Valor

Constante

Descripcin

vbNormal

Normal.

vbReadOnly

vbHidden

Oculto.

vbSystem

Archivo de sistema.

16

vbDirectory

32
vbArchive
ltima copia

Slo lectura.

Directorio o carpeta.
El archivo ha sido modificado despus de efectuar la
de seguridad.

Si la expresin nombreruta representa un directorio, se lo indicar devolviendo el


valor 16.

Para cambiar un atributo utilizaremos la funcin SetAttr. La sintaxis de esta


funcin es la siguiente

Sintaxis

SetAttr nombreruta , atributos

Donde nombreruta es una expresin de cadena que especifica un nombre de


archivo, con su Path y unidad de disco, y atributos es una o varias de las
constantes o valores anteriores, cuya suma especifica los atributos de archivo.

Dado que el valor 16 indica que lo expresado en nombreruta es un directorio, no


puede pretenderse darle a ese directorio atributos que solamente se pueden
aplicar a un fichero, ni puede pretender darle a un fichero un valor en el que entre
el 16 como sumando. Estos casos le producirn un error en tiempo de ejecucin.

Si pretende establecer los atributos de un archivo abierto, se producir un error en


tiempo de ejecucin.

Existe una funcin, que no tiene nada que ver con la anterior, aunque puede
parecerlo por su parecido semntico y que tambin devuelve atributos, pero de
otro tipo. Esta funcin es FileAttr

Funcin FileAttr

Devuelve el modo de apertura de un archivo. Logicamente debe referirse a un


archivo abierto en el momento de ejecutar esta funcin. Vea para mas detalles la
sentencia Open.

Sintaxis

variable = FileAttr (numerocanal , tipoinformacin)

Donde numerocanal es el nmero del canal de apertura de ese archivo, y


tipoinformacin es el tipo de informacin que deseamos de ese fichero. Si
tipoinformacin = 1 nos devuelve el modo de apertura del fichero, segn la
siguiente lista

Valor

Modo del archivo

Entrada

Salida

Aleatorio

Aadir

32

Binario

La Ayuda de VB dice que tipoinformacin puede ser =2 para que FileAttr devuelva
informacin sobre el selector de archivos del sistema operativo. Algunas veces la
informacin de ayuda de VB promete cosas que, sin dudar de que sean ciertas,
son difciles de comprobar.

Esta funcin no tiene una gran aplicacin prctica, ya que comprueba la forma en
la que hemos abierto un archivo. Informacin que conocemos desde el mismo
momento de abrirlo.

OBJETO CLIPBOARD

Proporciona acceso al Portapapeles del sistema.

Sintaxis

Clipboard

El objeto Clipboard se usa para manipular el texto y los grficos del Portapapeles. Este
objeto puede usarse para permitir que el usuario corte, copie y pegue texto y grficos en la
aplicacin.
El objeto Clipboard puede contener varias unidades de datos siempre y cuando cada una
tenga un formato diferente. Por ejemplo, se puede usar el mtodo SetData para poner un
mapa de bits en el Clipboard con el formato CF_BITMAP y despus usar el mtodo

SetText con el formato CF_TEXT para poner texto en el Clipboard. Despus se puede usar
el mtodo GetText para recuperar el texto o el mtodo GetData para recuperar el grfico.
Los datos del Clipboard se pierden cuando se colocan otros datos con el mismo formato en
el Clipboard desde el cdigo o mediante un comando de men.

SetText

Pone una cadena de texto en el objeto Clipboard usando el formato del objeto Clipboard
especificado. No acepta argumentos con nombre.

Sintaxis

[Link] datos, formato

datos Requerido. Cadena de datos que se va a colocar en el Portapapeles.

formato
Opcional. Una constante o valor que especifica uno de los formatos
del Portapapeles reconocidos por Visual Basic, como se describe a continuacin :

Los valores de formato son:

Constante

Valor

Descripcin

vbCFLink

&HBF00

Informacin de conversacin DDE

vbCFRTF

&HBF01

Formato de texto enriquecido

vbCFText

(Predeterminado) Texto

Estas constantes se enumeran en la biblioteca de objetos de Visual Basic (VB) del


Examinador de objetos.

SetData

Pone una imagen en el objeto Clipboard usando el formato grfico especificado. No


acepta argumentos con nombre.

Sintaxis

datos

[Link] datos, formato

Requerido. El grfico que se va colocar en el objeto Clipboard.

Importante. Ver NOTA1 mas adelante

formato
del

Opcional. Una constante o valor que especifica uno de los formatos


objeto Clipboard reconocidos por Visual Basic, como se describe
mas adelante. Si formato se omite, SetData determina el formato
grfico automticamente.

Los valores de formato son:

Constante

Valor Descripcin

vbCFBitmap 2

Mapa de bits (archivos .BMP)

vbCFMetafile 3

Metarchivo (archivos .WMF)

vbCFDIB

Mapa de bits independiente del dispositivo (DIB)

vbCFPalette 9

Paleta de colores

Estas constantes se enumeran en la biblioteca de objetos de Visual Basic (VB) del


Examinador de objetos.
El grfico que se va colocar en el objeto Clipboard se define mediante la funcin
LoadPicture o la propiedad Picture de los objetos Form, Image o PictureBox.

NOTA 1. Esta informacin est obtenida de la ayuda de VB. Observe que dice que el
grfico puede ser la propiedad Picture de un Form, Image o PictureBox.

NO pretenda hacer esto

sino ESTO

[Link] [Link]

[Link] [Link]

NOTA 2. Tambin existe un error en la forma de meter una imagen en el Portapapeles con
el mtodo Load Picture. La informacin dice que se introducir de la siguiente forma :

[Link] LoadPicture(C:[Link])

Cuando vaya a introducir un fichero de mapa de bits (.BMP) ES NECESARIO poner que
el fichero es del tipo 8 :

[Link] LoadPicture(C:[Link]), 8

ya que si no, el Portapapeles contendr solamente un cuadro negro. Si introduce otro tipo
de ficheros, ( .WMF) no es necesario poner el nmero de tipo de fichero.

(Observe que esto NO coincide con lo que aporta la informacin de VB.)

GetData
Devuelve un grfico del objeto Clipboard. No acepta argumentos con nombre.

Sintaxis

[Link] (formato)

formato
Opcional. Una constante o valor que especifica el formato grfico de Clipboard,
como se describe mas adelante. La constante o valor debe ir entre parntesis. Si
formato es 0 o se omite, GetData usa automticamente el formato apropiado.

Los valores de formato son:

Constante

Valor Descripcin

vbCFBitmap 2

Mapa de bits (archivos .BMP)

vbCFMetafile 3

Metarchivo (archivos .WMF)

vbCFDIB

Mapa de bits independiente del dispositivo (DIB)

vbCFPalette 9

Paleta de colores

Si en el objeto Clipboard no hay ningn grfico que coincida con el formato


esperado, no se devuelve nada. Si en el objeto Clipboard slo hay una paleta de
colores, se crea un DIB de tamao mnimo (1 x 1).

GetText

Devuelve una cadena de texto del objeto Clipboard. No acepta argumentos con
nombre.

Sintaxis

[Link] (formato)

formato
Opcional. Un valor o constante que especifica el formato del objeto Clipboard,
como se describe mas adelante. La constante o valor debe ir entre parntesis.

Los valores de formato son:

Constante

Valor Descripcin

vbCFLink

&HBF00

Informacin de conversacin DDE

vbCFText

(Predeterminado) Texto

Si en el objeto Clipboard no hay ninguna cadena de texto que coincida con el


formato esperado, se devuelve una cadena vaca ("").

Paste

Copia datos desde el Portapapeles del sistema en un control contenedor OLE.

Sintaxis

[Link]

Objeto es el nombre del Panel Contenedor OLE donde se quiere depositar el


contenido del Portapapeles.

Comentario

Para usar este mtodo, defina la propiedad OLETypeAllowed y despus verifique el


valor de la propiedad PasteOK. No se puede pegar con xito a menos que PasteOK
devuelva True.
Si se ha ejecutado el mtodo Paste, la propiedad OLEType es vbOLELinked (0) o
vbOLEEmbedded (1). Si no se ha ejecutado el mtodo Paste, la propiedad OLEType
es vbOLENone (3).
Este mtodo puede usarse para implementar un comando Edicin Pegar en un men.
Si el valor de la propiedad PasteOK es True y Visual Basic no puede pegar el objeto,
el control contenedor OLE elimina cualquier objeto existente en el control.

PasteOK

Devuelve un valor que determina si el contenido del Portapapeles del sistema se


puede pegar en el control contenedor OLE.

Sintaxis

[Link]

Objeto es el nombre del contenedor OLE donde se quiere pegar el contenido del
portapapeles.

Comentario

Cuando el valor de esta propiedad es True, el contenido del Portapapeles del sistema
se puede pegar en el control contenedor OLE.
La propiedad OLETypeAllowed se usa para especificar el tipo del objeto (vinculado
o incrustado) que se quiere pegar en el control contenedor OLE. Una vez que un
objeto se ha pegado en el control contenedor OLE, se puede verificar el valor de la
propiedad OLEType para determinar el tipo de objeto que ha sido creado.
Esta propiedad puede usarse si se quiere que la aplicacin implemente un comando
Pegar en un men Edicin. Si PasteOK es False, el comando del men se
deshabilita; si no, puede habilitarse. Los comandos de men se habilitan y se
deshabilitan estableciendo su propiedad Enabled a True o False, respectivamente.

Los objetos se pegan en el control contenedor OLE con el mtodo Paste.


Para ofrecer mayor flexibilidad al usuario, presente un cuadro de dilogo Pegado
especial cuando el usuario elija el comando Edicin Pegar
. (Establezca OLETypeAllowed = 2 y despus use el mtodo PasteSpecialDlg).
Cuando se presenta este cuadro de dilogo, el objeto del Portapapeles del sistema se
pega basndose en las selecciones del usuario en el cuadro de dilogo.

GetFormat

Devuelve un entero que indica si un elemento del objeto Clipboard coincide con un
formato especificado. No acepta argumentos con nombre.

Sintaxis

[Link] (formato)

formato
Requerido. Un valor o constante que especifica el formato del objeto Clipboard,
como se describe mas adelante. La constante o valor debe ir entre parntesis.

Los valores de formato son:

Constante

Valor Descripcin

vbCFLink

HBF00Informacin de conversacin DDE

vbCFText

Texto

vbCFBitmap 2

Mapa de bits (archivos .BMP)

vbCFMetafile 3

Metarchivo (archivos .WMF)

vbCFDIB

Mapa de bits independiente del dispositivo (DIB)

vbCFPalette 9

Paleta de colores

El mtodo GetFormat devuelve True si algn elemento del objeto Clipboard


coincide con el formato especificado. Si no, devuelve False.
Para los formatos vbCFDIB y vbCFBitmap, la paleta de colores que se encuentre en
el Clipboard se usa para presentar el grfico.

Clear

Borra el contenido del Portapapeles del sistema.

Sintaxis

[Link]

Con Clear se borra todo el contenido del portapapeles, texto y grficos.

Copy
Copia el objeto de un control contenedor OLE al Portapapeles del sistema.

Sintaxis

[Link]

Objeto es el nombre del contenedor OLE cuyo contenido queremos copiar

Comentario

Cuando se copia un objeto en el Portapapeles del sistema, todos los datos y la informacin
de vinculacin asociados con el objeto se copian en el Portapapeles del sistema. En el
Portapapeles del sistema se pueden copiar objetos vinculados y objetos incrustados.
Este mtodo puede usarse para implementar un comando Edicin Copiar en un men.

EJERCICIO

Se propone el siguiente ejercicio, donde pueden verse todas las posibilidades del
Portapapeles.

Cree un formulario de la siguiente forma :

El grfico que tiene el Picture de la izquierda puede ser cualquiera.

El cdigo de este formulario es el siguiente :

Option Explicit

Private Sub Check1_Click()


End Sub

Private Sub Command1_Click()


[Link] [Link]

End Sub

Private Sub Command2_Click()


Dim ClpFmt As Integer
Dim Msg As String
On Error Resume Next

' Configura el controlador de errores.

If [Link](vbCFText) Then ClpFmt = ClpFmt + 1


If [Link](vbCFBitmap) Then ClpFmt = ClpFmt + 2
If [Link](vbCFDIB) Then ClpFmt = ClpFmt + 4
If [Link](vbCFMetafile) Then ClpFmt = ClpFmt + 8
Select Case ClpFmt
Case 1
Msg = "El Portapapeles slo contiene texto."
Case 2
Msg = " El Portapapeles slo contiene un archivo de mapa de bits."
Case 3
Msg = " El Portapapeles contiene texto y un archivo de mapa de bits."
Case 5
Msg = " El Portapapeles contiene texto y un archivo DIB."
Case 8
Msg = " El Portapapeles contiene solamente un archivo MetaFile."
Case 9
Msg = " El Portapapeles contiene texto y un archivo MetaFile."

Case Else
Msg = "No hay nada en el Portapapeles."
End Select
[Link] = Msg ' Muestra el mensaje.
End Sub

Private Sub Command3_Click()


[Link]
End Sub

Private Sub Command4_Click()


[Link] [Link]
End Sub

Private Sub Command5_Click()


[Link] = [Link]
End Sub

Private Sub Command6_Click()


[Link] = [Link]()
End Sub

Private Sub Command7_Click()

[Link] = LoadPicture
End Sub

Private Sub Command8_Click()


[Link] = Trim([Link])
If UCase(Right([Link], 3)) = "BMP" Then
[Link] = 1
Else
[Link] = 0
End If
If [Link] = 1 Then
[Link] LoadPicture([Link]), 8
Else
[Link] LoadPicture([Link])
End If
End Sub

EL EDITOR DE MENUS
El Men o Barra de Men es la segunda lnea de cualquier ventana Windows, donde
pueden verse distintos nombres. La Barra de Men es un componente de un Formulario.

La Barra de Men puede tener tantas palabras como se desee, y sobre cada palabra, puede
desplegarse un Men desplegable con mas palabras. Sobre cada una de estas puede a su vez
desplegarse otro conjunto de palabras, etc. con lo que se puede conseguir una cantidad de
palabras tan grande como necesitemos.

Para cada palabra se produce el evento click. Cada palabra de la Barra de Men lleva anexo
un nico procedimiento, que se ejecutar al hacer click sobre la palabra. Pero en las
palabras que sirven para desplegar un men no tiene sentido que se ponga ningn cdigo en
su procedimiento, ya que estn ah justamente para desplegar otras palabras. Ser en las
palabras finales donde se colocar el cdigo correspondiente.

En las figuras anteriores pueden verse tres formas distintas de ver el mismo Men. En la
primera figura el Men est sin desplegar. En la segunda figura puede verse un rbol de
Men largo, desplegado en su totalidad. En la tercera puede verse el Men desplegable de
la palabra Archivo de la Barra de Men. Puede apreciarse en este men desplegable una
lnea que separa las palabras Guardar Como y SALIR. Esta lnea separadora es muy
prctica para separar dos temas distintos dentro de un Men desplegable. Tan distintos
como las operaciones de Abrir y Guardar respecto a la ltima orden del men desplegable
que es SALIR de la aplicacin.

Para crear un men debe usarse el Editor de Men, que se encuentra en la Barra de Men
de VB en Herramientas | Editor de mens. Le aparecer el siguiente cuadro. (En
principio vaco)

Cada palabra del men tiene su Caption (La palabra que aparece en el men), su Name
(Nombre), y puede tener Index (si existen varias palabras con el mismo Name). Para
introducir estas propiedades basta con teclearlas directamente en cada una de las casillas al
efecto del cuadro del editor de mens. Para colocar el cursor de escritura en una u otra
casilla, puede hacerse bien con el cursor del ratn, bien con el tabulador. Para pasar a la
siguiente lnea de edicin (crear una nueva palabra), basta con pulsar ENTER.

Existen otras propiedades aparte del Caption y Name que se introducen directamente en las
casillas al efecto.

HelpContextID
Igual que esta propiedad en el resto de los controles, permite
introducir un nmero de contexto para la ayuda de Windows.

Enabled.
Habilitado. Si se quita la marca de esa casilla, esa palabra aparecer por
defecto deshabilitada. Esta propiedad puede leerse y cambiarse en tiempo de ejecucin, por
lo que esta propiedad puede usarse para deshabilitar ciertas funciones de la aplicacin,
dependiendo de la evolucin de la propia aplicacin. La presentacin en el men cuando
est deshabilitada es con color plido.

Visible.
Como su nombre indica, que sea visible o no lo sea. Puede cambiarse
en tiempo de ejecucin.

WindowList Indica si esa palabra es la que va a mostrar todos los formularios abiertos en
una aplicacin de documentos mltiples (MDI). Al hacer click sobre esta palabra, se
desplegar un submen con todos los Caption de los Formularios hijo abiertos en ese
momento. Solamente puede existir una palabra en un men con esta propiedad activada.
Esta propiedad no puede variarse en tiempo de ejecucin.

Para cambiar una de estas propiedades en tiempo de ejecucin, basta con citar por su
nombre a esa palabra (por su Name, no por su Caption), e igualar a True o False su valor :

[Link] = False

El nombre usado para nombrar a una de las palabras del men puede ser cualquiera. Sin
embargo es prudente usar un nombre que nos pueda identificar, por una parte, que ese
nombre corresponde a una de las palabras del men, y por otra, a que palabra se refiere. La
solucin puede ser cualquiera. El autor de estos apuntes propone poner las letras mnu (o
menu - recomiendo no usar acentos e los Names de VB), seguido del Caption de esa
palabra.

Otras propiedades

Shortcut
Atajo. Esta propiedad admite varias combinaciones de teclas para acceder al
procedimiento click de esa palabra sin necesidad de usar el ratn. Las combinaciones de
teclas posibles se muestran haciendo click en la flecha hacia abajo que tiene esa casilla. Se
desplegar una lista con todas ellas. Para elegir una de estas combinaciones, basta con hacer
click sobre la lnea que la contiene. Esta combinacin de teclas aparecer en el men, al
lado de la palabra (Vase figura siguiente, SALIR Ctrl + X)

NegotiatePosition. Establece un valor que determina si los controles Menu de nivel


superior se muestran en la barra de mens mientras un objeto vinculado o incrustado de un
formulario est activo y mostrando sus mens. No est disponible en tiempo de ejecucin.
Puede tener los valores 0 (Predeterminado) Ninguno. El men no se muestra en la barra de
mens cuando el objeto est activo.
1 Izquierda. El men se muestra a la izquierda de la barra de mens cuando el objeto est
activo.
2 Medio. El men se muestra en medio de la barra de mens cuando el objeto est activo.
3 Derecha. El men se muestra a la derecha de la barra de mens cuando el objeto est
activo.

El men editado con los datos de la figura anterior tendr esta forma en tiempo de
ejecucin :

Observe que tiene cuatro palabras en la lnea superior, y que colgando de la primera
aparece un men desplegable. Para conseguir un men desplegable fjese en la figura del
Editor, en la parte de abajo donde estn todos los Caption de las palabras del men.
Observar que algunas de ellas (&Edicion, Documentos, Ayuda - Hay otra que no se v,
&Archivo) estn completamente a la izquierda de la ventana, y las dems estn separadas
de la parte izquierda por unos guiones. Las palabras que estn completamente a la izquierda
son las que figurarn en la barra de men de forma permanente. Las que estn separadas
(tabuladas) corresponden a las que aparecern en los mens desplegables. Como es lgico,
un men desplegable debe colgar de una palabra de las de la barra de men. La palabra de
la que cuelga el submen es la palabra sin tabular inmediatamente anterior.

Para tabular las palabras, hay que hacer click en el botn en forma de flecha a la derecha
que est sobre la ventana de edicin :

Situandonos sobre una de las lneas ya editadas, y haciendo click sobre el botn con flecha
hacia la izquierda, quitamos la tabulacin.

Los botones con flecha hacia arriba o abajo nos permiten variar el orden de las lneas ya
editadas.

Podemos hacer varios niveles de submens a base de introducir varias tabulaciones. Al


comienzo de este captulo puede ver un ejemplo de ello.

Quedan un par de cosas. Una de ellas es el carcter & que est delante de los Caption de
Archivo y Edicin. Este carcter nos permite acceder al procedimiento click de esa palabra
pulsando la tecla Alt + la tecla correspondiente a la letra que est detrs del carcter &.
Justamente la letra que est subrayada en la palabra del men.

El carcter & no tiene porqu ir precisamente al comienzo de la palabra. Puede ir en el


medio de la palabra. De esta forma se subrayar una letra intermedia.

Otra cosa. Puede verse en el men desplegado de la figura anterior una lnea entre Guardar
Como y SALIR. Esta lnea, que solamente tiene efectos estticos, se logra introduciendo
como Caption un guin ( - ). El editor de mens solamente le permite el guin en una
palabra de men desplegable (Tabulada). No se olvide de poner el Name incluso para este
guin.

NOTA MUY IMPORTANTE

Siempre se recomienda poner la orden de SALIR en la primera palabra de la barra de


Men. Bien que esa primera palabra sea Salir o que est en el men desplegable de la
primera palabra de la Barra de Men, en este ltimo caso, separada mediante una lnea
separadora. (Vea The Windows Interface Guidelines for Software Design, pg.124)

POPUP MENS

Un PopUpMen o Men Emergente es un men que despliega en cualquier punto de un


Formulario (MDI o normal) con varias opciones. Es normal en los procesadores de texto
que se obtenga un men emergente pulsando el botn derecho del ratn, donde aparecen las
tres palabras mgicas de Copiar, Cortar y Pegar.

Para crear un men emergente o PopUpMenu es necesario tener en el men de ese


formulario una palabra de la que se despliegue un submen con las mismas palabras que
queremos que aparezcan en el PopUpMenu.

Por ejemplo, en el men que hemos editado como ejemplo anteriormente, exista una
palabra Edicin, de la que se desplegaba el Submen Copiar, Cortar y Pegar. Si analizamos
la edicin realizada, las palabras tenan el siguiente Caption y Name :

Caption

Name

Edicin

mnuEdicionNO

Copiar

mnuCopiar SI

Cortar

mnuCortar SI

Pegar

mnuPegar SI

Tabulada

Recuerde que las palabras del men que estaban tabuladas son las que
aparecan en el men desplegable. Esas mismas sern las que aparezcan en el
PopUpMenu.

Para ello utilizaremos el Mtodo PopupMenu. Este mtodo pesenta un men


emergente en un objeto MDIForm o Form en la posicin actual del mouse o en las
coordenadas especificadas.

La sintaxis de este mtodo es la siguiente :

[Link] nombremen, indics, x, y, negrita

Donde NombreFormulario es el nombre del formulario donde presentamos el


PopUpMenu. Puede omitirse.

Nombremen. Este parmetro es requerido. Es el Name de la palabra del men


de donde cuelga el men desplegable. La palabra del men a que se refiere
Nombremen debe tener al menos un submen.

Indics. Parmetro opcional. Un valor o constante que especifica la posicin y el


comportamiento del men emergente, como se describe a continuacin :

Constante (posicin) Valor Descripcin

vbPopupMenuLeftAlign
del men se

(Predeterminado) El lado izquierdo

sita en x.
vbPopupMenuCenterAlign

El men emergente se centra en x.

vbPopupMenuRightAlign

El lado derecho del men se sita

en x.

Constante (comportamiento) Valor Descripcin

vbPopupMenuLeftButton
elementos del

(Predeterminado) Los

men emergente slo reaccionan a


los
clic del mouse cuando se use el
botn
primario del mouse.

vbPopupMenuRightButton
emergente

Los elementos del men

reaccionan a los clic del mouse


cuando se
usen los botones primario o
secundario.

Para combinar la los valores de indics de posicin y comportamiento basta con


sumar los valores.

Nota El parmetro indics no tiene efecto en las aplicaciones que se ejecuten bajo
Microsoft Windows versin 3.0 o anteriores.

X, y Parmetro(s) opcionales que especifican las coordenadas x e y donde va a


aparecer el men emergente. Si no se especifican, aparecer donde est el
puntero del mouse. Las unidades de medida de las coordenadas x e y se definen
mediante la propiedad ScaleMode.

negrita. Parmetro opcional que especifica el nombre de un control men del


men emergente para presentar su ttulo en negrita. Si se omite, ningn control del
men aparece en negrita.

Nota. Este argumento funciona solamente en las aplicaciones que se ejecuten


bajo Windows 95. La aplicacin ignora este argumento cuando se ejecute bajo
versiones de 16 bits de Windows o Windows NT 3.51 y anteriores.

La forma mas habitual de presentar un men emergente es mediante el botn


derecho del ratn. Concretamente en el editor Word que estoy utilizando para
escribir estos apuntes ocurre cuando se levanta el botn derecho del ratn. Es
decir, en el evento MouseUp, con la condicin de que Button=2. Imaginemos que
queremos presentar en un men emergente las palabras Cortar, Copiar y Pegar
del ejemplo anterior, que colgaban en el men de la palabra Edicin. (Vea mas

atrs). Queremos tambin que la palabra Copiar salga resaltada en negrita.


Iramos al procedimiento MouseUp del Formulario y escribiramos :

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As


Single)
If Button = 2 Then
PopupMenu mnuEdicion, , , , mnuCopiar
End If
End Sub

Observe que se ha omitido el nombre del Formulario (Opcional), el parmetro


indics, y las coordenadas x e y (el men emergente aparecer donde est situado
el cursor del ratn). Observe tambin que las comas separadoras de los
parmetros hay que colocarlas.

Cuando se presenta un men emergente, el cdigo que sigue a la llamada al


mtodo PopupMenu no se ejecuta hasta que el usuario elige un comando del
men (en cuyo caso se ejecuta antes el cdigo del procedimiento de evento Click)
o cancela el men. Adems, slo puede presentarse un men emergente al mismo
tiempo; por lo tanto, las llamadas a este mtodo se ignoran si el men emergente
est presentado actualmente o si un men desplegable est abierto.

Si queremos presentar un men emergente es necesario tener ese men en el


men del formulario. El problema puede ser que no queramos que est en la barra
de men. No es problema. Ponga la propiedad Visible del elemento del men
desde el que se va a desplegar el submen a False. No se ver ya en la barra de
men ni esa palabra ni el submen que de ella se despliega. Eso s, las palabras
del submen deben tener la propiedad Visible = True. Si les pone esa propiedad a
False, no se vern en el men emergente. Puede aprovechar esta circunstancia
para hacer mens emergentes con mas o menos elementos, segn las
necesidades de su aplicacin. Tambin puede poner la propiedad Enabled a False
si as lo precisa. No puede activar la propiedad WindowList en un elemento que
forma parte de un men emergente.

Se denominan mtodos grficas a aquellos mtodos que nos permiten dibujar o representar
grficos ya existentes en un objeto, o que nos permiten analizarlos o borrarlos. Los
mtodos grficos de que dispone Visual Basic son :

Circle, Cls, Line, PaintPicture, Point, Print, y PSet.

METODO Line

Dibuja lneas y rectngulos en un objeto. El objeto puede ser un Formulario, un control


PictureBox o el objeto Printer.

Sintaxis 1

[Link] (x1, y1) - (x2, y2), color, BF

(Con esta sintaxis trazar una lnea desde las coordenadas absolutas x1,y1
(origen) a las coordenadas tambin absolutas x2,y2. El color de la lnea ser
el
especificado en color. Los parmetros BF se explican mas adelante.

Sintaxis 2

[Link] (x1,y1) - Step (x2,y2), color, BF

(Con esta sintaxis trazar una lnea desde las coordenadas absolutas x1,y1
hasta las coordenadas relativas a (x1,y1), x2,y2. Es decir, al poner la palabra
Step (paso) antes de las coordenadas finales, le estamos indicando que las

coordenadas que siguen a Step son relativas. Relativas respecto a quien?.


Relativas a las coordenadas de comienzo de la lnea. Esta ltima expresin
hara lo mismo que la siguiente expresin :

[Link] (x1,y1) - (x1+x2, y1+y2), color, BF

Podemos darnos cuenta por la descripcin anterior que la palabra Step (palabra reservada
de Visual Basic) indica que las coordenadas que le siguen son relativas a algo. Veamos la
tercera forma de colocar una lnea :

Sintaxis 3

[Link] Step (x1,y1) - Step (x2,y2), color, BF

Con esta expresin trazar una lnea entre las coordenadas relativas (x1, y1),
y las coordenadas relativas (x2,y2). En principio es fcil entender que
(x2,y2)
son relativas al punto (x1,y1), pero Respecto a quin son relativas las
coordenadas (x1,y1) ? Son relativas a la posicin del puntero de dibujo en el
instante anterior a ejecutar esta sentencia, es decir al CurrentX, CurrentY
que
existiese antes de ejecutar la sentencia.

En estas expresiones, las coordenadas estarn especificadas en las unidades de medida


determinadas por las propiedades ScaleMode o ScaleWidth / ScaleHeight del objeto.

En las expresiones anteriores objeto es el nombre del Formulario, PictureBox u objeto


Printer sobre el que queremos dibujar. Si no se especifica objeto se entiende por defecto
que el objeto sobre el que queremos dibujar es el formulario que tiene el enfoque en ese
momento.

Color es el nmero de color, que se puede poner en cualquiera de las posibles formas que
permite VB. Si no se especifica color, pondr el color por defecto, que es el valor de la
propiedad ForeColor del objeto.

BF es un parmetro opcional. En realidad este parmetro sirve para que en vez de hacer una
lnea haga un rectngulo. La expresin :

[Link] (x1,y1) - (x2,y2) , RGB(255,0,0), B

dibuja un rectngulo entre los puntos (x1,y1) y (x2,y2).


La expresin :

[Link] (x1,y1) - (x2,y2), RGB (0,255,0), BF

dibuja un rectngulo relleno del mismo color de la lnea (en este caso verde) con esquinas
en las coordenadas (x1,y1) y (x2,y2)

De lo explicado se deduce que si el parmetro opcional BF es solamente B dibuja un


cuadrado con esquinas en las coordenadas indicadas (pueden ser absolutas o relativas), y si
es BF pinta ese rectngulo y adems lo rellena con el mismo color elegido en el parmetro
color. No puede usarse solamente la F pues no tiene sentido rellenar de color una figura
abierta.

Para dibujar lneas unidas, comience la lnea siguiente en el punto final de la lnea anterior.

La anchura de la lnea dibujadas depende de la configuracin de la propiedad DrawWidth.

Cuando se ejecuta Line, las propiedades CurrentX y CurrentY toman el valor del punto
final de la lnea.
METODO Circle

Dibuja una circunferencia, crculo, elipse o arco sobre un objeto.

Sintaxis

[Link] (x, y), Radio, Color, Inicio, Final, Aspecto

En la expresin anterior, objeto es el objeto donde se dibujar el circulo. Puede ser, como
en el caso de la lnea, un Formulario, un PictureBox o el objeto Printer. Si se omite, se
asume que se refiere al Formulario que tenga el enfoque en ese momento.

(x, y) son las coordenadas del punto central del crculo, elipse o arco. Las unidades de
medida vendrn determinadas por las propiedades ScaleMode o ScaleWidth / ScaleHeight
del objeto.

Radio Este parmetro es requerido. Indica el radio del crculo, elipse o arco, en el mismo
sistema de unidades de medida.

Color Este parmetro es opcional. Es el nmero del color, expresado en cualquiera de las
formas aceptadas por Visual Basic. Si se omite, se utiliza el valor de la propiedad
ForeColor.

Inicio, Final Valor opcional. Cuando se dibuja un arco o parte de un crculo o elipse,
inicio y fin especifican (en radianes) la posicin inicial y final del arco. El rango de ambas
es de - 2 pi radianes a 2 pi radianes. El valor predeterminado de inicio es 0 radianes; el de
final es de 2 pi radianes.

Nota para los que no aprobaron Matemticas

Un circulo completo tiene 2 x pi radianes. Es decir, 2 x 3,1416 radianes equivalen a


360 . Como los datos de ngulos hay que introducirlos en radianes y nosotros
normalmente pensamos en grados, emplee esta frmula para convertir grados a
radianes :

Radianes = Grados x 2 x 3,1416 / 360

Aspecto Este valor nos convertir la circunferencia en una elipse. Recuerde que una elipse
es una circunferencia generalizada. Lgicamente, este parmetro es opcional. El valor
predeterminado es 1.0, lo que crea un crculo perfecto (no elptico) en la pantalla. Si
utilizamos en esta propiedad el valor 2 obtendremos una elipse con el radio horizontal de
doble valor que el vertical. Si empleamos 0.5 obtendremos otra elipse, con el radio vertical
doble respecto al horizontal.

Para rellenar la circunferencia y conseguir un crculo, establezca las propiedades FillColor


y FillStyle del objeto en el que se dibuja el crculo o elipse. Slo se puede rellenar una
figura cerrada. La figuras cerradas son crculo, elipses o porciones de tipo circular (arcos
con lneas de radio dibujadas en ambos lados).

Los valores de Inicio y Final son siempre positivos. El sentido de cuenta de los ngulos es
en sentido contrario a las agujas del reloj. Si le aadimos a Inicio o a Final un signo menos
delante, lo que hace es dibujar un radio desde el centro del circulo hasta el inicio de la
circunferencia (si le hemos puesto un - a Inicio) o hasta el final del arco (si le hemos
puesto un - a Final). Se le pueden poner a ambos y cerramos la figura. Es decir, si
queremos que adems de hacer el arco, dibuje los radios, pondremos el signo menos ( -)
delante de Inicio y de Final, a sabiendas que VB siempre entender los valores de Inicio y
Final como positivos.
NOTA. No se le con la informacin que aporta VB para este tema. Est mal !!!

Lo expuesto anteriormente NO FUNCIONA para valores de Inicio o Final iguales a 0. Por


lo tanto, si queremos hacer un radio en 0 radianes (lnea recta desde el centro a la derecha)
deberemos poner una cantidad muy cercana a 0 (0.00000001, p. e.) para que ponga el
radio.

Puede omitir un argumento opcional en medio de la sintaxis, pero debe incluir la coma del
argumento antes de poner el argumento siguiente. Si omite un argumento adicional del
final, no utilice comas tras el ltimo argumento que especifique.

Cuando se ejecuta Circle, las propiedades CurrentX y CurrentY toman el valor del punto
central.

METODO Cls

Borra los grficos y el texto generados en tiempo de ejecucin de los controles Form,
Image o PictureBox. Observe que el objeto Printer no tiene mtodo Cls.

Sintaxis

[Link]

Donde objeto representa un formulario, control Image o PictureBox. Si objeto se omite, se


asume que el objeto es el control Form que tenga el enfoque.

Cls borra el texto y los grficos generados en tiempo de ejecucin por instrucciones
grficas y de presentacin. Los mapas de bits de fondo definidos usando la propiedad
Picture y los controles dispuestos en un Form en tiempo de diseo no se ven afectados por
Cls. Los grficos y el texto colocados en controles Form, Image o PictureBox mientras la
propiedad AutoRedraw es True no se ven afectados si AutoRedraw se establece a False
antes de llamar a Cls. Es decir, el texto y los grficos de los controles Form, Image o
PictureBox pueden mantenerse manipulando la propiedad AutoRedraw del objeto con el
que se trabaja.

Despus de llamar a Cls, las propiedades CurrentX y CurrentY del objeto se restablecen a
0.

METODO PaintPicture

Presenta el contenido de un archivo grfico (.BMP, .WMF, .EMF, .ICO o .DIB) en un


objeto Form, PictureBox o Printer. La imagen deber estar en un Formulario o en un
control Image. NO puede usarse este mtodo para dibujar una imagen contenida en un
fichero (Vea mas adelante la funcin LoadPicture)

Puede sacar mucho partido a la propiedad PaintPicture. Piense solamente que puede volcar
una imagen .BMP al objeto Printer (a la impresora). Esto puede permitirle dibujar un
logotipo en un listado, factura, etc.

Sintaxis

[Link] Imagen, x1, y1, anchura1, altura1, x2, y2, anchura2, altura2, Opecod

La sintaxis del mtodo PaintPicture tiene las siguientes partes:

objeto es el objeto donde queremos colocar el grfico. Es opcional. Si se omite, se asume


que el objeto es el formulario que tenga el enfoque.

Imagen Este parmetro es requerido. Es el origen del grfico que se va a presentar en el


objeto. Debe ser la propiedad Picture de un objeto Form, control PictureBox o control
Image. Tambin puede ser el contenido de una variable tipo Picture. Es decir, la imagen
debe existir en un PictureBox, en un Formulario, en un control Image o en una variable. Si
es un control, el que contiene la imagen, puede ponerse invisible (Su propiedad Visible =
False) con lo que podemos hacer un almacenillo de imgenes en un formulario sin que
molesten a la hora de trabajar

x1, y1 Parmetro requerido. Indican las coordenadas destino (eje x y eje y) del objeto en
las que se ponemos el origen de la imagen. Las propiedad ScaleMode, o ScaleWidth y

ScaleHeight del objeto determinan las unidades de medida que se usan. Recuerde que las
coordenadas en VB crecen desde la esquina superior izquierda. Los valores x1 e y1
determinan el punto del objeto donde se colocar la esquina superior izquierda del grfico
que vamos a introducir.

anchura1 Opcional. Indica la anchura destino de la imagen. La propiedad ScaleMode del


objeto determina las unidades de medida que se usan. Si anchura destino es mayor o menor
que la anchura origen (anchura2), imagen se ampla o se comprime respecto al original. Si
se omite, se usa la anchura origen.

altura1
Opcional. Indica la altura destino de la imagen. La propiedad ScaleMode
del objeto determina las unidades de medida que se usan. Si altura destino es mayor o
menor que la altura origen (altura2), imagen se ampla o se comprime respecto al original.
Si se omite, se usa la altura origen.

x2, y2 Parmetro opcional. Indican las coordenadas (eje x y eje y) de la zona de recorte
dentro de la imagen origen. Esto de la zona de recorte significa que podemos cortarle a la
imagen origen un trozo, tanto en sentido vertical como en horizontal.

anchura2 Opcional. Indica la anchura de la imagen origen. Este parmetro se usa para
establecer la relacin entre la anchura de la imagen final y la anchura de la imagen origen.

Si al realizar la copia de la imagen a Objeto, esta nos sale muy grande, podemos, bien
rebajar el parmetro anchura1 o aumentar anchura2, puesto que la medida real del ancho
de la imagen final estar en relacin directa con el cociente anchura1/anchura2

altura2
caso.

Opcional. Lo mismo que para anchura2, pero referido a la altura en este

Opecod Opcional. Valor Long o cdigo que se usa slo con mapas de bits. Define una
operacin bit a bit (por ejemplo, operador Not o Xor) que se realiza sobre imagen al

dibujarla sobre objeto. Para obtener la lista completa de los operadores bit a bit, busque el
tema BitBlt en el archivo de Ayuda de Windows SDK ([Link]).

NOTA Como caso prctico, el autor de este texto suele guardar la imagen en una variable
tipo Picture. Se desconoce el ancho de esa imagen, que vendr dado por la anchura real del
Bitmap. Puede conocerse la anchura y altura de la imagen consultando la anchura y altura
de la variable :

AnchodelaImagen = [Link]
AlturadelaImagen = [Link]

Muchas veces, la imagen que se introduce en la variable tipo Picture es distinta en una
ocasin u otras, por lo que desconocemos a priori que dato debemos poner a anchura1 y a
anchura2. Todo tiene solucin. Con el cdigo siguiente el ancho y alto de la imagen se
mantendr constante independientemente de la anchura y altura que tenga el Bitmap
original.

[Link] Imagen, x1, y1, anchura1, altura1, , , [Link], _


[Link]

donde hemos omitido x2, y2 de forma intencionada, pero observe que hemos seguido
respetando su sitio con las comas como separadores. El ltimo parmetro, Opecod se ha
omitido, pero como es el ltimo, no hace falta dejarle las comas.

Pueden omitirse tantos argumentos finales como se desee. Si se omite uno o varios
argumentos finales, no se usan comas a partir del ltimo argumento especificado. Si se
quiere especificar un argumento opcional, se deben especificar todos los argumentos
opcionales que aparecen antes en la sintaxis.

METODO Point

Devuelve, como entero Long, el color rojo - verde - azul (RGB) del punto especificado de
un objeto Form o control PictureBox.

Sintaxis

[Link](x, y)

donde
objeto Opcional. Nombre del Formulario o PictureBox donde se va a analizar el color. Si
objeto se omite se asume que el objeto es el formulario que tenga el enfoque.

x, y Parmetro requerido. Valores Single que indican las coordenadas horizontal (eje x) y
vertical (eje y) del punto segn la propiedad ScaleMode del objeto Form o control
PictureBox. Deben colocarse entre parntesis.
Estas coordenadas se refieren a las coordenadas del objeto que contiene el grfico, con
origen (0,0) en la esquina superior izquierda del mismo.

Si el punto definido por las coordenadas x e y est fuera de objeto, el mtodo Point
devuelve el valor -1.

METODO Pset

Asigna a un punto de un objeto un color especificado. El objeto puede ser un Formulario,


un PictureBox o el objeto Printer.

Sintaxis

[Link] (x, y), Color

[Link] Step (x, y), Color

La sintaxis del mtodo PSet tiene las partes siguientes:

objeto Opcional. Nombre del objeto (Formulario, PictureBox o Printer). Si se omite


objeto, se asume como objeto el Formulario que tenga el enfoque.

(x, y) Requeridos. Valores de simple precisin que indican las coordenadas horizontales
(eje x) y verticales (eje y) del punto a establecer.

Estas coordenadas se refieren a las coordenadas del objeto destino, con origen (0,0) en su
esquina superior izquierda.

Color Parmetro opcional. Valor entero largo que indica el color RGB especificado para el
punto. Si se omite, se utiliza el valor de la propiedad ForeColor. Puede utilizar la funcin
RGB o la funcin QBColor para especificar el color.

El tamao del punto dibujado depende del valor de la propiedad DrawWidth. Cuando
DrawWidth es 1, PSet establece un pxel al color especificado. Cuando DrawWidth es
mayor que 1, se centra el punto en las coordenadas especificadas.

La forma en que se dibuja el punto depende de los valores de las propiedades DrawMode y
DrawStyle.

Cuando se ejecuta PSet, las propiedades CurrentX y CurrentY toman el valor del punto
especificado en los argumentos.

Vace un pxel con el mtodo PSet especificando las coordenadas del pxel y utilizando el
valor de la propiedad BackColor como argumento color.

Como complemento a los Mtodos grficos, bueno ser comentar las formas posibles de
introducir colores en VB y otras propiedades que tienen relacin con los mtodos grficos.

NOTA ADICIONAL
Colores en Visual Basic.
(Este texto es repeticin del expuesto en el capitulo del CommonDialog)

Visual Basic acepta para especificar un color, tres procedimientos: Mediante el nmero de
color, mediante la sentencia RGB ( rojo, verde, azul ) o mediante la funcin QBColor.

Por nmero

El nmero que representa el color en VB est formado por la suma de la componente roja,
la componente verde y la componente azul. Podramos verlo muy bien en numeracin
Hexadecimal:

Color = Hex XX YY ZZ

Donde ZZ es un nmero Hexadecimal que representa la cantidad del color rojo. El mnimo
estara en 0 (H00) y el mximo en 255 (HFF)

YY representara la cantidad de color verde y XX la de color azul, ambos con los mismos
lmites explicados para el rojo.

Por ejemplo: el rojo puro sera:

Hex(0000FF) = 255

el verde puro sera:

Hex(00FF00) = 652280

el azul puro sera:

Hex(FF0000) = 16711680

Una mezcla de un poco de rojo (HB1), otro poco de verde (H56) y otro poco de azul (H1F)
dara el siguiente nmero:

Hex(1F56B1) = 2053809

Por la sentencia RGB

Se puede expresar el color, poniendo simplemente RGB (rojo, verde, azul), donde rojo es
un nmero entre 0 y 255 que indica la cantidad de color rojo que se aporta al color, verde
un nmero comprendido entre 0 y 255 indicando la cantidad de verde, y lo mismo para
azul.
Esta es la forma mas sencilla de poner la propiedad color, y con la que mejor controlaremos
el mismo.

Mediante la Funcin QBColor

Devuelve o establece el cdigo de color RGB correspondiente a un nmero de color.

Sintaxis

[Link](color)

El argumento color es un nmero entero entre 0 a 15, segn la siguiente lista:

Nmero

Color

Nmero

Color

Negro

Gris

Azul

Azul claro

Verde

10

Verde claro

Aguamarina 11

Aguamarina claro

Rojo

12

Rojo claro

Fucsia

13

Fucsia claro

Amarillo

14

Amarillo claro

Blanco

15

Blanco brillante

Ejemplo. Tengamos un Label llamado Label1 y un botn de comando, en cuyo


procedimiento click le introducimos el cdigo:

Static i As Integer
i=i+1
If i = 16 Then i = 0
[Link] = i
[Link] = QBColor(i)

En el Label podremos ver el color y su nmero de color.

FIN DE LA NOTA ADICIONAL SOBRE COLORES EN VB

SavePicture (Instruccin)

Guarda un grfico de un objeto Form, de un control PictureBox o de un control Image en


un archivo.

Sintaxis

SavePicture imagen, expcadena

La sintaxis de la instruccin SavePicture tiene las siguientes partes:

imagen es el nombre del objeto que contiene los grficos que se van a guardar en el
archivo, mas su propiedad Picture o Image y expcadena es el nombre del archivo grfico
que se va a guardar.

Ejemplo:

SavePicture [Link], "c:\suarez\[Link]"

En este ejemplo, guardamos en el fichero [Link] que est en el directorio C:\SUAREZ


el grfico que contiene el PictureBox denominado Picture1

Si un grfico ha sido cargado en la propiedad Picture desde un archivo, en tiempo de diseo


o en tiempo de ejecucin, se guarda usando el mismo formato del archivo original. Los
grficos de la propiedad Image siempre se guardan como archivos de mapas de bits
(.BMP).

LoadPicture (Funcin)

Carga un grfico en un objeto Form, un control PictureBox o un control Image.

Sintaxis

[Link] ([expcadena])

Donde Objeto es el nombre del Formulario, PictureBox o control Image que se va a


rellenar con el grfico, y el argumento expcadena es el nombre del archivo grfico que se
quiere cargar.

Usando LoadPicture sin argumento se borran los grficos de los formularios y los controles
PictureBox e imagen.

Los formatos grficos reconocidos por Visual Basic incluyen archivos de mapas de bits
(.BMP), archivos de icono (.ICO), archivos de longitud codificada (.RLE) y Metarchivo
(.WMF).

Para cargar grficos para presentarlos en un control PictureBox, Image o como fondo de un
formulario, el valor devuelto por LoadPicture debe ser asignado a la propiedad Picture del
objeto en el se quiere presentar la imagen. Por ejemplo:

[Link] = LoadPicture ("[Link]")


[Link] = LoadPicture ("[Link]")
[Link] = LoadPicture ([Link]")

Para asignar un icono a un formulario, se asigna el valor devuelto por la funcin


LoadPicture a la propiedad Icon del objeto Form:

[Link] = LoadPicture ("[Link]")

Los iconos tambin pueden ser asignados a las propiedades DragIcon de todos los controles
excepto los controles Timer y Men. Por ejemplo:

[Link] = LoadPicture ("[Link]")

Para cargar grficos en el Portapapeles del sistema se usa LoadPicture de la forma


siguiente:

[Link] LoadPicture ("[Link]") (Vea Captulo del Portapapeles)

Puede tambin meter una imagen en una variable, y luego poner en uno de los controles
citados anteriormente la imagen guardada en la variable. Este mtodo le permite presentar
una imagen muy rpidamente, ya que no necesita acceder al disco para buscar una imagen,
pero emplea mucha memoria RAM, ya que la variable (o variables) conteniendo la(s)
imgenes estn en la RAM.

Para ello hay que declarar las variables como Picture

Option Explicit
Dim MiVariable1 As Picture, MiVariable2 As Picture

Private Sub Form_Load()


Set MiVariable1 = LoadPicture("c:\pruebavb\ [Link] ")
Set MiVariable2 = LoadPicture("c:\list_tel\[Link]")
End Sub

Private Sub Command1_Click()


[Link] = MiVariable1
End Sub

Private Sub Command2_Click()


[Link] = MiVariable2
End Sub

Mediante este programa lo que hemos hecho fue guardar dos imgenes en sendas variables,
en el momento de cargar el formulario, imgenes que se pasan posteriormente al control
Picture1 con los botones de comando Command1 y Command2

DrawMode (Propiedad)

Devuelve o establece un valor que determina el aspecto de la salida de un mtodo grfico o


el aspecto de un control Shape o Line.

Sintaxis

[Link] [= nmero]

Donde objeto es el nombre del Formulario, PictureBox, objeto Print, o los controles Shape
o Line, y nmero es un entero que especifica el aspecto, segn la siguiente lista:

Blackness.

Not Merge PenInverso del valor 15 (Merge Pen).

3
del

Mask Not PenCombinacin de los colores comunes del color de fondo y el inverso
Pen.

Not Copy PenInverso del valor 13 (Copy Pen).

5
Mask Pen NotCombinacin de los colores comunes al Pen y al inverso de la
muestra.
6

InvertInverso del color de muestra.

7
de

Xor PenCombinacin de los colores en el Pen y en el color de la muestra, pero no


ambos.

Not Mask PenInverso del valor 9 (Mask Pen).

Mask PenCombinacin de los colores comunes al Pen y a la presentacin.

10

Not Xor PenInverso del valor 7 (Xor Pen).

11

NopNadano hay cambios. De hecho, este valor desactiva el dibujado.

12

Merge Not PenCombinacin del color de muestra y el inverso del color del Pen.

13

Copy Pen (Predeterminado)Color especificado por la propiedad ForeColor.

14

Merge Pen NotCombinacin del color del Pen y el inverso del color de muestra.

15

Merge PenCombinacin del color del Pen y el color de muestra.

16

Whiteness.

Use esta propiedad para producir efectos visuales con controles Shape o Line o al dibujar
con mtodos grficos. Visual Basic compara cada pxel de la plantilla de dibujo con el pxel
correspondiente del fondo existente y despus aplica operaciones a nivel de bit. Por
ejemplo, el valor 7 (Xor Pen) usa el operador Xor para combinar un pxel del dibujo con un
pxel del fondo.
El efecto exacto de un valor DrawMode depende del modo en el que el color de una lnea
dibujada en tiempo de ejecucin se combina con los colores de la pantalla. Los valores 1, 6,
7, 11, 13 y 16 producen los mejores resultados.

DrawStyle (Propiedad)

Devuelve o establece un valor que determina el estilo de lnea de la salida de mtodos


grficos.

Sintaxis

[Link] [= nmero]

Donde objeto es el nombre del Formulario, PictureBox, objeto Print sobre el que se va a
dibujar, y nmero es un entero que especifica el estilo de lnea, tal como se describe a
continuacin:

(Predeterminado) Continuo.

Rayas.

Puntos.

Raya - punto.

Raya - punto - punto.

Transparente.

Continuo interior.

Si DrawWidth se define con un valor mayor que 1, los valores de DrawStyle entre 1 y 4
producen una lnea continua (el valor de la propiedad DrawStyle no cambia). Si
DrawWidth se define como 1, DrawStyle produce el efecto para cada valor descrito en la
tabla anterior.

DrawWidth (Propiedad)

Devuelve o establece la anchura de lnea de lo dibujado con los mtodos grficos.

Sintaxis

[Link] [= tamao]

Donde objeto es el nombre del Formulario, PictureBox, objeto Print sobre el que se va a
dibujar, y tamao es una expresin numrica comprendida entre 1 y 32.767 que representa
la anchura de la lnea en pixeles. El valor predeterminado es 1, es decir, un pxel de ancho.

Puede incrementar el valor de esta propiedad para aumentar la anchura de la lnea. Si el


valor de la propiedad DrawWidth es mayor que 1, los valores de 1 a 4 en la propiedad
DrawStyle producirn una lnea continua (el valor de DrawStyle no se modifica). Si se
establece 1 en DrawWidth, DrawStyle producir los resultados mostrados en la tabla de
esta propiedad.

FillColor

(Propiedad)

Devuelve o establece el color usado para rellenar formas; FillColor tambin se usa para
rellenar crculos y cuadros creados con los mtodos grficos Circle y Line.

Sintaxis

[Link] [ = valor]

Donde objeto es el nombre del Formulario, PictureBox, objeto Print sobre el que se va a
dibujar, y valor es un valor o constante que determina el color de relleno, con cualquiera
de los criterios de VB para definir el color.
De forma predeterminada, FillColor est definido como 0 (Negro).

Comentarios

Excepto en el objeto Form, cuando la propiedad FillStyle se define con su valor


predeterminado, 1 (Transparente), el valor de FillColor se ignora.

FillStyle

(Propiedad)

Devuelve o establece el modelo usado para rellenar controles Shape as como los crculos y
los cuadros creados con los mtodos grficos Circle y Line.

Sintaxis

[Link] [= nmero]

Donde objeto es el nombre del Formulario, PictureBox, objeto Print sobre el que se va a
dibujar,
y nmero es un entero que especifica el estilo de relleno, tal como se
describe a continuacin:

Continuo.

(Predeterminado) Transparente.

Lnea horizontal.

Lnea vertical.

Diagonal hacia arriba.

Diagonal hacia abajo.

Cruzado.

Diagonal Cruzada.

Cuando la propiedad FillStyle se define con su valor predeterminado, 1 (Transparente), el


valor de FillColor se ignora, excepto en el objeto Form.

AutoRedraw (Propiedad)

Devuelve o establece la salida de un mtodo grfico como grfico persistente.

Sintaxis

[Link] [= booleano]

Donde objeto es el nombre del Formulario, PictureBox, objeto Print sobre el que se va a
dibujar, y booleano es una expresin booleana que especifica la forma en la que objeto es
vuelto a dibujar, tal como se describe a continuacin:

True Activa el redibujado automtico de un objeto Form o control PictureBox. Los


grficos
y el texto se escriben en la pantalla y en una imagen almacenada en memoria. El objeto no
recibe eventos Paint; se vuelve a dibujar cuando es necesario, usando la imagen almacenada
en memoria.

False (Predeterminado) Desactiva el redibujado automtico de un objeto y escribe los


grficos y el texto solamente en la pantalla. Visual Basic invoca el evento Paint del objeto
cuando se necesita volver a dibujar dicho objeto.

Esta propiedad es importante cuando se trabaja con los siguientes mtodos grficos: Circle,
Cls, Line, Point, Print y PSet. Al establecer AutoRedraw a True la salida de estos mtodos
se vuelve a dibujar automticamente en un objeto Form o en un control PictureBox cuando,
por ejemplo, se cambia de tamao al objeto o se vuelve a presentar despus de haber estado
oculto por otro objeto.
Se puede establecer AutoRedraw en el cdigo en tiempo de ejecucin para alternar entre
dibujar grficos persistentes (como color de fondo o cuadrcula) y grficos temporales. Si
se define AutoRedraw a False, la salida anterior se convierte en parte del fondo de la
pantalla. Cuando AutoRedraw se define a False, los grficos de fondo no se eliminan si se
borra el rea de dibujo con el mtodo Cls. Al volver a establecer AutoRedraw a True y
despus usar Cls se borran los grficos de fondo.

Existen una serie de controles que solamente pueden utilizarse con la versin de Visual
Basic de 32 bits. Estos controles permiten realizar aplicaciones con la interface grfica
tpica de W95.

Control ImageList

El Control Image List es un almacn de imgenes para poder usarlas posteriormente en otro
control. El control ImageList no presenta directamente las imgenes que almacena. En el
Capitulo 4 puede ver mayor informacin respecto a este control.

Barra de Herramientas. Control Toolbar

Este control permite realizar una barra de herramientas. La barra de herramientas es, como
ya conocer, una barra donde existen varios iconos. Estos iconos realizan una determinada
funcin. Normalmente se ponen en la barra de herramientas los iconos que representan las
acciones mas frecuentes de una aplicacin. Esto facilita la operacin al no tener que
desplegar mens para buscar la operacin a realizar.

Como el espacio que ocupan los iconos es grande, es tambin bastante normal que no estn
representados en la barra de herramientas todas las funciones posibles de la aplicacin, sino
como decamos, solamente las mas frecuentes. Pero ocurre que la funcin que para un
usuario es muy frecuente, para otro no lo es, por lo que tambin es habitual poder
programar los iconos que aparecen en la barra de herramientas.

Todo ello lo puede hacer el control Toolbar.

Para introducir el Toolbar es necesario que est presente en la caja de herramientas el


control personalizado Microsoft Windows Common Controls ([Link]).

El control Toolbar es un contenedor de un array de iconos. Estos iconos forman botones


sobre los que se puede insertar cdigo en sus propiedades. A cada botn se le denomina
Button y a la coleccin de botones se le denomina Buttons. Cada Button es un elemento
de la coleccin Buttons y por lo tanto podemos referirnos a cada uno de ellos por el ndice
que tiene dentro de la coleccin.

Los iconos de cada uno de los botones del Toolbar debe introducirse previamente en un
control ImageList. Como se ha visto, un control ImageList es un almacn de imgenes,
que podemos usar en cualquier parte de la aplicacin. Una de esas partes es la confeccin
de la barra de herramientas. Por lo tanto, es necesario introducir un control ImageList en
cualquier aplicacin que use un control Toolbar. Todas las imgenes del Toolbar deben
estar en un nico ImageList.

La barra de herramientas puede realizarse en tiempo de diseo (este sera el caso para
cuando no existiese variacin ni eleccin de botones a lo largo de la ejecucin de la
aplicacin)

o en tiempo de ejecucin (caso que correspondera con una aplicacin que tuviese una barra
de men programable o que variase esta barra de men dependiendo de cada operacin que
se est ejecutando en la aplicacin).

Para realizar la barra de herramientas en tiempo de diseo, basta con visualizar el cuadro de
propiedades que aparece pulsando el botn derecho del ratn sobre el control Toolbar.
Aparecer un cuadro de dilogo como este :

Puede ver que en el cuadro ImageList aparece el nombre de un ImageList. Al desplegar la


lista aparecern todos los ImageList que existan en el formulario. El ImageList debe estar
en el mismo formulario que el Toolbar. Deber elegirse el ImageList que contenga las
imgenes de los iconos que queremos introducir en el Toolbar.

Este cuadro nos permite tambin introducir la forma que adoptar el puntero del ratn
cuando entre en el Toolbar MousePointer) si el Toolbar aparece por defecto habilitado o
deshabilitado (Enabled) y si muestra o no un rtulo programable al pasar el ratn por
encima de cada botn del Toolbar. (ShowTips). La propiedad AllowCustomize permite, si
es True, cambiar el orden de los botones e introducir separadores (vea evento DobleClick).

En el cuadro botones podemos introducir los datos deseados para cada uno de los botones
que compondrn la coleccin Buttons.

Para insertar un nuevo botn hay que hacer click sobre Insertar botn e insertar un nuevo
botn inmediatamente despus del que figura en la propiedad Index (en la figura del
ejemplo, lo insertara en segundo lugar, no en el ltimo lugar como podra creerse).
Tambin podemos eliminar un botn haciendo click sobre Eliminar botn.

El Caption (opcional) es la palabra que figurar debajo del icono del botn.

Un botn se identifica por su ndice. ( [Link](1) )

La propiedad Key es un nombre que se puede aadir a cada botn. Esta propiedad sirve
para identificar el botn que se ha pulsado, pero no para nombrar al botn.

La propiedad Value es el valor por defecto, con el que aparecer el botn al comienzo de la
aplicacin. (Unpressed, no pulsado, Pressed, pulsado).

La propiedad Style define el tipo de botn :

0 - Default

Botn monostable.

1 - Check

Botn Biestable.

2 - Button Group

Solo uno de los botones del grupo puede estar pulsado. Esta
propiedad lleva implcito que los botones que forman un
grupo son biestables. Pueden hacerse varios grupos
independientes introduciendo un botn que no pertenezca a un
grupo (tipos 0, 1, 3 4) entre los dos grupos que se
independientes que se pretenden formar

3 - Separator
4 - PlaceHolder
variable.

El botn se convierte en un separador de anchura fija.


El botn se convierte en un separador de anchura

ToolTipText
ToolTipText es el texto que aparecer al lado del botn cada vez que se ponga el cursor del
ratn sobre el botn. Para que aparezca debe estar habilitada la propiedad ShowTips.

Image es el nmero de la imagen en el ImageList.

El control Toolbar tambin puede realizarse en tiempo de ejecucin. Para introducir u botn
en el Toolbar hay que crear el botn y aadirlo a la coleccin Buttons de Toolbar. Podemos
hacerlo en una sola instruccin :

Set NombreBotn = [Link] ( [Indice], [Key], [Caption], [Style],


[Imagen])

NombreBotn puede ser cualquier nombre (es el nombre del objeto botn)

NombreToolbar es el nombre del Toolbar


Indice es el nmero de orden de ese botn dentro del Toolbar
Key es el valor de la propiedad Key del botn. Este valor debe ser nico para cada botn.
Style es un nmero del 0 al 4 con el tipo de botn. Vea lista mas arriba
Imagen es el nmero de la imagen para ese botn, dentro del ImageList que las contiene.

Los botones pueden habilitarse y deshabilitarse usando la propiedad Enabled (True / False).
Recuerde que los botones se identifican por su ndice :

[Link](Indice).Enabled = False

Para saber que botn se ha pulsado, puede leerse la propiedad Key :

[Link] = [Link]

presenta en Text1 el texto introducido en la propiedad


Key del ltimo botn pulsado.

Con la lectura de la propiedad Key, y la sentencia Case o If ... Then podemos iniciar la
parte de la aplicacin asociada a cada botn.

El control Toolbar tiene los siguientes eventos :

ButtonClick

Este evento se produce cada vez que se hace click sobre un botn del Toolbar. Pasa como
parmetro el ndice del botn pulsado. Podremos saber que botn se ha pulsado mediante
sentencias condicionales :

Private Sub Toolbar1_ButtonClick(ByVal Button As Button)

If [Link] = 1 Then . . . .
If [Link] = 2 Then . . . .

Tambin podramos usar la propiedad Key como se dijo mas atrs.

Click

Este evento se produce cuando se hace click sobre cualquier botn del Toolbar, pero no
pasa parmetros. Podemos utilizarlo cuando se quiera realizar una operacin comn para
todos los botones (Que suene un Beep, por ejemplo)

DobleClick

Este evento solamente se produce cuando se hace doble click en la parte del Toolbar donde
no hay botones, y la propiedad AllowCustomize est a True. Si se hace doble click sobre un
botn se produce solamente el evento click (dos veces). Haciendo doble click en una zona
libre de botones, con la propiedad AllowCustomize = True nos permite cambiar el orden de
los botones e introducir separadores.

Change

Se produce solamente cuando se ha realizado algn cambio del orden por el procedimiento
anterior.

DragDrop, DragOver

Igual que cualquier control.

MouseMove, MouseUp, MouseDown

Igual que el resto de los controles Pasa como parmetro el ndice del botn, la tecla de
maysculas, y las posiciones x e y del ratn.

Private Sub Toolbar_MouseDown(Button As Integer, Shift As Integer, x As Single, y As


Single)

Este control solamente funciona en la versin de VB de 32 Bits. Pero para 16 bits puede
hacerse una cosa parecida (y mas sencilla) utilizando un control Picture como contenedor
de tantos controles Image como necesitemos. Dado que el control Picture dispone de
propiedad Align y puede servir como contenedor de otros controles, puede realizarse una
barra de herramientas similar a esta, y posiblemente de forma mas sencilla.

El control Toolbar NO sirve de contenedor de otros controles, a excepcin de sus


botones ! ! !

LA BARRA DE ESTADO

Este control es muy parecido a la barra de herramientas, y suele usarse, colocndolo en la


parte inferior de la ventana, para indicar el proceso que est en curso en la aplicacin. La
barra de estado, control StatusBar se introduce en la caja de herramientas al mismo tiempo
que el control Toolbar, con el control personalizado Microsoft Windows Common Controls
([Link]).

La barra de estado puede albergar hasta 16 paneles, que pueden contener texto o grficos.
Tambin pueden contener informacin del Hardware, tal como el estado de la tecla Bloqueo
de Maysculas, Bloqueo del teclado numrico, tecla Insert activada, tecla Scroll Lock
activada, o mostrar la fecha y la hora

La barra de estado puede configurarse como de un solo panel o de mltiples paneles.


(Propiedad Style. 0=mltiples paneles, 1= panel nico)

Las dimensiones de cada panel pueden configurarse como fijas o ajustadas al tamao del
texto o imagen que presentan.

En este control las imgenes no es necesario introducirlas previamente en un ImageList.


Pueden introducirse directamente sobre el cuadro de dilogo que sale pulsando el botn
derecho del ratn - propiedades - en la ventana correspondiente a paneles. Acepta imgenes
tipo Bit-map (.BMP) o .ICO. Los paneles pueden combinar una grfico y un texto.

La barra de estado puede realizarse en tiempo de diseo o en tiempo de ejecucin. Para


realizarla en tiempo de diseo basta con visualizar la ventana de propiedades, muy similar a
la del control Toolbar.

Para aadir un panel en tiempo de ejecucin basta con aadirlo a la coleccin Panels del
control StatusBar mediante la sentencia :

Set nombobjeto = [Link].( [ndice],[key],[Text],[estilo],[grfico])

Un panel puede eliminarse en tiempo de ejecucin mediante la sentencia :

[Link] (n)

O simplemente puede hacerlo invisible

[Link](3).Visible = False

La Barra de Estado puede servir para presentar informacin acerca del proceso de la
aplicacin (para eso se ha pensado), pero tambin puede servir para introducir comandos
como si se tratase de varios botones de comandos. La Barra de Estado tiene varios eventos,
entre ellos el evento click. Eso s, se produce el mismo evento click independientemente del
panel sobre el que hayamos picado con el ratn. Solamente queda conocer el panel sobre el
que se ha hecho click y, mediante sentencias condicionales If ... End If aadir el cdigo
necesario dependiendo del panel que se haya pulsado. En el ejemplo siguiente, la
operacin a realizar es escribir en un Label la operacin que se desea realizar :

If Panel = [Link](1) Then [Link] = "Salir"


If Panel = [Link](2) Then [Link] = "informacin"
If Panel = [Link](3) Then [Link] = "En Ejecucin"
If Panel = [Link](4) Then [Link] = "Imprimiendo"
If Panel = [Link](5) Then [Link] = "Esperando"

La Barra de estado tiene muchas aplicaciones y propiedades. Avanzar en ellas se deja a la


necesidad del alumno.

PROGRESS BAR

Es similar al control Gauge, pero mas bonito. Tiene las mismas propiedades y se trabaja
con l de la misma forma que con el Gauge.

Para introducir el ProgressBar en la caja de herramientas debe seleccionarse en


Herramientas | Controles Personalizados el conjunto Microsoft Windows Common
Controls 5.0 (Este conjunto incorpora tambin los controles TabStrip, Toolbar,
StatusBar, TreeView, ListView, ImageList y Slider.

Las propiedades mas destacables del ProgressBar son :

Max

Para indicar el valor a fondo de escala

Min

Para indicar el valor a mnimo

Value El valor de esta propiedad es el que se indicar grficamente en el ProgressBar.

FICHEROS EN VISUAL BASIC

Existen tres tipos de ficheros donde podremos almacenar y leer datos:

- Secuenciales
- Aleatorios (Random)

- Binarios

Cada uno de ellos tiene sus aplicaciones y particularidades.

FICHEROS SECUENCIALES

Este tipo de ficheros nos permite guardar informacin de cualquier longitud. En


este tipo de ficheros, la informacin se guarda colocando un carcter tras otro. La
forma de leerlos es, igualmente, carcter tras carcter. (Byte tras byte). Son los
mas sencillos de manejar, y los utilizados para guardar texto en ASCII. Permiten
guardar datos en un fichero con un determinado nombre, "machacando" la
informacin de otro posible fichero que ya estuviese en el disco con el mismo
nombre, o aadir la informacin nueva a continuacin de la ya existente.

Para abrir un fichero secuencial para guardar informacin, debemos ejecutar la


siguiente instruccin:

Open Nombrefichero For Output As # Numerocanal

De esta forma, si ya exista un fichero llamado Nombrefichero, sobreescribiremos


dicho fichero perdiendo la informacin que contuviese. Es la forma tpica de
hacerlo cuando modificamos un texto. Para aadir la nueva informacin tras la ya
existente, deberemos abrirlo con la siguiente instruccin:

Open Nombrefichero For Append As # Numerocanal

Numerocanal debe ser un nmero comprendido entre 1 y 255. Representa el


nmero del canal por donde introduciremos los datos. Normalmente se llama
tambin nmero de archivo. No puede haber mas de un archivo abierto con un
nmero de archivo determinado.

Para cerrar un fichero secuencial, basta con ejecutar la instruccin:

Close # Numerocanal

Si no se especifica Numerocanal (la instruccin Close a secas) se cerrarn todos


los ficheros abiertos actualmente.

Para introducir la informacin, pueden emplearse dos mtodos: Print y Write

Print
Introduce la informacin de forma secuencial, byte tras byte tal como
se coment. Sirve para guardar textos. Por ejemplo si deseamos
guardar en ese fichero el contenido de una caja de texto llamada
Text1, basta con ejecutar la siguiente instruccin:

Print #1, [Link]

El texto queda en el fichero en caracteres ASCII, que se pueden leer


con el Type de MS-DOS o mediante el Bloc de Notas de Windows.

Cuando los datos se han introducido con la instruccin Print, es decir, cuando
hemos introducido texto letra tras letra, la forma de acceder a ese texto es muy
sencilla:

Se abre el archivo con la instruccin Open

Open Nombrefichero For Input As # Numerodecanal

Se utiliza la instruccin Input o Line Input para sacar los datos del fichero.

La instruccin Input tiene en este caso la siguiente sintaxis:

Input (Numero de caracteres, # Numero de canal)

Por ejemplo, Input (1, #1) extrae un carcter del fichero abierto como #1. El
nmero mximo de caracteres a extraer de un golpe mediante la instruccin Input
est limitado a 65.534.

Ver un poco mas adelante la propiedad LOF de los ficheros secuenciales. LOF
devuelve un valor igual a la longitud total del fichero. Si ejecutamos la instruccin :

Input (LOF(1), #1) LOF(1)=longitud del fichero #1

leeremos el fichero de una nica vez. Este procedimiento puede ahorrarle cierto
tiempo a la hora de la lectura. (Por lo dicho anteriormente, este procedimiento de
leer todo el fichero de un golpe solamente se podr hacer si la longitud del fichero
(LOF(1)) es inferior a 65.534 bytes. Tenga esto presente cuando vaya a leer un
fichero que no sabe que longitud tiene. Para curarse en salud, le recomiendo que
lea los ficheros secuenciales carcter a carcter. Input(1,#X) pues tarda poco
mas que leyndolo de un golpe.

Slo se utilizar la instruccin Input con archivos abiertos en modo Input o


Binary. (Se vern a continuacin) A diferencia de la instruccin Input #, (la
veremos a continuacin, pues es la instruccin que deber utilizar para leer

archivos escritos con la instruccin Write ), Input devuelve todos los caracteres
que lee, incluyendo puntos y coma, retornos de carro, avances de lnea, comillas y
espacios iniciales.

Existe una instruccin, Input$ , que asume que el dato a leer es un String.
(Cadena de caracteres). Puede ahorrar un poco de memoria usando esta
instruccin en lugar de Input.

Nota Se proporciona otra funcin (InputB) para su uso con datos de byte incluidos
en archivos de texto. En lugar de especificar el nmero de caracteres a devolver,
nmero especifica el nmero de bytes.

INSTRUCCION LINE INPUT

La instruccin Line Input se utiliza para extraer una lnea completa. Tiene la
siguiente sintaxis:

Line Input # Nmero de canal, Variable

Mediante esta instruccin se extrae una lnea completa (los caracteres delimitados
entre dos retornos de carro), y se le asigna esa cadena a Variable

La instruccin Line Input # lee un carcter cada vez en un archivo hasta que
encuentra un retorno de carro (Chr(13)) o una secuencia retorno de carrocontinuacin de lnea (Chr(13) + Chr(10)). Las secuencias de retorno de carrocontinuacin de lnea no se tienen en cuenta y no se aaden a la cadena de
caracteres. Cuando lea un archivo mediante Line Input # y lo quiere presentar en
un TextBox o en el Printer, deber introducirlos para evitar que le salga todo el
texto en una nica lnea.

Con lo que se ha explicado, ya puede realizar un pequeo edito de textos. Este


sencillo editor tiene un TextBox llamado TBTexto, donde podemos escribir el texto
que queramos (con la propiedad MultiLine = True y ScrollBars = Vertical), tres
botones llamados BAbrir (1), (2 a y b) y (3), para abrir el fichero y poner su
contenido en TBTexto, y dos BGuardar para guardar, uno abriendo el fichero For
Append y el otro abrindolo For Output. En este ltimo, al guardar el texto
borramos el contenido que del fichero, si ya existiera. En el primero, lo anexamos
al final del mismo .
Para conocer el nombre del fichero, ponemos un
CommonDialog llamado CD1, con un filtro [Link] = Ficheros de Texto |*.txt

Para abrir el fichero, y depositar su contenido en TBTexto pondremos este cdigo


en BAbrir :

Private Sub BAbrir1_Click()


Dim VarTexto As String
[Link] = "Ficheros de Texto |*.txt"
[Link]
Open [Link] For Input As #1
VarTexto = Input(LOF(1), #1)

'leemos todo el fichero de un golpe

Close #1
TBTexto = VarTexto
End Sub

Cuando el fichero es mayor de 64 kilobytes, el leerlo de un golpe puede dar


problemas. Mejor dicho, no funciona. Deberemos leerlo en ese caso, carcter a
carcter o lnea a lnea.

Para leer carcter a carcter :

Private Sub BAbrir_Click()


Dim VarTexto As String
[Link] = "Ficheros de Texto |*.txt"
[Link]
Open [Link] For Input As #1
Do Until EOF(1)
EOF(1)

Hacemos un bucle de lectura hasta que encontremos

Vea mas adelante la Propiedad EOF en Propiedades de los ficheros


Secuenciales
VarTexto = Input(1, #1)

'leemos el fichero carcter a carcter

TBTexto = TBTexto & VarTexto


TBTexto

'vamos aadiendo los caracteres ledos a

Loop
Close #1
End Sub

(NOTA.- Lo expuesto funciona perfectamente, pero el hecho de meter en un


TextBox carcter a carcter eterniza la aplicacin. - Meter un texto en un TextBox o
en un Label es una operacin que tarda cierto tiempo. Si esa operacin hay que
hacerla una vez por carcter, puede tardar mucho tiempo. Para evitar esto, cuando
vaya a leer un fichero carcter a carcter, mtalo primero en una variable y luego
realice un volcado nico de esa variable al TextBox o Label)

Y podemos hacerlo tambin leyendo lnea a lnea con Line Input

Dim VarTexto As String

[Link] = "Ficheros de Texto |*.txt"


[Link]
Open [Link] For Input As #1
Do Until EOF(1)
Line Input #1, VarTexto

'leemos el fichero Lnea a Lnea

TBTexto = TBTexto & VarTexto & vbCrLf


TBTexto

'vamos aadiendo las lneas ledas a

'(Hay que introducir un retorno + avance de lnea con cada lnea (vbCrLf), ya que
VarTexto no
contiene los retornos ni avances de lnea.
Loop
Close #1

Los Botones de Guardar tienen el cdigo :

Private Sub BGuardar_Click()


Dim VarTexto As String
[Link] = "Ficheros de Texto |*.txt"
[Link]
Open [Link] For Output As #1
Print #1, [Link]
Close #1
End Sub

O para el caso de abrir con For Append

Private Sub BGuardar2_Click()


Dim VarTexto As String
[Link] = "Ficheros de Texto |*.txt"
[Link]
Open [Link] For Append As #1
Print #1, [Link]
Close #1
End Sub

Ya hemos visto como se guardan y se leen datos de texto en un fichero


secuencial.

INSTRUCCIN WRITE

La otra forma de introducir datos en un fichero secuencial es Write. Mediante esta


instruccin, no se puede introducir texto, sino datos, aunque esos datos sean de
texto.

Write
Puede introducir varias informaciones, que posteriormente se podrn
leer de forma separada con la instruccin Input #. Esta forma de
introducir datos en un fichero secuencial permite realizar un fichero
con distintos datos que se pueden leer en el propio fichero, puesto
que se guardan en ASCII, y leerlos mediante el programa de una
forma muy sencilla. Hacemos, en realidad, una pequea base de
datos. (Ver a lo largo de su vida profesional que lo de pequea no

es cierto, pues es la forma mas sencilla de guardar datos cuando la


cantidad de estos datos no es muy grande)

Lo que estamos haciendo en realidad al escribir datos mediante la instruccin


Write es escribir estos datos en un fichero secuencial, utilizando una coma como
separador entre los distintos datos. Un fichero secuencial con datos introducidos
mediante la instruccin Write tendr esta forma :

Luis Surez, VisualBasic - Gua del estudiante,Editorial XX,3200,51


Miguel de Cervantes,El Qijote,Editorial YY,5000,27

Observe que el contenido de este fichero se diferencia algo de una simple


sucesin de caracteres. Tiene varias partes separadas por una coma. Cada una
de ellas es un dato.

Imaginemos una aplicacin, con la que introducimos datos de libros. La aplicacin


es un nico formulario donde podemos introducir la informacin mediante varios
TextBox. Existe un Botn de comando con el siguiente cdigo:

Private Sub Command1_Click()


TITULO = [Link]
AUTOR = [Link]
EDITORIAL = [Link]
PRECIO = [Link]
EXISTENCIAS = [Link]

Donde LIBRETBTITULO, LIBRETBAUTOR, Etc. son los nombres de los TextBox

Ha ledo los datos de los TextBox. Ya estn el las variables TITULO, AUTOR, Etc.
Ahora los metemos en el fichero con la instruccin Write. El nombre del fichero
ser el
que hayamos puesto en el TextBox LIBRETBFICHERO, y lo guardar en el
directorio
C :\cursoVB

Open [Link] For Append As #1


Write #1, TITULO, AUTOR, EDITORIAL, PRECIO, EXISTENCIAS
Close #1
End Sub

Si introduce los datos del ejemplo anterior, se crear un fichero que tiene esta
apariencia:

Luis Surez, VisualBasic - Gua del estudiante,Editorial XX,3200,51

Si realizamos otra introduccin de datos, con la segunda lnea del ejemplo


anterior, los datos existentes en ese fichero no se borrarn, dado que lo hemos
abierto con Append. Quedar de la siguiente forma:

Luis Surez, VisualBasic - Gua del estudiante,Editorial XX,3200,51


Miguel de Cervantes,El Qijote,Editorial YY,5000,27

Que pasara si leemos este fichero con la instruccin Input o Line Input # vista
anteriormente ? Pues simplemente que lo leeramos tal como est, con sus comas
y comillas dobles. No sera la forma mas adecuada, ya que lo que queremos es

obtener sucesivos datos de autores, ttulos, editoriales, precios y existencias.

Para sacar estos datos debemos leerlos con la instruccin Input #. Esta
instruccin saca los datos que hemos metido, es decir, elimina las comillas y la
coma que servan de separadores.

En nuestro ejemplo, podramos hacerlo de esta forma, aprovechando los mismos


TextBox:

Private Sub Command2_Click()


' Limpiamos los TextBox
[Link] = "" : [Link] = "" : [Link]
= ""
[Link] = "" : [Link] = ""

'Abrimos el fichero

Open [Link] For Input As #1


Do Until EOF(1)

' Introducimos una parada para poder leer datos


DETENERSE = True
Input #1, TIT, AUT, NED, PRE, EXS

[Link] = TIT

[Link] = AUT
[Link] = NED
[Link] = PRE
[Link] = EXS
' Refrescamos los TextBox
Refresh

' Esto produce una pequea parada


Do While DETENERSE = True
A= A+ 1
If A = 100000 Then DETENERSE = False: A = 0
Loop
' termin la parada y vuelve a leer datos

Loop
Close #1

End Sub

Observe que los nombre de las variables en el proceso de lectura tienen distintos
nombres a los utilizados durante la escritura. Como en el fichero no se guarda
ninguna referencia al respecto, lo nico que importa es que el nmero de variables
para la lectura sea igual al nmero de variables que se utiliz para la escritura, y
que el orden de las variables sea correcto. Si por ejemplo, el nmero de variables
usadas en la introduccin de datos fuese distinta al nmero de variables usado en
la lectura, Visual Basic nos dara un error.

Observe tambin que se ha introducido un temporizador. Sirve para ver los


sucesivos ttulos que tenemos en nuestra base de datos tan sui generis. Se ha
pretendido presentar unos datos de esta pequea base de datos sin complicarnos
mucho la vida. Mas adelante veremos como presentarlos de una forma correcta.
Este tipo de ficheros no es el mas adecuado para construir grandes bases de
datos, es complicado manejar ficheros de mas de unas pocas lneas, por lo que
para tener muchos datos, este tipo de ficheros no es recomendable. Sin embargo,
para tener una lnea nica, o un nmero bajo de lneas de datos, este tipo de
fichero Simplifica notablemente las aplicaciones. Tiene adems una gran ventaja :
podemos verlo con un procesador de textos ASCII (Block de Notas, por ejemplo) y
cambiarle los datos con ese mismo procesador. Piense en los
tpicos
archivos .INI que acompaan a casi todas las aplicaciones informticas para la
personalizacin de las mismas y ver la utilidad de estos sencillos ficheros
secuenciales.

En esta pequea aplicacin mostrbamos las informaciones sucesivamente segn


las bamos leyendo del fichero. Interrumpamos momentneamente la lectura para
presentar cada informacin durante un instante, ya que como tenemos cinco datos
distintos en cada registro y cinco TextBox para presentarlos, deberemos presentar
una informacin tras otra. Esto no parece en principio una solucin prctica para
una base de datos, donde lo que interesa es disponer de todos los datos para
usarlos cuando sea necesario. Esto nos lleva a crear una matriz para albergar
todos los datos de la base, ya que los ficheros secuenciales se leen y se les tiene
que extraer toda la informacin de un golpe, ya que no permiten ir a leer hacia
atrs. Por lo tanto, si deseamos disponer de todos los datos, deberemos
guardarlos en la memoria, en una matriz. Imagnese que estamos tratando datos
de varios miles de libros en el ejemplo anterior. Si la informacin de cada campo
es medianamente extensa, no tendramos memoria RAM suficiente en el
ordenador para albergarlos. Esto nos lleva a pensar en otro tipo de archivo que
veremos a continuacin, los Random (aleatorios), que permiten leer solamente los
registros que nos interesan.

Pero volvamos a nuestra aplicacin de librera, donde hemos hecho una variacin,
los campos PRECIO y EXISTENCIAS los vamos a tratar ahora como nmeros
(Integer). Tambin se ha introducido otro campo tipo texto, para introducir la
edicin. El fichero creado tras introducir varios libros qued de la siguiente forma :

"EL RODABALLO","GUNTER GRASS","PLANETA",1995,2000,12

" VisualBasic - Gua del Estudiante ","LUIS SUAREZ","CEU",PRIMERA,1000,21


"EL NOMBRE DE LA ROSA","UMBERTO ECO","AGUILAR",28,1000,21
"ENCICLOPEDIA DEL VB","CEBALLOS","RAMA",CUARTA,1200,23
"LA GRANJA ANIMAL","ORWELL","DESTINO",45,12000,78
"LA PASION TURCA","ANTONIO GALA","PLANETA",SEGUNDA,2500,25
"LA METAMORFOSIS","KAFKA","PLAZA&JANES", 4,3400,101
"VB4 PARA WINDOWS95","GARY CORNELL","MCGRAWHILL",1,6500,25

Observe que los dos ltimos campos (correspondientes a PRECIO y


EXISTENCIAS) no estn entre comillas, pues no se trata de texto, sino de
nmeros.

(Observe tambin la gran ventaja de tener una base de datos con datos
completamente legibles)

Se han introducido alguna variaciones en el programa. Entre ellas, se crea una


matriz de variables de 5 x n (n=nmero de registros). Tambin se le aaden unos
botones para poder recorre toda la base de datos.

La interfaz grfica qued de la siguiente forma :

El programa necesita que le introduzcamos el nombre del fichero que alberga la


base de datos. Por sencillez no se ha usado ningn CommonDialog y se introduce
directamente el nombre de este fichero en un TextBox llamado TBNombreFichero

El fichero anterior podemos leerlo tal y como indicbamos antes :

Open [Link] For Input As #1


Do Until EOF(1)
Input #1, TITULO, AUTOR, EDITORIAL, EDICION, PRECIO, EXISTENCIAS

Donde las variables TITULO, AUTOR, EDITORIAL y EDICION sern del tipo String
y PRECIO y EXISTENCIAS sern de tipo numrico. Podemos saberlo, ya que en
una lnea cualquiera del fichero anterior :

" VisualBasic - Gua del Estudiante ","LUIS SUAREZ","CEU",PRIMERA,1000,21

los cuatro primeros parmetros van entre comillas dobles, ya que son datos tipo
texto, y los dos ltimos van sin comillas, como corresponde a datos numricos.

Pero existe otra forma mejor (al menos un poco mas complicada) para leer estos
datos, y evitar el problema que tenamos antes de tener que hacer un
temporizador para poder ver, aunque solo sea un momento, los datos. Podemos
meter los datos a una matriz que tenga tantas columnas como datos (campos) (en
el ejemplo 6, cuatro String y dos numricos), y tantas filas como apuntes
(registros) tengamos.

Para ello, antes de nada debemos definir un tipo de variable, mediante la


instruccin Type. Parece que no nos basta con los tipos de variable que trae VB
(Long, String, Integer ...) y es cierto. La variable que necesitamos no es de ningn
tipo de esos. Est compuesta por varias secciones, y cada una de ellas puede ser
de un tipo distinto. Este tipo de definiciones debe hacerse en un mdulo (Vase
instruccin Type en la ayuda de VB), por lo que se ha creado un mdulo llamado
[Link], con el siguiente cdigo :

Type REGISTROLIBRO
AUTOR As String
TITULO As String
EDITORIAL As String
EDICION As String
PRECIO As Integer
EXISTENCIAS As Integer
End Type

Esto es lo que se llama DEFINIR una variable. Es como hacerse un traje a


medida. Y dese cuenta de que es un tipo de variable (REGISTROLIBRO) formado
por varias partes (AUTOR, TITULO, Etc.) Observe que DEFINIR una variable NO
es lo mismo que DECLARAR

En el apartado de Declaraciones del General del formulario declaramos las


variables, entre ellas una variable, REGISTROLIBROS, de la cual decimos que va
a ser una matriz mediante los parntesis que la acompaan, y adems
declaramos que va a se similar a REGISTROLIBRO ya definida en el mdulo.

Dim NR As Integer
Dim REGISTROLIBROS() As REGISTROLIBRO
Dim NRP As Integer

Observe que al usar parntesis al declarar la variable REGISTROLIBROS le


estamos diciendo a VB que esa variable ser un Array, y adems que es una
variable del tipo REGISTROLIBRO, tipo de variable que ya conoce, puesto que se
la hemos definido en un mdulo.

En el ejemplo preparado podemos escribir y leer datos. Veamos de nuevo como


se escriben
El cdigo del procedimiento click del botn BIntroducir1 es :

Private Sub BIntroducir1_Click()


TITULO = [Link]

TextBox para introducir el ttulo

AUTOR = [Link]

autor

EDITORIAL = [Link]

editorial

EDICION = [Link]

edicin

PRECIO = Val([Link])

precio

EXISTENCIAS = Val([Link])

existencias

(Observe que para introducir el precio y las existencias se transform el contenido


del TextBox a un valor numrico mediante la instruccin Val.)

Open "C:\cursoVB\" + [Link] For Append As #1


Write #1, TITULO, AUTOR, EDITORIAL, EDICION, PRECIO, EXISTENCIAS
Close #1
End Sub

Tras reiteradas entradas, el fichero de la BD qued como se vio anteriormente.

Al leer los datos, lo primero es que no conocemos el nmero de registros


existentes. Como cada registro va en una lnea del fichero, si contamos el nmero
de retornos de carro (Chr(13)) obtendremos el nmero de registros. Esta
operacin es la primera que se realiza en el procedimiento click del botn LEER :

Private Sub Command2_Click()

[Link] = "" Pone todos los TextBox en blanco


[Link] = ""
[Link] = ""
[Link] = ""
[Link] = ""

[Link] = ""
NR = 0

NR=nmero de registros

Abre el fichero, lo lee entero y cuenta el nmero de retornos de carro. Existirn


tantos apuntes (registros) como retornos de carro existan, ya que cada registro
ocupa una lnea.

Open [Link] For Input As #1


Do Until EOF(1)
A = Input(1, #1)
If A = Chr(13) Then NR = NR + 1
Loop
Close #1

Presenta en LNumFich el nmero de registros

[Link] = Str(NR) + " Registros)"

'Redimensionamos la matriz de REGISTROLIBROS a NR elementos..


ReDim REGISTROLIBROS(1 To NR)

Volvemos a abrir el fichero


Open [Link] For Input As #1

Leemos los registros del 1 al NR, y cada campo del fichero lo vamos asignando a
los elementos que componen la matriz.

For I = 1 To NR
Input #1, REGISTROLIBROS(I).TITULO
Input #1, REGISTROLIBROS(I).AUTOR
Input #1, REGISTROLIBROS(I).EDITORIAL
Input #1, REGISTROLIBROS(I).EDICION
Input #1, REGISTROLIBROS(I).PRECIO
Input #1, REGISTROLIBROS(I).EXISTENCIAS

Next I
Close #1

NOTA.- Estas lneas podramos heberlas puesto en una lnea nica :


Input#1,REGISTROLIBROS(I).TITULO,REGISTROLIBROS(I).AUTOR,_
REGISTROLIBROS(I).EDITORIAL,REGISTROLIBROS(I).EDICION,_
REGISTROLIBROS(I).PRECIO, REGISTROLIBROS(I).EXISTENCIAS

NRP = Nmero del Registro Presentado. Lo hacemos igual a 1 para presentar, de


momento, el nmero 1

NRP = 1

[Link] = REGISTROLIBROS(NRP).TITULO
[Link] = REGISTROLIBROS(NRP).AUTOR
[Link] = REGISTROLIBROS(NRP).EDITORIAL
[Link] = REGISTROLIBROS(NRP).EDICION
[Link] = REGISTROLIBROS(NRP).PRECIO
[Link] = REGISTROLIBROS(NRP).EXISTENCIAS

End Sub

Copiamos este cdigo de presentacin de datos y lo llevamos a las flechas de


incrementar o disminuir el nmero del registro a presentar.

Private Sub BMas1_Click()


NRP = NRP + 1
If NRP > NR Then protegemos que salga error de NRP fuera de intervalo
MsgBox "No existen mas registros en esta direccin"
NRP = NR
Else
[Link] = REGISTROLIBROS(NRP).TITULO
[Link] = REGISTROLIBROS(NRP).AUTOR
[Link] = REGISTROLIBROS(NRP).EDITORIAL
[Link] = REGISTROLIBROS(NRP).EDICION
[Link] = REGISTROLIBROS(NRP).PRECIO
[Link] = REGISTROLIBROS(NRP).EXISTENCIAS

End If
End Sub

Esta es la de incrementar. La de disminuir es igual, pero restando 1 a NRP

Las flechas dobles llevan al registro 1 y al ltimo. Tienen este cdigo

Private Sub BMas2_Click()


NRP = NR
[Link] = REGISTROLIBROS(NRP).TITULO
[Link] = REGISTROLIBROS(NRP).AUTOR
[Link] = REGISTROLIBROS(NRP).EDITORIAL
[Link] = REGISTROLIBROS(NRP).EDICION
[Link] = REGISTROLIBROS(NRP).PRECIO
[Link] = REGISTROLIBROS(NRP).EXISTENCIAS
End Sub

Observe que es muy sencillo trabajar con ficheros secuenciales para bases de
datos. El inconveniente es la cantidad de memoria necesaria para la matriz de
datos. Tambin tienen un gran inconveniente: solamente se pueden leer de hacia
adelante. Un fichero secuencial hay que leerlo de una sola vez. Esto que no es
ningn inconveniente para un fichero de texto, o incluso para un fichero de datos
que leemos una nica vez, es un problema cuando leemos un dato situado en un
punto de ese fichero, y luego tenemos que leer un dato colocado en una posicin
anterior. En este caso, deberemos terminar de leerlo, y volver a comenzar por el
principio. Este es un gran inconveniente para hacer bases de datos con ficheros
secuenciales.

No solamente hemos visto una forma de crear una base de datos, sino que hemos
visto como movernos a lo largo de los registros. Ver esto con mucho mas detalle
cuando demos bases de datos. Este tipo de bases de datos son la Tipo Texto
que ver mas adelante.

Propiedades de los ficheros Secuenciales:

EOF
Indica el fin del fichero (End Of File). EOF ser False hasta que encuentre
el final del fichero secuencial. Habr observado instrucciones tales como:

Do until EOF(1) (Hazlo hasta que encuentres el EOF del canal 1)


Do While Not EOF(1)

(Hazlo mientras EOF del canal 1 sea False)

Estas expresiones se usan en un bucle, para ir extrayendo con la


instruccin Input o Line Input los caracteres de un fichero hasta que se
encuentre la marca de final de fichero (EOF)

LOC
Devuelve la posicin de lectura/escritura actual en un archivo abierto.

La sintaxis de esta propiedad es:

LOC (Numero de canal)

la informacin devuelta para un archivo secuencial es la posicin de byte


actual en el archivo, dividida por 128.

LOF

Devuelve la longitud de un fichero (Lenght Of File) abierto mediante Open.

Sintaxis

LOF(numeroarchivo)

Ejemplo Long = LOF (1)

Observaciones
utilice la funcin

Para obtener la longitud de un archivo que no est abierto


FileLen. (Vala mas abajo)

SEEK

Devuelve la posicin actual de lectura/escritura de un archivo abierto con


la instruccin Open.

Sintaxis

Seek(nmeroArchivo)

Observaciones

Seek devuelve un valor entre 1 y 2,147,483,647 (equivalente a 2^31-1) inclusive.


Para archivos abiertos en modo Output, Append o Input, Seek devuelve la posicin
de byte en la que se va a ejecutar la siguiente operacin. El primer byte de un
archivo est en la posicin 1, el segundo en la posicin 2 y as sucesivamente.

Existen una serie de controles que solamente pueden utilizarse con la versin de Visual
Basic de 32 bits. Estos controles permiten realizar aplicaciones con la interface grfica
tpica de W95.

Control ImageList

El Control Image List es un almacn de imgenes para poder usarlas posteriormente en otro
control. El control ImageList no presenta directamente las imgenes que almacena. En el
Capitulo 4 puede ver mayor informacin respecto a este control.

Barra de Herramientas. Control Toolbar

Este control permite realizar una barra de herramientas. La barra de herramientas es, como
ya conocer, una barra donde existen varios iconos. Estos iconos realizan una determinada
funcin. Normalmente se ponen en la barra de herramientas los iconos que representan las
acciones mas frecuentes de una aplicacin. Esto facilita la operacin al no tener que
desplegar mens para buscar la operacin a realizar.

Como el espacio que ocupan los iconos es grande, es tambin bastante normal que no estn
representados en la barra de herramientas todas las funciones posibles de la aplicacin, sino
como decamos, solamente las mas frecuentes. Pero ocurre que la funcin que para un
usuario es muy frecuente, para otro no lo es, por lo que tambin es habitual poder
programar los iconos que aparecen en la barra de herramientas.

Todo ello lo puede hacer el control Toolbar.

Para introducir el Toolbar es necesario que est presente en la caja de herramientas el


control personalizado Microsoft Windows Common Controls ([Link]).

El control Toolbar es un contenedor de un array de iconos. Estos iconos forman botones


sobre los que se puede insertar cdigo en sus propiedades. A cada botn se le denomina
Button y a la coleccin de botones se le denomina Buttons. Cada Button es un elemento
de la coleccin Buttons y por lo tanto podemos referirnos a cada uno de ellos por el ndice
que tiene dentro de la coleccin.

Los iconos de cada uno de los botones del Toolbar debe introducirse previamente en un
control ImageList. Como se ha visto, un control ImageList es un almacn de imgenes,
que podemos usar en cualquier parte de la aplicacin. Una de esas partes es la confeccin
de la barra de herramientas. Por lo tanto, es necesario introducir un control ImageList en
cualquier aplicacin que use un control Toolbar. Todas las imgenes del Toolbar deben
estar en un nico ImageList.

La barra de herramientas puede realizarse en tiempo de diseo (este sera el caso para
cuando no existiese variacin ni eleccin de botones a lo largo de la ejecucin de la
aplicacin)
o en tiempo de ejecucin (caso que correspondera con una aplicacin que tuviese una barra
de men programable o que variase esta barra de men dependiendo de cada operacin que
se est ejecutando en la aplicacin).

Para realizar la barra de herramientas en tiempo de diseo, basta con visualizar el cuadro de
propiedades que aparece pulsando el botn derecho del ratn sobre el control Toolbar.
Aparecer un cuadro de dilogo como este :

Puede ver que en el cuadro ImageList aparece el nombre de un ImageList. Al desplegar la


lista aparecern todos los ImageList que existan en el formulario. El ImageList debe estar
en el mismo formulario que el Toolbar. Deber elegirse el ImageList que contenga las
imgenes de los iconos que queremos introducir en el Toolbar.

Este cuadro nos permite tambin introducir la forma que adoptar el puntero del ratn
cuando entre en el Toolbar MousePointer) si el Toolbar aparece por defecto habilitado o
deshabilitado (Enabled) y si muestra o no un rtulo programable al pasar el ratn por
encima de cada botn del Toolbar. (ShowTips). La propiedad AllowCustomize permite, si
es True, cambiar el orden de los botones e introducir separadores (vea evento DobleClick).

En el cuadro botones podemos introducir los datos deseados para cada uno de los botones
que compondrn la coleccin Buttons.

Para insertar un nuevo botn hay que hacer click sobre Insertar botn e insertar un nuevo
botn inmediatamente despus del que figura en la propiedad Index (en la figura del
ejemplo, lo insertara en segundo lugar, no en el ltimo lugar como podra creerse).
Tambin podemos eliminar un botn haciendo click sobre Eliminar botn.

El Caption (opcional) es la palabra que figurar debajo del icono del botn.

Un botn se identifica por su ndice. ( [Link](1) )

La propiedad Key es un nombre que se puede aadir a cada botn. Esta propiedad sirve
para identificar el botn que se ha pulsado, pero no para nombrar al botn.

La propiedad Value es el valor por defecto, con el que aparecer el botn al comienzo de la
aplicacin. (Unpressed, no pulsado, Pressed, pulsado).

La propiedad Style define el tipo de botn :

0 - Default

Botn monostable.

1 - Check

Botn Biestable.

2 - Button Group

Solo uno de los botones del grupo puede estar pulsado. Esta
propiedad lleva implcito que los botones que forman un
grupo son biestables. Pueden hacerse varios grupos
independientes introduciendo un botn que no pertenezca a un
grupo (tipos 0, 1, 3 4) entre los dos grupos que se
independientes que se pretenden formar

3 - Separator
4 - PlaceHolder
variable.

El botn se convierte en un separador de anchura fija.


El botn se convierte en un separador de anchura

ToolTipText
ToolTipText es el texto que aparecer al lado del botn cada vez que se ponga el cursor del
ratn sobre el botn. Para que aparezca debe estar habilitada la propiedad ShowTips.

Image es el nmero de la imagen en el ImageList.

El control Toolbar tambin puede realizarse en tiempo de ejecucin. Para introducir u botn
en el Toolbar hay que crear el botn y aadirlo a la coleccin Buttons de Toolbar. Podemos
hacerlo en una sola instruccin :

Set NombreBotn = [Link] ( [Indice], [Key], [Caption], [Style],


[Imagen])

NombreBotn puede ser cualquier nombre (es el nombre del objeto botn)
NombreToolbar es el nombre del Toolbar
Indice es el nmero de orden de ese botn dentro del Toolbar
Key es el valor de la propiedad Key del botn. Este valor debe ser nico para cada botn.
Style es un nmero del 0 al 4 con el tipo de botn. Vea lista mas arriba
Imagen es el nmero de la imagen para ese botn, dentro del ImageList que las contiene.

Los botones pueden habilitarse y deshabilitarse usando la propiedad Enabled (True / False).
Recuerde que los botones se identifican por su ndice :

[Link](Indice).Enabled = False

Para saber que botn se ha pulsado, puede leerse la propiedad Key :

[Link] = [Link]

presenta en Text1 el texto introducido en la propiedad


Key del ltimo botn pulsado.

Con la lectura de la propiedad Key, y la sentencia Case o If ... Then podemos iniciar la
parte de la aplicacin asociada a cada botn.

El control Toolbar tiene los siguientes eventos :

ButtonClick

Este evento se produce cada vez que se hace click sobre un botn del Toolbar. Pasa como
parmetro el ndice del botn pulsado. Podremos saber que botn se ha pulsado mediante
sentencias condicionales :

Private Sub Toolbar1_ButtonClick(ByVal Button As Button)

If [Link] = 1 Then . . . .
If [Link] = 2 Then . . . .

Tambin podramos usar la propiedad Key como se dijo mas atrs.

Click

Este evento se produce cuando se hace click sobre cualquier botn del Toolbar, pero no
pasa parmetros. Podemos utilizarlo cuando se quiera realizar una operacin comn para
todos los botones (Que suene un Beep, por ejemplo)

DobleClick

Este evento solamente se produce cuando se hace doble click en la parte del Toolbar donde
no hay botones, y la propiedad AllowCustomize est a True. Si se hace doble click sobre un
botn se produce solamente el evento click (dos veces). Haciendo doble click en una zona
libre de botones, con la propiedad AllowCustomize = True nos permite cambiar el orden de
los botones e introducir separadores.

Change

Se produce solamente cuando se ha realizado algn cambio del orden por el procedimiento
anterior.

DragDrop, DragOver

Igual que cualquier control.

MouseMove, MouseUp, MouseDown

Igual que el resto de los controles Pasa como parmetro el ndice del botn, la tecla de
maysculas, y las posiciones x e y del ratn.

Private Sub Toolbar_MouseDown(Button As Integer, Shift As Integer, x As Single, y As


Single)

Este control solamente funciona en la versin de VB de 32 Bits. Pero para 16 bits puede
hacerse una cosa parecida (y mas sencilla) utilizando un control Picture como contenedor
de tantos controles Image como necesitemos. Dado que el control Picture dispone de
propiedad Align y puede servir como contenedor de otros controles, puede realizarse una
barra de herramientas similar a esta, y posiblemente de forma mas sencilla.

El control Toolbar NO sirve de contenedor de otros controles, a excepcin de sus


botones ! ! !

LA BARRA DE ESTADO

Este control es muy parecido a la barra de herramientas, y suele usarse, colocndolo en la


parte inferior de la ventana, para indicar el proceso que est en curso en la aplicacin. La
barra de estado, control StatusBar se introduce en la caja de herramientas al mismo tiempo
que el control Toolbar, con el control personalizado Microsoft Windows Common Controls
([Link]).

La barra de estado puede albergar hasta 16 paneles, que pueden contener texto o grficos.
Tambin pueden contener informacin del Hardware, tal como el estado de la tecla Bloqueo
de Maysculas, Bloqueo del teclado numrico, tecla Insert activada, tecla Scroll Lock
activada, o mostrar la fecha y la hora

La barra de estado puede configurarse como de un solo panel o de mltiples paneles.


(Propiedad Style. 0=mltiples paneles, 1= panel nico)

Las dimensiones de cada panel pueden configurarse como fijas o ajustadas al tamao del
texto o imagen que presentan.

En este control las imgenes no es necesario introducirlas previamente en un ImageList.


Pueden introducirse directamente sobre el cuadro de dilogo que sale pulsando el botn
derecho del ratn - propiedades - en la ventana correspondiente a paneles. Acepta imgenes
tipo Bit-map (.BMP) o .ICO. Los paneles pueden combinar una grfico y un texto.

La barra de estado puede realizarse en tiempo de diseo o en tiempo de ejecucin. Para


realizarla en tiempo de diseo basta con visualizar la ventana de propiedades, muy similar a
la del control Toolbar.

Para aadir un panel en tiempo de ejecucin basta con aadirlo a la coleccin Panels del
control StatusBar mediante la sentencia :

Set nombobjeto = [Link].( [ndice],[key],[Text],[estilo],[grfico])

Un panel puede eliminarse en tiempo de ejecucin mediante la sentencia :

[Link] (n)

O simplemente puede hacerlo invisible

[Link](3).Visible = False

La Barra de Estado puede servir para presentar informacin acerca del proceso de la
aplicacin (para eso se ha pensado), pero tambin puede servir para introducir comandos
como si se tratase de varios botones de comandos. La Barra de Estado tiene varios eventos,
entre ellos el evento click. Eso s, se produce el mismo evento click independientemente del
panel sobre el que hayamos picado con el ratn. Solamente queda conocer el panel sobre el
que se ha hecho click y, mediante sentencias condicionales If ... End If aadir el cdigo
necesario dependiendo del panel que se haya pulsado. En el ejemplo siguiente, la
operacin a realizar es escribir en un Label la operacin que se desea realizar :

If Panel = [Link](1) Then [Link] = "Salir"


If Panel = [Link](2) Then [Link] = "informacin"
If Panel = [Link](3) Then [Link] = "En Ejecucin"
If Panel = [Link](4) Then [Link] = "Imprimiendo"

If Panel = [Link](5) Then [Link] = "Esperando"

La Barra de estado tiene muchas aplicaciones y propiedades. Avanzar en ellas se deja a la


necesidad del alumno.

PROGRESS BAR

Es similar al control Gauge, pero mas bonito. Tiene las mismas propiedades y se trabaja
con l de la misma forma que con el Gauge.

Para introducir el ProgressBar en la caja de herramientas debe seleccionarse en


Herramientas | Controles Personalizados el conjunto Microsoft Windows Common
Controls 5.0 (Este conjunto incorpora tambin los controles TabStrip, Toolbar,
StatusBar, TreeView, ListView, ImageList y Slider.

Las propiedades mas destacables del ProgressBar son :

Max

Para indicar el valor a fondo de escala

Min

Para indicar el valor a mnimo

Value El valor de esta propiedad es el que se indicar grficamente en el ProgressBar.

FICHEROS EN VISUAL BASIC

Existen tres tipos de ficheros donde podremos almacenar y leer datos:

- Secuenciales
- Aleatorios (Random)
- Binarios

Cada uno de ellos tiene sus aplicaciones y particularidades.

FICHEROS SECUENCIALES

Este tipo de ficheros nos permite guardar informacin de cualquier longitud. En


este tipo de ficheros, la informacin se guarda colocando un carcter tras otro. La
forma de leerlos es, igualmente, carcter tras carcter. (Byte tras byte). Son los
mas sencillos de manejar, y los utilizados para guardar texto en ASCII. Permiten
guardar datos en un fichero con un determinado nombre, "machacando" la
informacin de otro posible fichero que ya estuviese en el disco con el mismo
nombre, o aadir la informacin nueva a continuacin de la ya existente.

Para abrir un fichero secuencial para guardar informacin, debemos ejecutar la


siguiente instruccin:

Open Nombrefichero For Output As # Numerocanal

De esta forma, si ya exista un fichero llamado Nombrefichero, sobreescribiremos


dicho fichero perdiendo la informacin que contuviese. Es la forma tpica de
hacerlo cuando modificamos un texto. Para aadir la nueva informacin tras la ya

existente, deberemos abrirlo con la siguiente instruccin:

Open Nombrefichero For Append As # Numerocanal

Numerocanal debe ser un nmero comprendido entre 1 y 255. Representa el


nmero del canal por donde introduciremos los datos. Normalmente se llama
tambin nmero de archivo. No puede haber mas de un archivo abierto con un
nmero de archivo determinado.

Para cerrar un fichero secuencial, basta con ejecutar la instruccin:

Close # Numerocanal

Si no se especifica Numerocanal (la instruccin Close a secas) se cerrarn todos


los ficheros abiertos actualmente.

Para introducir la informacin, pueden emplearse dos mtodos: Print y Write

Print
Introduce la informacin de forma secuencial, byte tras byte tal como
se coment. Sirve para guardar textos. Por ejemplo si deseamos
guardar en ese fichero el contenido de una caja de texto llamada
Text1, basta con ejecutar la siguiente instruccin:

Print #1, [Link]

El texto queda en el fichero en caracteres ASCII, que se pueden leer

con el Type de MS-DOS o mediante el Bloc de Notas de Windows.

Cuando los datos se han introducido con la instruccin Print, es decir, cuando
hemos introducido texto letra tras letra, la forma de acceder a ese texto es muy
sencilla:

Se abre el archivo con la instruccin Open

Open Nombrefichero For Input As # Numerodecanal

Se utiliza la instruccin Input o Line Input para sacar los datos del fichero.

La instruccin Input tiene en este caso la siguiente sintaxis:

Input (Numero de caracteres, # Numero de canal)

Por ejemplo, Input (1, #1) extrae un carcter del fichero abierto como #1. El
nmero mximo de caracteres a extraer de un golpe mediante la instruccin Input
est limitado a 65.534.

Ver un poco mas adelante la propiedad LOF de los ficheros secuenciales. LOF
devuelve un valor igual a la longitud total del fichero. Si ejecutamos la instruccin :

Input (LOF(1), #1) LOF(1)=longitud del fichero #1

leeremos el fichero de una nica vez. Este procedimiento puede ahorrarle cierto
tiempo a la hora de la lectura. (Por lo dicho anteriormente, este procedimiento de
leer todo el fichero de un golpe solamente se podr hacer si la longitud del fichero
(LOF(1)) es inferior a 65.534 bytes. Tenga esto presente cuando vaya a leer un
fichero que no sabe que longitud tiene. Para curarse en salud, le recomiendo que
lea los ficheros secuenciales carcter a carcter. Input(1,#X) pues tarda poco
mas que leyndolo de un golpe.

Slo se utilizar la instruccin Input con archivos abiertos en modo Input o


Binary. (Se vern a continuacin) A diferencia de la instruccin Input #, (la
veremos a continuacin, pues es la instruccin que deber utilizar para leer
archivos escritos con la instruccin Write ), Input devuelve todos los caracteres
que lee, incluyendo puntos y coma, retornos de carro, avances de lnea, comillas y
espacios iniciales.

Existe una instruccin, Input$ , que asume que el dato a leer es un String.
(Cadena de caracteres). Puede ahorrar un poco de memoria usando esta
instruccin en lugar de Input.

Nota Se proporciona otra funcin (InputB) para su uso con datos de byte incluidos
en archivos de texto. En lugar de especificar el nmero de caracteres a devolver,
nmero especifica el nmero de bytes.

INSTRUCCION LINE INPUT

La instruccin Line Input se utiliza para extraer una lnea completa. Tiene la
siguiente sintaxis:

Line Input # Nmero de canal, Variable

Mediante esta instruccin se extrae una lnea completa (los caracteres delimitados
entre dos retornos de carro), y se le asigna esa cadena a Variable

La instruccin Line Input # lee un carcter cada vez en un archivo hasta que
encuentra un retorno de carro (Chr(13)) o una secuencia retorno de carrocontinuacin de lnea (Chr(13) + Chr(10)). Las secuencias de retorno de carrocontinuacin de lnea no se tienen en cuenta y no se aaden a la cadena de
caracteres. Cuando lea un archivo mediante Line Input # y lo quiere presentar en
un TextBox o en el Printer, deber introducirlos para evitar que le salga todo el
texto en una nica lnea.

Con lo que se ha explicado, ya puede realizar un pequeo edito de textos. Este


sencillo editor tiene un TextBox llamado TBTexto, donde podemos escribir el texto
que queramos (con la propiedad MultiLine = True y ScrollBars = Vertical), tres
botones llamados BAbrir (1), (2 a y b) y (3), para abrir el fichero y poner su
contenido en TBTexto, y dos BGuardar para guardar, uno abriendo el fichero For
Append y el otro abrindolo For Output. En este ltimo, al guardar el texto
borramos el contenido que del fichero, si ya existiera. En el primero, lo anexamos
al final del mismo .
Para conocer el nombre del fichero, ponemos un
CommonDialog llamado CD1, con un filtro [Link] = Ficheros de Texto |*.txt

Para abrir el fichero, y depositar su contenido en TBTexto pondremos este cdigo


en BAbrir :

Private Sub BAbrir1_Click()


Dim VarTexto As String
[Link] = "Ficheros de Texto |*.txt"
[Link]
Open [Link] For Input As #1
VarTexto = Input(LOF(1), #1)
Close #1
TBTexto = VarTexto
End Sub

'leemos todo el fichero de un golpe

Cuando el fichero es mayor de 64 kilobytes, el leerlo de un golpe puede dar


problemas. Mejor dicho, no funciona. Deberemos leerlo en ese caso, carcter a
carcter o lnea a lnea.

Para leer carcter a carcter :

Private Sub BAbrir_Click()


Dim VarTexto As String
[Link] = "Ficheros de Texto |*.txt"
[Link]
Open [Link] For Input As #1
Do Until EOF(1)
EOF(1)

Hacemos un bucle de lectura hasta que encontremos

Vea mas adelante la Propiedad EOF en Propiedades de los ficheros


Secuenciales
VarTexto = Input(1, #1)

'leemos el fichero carcter a carcter

TBTexto = TBTexto & VarTexto


TBTexto

'vamos aadiendo los caracteres ledos a

Loop
Close #1
End Sub

(NOTA.- Lo expuesto funciona perfectamente, pero el hecho de meter en un


TextBox carcter a carcter eterniza la aplicacin. - Meter un texto en un TextBox o
en un Label es una operacin que tarda cierto tiempo. Si esa operacin hay que
hacerla una vez por carcter, puede tardar mucho tiempo. Para evitar esto, cuando
vaya a leer un fichero carcter a carcter, mtalo primero en una variable y luego

realice un volcado nico de esa variable al TextBox o Label)

Y podemos hacerlo tambin leyendo lnea a lnea con Line Input

Dim VarTexto As String


[Link] = "Ficheros de Texto |*.txt"
[Link]
Open [Link] For Input As #1
Do Until EOF(1)
Line Input #1, VarTexto

'leemos el fichero Lnea a Lnea

TBTexto = TBTexto & VarTexto & vbCrLf


TBTexto

'vamos aadiendo las lneas ledas a

'(Hay que introducir un retorno + avance de lnea con cada lnea (vbCrLf), ya que
VarTexto no
contiene los retornos ni avances de lnea.
Loop
Close #1

Los Botones de Guardar tienen el cdigo :

Private Sub BGuardar_Click()


Dim VarTexto As String
[Link] = "Ficheros de Texto |*.txt"

[Link]
Open [Link] For Output As #1
Print #1, [Link]
Close #1
End Sub

O para el caso de abrir con For Append

Private Sub BGuardar2_Click()


Dim VarTexto As String
[Link] = "Ficheros de Texto |*.txt"
[Link]
Open [Link] For Append As #1
Print #1, [Link]
Close #1
End Sub

Ya hemos visto como se guardan y se leen datos de texto en un fichero


secuencial.

INSTRUCCIN WRITE

La otra forma de introducir datos en un fichero secuencial es Write. Mediante esta


instruccin, no se puede introducir texto, sino datos, aunque esos datos sean de
texto.

Write
Puede introducir varias informaciones, que posteriormente se podrn
leer de forma separada con la instruccin Input #. Esta forma de
introducir datos en un fichero secuencial permite realizar un fichero
con distintos datos que se pueden leer en el propio fichero, puesto
que se guardan en ASCII, y leerlos mediante el programa de una
forma muy sencilla. Hacemos, en realidad, una pequea base de
datos. (Ver a lo largo de su vida profesional que lo de pequea no
es cierto, pues es la forma mas sencilla de guardar datos cuando la
cantidad de estos datos no es muy grande)

Lo que estamos haciendo en realidad al escribir datos mediante la instruccin


Write es escribir estos datos en un fichero secuencial, utilizando una coma como
separador entre los distintos datos. Un fichero secuencial con datos introducidos
mediante la instruccin Write tendr esta forma :

Luis Surez, VisualBasic - Gua del estudiante,Editorial XX,3200,51


Miguel de Cervantes,El Qijote,Editorial YY,5000,27

Observe que el contenido de este fichero se diferencia algo de una simple


sucesin de caracteres. Tiene varias partes separadas por una coma. Cada una
de ellas es un dato.

Imaginemos una aplicacin, con la que introducimos datos de libros. La aplicacin


es un nico formulario donde podemos introducir la informacin mediante varios
TextBox. Existe un Botn de comando con el siguiente cdigo:

Private Sub Command1_Click()


TITULO = [Link]
AUTOR = [Link]

EDITORIAL = [Link]
PRECIO = [Link]
EXISTENCIAS = [Link]

Donde LIBRETBTITULO, LIBRETBAUTOR, Etc. son los nombres de los TextBox


Ha ledo los datos de los TextBox. Ya estn el las variables TITULO, AUTOR, Etc.
Ahora los metemos en el fichero con la instruccin Write. El nombre del fichero
ser el
que hayamos puesto en el TextBox LIBRETBFICHERO, y lo guardar en el
directorio
C :\cursoVB

Open [Link] For Append As #1


Write #1, TITULO, AUTOR, EDITORIAL, PRECIO, EXISTENCIAS
Close #1
End Sub

Si introduce los datos del ejemplo anterior, se crear un fichero que tiene esta
apariencia:

Luis Surez, VisualBasic - Gua del estudiante,Editorial XX,3200,51

Si realizamos otra introduccin de datos, con la segunda lnea del ejemplo


anterior, los datos existentes en ese fichero no se borrarn, dado que lo hemos
abierto con Append. Quedar de la siguiente forma:

Luis Surez, VisualBasic - Gua del estudiante,Editorial XX,3200,51


Miguel de Cervantes,El Qijote,Editorial YY,5000,27

Que pasara si leemos este fichero con la instruccin Input o Line Input # vista
anteriormente ? Pues simplemente que lo leeramos tal como est, con sus comas
y comillas dobles. No sera la forma mas adecuada, ya que lo que queremos es
obtener sucesivos datos de autores, ttulos, editoriales, precios y existencias.

Para sacar estos datos debemos leerlos con la instruccin Input #. Esta
instruccin saca los datos que hemos metido, es decir, elimina las comillas y la
coma que servan de separadores.

En nuestro ejemplo, podramos hacerlo de esta forma, aprovechando los mismos


TextBox:

Private Sub Command2_Click()


' Limpiamos los TextBox
[Link] = "" : [Link] = "" : [Link]
= ""
[Link] = "" : [Link] = ""

'Abrimos el fichero

Open [Link] For Input As #1


Do Until EOF(1)

' Introducimos una parada para poder leer datos

DETENERSE = True
Input #1, TIT, AUT, NED, PRE, EXS

[Link] = TIT
[Link] = AUT
[Link] = NED
[Link] = PRE
[Link] = EXS
' Refrescamos los TextBox
Refresh

' Esto produce una pequea parada


Do While DETENERSE = True
A= A+ 1
If A = 100000 Then DETENERSE = False: A = 0
Loop
' termin la parada y vuelve a leer datos

Loop
Close #1

End Sub

Observe que los nombre de las variables en el proceso de lectura tienen distintos
nombres a los utilizados durante la escritura. Como en el fichero no se guarda
ninguna referencia al respecto, lo nico que importa es que el nmero de variables
para la lectura sea igual al nmero de variables que se utiliz para la escritura, y
que el orden de las variables sea correcto. Si por ejemplo, el nmero de variables
usadas en la introduccin de datos fuese distinta al nmero de variables usado en
la lectura, Visual Basic nos dara un error.

Observe tambin que se ha introducido un temporizador. Sirve para ver los


sucesivos ttulos que tenemos en nuestra base de datos tan sui generis. Se ha
pretendido presentar unos datos de esta pequea base de datos sin complicarnos
mucho la vida. Mas adelante veremos como presentarlos de una forma correcta.
Este tipo de ficheros no es el mas adecuado para construir grandes bases de
datos, es complicado manejar ficheros de mas de unas pocas lneas, por lo que
para tener muchos datos, este tipo de ficheros no es recomendable. Sin embargo,
para tener una lnea nica, o un nmero bajo de lneas de datos, este tipo de
fichero Simplifica notablemente las aplicaciones. Tiene adems una gran ventaja :
podemos verlo con un procesador de textos ASCII (Block de Notas, por ejemplo) y
cambiarle los datos con ese mismo procesador. Piense en los
tpicos
archivos .INI que acompaan a casi todas las aplicaciones informticas para la
personalizacin de las mismas y ver la utilidad de estos sencillos ficheros
secuenciales.

En esta pequea aplicacin mostrbamos las informaciones sucesivamente segn


las bamos leyendo del fichero. Interrumpamos momentneamente la lectura para
presentar cada informacin durante un instante, ya que como tenemos cinco datos
distintos en cada registro y cinco TextBox para presentarlos, deberemos presentar
una informacin tras otra. Esto no parece en principio una solucin prctica para
una base de datos, donde lo que interesa es disponer de todos los datos para
usarlos cuando sea necesario. Esto nos lleva a crear una matriz para albergar
todos los datos de la base, ya que los ficheros secuenciales se leen y se les tiene
que extraer toda la informacin de un golpe, ya que no permiten ir a leer hacia
atrs. Por lo tanto, si deseamos disponer de todos los datos, deberemos
guardarlos en la memoria, en una matriz. Imagnese que estamos tratando datos
de varios miles de libros en el ejemplo anterior. Si la informacin de cada campo
es medianamente extensa, no tendramos memoria RAM suficiente en el
ordenador para albergarlos. Esto nos lleva a pensar en otro tipo de archivo que
veremos a continuacin, los Random (aleatorios), que permiten leer solamente los
registros que nos interesan.

Pero volvamos a nuestra aplicacin de librera, donde hemos hecho una variacin,

los campos PRECIO y EXISTENCIAS los vamos a tratar ahora como nmeros
(Integer). Tambin se ha introducido otro campo tipo texto, para introducir la
edicin. El fichero creado tras introducir varios libros qued de la siguiente forma :

"EL RODABALLO","GUNTER GRASS","PLANETA",1995,2000,12


" VisualBasic - Gua del Estudiante ","LUIS SUAREZ","CEU",PRIMERA,1000,21
"EL NOMBRE DE LA ROSA","UMBERTO ECO","AGUILAR",28,1000,21
"ENCICLOPEDIA DEL VB","CEBALLOS","RAMA",CUARTA,1200,23
"LA GRANJA ANIMAL","ORWELL","DESTINO",45,12000,78
"LA PASION TURCA","ANTONIO GALA","PLANETA",SEGUNDA,2500,25
"LA METAMORFOSIS","KAFKA","PLAZA&JANES", 4,3400,101
"VB4 PARA WINDOWS95","GARY CORNELL","MCGRAWHILL",1,6500,25

Observe que los dos ltimos campos (correspondientes a PRECIO y


EXISTENCIAS) no estn entre comillas, pues no se trata de texto, sino de
nmeros.

(Observe tambin la gran ventaja de tener una base de datos con datos
completamente legibles)

Se han introducido alguna variaciones en el programa. Entre ellas, se crea una


matriz de variables de 5 x n (n=nmero de registros). Tambin se le aaden unos
botones para poder recorre toda la base de datos.

La interfaz grfica qued de la siguiente forma :

El programa necesita que le introduzcamos el nombre del fichero que alberga la


base de datos. Por sencillez no se ha usado ningn CommonDialog y se introduce
directamente el nombre de este fichero en un TextBox llamado TBNombreFichero

El fichero anterior podemos leerlo tal y como indicbamos antes :

Open [Link] For Input As #1


Do Until EOF(1)
Input #1, TITULO, AUTOR, EDITORIAL, EDICION, PRECIO, EXISTENCIAS

Donde las variables TITULO, AUTOR, EDITORIAL y EDICION sern del tipo String
y PRECIO y EXISTENCIAS sern de tipo numrico. Podemos saberlo, ya que en
una lnea cualquiera del fichero anterior :

" VisualBasic - Gua del Estudiante ","LUIS SUAREZ","CEU",PRIMERA,1000,21

los cuatro primeros parmetros van entre comillas dobles, ya que son datos tipo
texto, y los dos ltimos van sin comillas, como corresponde a datos numricos.

Pero existe otra forma mejor (al menos un poco mas complicada) para leer estos
datos, y evitar el problema que tenamos antes de tener que hacer un
temporizador para poder ver, aunque solo sea un momento, los datos. Podemos
meter los datos a una matriz que tenga tantas columnas como datos (campos) (en
el ejemplo 6, cuatro String y dos numricos), y tantas filas como apuntes
(registros) tengamos.

Para ello, antes de nada debemos definir un tipo de variable, mediante la


instruccin Type. Parece que no nos basta con los tipos de variable que trae VB
(Long, String, Integer ...) y es cierto. La variable que necesitamos no es de ningn
tipo de esos. Est compuesta por varias secciones, y cada una de ellas puede ser
de un tipo distinto. Este tipo de definiciones debe hacerse en un mdulo (Vase
instruccin Type en la ayuda de VB), por lo que se ha creado un mdulo llamado
[Link], con el siguiente cdigo :

Type REGISTROLIBRO
AUTOR As String
TITULO As String
EDITORIAL As String
EDICION As String
PRECIO As Integer
EXISTENCIAS As Integer
End Type

Esto es lo que se llama DEFINIR una variable. Es como hacerse un traje a


medida. Y dese cuenta de que es un tipo de variable (REGISTROLIBRO) formado
por varias partes (AUTOR, TITULO, Etc.) Observe que DEFINIR una variable NO
es lo mismo que DECLARAR

En el apartado de Declaraciones del General del formulario declaramos las


variables, entre ellas una variable, REGISTROLIBROS, de la cual decimos que va
a ser una matriz mediante los parntesis que la acompaan, y adems
declaramos que va a se similar a REGISTROLIBRO ya definida en el mdulo.

Dim NR As Integer
Dim REGISTROLIBROS() As REGISTROLIBRO
Dim NRP As Integer

Observe que al usar parntesis al declarar la variable REGISTROLIBROS le


estamos diciendo a VB que esa variable ser un Array, y adems que es una
variable del tipo REGISTROLIBRO, tipo de variable que ya conoce, puesto que se
la hemos definido en un mdulo.

En el ejemplo preparado podemos escribir y leer datos. Veamos de nuevo como


se escriben
El cdigo del procedimiento click del botn BIntroducir1 es :

Private Sub BIntroducir1_Click()


TITULO = [Link]

TextBox para introducir el ttulo

AUTOR = [Link]

autor

EDITORIAL = [Link]

editorial

EDICION = [Link]

edicin

PRECIO = Val([Link])

precio

EXISTENCIAS = Val([Link])

existencias

(Observe que para introducir el precio y las existencias se transform el contenido


del TextBox a un valor numrico mediante la instruccin Val.)

Open "C:\cursoVB\" + [Link] For Append As #1


Write #1, TITULO, AUTOR, EDITORIAL, EDICION, PRECIO, EXISTENCIAS
Close #1
End Sub

Tras reiteradas entradas, el fichero de la BD qued como se vio anteriormente.

Al leer los datos, lo primero es que no conocemos el nmero de registros


existentes. Como cada registro va en una lnea del fichero, si contamos el nmero
de retornos de carro (Chr(13)) obtendremos el nmero de registros. Esta
operacin es la primera que se realiza en el procedimiento click del botn LEER :

Private Sub Command2_Click()

[Link] = "" Pone todos los TextBox en blanco


[Link] = ""
[Link] = ""
[Link] = ""
[Link] = ""

[Link] = ""
NR = 0

NR=nmero de registros

Abre el fichero, lo lee entero y cuenta el nmero de retornos de carro. Existirn


tantos apuntes (registros) como retornos de carro existan, ya que cada registro
ocupa una lnea.

Open [Link] For Input As #1


Do Until EOF(1)
A = Input(1, #1)
If A = Chr(13) Then NR = NR + 1
Loop
Close #1

Presenta en LNumFich el nmero de registros

[Link] = Str(NR) + " Registros)"

'Redimensionamos la matriz de REGISTROLIBROS a NR elementos..


ReDim REGISTROLIBROS(1 To NR)

Volvemos a abrir el fichero


Open [Link] For Input As #1

Leemos los registros del 1 al NR, y cada campo del fichero lo vamos asignando a
los elementos que componen la matriz.

For I = 1 To NR
Input #1, REGISTROLIBROS(I).TITULO
Input #1, REGISTROLIBROS(I).AUTOR
Input #1, REGISTROLIBROS(I).EDITORIAL
Input #1, REGISTROLIBROS(I).EDICION
Input #1, REGISTROLIBROS(I).PRECIO
Input #1, REGISTROLIBROS(I).EXISTENCIAS

Next I
Close #1

NOTA.- Estas lneas podramos heberlas puesto en una lnea nica :


Input#1,REGISTROLIBROS(I).TITULO,REGISTROLIBROS(I).AUTOR,_
REGISTROLIBROS(I).EDITORIAL,REGISTROLIBROS(I).EDICION,_
REGISTROLIBROS(I).PRECIO, REGISTROLIBROS(I).EXISTENCIAS

NRP = Nmero del Registro Presentado. Lo hacemos igual a 1 para presentar, de


momento, el nmero 1

NRP = 1

[Link] = REGISTROLIBROS(NRP).TITULO
[Link] = REGISTROLIBROS(NRP).AUTOR
[Link] = REGISTROLIBROS(NRP).EDITORIAL
[Link] = REGISTROLIBROS(NRP).EDICION
[Link] = REGISTROLIBROS(NRP).PRECIO
[Link] = REGISTROLIBROS(NRP).EXISTENCIAS

End Sub

Copiamos este cdigo de presentacin de datos y lo llevamos a las flechas de


incrementar o disminuir el nmero del registro a presentar.

Private Sub BMas1_Click()


NRP = NRP + 1
If NRP > NR Then protegemos que salga error de NRP fuera de intervalo
MsgBox "No existen mas registros en esta direccin"
NRP = NR
Else
[Link] = REGISTROLIBROS(NRP).TITULO
[Link] = REGISTROLIBROS(NRP).AUTOR
[Link] = REGISTROLIBROS(NRP).EDITORIAL
[Link] = REGISTROLIBROS(NRP).EDICION
[Link] = REGISTROLIBROS(NRP).PRECIO
[Link] = REGISTROLIBROS(NRP).EXISTENCIAS

End If
End Sub

Esta es la de incrementar. La de disminuir es igual, pero restando 1 a NRP

Las flechas dobles llevan al registro 1 y al ltimo. Tienen este cdigo

Private Sub BMas2_Click()


NRP = NR
[Link] = REGISTROLIBROS(NRP).TITULO
[Link] = REGISTROLIBROS(NRP).AUTOR
[Link] = REGISTROLIBROS(NRP).EDITORIAL
[Link] = REGISTROLIBROS(NRP).EDICION
[Link] = REGISTROLIBROS(NRP).PRECIO
[Link] = REGISTROLIBROS(NRP).EXISTENCIAS
End Sub

Observe que es muy sencillo trabajar con ficheros secuenciales para bases de
datos. El inconveniente es la cantidad de memoria necesaria para la matriz de
datos. Tambin tienen un gran inconveniente: solamente se pueden leer de hacia
adelante. Un fichero secuencial hay que leerlo de una sola vez. Esto que no es
ningn inconveniente para un fichero de texto, o incluso para un fichero de datos
que leemos una nica vez, es un problema cuando leemos un dato situado en un
punto de ese fichero, y luego tenemos que leer un dato colocado en una posicin
anterior. En este caso, deberemos terminar de leerlo, y volver a comenzar por el
principio. Este es un gran inconveniente para hacer bases de datos con ficheros
secuenciales.

No solamente hemos visto una forma de crear una base de datos, sino que hemos
visto como movernos a lo largo de los registros. Ver esto con mucho mas detalle
cuando demos bases de datos. Este tipo de bases de datos son la Tipo Texto
que ver mas adelante.

Propiedades de los ficheros Secuenciales:

EOF
Indica el fin del fichero (End Of File). EOF ser False hasta que encuentre
el final del fichero secuencial. Habr observado instrucciones tales como:

Do until EOF(1) (Hazlo hasta que encuentres el EOF del canal 1)


Do While Not EOF(1)

(Hazlo mientras EOF del canal 1 sea False)

Estas expresiones se usan en un bucle, para ir extrayendo con la


instruccin Input o Line Input los caracteres de un fichero hasta que se
encuentre la marca de final de fichero (EOF)

LOC
Devuelve la posicin de lectura/escritura actual en un archivo abierto.

La sintaxis de esta propiedad es:

LOC (Numero de canal)

la informacin devuelta para un archivo secuencial es la posicin de byte


actual en el archivo, dividida por 128.

LOF

Devuelve la longitud de un fichero (Lenght Of File) abierto mediante Open.

Sintaxis

LOF(numeroarchivo)

Ejemplo Long = LOF (1)

Observaciones
utilice la funcin

Para obtener la longitud de un archivo que no est abierto


FileLen. (Vala mas abajo)

SEEK

Devuelve la posicin actual de lectura/escritura de un archivo abierto con


la instruccin Open.

Sintaxis

Seek(nmeroArchivo)

Observaciones

Seek devuelve un valor entre 1 y 2,147,483,647 (equivalente a 2^31-1) inclusive.


Para archivos abiertos en modo Output, Append o Input, Seek devuelve la posicin
de byte en la que se va a ejecutar la siguiente operacin. El primer byte de un
archivo est en la posicin 1, el segundo en la posicin 2 y as sucesivamente.

FICHEROS ALEATORIOS (RANDOM)

Un fichero aleatorio es un conjunto de registros, todos ellos de la misma longitud,

que nos permite guardar varias colecciones de datos.

Tal como habamos visto en los ficheros secuenciales, el almacenar una serie de
colecciones de datos en un fichero secuencial era muy fcil, pero bastante difcil
de almacenarlas en la memoria cuando el nmero de estas colecciones superaba
una cierta cantidad.

Los ficheros aleatorios permiten almacenar informacin en registros que pueden


ser fcilmente ledos, pudiendo leer los registros uno a uno, sin necesidad de
leerlos todos. En los archivos secuenciales, la informacin de varios datos
podamos introducirla mediante la instruccin Write, y conseguamos un registro
de la forma: (Recurdese el ejemplo de los datos de un libro)

"Ttulo","Autor","Editorial","Edicin","Precio","Existencias"

Si desebamos guardar la informacin de muchos libros, no haba mucho


problema para guardarla, pero s para almacenarla en memoria para poder usarla
luego. Tenamos que leer todo el fichero, y extraer de l la coleccin de
informaciones y guardarlas en una matriz. Cambiar una informacin dentro del
fichero secuencial tambin implica una complicacin adicional, ya que debemos
rehacer el fichero completo, pues un fichero secuencial no permite remendar el
trozo que queremos cambiar.

Los ficheros aleatorios nos permiten guardar una informacin similar a la anterior,
referida a cualquier nmero de libros, y para leerla no es necesario leer todo el
fichero, sino simplemente acceder a los registros que nos interesen. Tambin
permite realizar el cambio de un registro de una forma sencilla, sin alterar los
dems.

Todo esto tiene un precio: En los archivos secuenciales, podamos introducir


informaciones de cualquier longitud. En los archivos aleatorios cada dato tiene una
longitud asignada, longitud que no se puede sobrepasar, y si la informacin que
debemos almacenar tiene menos que la longitud preestablecida, perderemos esa
capacidad sobrante.

Para abrir un fichero aleatorio debemos emplear la expresin:

Open Nombrefichero
LongitudRegistro

For

Random As

Numerocanal

Len

Nombrefichero es el nombre que queremos dar al fichero


Numerocanal es el nmero del canal (nmero de fichero) que puede ser de 1 a
255
LogitudRegistro es la longitud total del registro.

Un fichero aleatorio (Random), una vez abierto, puede utilizarse para leer o
escribir datos.

Para escribir datos en un fichero aleatorio, primero debemos definir el registro, es


decir, en el caso de los libros visto anteriormente, un registro va almacenar los
datos del titulo, autor, editorial, etc. Para "saber" como se colocan estos datos
dentro del registro ser necesario definirlo. Podemos hacerlo con la instruccin
Type en un mdulo:

Type Registro
Titulo As String * 30

Asignamos 30 caracteres para el

ttulo
Autor As String * 30

Otros 30 para el autor

Editorial As String * 15

Asignamos

15

caracteres

para

Edicin As String * 6

Asignamos

caracteres

para

editorial
Edicin

Precio As String * 4

Asignamos 4 caracteres para el precio

Existencias As String * 3 Tres caracteres para existencias.


End Type

Observe la diferencia de esta definicin con la que hacamos en los ficheros


secuenciales. En aquellos no ponamos la longitud de cada seccin. Aqu es
necesario, ya que la longitud de un registro (y tambin de cada campo) es fija.

Ya una vez definido como es Registro, podemos decir que una variable es del tipo
definido para Registro, es decir :

Dim MiVariable as Registro

Entonces MiVariable ya puede almacenar los datos de Titulo, Autor, Editorial,


Edicin, Precio y Existencias, colocando un dato tras otro, sin ninguna separacin,
en el mismo orden que lo habamos definido para Registro. No es necesario
utilizar separaciones ya que el programa sabe que longitud tiene cada dato y el
orden de colocacin. Lo sabe porque se lo hemos dicho al definir Registro. Si los
datos a introducir son :

Titulo :

Gua del Estudiante

Autor :

Luis Surez Bernaldo

Editorial :

Ediciones XX

Edicin :

Precio :
Existencias : 25

3500

el registro correspondiente a este libro tendr una forma mas o menos as :

Gua
del
XX///2////350025/

Estudiante///////////Lus

Surez

Bernaldo//////////Ediciones

donde se ha sustituido el carcter nulo por una barra ( / ) con el fin de hacerlo
visible en el texto. Si se molesta en contar los caracteres que tiene el registro
observar que son 88, que es la suma de 30 + 30 + 15 + 6 + 4 + 3 que son los
caracteres asignados a cada uno de las partes que forman el registro (Ttulo,
Autor, etc.) Para hablar con propiedad, a esas partes que componen el registro
lea vamos a llamar CAMPOS. Un Registro est formado por varios Campos, y
cada Campo contiene una informacin.

Imagnese que introducimos otro libro. El primer campo de ese nuevo registro se
colocar en el fichero inmediatamente despus del ltimo campo existente, sin
ningn tipo de separacin. No hace falta esa separacin, pues VB conoce donde
finaliza un registro y comienza otro, ya que la longitud total del registro se le ha
introducido en la instruccin para abrir el fichero, que repetimos aqu por
comodidad :

Open Nombrefichero
LongitudRegistro

For

Random As

Numerocanal

Len

(Si se omite el dato LongitudRegistro VB colocar la longitud por defecto, 128


caracteres)

LongitudRegistro deber ser igual o mayor que la suma de caracteres de cada uno
de los campos declarados en la instruccin Type, que tambin reproducimos :

Type Registro

Titulo As String * 30

Asignamos 30 caracteres para el

ttulo
Autor As String * 30

Otros 30 para el autor

Editorial As String * 15

Asignamos

15

caracteres

para

Edicin As String * 6

Asignamos

caracteres

para

editorial
Edicin
Precio As String * 4

Asignamos 4 caracteres para el precio

Existencias As String * 3 Tres caracteres para existencias.


End Type

Deber ser igual o mayor, o estrictamente igual ? La respuesta es igual o


mayor. Pero si declaramos en la instruccin Open que el registro es mayor que la
suma de los caracteres de todos los campos que lo componen, estaremos
perdiendo espacio de disco duro, tanto como la diferencia entre lo declarado en la
instruccin Open menos la suma de los caracteres de cada uno de los campos. Y
esa cifra, multiplicada por el nmero de registros existentes. Por lo tanto debe
declararse en la instruccin Open exactamente la suma de los caracteres de todos
los campos. En el ejemplo anterior era bastante fcil, ya que todos los campos
eran del tipo String (cadena de caracteres) y cada carcter ocupa un byte. La cosa
se complica si uno o varios de los campos son de tipo numrico, porque nos
obligar a recordar cuantos bytes ocupa un integer, un Long, etc. Si hubisemos
declarado en la instruccin Type Precio as Long, Existencias as Integer
deberamos tener en cuenta que un Long (nmero entero entre -[Link] y
[Link], inclusive) ocupa 4 bytes y un integer (nmero entero entre -32.768
y 32.767) ocupa 2 bytes. Se reproduce a continuacin la longitud en Bytes de cada
uno de los tipos de datos. No se moleste en aprendrsela de memoria, pues en la
Ayuda de Visual Basic puede encontrarla como Resumen de tipos de datos.
Pero fjese en algo tan curioso como que un dato tipo Boolean que solamente
puede tomar 2 valores (S / No) ocupa 2 bytes frente a un dato tipo Byte, que
puede tomar 256 valores y ocupa solamente un Byte.

Tipo de Dato

Ocupa

Byte

1 byte

Boolean

2 bytes

Integer
Long(entero largo)

2 bytes
4 bytes

Single(coma flotante Simple precisin)

4 bytes

Double(coma flotante Doble Precisin)

8 bytes

Currency

8 bytes

Date

8 bytes

Object

4 bytes

String (longitud variable)

10 bytes + longitud de cadena

String (longitud fija)

longitud declarada de la cadena

Variant (con nmeros)

16 bytes

Variant (con caracteres)

22 bytes + longitud de cadena

Ya le estoy viendo tomando buena nota de cuanto ocupa cada variable. Y echando
nmeros para saber la longitud real de la variable y no perder ningn byte del
disco duro desaprovechndolo sin informacin. No habr algo que nos lo
facilite ? S, lgicamente. La instruccin LEN

LEN nos da la longitud de un texto (Var=Len (Hola que tal), o de una variable
Var=Len(Variable)
Podemos usarla para conocer la longitud total de la variable MiVariable

LongitudRegistro = Len (MiVariable)

Pero si quiere reducir mas la cosa, abra el fichero de esta forma :

Open Nombrefichero For Random As # Numerocanal


(MiVariable)

Len = Len

Ni que decir tiene que si se abre ese fichero en varias partes del programa con
distintas instrucciones Open el valor de LongitudRegistro debe ser igual en todas
ellas.

La declaracin del registro mediante la instruccin Type debe hacerse en la


seccin de declaraciones de un Mdulo. Esta instruccin Type en realidad lo que
est haciendo es definir un nuevo tipo de variable, (una variable definida por el
usuario) que servir de muestra para que en otra parte del programa le digamos,
mediante una instruccin Dim, que tal variable es del tipo definido anteriormente
mediante la instruccin Type. Por lo tanto, debemos declarar una variable en la
parte que corresponda del programa, dependiendo del mbito que se le quiera dar
a esa variable, diciendo que ser del tipo de la declarada mediante la instruccin
Type.

Usando la declaracin de Registro del ejemplo anterior, vamos a retomar el


ejemplo de la biblioteca. Declararemos (posiblemente en la seccin de
declaraciones del formulario) una variable que llamaremos p.e. REGLIBROS de la
siguiente forma :

Dim REGLIBROS as Registro

A partir de este momento, el programa sabe que REGLIBROS es una variable que
tiene 6 campos (Titulo, Autor, Editorial, Edicin, Precio y Existencias) y que cada
campo tiene los caracteres especificados en la instruccin Type.

Ahora nos cabe una pregunta Cuantos registros tiene un fichero Random? La
respuesta es sencilla. Basta conocer la longitud del fichero mediante la instruccin
LOF si el fichero ya est abierto, o con la instruccin FILELEN si no lo est, y
dividir el dato obtenido con cualquiera de las dos instrucciones anteriores por el
valor LongitudRegistro.

Escribir datos en un fichero Random. Instruccin Put

Una vez abierto el fichero Random podemos leer y escribir datos en l. Para
escribir datos utilizaremos la instruccin Put. La sintaxis de Put es la siguiente:

Put # Numerocanal , NumeroRegistro, Variable

Puede omitirse NumeroRegistro. En este caso, el nmero de registro que se


escribir ser el siguiente al ltimo registro escrito.

NumeroRegistro es el nmero del registro que queremos escribir, y Variable es el


contenido de ese registro. Siguiendo con nuestro ejemplo de biblioteca, Variable
tiene en este caso el nombre REGLIBROS, que no es un String ni un Integer, sino
una variable definida por el usuario ya que la declaramos con Dim REGLIBROS
as Registro. Por lo tanto, la variable REGLIBROS contendr los mismos campos
que habamos declarado para Registro en la instruccin Type. Recuerde :

Type Registro
Titulo As String * 30

Asignamos 30 caracteres para el

ttulo
Autor As String * 30

Otros 30 para el autor

Editorial As String * 15

Asignamos

15

caracteres

para

Edicin As String * 6

Asignamos

caracteres

para

editorial

Edicin
Precio As String * 4

Asignamos 4 caracteres para el precio

Existencias As String * 3 Tres caracteres para existencias.


End Type

Luego REGLIBROS tendr 6 campos (Titulo, Autor, Editorial, Edicin, Precio y


Existencias), cada uno de una longitud determinada, la definida en la instruccin
Type.

Antes de introducir REGLIBROS en el fichero habr que decir que valor tiene.
Pero cada campo que lo compone tendr un valor. Podramos hacer una
aplicacin en la que, a travs de varios TextBox, le introdujsemos los valores de
los campos, y el nmero de registro en el cual queremos escribir. El nombre de
cada uno de los TextBox para cada uno de los datos es el siguiente :

Campo Ttulo :
TBEDITORIAL

TBTITULO

Campo Edicin :TBEDICION


TBEXISTENCIAS

Campo Autor :

TBAUTOR

Campo Editorial :

Campo Precio : TBPRECIO Campo Existencias :

La aplicacin deber introducir en cada campo el valor (string) existente en cada


uno de esos TextBox. El valor de la variable REGLIBROS lo compondremos de la
siguiente forma :

[Link] = [Link]
[Link] = [Link]
[Link] = [Link]
[Link] = [Link]

[Link] = [Link]
[Link] = [Link]

(Si se hubiese omitido alguna de estas igualdades, el campo correspondiente


contendra el valor nulo)

De esta forma, REGLIBROS ya tiene un valor que se puede escribir en el fichero


mediante la instruccin Put.

El formulario de esa aplicacin tendr esta forma :

Observe que ya se le han introducido otros controles (TextBox para introducir el


nombre del fichero, otro para el nmero de registro, botones para leer, escribir,
abrir el fichero (EXAMINAR), un par de botones para subir o bajar el nmero de
registro y un botn para salir de la aplicacin. El TextBox para introducir el nombre
del fichero se llama TBNOMBREFICHERO y en el que debemos introducir el
nmero de registro a leer o escribir TBLEERESCR.

El Botn EXAMINAR cierra cualquier fichero que pudiese estar abierto, abre el
fichero indicado en TBNOMBREFICHERO, calcula el nmero de registros y
escribe este nmero en el Label con nombre LNUMFICH.
El cdigo de su
procedimiento Click es el siguiente :

Private Sub BEXAMINAR_Click()


Close
abierto

Cierra

cualquier

Open TBNOMBREFICHERO For Random As #1 Len = 88 Abre

el

fichero
fichero

deseado
LONGITUDFICH = LOF(1)

Obtiene su longitud

NUMREGS = LONGITUDFICH / 88
registros

Calcula

[Link] = NUMREGS
Label

Pone ese N. en el

el

N.

de

End Sub

Veamos como se escribe un registro. Analicemos el cdigo del procedimiento click


del botn ESCRIBIR

Private Sub BESCRIBIR_Click()


[Link] = [Link]
valores de cada

Se

asignan

los

[Link] = [Link]
la variable

uno de los campos de

[Link] = [Link]

REGISTROLIBROS

[Link] = [Link]
[Link] = [Link]
[Link] = [Link]
Put #1, Val(TBLEERESCR), REGISTROLIBRO
registro

Se escribe el

End Sub

Observe que el N. de registro es el valor que figure en el TextBox TBLEERESCR

Leer datos en un fichero Random. Instruccin Get

Para leer los datos de un fichero Random utilizaremos la instruccin Get. Su


sintaxis es la siguiente :

Get # Numerocanal , NumeroRegistro, Variable

Puede omitirse NumeroRegistro. En este caso, el nmero de registro que se leer


ser el siguiente al ltimo registro ledo.

La Instruccin Get leer un registro completo. Ese registro contendr varios


campos, y seguramente nos interesar conocer el valor de cada campo dentro de
ese registro. Variable es una variable que contendr todos los campos. En
nuestra aplicacin de biblioteca, Variable tiene por nombre REGISTROLIBRO (El
mismo que tena para la instruccin Put de escribir. Es pura comodidad del
programador. Puede tener cualquier otro nombre)

Para obtener el contenido de cada campo, realizaremos un proceso similar al


empleado para la escritura, pero al revs. En nuestra aplicacin, pretendemos
poner el contenido de cada campo en los mismos TextBox que se utilizaron para
escribirlos. Veamos el contenido del procedimiento click del botn LEER

Private Sub BLEER_Click()


Get #1, Val(TBLEERESCR), REGISTROLIBRO
completo

Lee

el

registro

[Link] = [Link]
Titulo

Obtiene el valor del campo

[Link] = [Link]
Precio

Autor,

[Link] = [Link]

y Existencias y los pone en

Editorial,

Edicin,

los
[Link] = [Link]
cada

TextBox correspondientes a

[Link] = [Link]

dato

[Link] = [Link]
End Sub

Funciones e instrucciones aplicables a los ficheros Random.

Funciones Seek y Loc.

En los ficheros Random tienen especial importancia las funciones Seek y Loc.

Mediante la Funcin Loc podemos conocer la el ltimo registro manipulado, bien


por lectura, escritura. Si abrimos el fichero y no se ha hecho ninguna lectura o
escritura de registros, el nmero devuelto por la funcin Loc es 0.

La sintaxis de la funcin Loc es :

Variable = Loc (Numerocanal)

Variable tomar un valor igual al nmero del registro escrito o ledo por ltima vez.

Mediante la Funcin Seek podemos conocer el prximo registro que ser


manipulado en una operacin de lectura o escritura. Si abrimos el fichero y no se
ha hecho an ninguna operacin de lectura o escritura, Seek devuelve el valor 1.

La sintaxis de la funcin Seek es :

Variable = Seek (Numerocanal)

ATENCION
Seek puede ser una funcin (lee un Dato) o una instruccin (fuerza un
dato) ! ! !

Instruccin Seek

La instruccin Seek establece el prximo registro a leer o escribir en un fichero


Random.

Sintaxis

Seek (Numerocanal), posicin

posicin es el nmero de registro que se va a leer o escribir en la siguiente


operacin. No acepta el 0 como nmero de registro, el mas bajo debe ser el 1. Si
se intenta forzar a la posicin 0 dar un error.

Funciones de los ficheros Random:

EOF

Devuelve un valor que indica si se ha llegado al final de un archivo.

Sintaxis

EOF(Numerocanal)

En archivos Random, EOF devuelve False hasta que se haya ejecutado una
instruccin Get y no haya podido leer el registro completo, en cuyo caso devolver
True.
La funcin EOF no suele emplearse en ficheros Random, ya que en estos nos
movemos a base de registros, y es muy fcil controlar cuantos registros existen
en el fichero y en que registro nos encontramos o nos vamos a mover, mediante
las funciones LOF, LOC y SEEK

LOF

( Lenght Of File )

Devuelve la longitud de un fichero .

Sintaxis

Variable = LOF(Numerocanal)

Mediante la funcin LOF podemos conocer el nmero de registros existentes en


un fichero Random, dividiendo el valor devuelto por LOF por la longitud del registro
declarada en la instruccin Open (LEN = longitud)

N. Registros = LOF / longitud

Recuerde

Para obtener la longitud de un archivo que no est abierto utilce la

funcin

FileLen.

FICHEROS BINARIOS

Un fichero binario es una sucesin de bytes, uno tras otro, que puede almacenar
cualquier tipo de informacin. Cuando se explicaban los ficheros secuenciales,
decamos que eran los mas adecuados para introducir informacin de un texto,
con los Random podamos realizar una base de datos de forma sencilla, a base de
controlar los registros y sus campos. Con un fichero binario podemos almacenar
cualquier informacin. (texto y cualquier tipo de datos) .

Para abrir un fichero secuencial se abre utilizando la instruccin :

Open Nombrefichero For Binary As # Numerocanal

Como siempre en VB, Numerocanal puede ser un nmero comprendido entre 1 y


255, que define ea fichero. No pueden existir al mismo tiempo 2 ficheros abiertos
con el mismo Numero de canal.

Nombrefichero es el nombre completo del fichero, con su Path.

Una vez abierto un fichero se binario, podemos leer o escribir datos en l.

Para escribir uno o varios caracteres en un fichero binario, usaremos la instruccin


Put.

Put # Numerocanal, Posicin, Variable

Donde Posicin es el Byte donde comenzar la escritura, y Variable es el nombre


de la variable que contiene el dato a escribir. Este dato puede ser un byte o varios
bytes.

Para escribir varios bytes podemos hacerlo de dos formas :

- Si se puede conocer de antemano el nmero de bytes a escribir, puede


declararse Variable como un string de ese nmero de caracteres mediante la
instruccin Dim, por ejemplo :

Dim Variable As String * numero de bytes

y en este caso siempre escribir el nmero de bytes declarado. Cuidado ! Si los


datos a introducir sobrepasan el nmero de bytes declarados para Variable, los
datos sobrantes no se escribirn en el fichero. Si los datos a escribir en el fichero
fuesen menos que los declarados para Variable, la diferencia se rellenar con el
byte nulo ( 0 ).

- Si no se conoce de antemano el nmero de bytes a escribir, podemos declarar la


variable sin especificar el nmero de bytes que tiene, y de esta forma se escribirn
todos los bytes que componen la variable :

Dim Variable As String

Pero en este caso debemos volver a decir Cuidado !, si no conocemos el


nmero de bytes que vamos a escribir, puede que machaquemos parte de la
informacin que ya tenemos en el fichero, pues la instruccin Put va a colocar los
bytes que componen Variable en la posicin especificada por Posicin y
siguientes, hasta que quepa toda la cadena de bytes que le queremos introducir.
Si la posicin en la que introducimos esos bytes es una posicin intermedia, y no

controlamos bien el nmero de bytes a introducir y las informaciones que ya


existen en el fichero en las posiciones colindantes con las que vamos a introducir
los datos, es muy probable que perdamos esa informacin al introducir la nueva.

Si se omite el dato Posicin, se tomar como byte de inicio de la escritura el


siguiente al ltimo usado por la instruccin Put. Si quiere omitir este dato, debe
conservar las comas que lo separan :

Put # Numerocanal, , Variable

Qu pasar si el dato Posicin indica una posicin mayor que la que tiene
realmente el fichero ? Simplemente que rellenar las posiciones intermedias que
se formarn con un byte (puede verlo con el Block de Notas )

Un fichero binario es, como se deca al principio, una sucesin de bytes, que no
tiene ningn tipo de separacin entre bytes. Cada dato (byte o conjunto de bytes)
que introduzcamos en un fichero binario se escribir en el fichero tal y como se
introducen. Machacando informacin ya existente si no se controla bien donde se
mete. Por lo tanto, aunque parece que los ficheros binarios pueden ser mucho
mas verstiles que los secuenciales y los Random, exigen mucho mas control que
los anteriores. Limite el uso de este tipo de ficheros a las aplicaciones en que sea
realmente imprescindible.

Para leer datos de un fichero binario, utilizaremos la instruccin Get.

Get # Numerocanal, Posicin, Variable

Donde Posicin es el nmero del primer byte ledo, que como en el caso de Put, si
se omite, tomar como valor el byte siguiente al usado en la ltima instruccin
Get. Variable es el nombre de una variable que contendr los datos ledos.

Pueden leerse uno o varios Bytes, pero ahora surge un pequeo problema.
Como le decimos cuantos bytes debe leer ? Sencillamente los especificados al
declarar la variable . Imaginemos que la declaracin de la variable fue :

Dim Variable As String * 10

Con Variable declarada de esta forma, leer 10 bytes a partir del byte Posicin.
(Incluido)

De esta forma, siempre leeremos un nmero determinado de caracteres (10 en el


caso del ejemplo). Esta es una limitacin para el uso de Get. Esta funcin viene
muy bien en aquellas aplicaciones en las que tenemos que extraer un nmero fijo
de bytes (En la prctica, en la mayor parte de las aplicaciones se extrae de uno en
uno)

Pero pueden existir aplicaciones en las que sea necesario leer una vez un nmero
de caracteres, y otra vez otro. Ese problema lo tenemos resuelto con la
instruccin Input.

Podemos leer caracteres de un fichero secuencial mediante la instruccin Input :

Variable = Input (Numero de bytes, # Numerocanal)

Mediante la instruccin Input podemos leer el nmero de caracteres que


queramos, pero no podemos controlar el byte de comienzo. Por lo tanto
deberemos ayudarnos de la instruccin Seek para posicionar el puntero de lectura
encima del primer byte que queramos leer :

Seek (Numerocanal), Nmero del primer Byte a leer

Por ejemplo, si queremos leer 35 bytes de un archivo binario, abierto con el


nmero de canal 1, comenzando por el byte 48 (el 48 ser el primer byte ledo),
ejecutaremos las dos siguientes instrucciones :

Seek (1), 48
Variable = Input (35, #1)

Variable contendr ahora los 35 bytes deseados.

Al igual que se hizo para los ficheros secuenciales y Random, vamos a ver con un
ejemplo prctico como se manejan los ficheros binarios.

El formulario del ejemplo tiene esta forma :

Con el botn ABRIR se abre el fichero deseado. Si no existe en el disco, lo crea,


ya que la instruccin
Open Nombrefichero For Binary As # Numerocanal

intenta abrir un fichero existente llamado Nombrefichero, y si este no existe, lo


crea. Si existe el fichero, presenta todo su contenido en el TextBox inferior, para
poder tener una referencia de que lugar ocupan los distintos caracteres (un fichero
binario puede guardar cualquier byte, por lo que si abre un fichero generado con
cualquier programa puede ser que muchos de los bytes no contengan informacin
de un carcter, por lo que le recomendamos haga esta prctica con un fichero
creado por la misma prctica)

El botn CERRAR cierra el fichero. SALIR sale de la aplicacin. El TextBox


superior (variable) sirve para introducir la variable a escribir en el fichero, o para
presentar la variable leda en caso de lectura . El TextBox posicin sirve para
indicar la posicin del primer byte. Posicin por defecto presenta la posicin que
se extrae mediante la funcin Seek cada vez que se hace una lectura o escritura
en el fichero. Longitud de la variable permite introducir esa longitud, para leer
mediante la instruccin Input.

El botn ESCRIBIR escribe el dato Variable en el fichero, LEER (GET) lee un


nico byte, y LEER (INPUT) lee una cadena de caracteres, de longitud la
especificada en el TextBox Longitud de la variable.

Se enumera a continuacin el cdigo de cada uno, dejando para las explicaciones


del profesor en clase, o el estudio del alumno, la interpretacin de cada una de
susu partes.

FORMULARIO.
Option Explicit

DECLARACIONES
Obliga a declarar todas las variables

Dim LONGVAR As Integer Se declara la variable LONGVAR

Dim COMIENZA As Long Se declara la variable COMIENZA


Dim TESTO As String

Se declara la variable TESTO

Dim pospordef As Long

Se declara la variable pospordef

BOTON ABRIR
Private Sub BABRIR_Click()
[Link]

CD1 es un CommonDialog para buscar el fichero

Open [Link] For Binary As #1

Abre el fichero indicado en CD1

TESTO = Input(LOF(1), #1)


variable TESTO

Lee de un golpe el fichero y lo mete en la

[Link] = TESTO

Presenta el fichero en el TextBox TBFICHERO

End Sub

BOTON CERRAR
Private Sub BCERRAR_Click()
Close
abiertos

La instruccin Close cierra todos los ficheros

End Sub

BOTON ESCRIBIR
Private Sub BESCRIBIR_Click()
[Link] = RGB(255, 0, 0)

Pone el TB long. De la variable en rojo

Dim escribe As String


sin limitacin

Declara la variable escribe como string,

escribe = [Link]

Pasa el contenido de TBVAR a la variable

escribe
Put #1, Val(TBVAR3), escribe
posicin del 1er byte

Instruccin Put. Val(TBVAR3) es la

pospordef = Seek(1)
fichero

Analiza donde qued el puntero del

Lvar5 = Str(pospordef)

y pone este valor en la etiqueta Lvar5

End Sub

BOTON LEER (GET)


Private Sub BLEER_Click()
[Link] = RGB(255, 0, 0)
variable)

Pone en rojo el TB TBVAR2 (long. de la

[Link] = "1"

e indica que la longitud leda es 1

If Seek(1) >= LOF(1) Then

Si est al final del archivo

Seek #1, 1

pone el puntero en la posicin 1

End If

Dim TEXTO As String * 1

Declara la variable TEXTO de un byte

If [Link] <> "" Then

Si se le ha indicado donde tiene que comenzar

COMIENZA = Val([Link]) le dice que comience en la posicin indicada en


TBVAR3
ElseIf [Link] <> "" Then

si no, si existe posicin por defecto

COMIENZA = Val([Link]) le indica que comience en la posicin por defecto


Else
COMIENZA = Seek(1)
End If

si no
pone el puntero en la posicin 1 (byte 1)

Get #1, COMIENZA, TEXTO

lee un byte

[Link] = TEXTO

y lo presenta en TBVAR1

pospordef = Seek(1)

busca la nueva posicin por defecto

Lvar5 = Str(pospordef)

y pone ese valor en Lvar5

End Sub

BOTON LEER (INPUT)


Private Sub BLLERINPUT_Click()
[Link] = RGB(255, 255, 255)

Pone TBVAR2 en blanco

LONGVAR = Val([Link]) pasa el valor para long. de variable a LONGVAR


If [Link] <> "" Then

si ese valor existe (TBVAR3 es distinto de nada)

COMIENZA = Val([Link]) la variable COMIENZA toma ese valor


Seek (1), COMIENZA
End If

coloca el puntero en ese valor

Dim TEXTO As String

Declara la variable TEXTO sin limitacin

TEXTO = Input(LONGVAR, #1)


pasa a TEXTO

Lee LONGVAR bytes del canal 1 y los

[Link] = TEXTO

y lo presenta en el TB TBVAR1

pospordef = Seek(1)

analiza la nueva posicin por defecto

Lvar5 = Str(pospordef)

y la presenta en Lvar5

End Sub

BOTON SALIR
Private Sub BSALIR_Click()

End

Sale de la aplicacin.

End Sub

Private Sub TBVAR2_Change()


[Link] = RGB(255, 255, 255)
introducimos un dato en
End Sub

Vuelve a color blanco si

este Text Box

FIN DE LA APLICACIN PARA MANEJO DE FICHEROS BINARIOS

Funciones y propiedades aplicables a todos los ficheros

DIR

Devuelve el nombre de un archivo, directorio o carpeta que concuerda con el


patrn o atributo de archivo especificado o la etiqueta de volumen de una unidad
de disco.

Sintaxis

Dir[(nombreruta[, atributos])]

nombreruta Expresin de cadena que especifica un nombre de archivo. Puede


incluir el directorio o carpeta y la unidad de disco. Si no se encuentra nombreruta,
devuelve Null.
atributos
Constante o expresin numrica, cuya suma especifica atributos de
archivo. Si se omite, devuelve todos los archivos normales que satisfacen el
nombreruta.

El argumento atributos tiene estas constantes y valores:

Constante

Valor Descripcin

vbNormal

Normal.

vbHidden

Oculto.

vbSystem

Sistema

vbVolume
atributos

Etiqueta de volumen; si se especifica se ignoran todos los

vbDirectory 16

Directorio o carpeta.

En Microsoft Windows, Dir permite el empleo de los caracteres comodn '*'


(mltiples caracteres) y '?' (un solo carcter) para especificar varios archivos.
La primera vez que se llama a la funcin Dir se debe especificar el nombreruta, de
lo contrario se produce un error. Si adems se especifican atributos de archivo, se
debe incluir el nombreruta.
Dir devuelve el primer nombre de archivo que coincide con el nombreruta. Para
obtener ms nombres de archivo que coincidan con el nombreruta, se debe volver
a llamar a Dir sin argumentos.
Cuando no hay ms nombres de archivo coincidentes, Dir devuelve una cadena
de caracteres de longitud cero. Cuando se devuelve una cadena de longitud cero,
en las siguientes llamadas se debe especificar nombreruta o se producir un error.
Se puede cambiar el nombreruta sin haber obtenido todos los nombres de archivo
que coinciden con el nombreruta actual. Sin embargo, no se puede llamar a la
funcin Dir.

FILECOPY

Copia un archivo.

Sintaxis

FileCopy fuente, destino

fuente Expresin de cadena que especifica el nombre de un archivo a copiarse


puede incluir el directorio o carpeta y la unidad de disco..
destino
Expresin de cadena que especifica el nombre del archivo de destino
se puede incluir el directorio o carpeta y la unidad de disco.

Si intenta utilizar la instruccin FileCopy en un archivo abierto actualmente, se


produce un error.

FILEDATATIME

Devuelve una fecha que indica la fecha y hora en que un archivo fue creado o
modificado por ltima vez.

Sintaxis

Variable = FileDateTime(nombreRuta)

El argumento con nombre nombreRuta es una expresin de cadena que especifica


un nombre de archivo. Se puede incluir el directorio o carpeta y la unidad de disco.

FILELEN

Devuelve la longitud de un archivo en bytes.

Sintaxis

Variable = FileLen(nombreRuta)

El argumento con nombre nombreRuta es una expresin de cadena que especifica


un nombre de archivo se puede incluir el directorio o carpeta y la unidad de disco.

Si el archivo especificado est abierto cuando se llama la funcin FileLen, el valor


devuelto representa el ltimo tamao de ese archivo cuando se guard la ultima
vez en el disco.
Para obtener la longitud de un archivo abierto, utilice la funcin LOF.

GETATTR

Devuelve un nmero, que representa los atributos de un archivo, directorio o


carpeta o una etiqueta de volumen.

Sintaxis

Variable = GetAttr(nombreRuta)

El argumento con nombre nombreRuta es una expresin de cadena que especifica


un nombre de archivo se puede incluir el directorio o carpeta y la unidad de disco.

Valores devueltos

El valor devuelto por GetAttr es la suma de los siguientes valores de atributos:

Valor Constante

Descripcin

Normal.

vbNormal

vbReadOnly Slo lectura.

vbHidden

Oculto.

vbSystem

Archivo de sistema.

16

vbDirectory Directorio o carpeta.

32
vbArchive
copia de

El archivo ha sido modificado despus de efectuar la ltima


seguridad.

SETATTR

Establece los atributos de un archivo.

Sintaxis

SetAttr nombreRuta;atributos

nombreRuta Expresin de cadena que especifica un nombre de archivo se puede


incluir el
directorio o carpeta y la unidad de disco.
atributos
de

Constante o expresin numrica cuya suma especifica los atributos


archivo.

Las constantes y valores de atributos son los mismos que para la instruccin
GetAttr

Si se trata de establecer los atributos de un archivo abierto, se producir un error


en tiempo de
ejecucin.

FREEFILE

Devuelve el siguiente nmero de archivo disponible para ser usado con la


instruccin Open.

Sintaxis

FreeFile[(nmerodeintervalo)]

El argumento nmerodeintervalo especifica el intervalo desde el que el siguiente


nmero de archivo libre se va a devolver. Se especifica 0 (predeterminado) para
devolver un nmero de archivo en el intervalo 1 a 255, inclusive. Se especifica 1
para devolver un nmero de archivo en el intervalo 256 a 511.

Observaciones
Se usa FreeFile cuando se necesita proveer un nmero de
archivo y se quiere asegurar que el nmero de archivo no est ya en uso.

INTERFACE DE DOCUMENTOS MULTIPLES. (Multiple Document Interface MDI )


Lo que se va a explicar en este captulo le ser bastante familiar aunque nunca haya
reparado en ello. Posiblemente haya utilizado un procesador de texto en el que est
escribiendo una carta, y antes de terminar de escribir esa carta, comienza a escribir otro
documento, y posiblemente otro, y tenga los tres documentos en la pantalla al mismo
tiempo, bien en ventanas escalonadas, (cascada), bien en ventanas en forma de mosaico, o
simplemente tapando unas a otras completamente. Los tres documentos estn en su
procesador de textos, y puede actuar sobre uno u otro simplemente eligiendo el deseado
mediante el mecanismo que le proporciona su procesador de textos. Este sistema no es ni
mas ni menos que una interface de documentos mltiples. En programacin, a este tipo de
aplicaciones las denominamos MDI

Para crear una aplicacin MDI debe hacerse mediante un Formulario Padre al que se le
aaden tantos Formularios Hijo como documentos tengamos. Al formulario padre le
denominamos Formulario MDI, y a los formularios hijo en Visual Basic se les denomina

formularios MDIChild. En esta Gua del Estudiante se usarn indistintamente una u otra
denominacin.

La nica diferencia entre un formulario normal y un formulario Hijo es que ste tiene la
propiedad MDIChild a true.

Para realizar una aplicacin MDI, lo primero que hay que hacer es introducir en ella un
formulario MDI. Para introducirlo, basta con hacer click en Insertar | Formulario MDI de
la barra de men. Solamente se puede tener un formulario MDI en una aplicacin. Puede
observar que una vez que ha introducido uno, la palabra Formulario MDI del submen
Insertar queda deshabilitada.

Una vez que tiene un formulario MDI puede introducir tantos formularios hijo como desee.
Para que un formulario sea formulario hijo basta con poner a True su propiedad
MDIChild.

En una aplicacin MDI pueden coexistir formularios hijo y formularios normales.

Propiedades de los formularios MDI

Aparte de las propiedades de un formulario normal, un formulario MDI tiene las siguiente
propiedades :

AutoShowChildren. Muestra los formularios hijo nada mas cargarlos.

Esta propiedad puede verse si se carga un formulario hijo mediante la sentencia :

Load NombreFormularioHijo

Si la propiedad AutoShowChildren est a True, el formulario cargado se ver


inmediatamente. Si est a False, ser necesario ejecutar la sentencia
[Link] para presentarlo.

ActiveForm Mediante esta propiedad podemos conocer el formulario activo dentro de


una aplicacin de documentos mltiples. (El formulario activo es aquel que tiene el foco)

MiVariable = [Link]

MiVariable contendr el Caption (Barra de Titulo) del formulario activo.

[Link] = RGB (255,0,0)

pondr el fondo del formulario activo de color rojo.

ScrollBars Hace que el Formulario MDI (padre) muestre barras de Scroll para presentar
en toda su extensin a un formulario hijo, cuando las dimensiones de ste superan las de
aquel.

Aparte de estas propiedades que diferencian un Formulario MDI de un Formulario normal,


los Formularios MDI presentan otras particularidades.

Insercin de Controles
Solamente podrn introducirse en un formulario MDI aquellos
controles que tengan la propiedad Align. (Picture, Data, DBGrid) y solo permiten que se
presenten con alineacin a uno de los lados del Formulario (Top, Bottom, Left o Right)

El control Picture puede trabajar como contenedor de otros controles. Por lo tanto, para
poder introducir cualquier control (TextBox, Label, CommandButton ...) ser necesario
introducir un control Picture, y sobre el, poner los controles que se necesiten.

Lnea de Men. Cuando existe la lnea de Men en un Formulario MDI y en el


Formulario Hijo que introduzcamos en l, la lnea de men del Formulario MDI se
sustituye por la lnea de men del Formulario Hijo introducido.

Barra de Ttulo. La Barra de Ttulo del Formulario MDI se conserva siempre. Pero si el
Formulario Hijo insertado dentro de l est maximizado (ocupa toda la extensin del
Formulario MDI), a la barra de ttulo se le aadir la barra de Ttulo del Formulario Hijo
entre parntesis.

Para hacer que un Formulario sea un formulario hijo basta con ponerle su propiedad
MDIChild a True.

Puede preparar los formularios hijo uno a uno e introducirlos dentro del formulario MDI
segn las necesidades de la aplicacin. Este sera el caso de una aplicacin con varias
pantallas, todas ellas colocadas sobre una pantalla fija (Formulario MDI) del que se
aprovecha quizs alguna parte como parte comn de toda la aplicacin (Men, Ttulo,
Barra de herramientas montada sobre un Picture, etc.)

Puede tambin darse el caso de introducir un nmero indeterminado de ventanas iguales


para realizar varias veces la misma funcin, pero sobre ventanas diferentes. (Caso del
procesador de texto que tiene varias ventanas de texto, cada una con un documento. Lo que
desconocemos a priori es el nmero de documentos que vamos a editar)

Para el primer caso, ser necesario crear cada una de las ventanas, e introducirlas y
quitarlas segn pida la aplicacin.

En segundo caso, bastar con crear un formulario hijo con todas las partes necesarias para
su correcto funcionamiento, y luego, realizar tantas fotocopias de ese formulario como
ventanas necesitemos. Lo que introducimos en la aplicacin son precisamente esas
fotocopias, pero no el original, que lo seguimos manteniendo intacto para volver a
copiarlo si fuese necesario.

A esas fotocopias de un formulario las llamamos Instancias. Al original le llamaremos


Clase.

En realidad una Clase es la definicin de un objeto Visual Basic. Un objeto Visual Basic
puede ser un Formulario, un control, un objeto de acceso a datos.

La Instancia es la rplica de una clase. Puede ser la rplica de un Formulario, de un control


o de otro objeto. La Instancia lleva las mismas Propiedades que la clase. Se dice que
hereda las propiedades. (Excepto la propiedad Visible, que siempre, por defecto, aparece a
False). Cuando se vara una propiedad de una Instancia, no se altera el valor de esa
propiedad en la Clase ni en ninguna de las restantes Instancias.

Despus de toda esta teora, podemos saber como se crea una Clase de un formulario ? O
dicho de manera mas coloquial, Cmo se crea un Formulario para poder hacer varias
fotocopias de l ?

La respuesta es obligatoriamente mas sencilla que la teora. Con el formulario vaco que
tengamos en el proyecto (Insertemos un Formulario si fuese necesario) pongmosle todos
los controles que deseemos. Le podemos poner un Men y cambiar a nuestro antojo todas
sus propiedades. Entre ellas, la propiedad MDIChild. Si vamos a introducir las Instancias
de ese Formulario en un Formulario MDI esa propiedad debe estar a True, y por lo tanto
sus Instancias saldrn igualmente con esa propiedad a True. Pongmosle un nombre y ya
est creada la clase. Supongamos que ese nombre es FormularioHijo

Para crear ahora Instancias de ese Formulario podemos hacerlo de dos formas :

Declarar una variable tipo Objeto. No se asuste. Para declarar que una variable es un
Formulario basta con declararla de la siguiente forma :

Dim MiVentana As Form

Esta variable debe declararla en sitio adecuado para su aplicacin, y el mbito de esa
variable objeto ser el mismo que para cualquier tipo de variable. (Vea Ambito de las
Variables) La sentencia a utilizar para la declaracin ser Dim, Private, Public o Global tal
como se explic para las variables.

Una vez declarada como variable puede hacerla igual a un objeto existente que servir de
modelo (Una Clase) que estar definida por un nombre: (P.e. FormularioHijo)

Set MiVentana = New FormularioHjo

Podemos hacer las dos operaciones a un tiempo : declarar y crear la copia :

Dim MiVentana As New FormularioHijo

Una vez creado la instancia del formulario debemos cargarlo en el Formulario Padre. Para
cargarlo debemos emplear la sentencia Load MiVentana, con lo que quedar cargado en la
memoria, pero, dependiendo de como est la propiedad AutoShowChildren del
Formulario Padre se mostrar o no se mostrar. Para que se muestre, independientemente
de como est esa propiedad, basta con ejecutar [Link]. En realidad mediante el
mtodo Show un formulario no solamente se muestra, sino que tambin se carga en la
memoria si no estuviese previamente cargado. Por lo tanto podamos habernos ahorrado la
instruccin anterior para cargarlo Load MiVentana

Es muy prctico poner un Caption distinto a cada formulario que se introduzca, caso de
introducirse varios formularios hijo iguales. El Caption es una propiedad y por lo tanto

todas las instancias heredan el Caption de la Clase. Sera prudente distinguir un formulario
de otro mediante su Caption, es decir mediante su barra de ttulo.

Para ello podemos crear un contador en el mismo procedimiento en el que creamos una
nueva instancia, y poner el Caption de cada nuevo Formulario siguiendo un orden numeral.

Documento 1, Documento 2, Documento 3, etc.

Ese procedimiento quedar de la siguiente forma :

Static contador As Integer


Dim MiVentana As New FormularioHijo
[Link] = Documento & Str (contador)
[Link]
Referencias a los Formularios. ActiveForm y Me

Si queremos nombrar un Formulario Hijo dentro de una aplicacin MDI el primer problema
con el que nos encontramos es que todos los formularios hijo (Instancias de la misma
Clase) tienen el mismo nombre. Por lo tanto no podemos nombrarlas con ese nombre, ya
que la aplicacin no sabra a cual de ellas nos referimos.

Si el cdigo donde vamos a nombrar ese formulario est fuera de l (P.e. en el Formulario
Padre) deberemos referirnos al formulario hijo mediante ActiveForm. ActiveForm nos
va a indicar cual es el formulario que est actualmente activo. Un formulario est activo
cuando estamos trabajando sobre l. En ese momento tiene el foco. Permanece activo desde
que hacemos click con el ratn sobre cualquiera de sus partes, hasta que activamos otro
formulario. Es sencillo reconocer cual es el formulario activo pues tiene su barra de ttulo
con el color vivo.

Cada vez que hacemos una operacin sobre una parte de un formulario ste se pondr
activo. Por ejemplo, si el formulario es un documento de texto, y contiene el texto en un
RichTextBox de nombre RTB1, si queremos hacer una operacin con el texto desde un
botn colocado en el formulario padre (poner en negrita el texto seleccionado), haramos lo
siguiente :

[Link] = True

ya que siempre estaremos seguro de que el Formulario Activo es aquel en el que acabamos
de seleccionar el texto.

Si el botn donde hemos puesto el botn no es el formulario padre, sino el hijo, tenemos un
problema similar. Su nombre ser (con los ejemplos anteriores) MiVentana, y pueden existir
varios formularios con ese nombre, tantos como documentos hayamos introducido. No
podemos por tanto nombrarlo con su nombre, pues hay (o puede haber) varios. Tampoco lo
podemos nombrar con ActiveForm, ya que esta propiedad corresponde al Formulario Padre.
La solucin es nombrarle mediante Me. Me siempre se refiere al formulario que contiene al
procedimiento donde est esa palabra. Por lo tanto, si tenemos un botn en el formulario
hijo con la instruccin :

[Link] = True

Me se refiere concretamente a ese formulario.

Colocacin de los Formularios Hijo - Mtodo ARRANGE

Mediante el mtodo Arrange podemos distribuir los formularios hijo dentro del formulario
padre. Pueden colocarse en cascada, mosaico horizontal, mosaico vertical o como iconos.

Sintaxis

[Link] distribucin

donde

NFMDI = Nombre del Formulario MDI

distribucin puede tomar los siguientes valores o constantes :

Constante

Valor Descripcin

vbCascade
minimizados

Dispone todos los formularios MDI secundarios no


en cascada.

vbTileHorizontal
minimizados

Dispone todos los formularios MDI secundarios no


en mosaico horizontal.

vbTileVertical
minimizados

Dispone todos los formularios MDI secundarios no

en mosaico vertical.
VbArrangeIcons

Dispone los iconos de los formularios MDI minimizados.

Las ventanas o los iconos se pueden distribuir incluso si el objeto MDIForm est
minimizado. Los resultados son visibles cuando el objeto MDIForm se maximiza.

Posicin de los Formularios en el Eje Z - Mtodo ZOrder

Cuando tenemos varios formularios hijo, unos ocultan a los otros. Mucho mas si los
formularios estn maximizados. Podemos colocar un formulario hijo en la parte frontal del
montn de formularios (para que se vea completamente) o llevarle a la posicin mas atrs
mediante el Mtodo ZOrder.

Sintaxis

[Link] posicin

Donde NFH = Nombre del Formulario Hijo

posicin puede se 0 1. Si es 0 (o si se omite) el formulario se coloca en primer plano. Si


es 1 el formulario se coloca en el fondo del eje Z.

ZOrder es un mtodo que no solamente se puede emplear con formulario hijo, sino con
cualquier instancia. Puede emplearlo tambin con cualquier control. Pero lea detenidamente
la Ayuda de este mtodo, ya que no todos los controles la admiten.

Mostrar los Formularios existentes mediante el Men -- Propiedad WindowList

Al explicar el Editor de mens casi se pas por alto una propiedad del men : WindowList.
Cuando se activa esta propiedad (Puede activarse para una sola palabra del men. Si se
pretende activar para mas de una dar un error), esa palabra que tiene activada la propiedad
WindowList mostrar al hacer click sobre ella, en un men desplegable, el Caption (Barra
de Ttulo) de todos los formularios hijo cargados en ese instante en la aplicacin. Pueden
estar incluso minimizados.

El Objeto Printer

El objeto Printer le permite comunicarse con una impresora del sistema


(inicialmente la impresora predeterminada). Este es uno de los Objetos de VB que
no tiene representacin grfica en la pantalla, tanto en tiempo de diseo como de
ejecucin.

El objeto Printer gestiona el envo de informacin a la impresora, tanto para


imprimir textos como grficos. Para Visual Basic el objeto Printer es como otro
objeto cualquiera. Si queremos imprimir algo en la impresora, debemos escribir el
cdigo VB necesario para escribirlo en el objeto Printer, lo mismo que si
estuvisemos escribiendo en un formulario.

Lo mismo que para escribir en un formulario, escribamos el cdigo

[Link] "ABCD"

Para escribir en el objeto Printer el cdigo ser:

[Link] ABCD

Para enviar grficos al objeto Printer se procede de igual forma que si


estuvisemos dibujando en un formulario

[Link] (200, 150), 50, , , , 0.5


centrada en

Esta instruccin dibuja una elipse

el punto x=200, y=150 del formulario


Form1

[Link] (200, 150), 50, , , , 0.5


centrada en

Esta instruccin dibuja una elipse

el punto x=200, y=150 del objeto Printer

Parece en principio algo raro hablar de las coordenadas x e y del objeto Printer.
Posiblemente porque el objeto Printer es un objeto que no podemos ver. Pero
imaginemos que el objeto Printer es una hoja de papel. La misma hoja que
aparecer escrita una vez que le enviemos el texto (o los grficos) que queremos
imprimir. Esa hoja de papel tendr unas dimensiones que deberemos indicar al
objeto Print. La forma de indicarle las dimensiones del papel varan dependiendo
del driver de impresora usado.

El driver de la impresora sabr que el papel que tiene es un DIN A4, DIN A3, etc.,
que tiene unas medidas prefijadas. Centrmonos en lo mas habitual, una
impresora que tenga un papel DIN A4 cuyas medidas son 210 x 297 mm.

El driver de impresora sabe que ese es el tamao de su papel. Ahora solamente


nos falta que nuestra aplicacin lo sepa tambin. Para ello vamos a indicarle
mediante un par de sentencias las medidas de ese papel : ScaleWidth y
ScaleHeight

Si le decimos :

[Link] = 2100

[Link] = 2970

le estamos diciendo a nuestro programa que el papel mide 2100 unidades de


ancho y 2970 unidades de alto. (Estamos suponiendo que el papel est colocado
en posicin vertical). Si tiene 2100 unidades de ancho, y el ancho real del papel
es de 210 mm, nuestra unidad de medida ser de 0,1 mm. Es decir, le decimos a
nuestro programa que el papel tiene 2100 dcimas de milmetro de ancho, y 2970
dcimas de milmetro de alto. La precisin con la que podemos colocar un punto
sobre el papel ser por tanto 0,1 mm. Podramos hacerla mayor (0,01 mm.) si
pusisemos [Link] = 21000 y [Link] = 29700.

Para el trabajo ordinario de imprimir listados o dibujar grficos tipo barras, es mas
que suficiente una precisin de 0,1 mm. Si lo que queremos es un dibujo mas
exacto (Dibujar fotolitos de circuitos impresos, p.e. ) esta precisin de 0,1 mm. no
nos bastara, debiendo llegar a una precisin del orden de 0,01 mm. Pero todo ello
est condicionado por el nmero de p.p.i.
(puntos por pulgada) que nuestra impresora es capaz de dar.

Nota.- Una impresora tiene unos mrgenes sobre los que no puede escribir. Por lo
tanto, cuando decamos que el papel tiene 210 mm. de ancho, en realidad ya
estamos cometiendo un pequeo error, ya que la impresora no puede escribir en
todo el ancho, pues los 2 - 3 mm de cada lado no lo imprime. Deberemos
entonces poner las propiedades ScaleWidth y ScaleHeight del Printer de acuerdo
con la superficie real de escritura de nuestra impresora. Le adelanto que no le va
a ser fcil enterarse de qu mrgenes deja sin imprimir. Le recomiendo que
imprima una lnea desde [Link]=0 a [Link]= (un nmero
superior a [Link]). Mida con un escalmetro el ancho real de la
impresin.

El objeto Printer almacenar toda la informacin sin pasarla a la impresora hasta


que se le enve la instruccin [Link] o se le enve un salto de pgina
mediante la instruccin [Link].

El objeto Printer, al igual que otros objetos de Visual Basic tiene sus propiedades
y mtodos.

Las principales propiedades del objeto Printer son :

Nota El efecto de las propiedades del objeto Printer depende del controlador
suministrado por el fabricante de la impresora. Algunos valores de la propiedad
pueden no tener efecto, o varios valores distintos de la propiedad pueden tener
todos el mismo efecto. Los valores fuera del rango aceptado pueden producir
error. Para obtener ms informacin, vea la documentacin del fabricante del
controlador concreto.

ColorMode

Devuelve o establece un valor que determina si una impresora de color imprime en


color o en blanco y negro. No disponible en tiempo de diseo.

Sintaxis

[Link] [= valor]

Valor puede ser un nmero o una constante de VB.

Si es un 1 (o la constante vbPRCMMonochrome) imprimir en blanco y negro


(normalmente en escala de grises).

Si es 2, o la constante vbPRCMColor imprimir en color.

El valor predeterminado depende del controlador de la impresora y de la


configuracin actual de la impresora. Las impresoras en blanco y negro ignoran
esta propiedad.

Copies

Devuelve o establece un valor que determina el nmero de copias que se van a


imprimir.

Sintaxis

[Link] [= nmero]

Donde nmero debe ser una expresin numrica que especifique el nmero de
copias que se van a imprimir. Este valor debe ser un entero. El valor por defecto
es 1.

CurrentX CurrentY

Devuelven o establecen las coordenadas horizontal (CurrentX) o vertical


(CurrentY) para un mtodo grfico o de impresin. No disponible en tiempo de
diseo.

Sintaxis
Para forzar las coordenadas del cursor de escritura del objeto Printer :

[Link] [= x]

[Link] [=y]

Para conocer las coordenadas del cursor de escritura del objeto Printer

Posx = [Link] Posy = [Link]

Comentarios

Las coordenadas se miden a partir de la esquina superior izquierda del objeto. El


valor de la propiedad CurrentX es 0 en el borde izquierdo de un objeto, y el valor
de la propiedad CurrentY es 0 en el borde superior. Las coordenadas se expresan
en las unidades de medida definidas por las propiedades ScaleHeight y
ScaleWidth. Si se han introducido estas propiedades (como recomendbamos
mas atrs), la propiedad ScaleMode se pone automticamente a User. Si no se
establecen, ScaleMode puede estar en Twips, Point, Pixeles, caracteres, ....
unidades que supongo le sern mucho mas difcil de controlar que si Vd. dice

desde el principio que el papel de su impresora tiene unas medidas de 2100 por
2970 ([Link] = 2100, [Link] = 2970) Hacindolo de esta
ltima forma, cuando queramos dibujar una lnea entre dos puntos de nuestro
papel DIN A4 bastar con medir las coordenadas de inicio y final de lnea, eso s,
usando como unidad de medida la dcima de milmetro. Por ejemplo, una lnea a 5
mm del borde superior, que comience a 20 mm. Del borde izquierdo y termine a 10
mm del borde derecho, se dibujara con la siguiente instruccin :

[Link] (200,50) - (2870,50)

Si queremos escribir datos en una columna, que est a 30 mm. de la parte


izquierda de la hoja, comenzaremos a escribir cada fila de esa columna con un
CurrentX de 300. Para ello primero fijaremos el punto de inicio mediante
CurrentX y a continuacin usaremos el mtodo Print :

[Link] = 300 : [Link] = (lo que corresponda a esa fila)


[Link] MiVariable
escribir

donde MiVariable contiene el dato a

CurrentX y CurrentY se quedan con los valores establecidos por el ltimo mtodo
grfico o mtodo Print usado.

Cuando se est dibujando sobre el objeto Printer, los mtodos grficos Circle y
Line establecen los siguientes valores para CurrentX y CurrentY :

Circle El centro del objeto.


Line El punto final de una lnea.

El mtodo Print establece como CurrentX la coordenada correspondiente a la


parte derecha de la ltima letra impresa. Como CurrentY depende de si ha

terminado la sentencia [Link] MiVariable con punto y coma ( ;) o sin el. En el


primer caso, CurrentY es el mismo que tena antes de realizar ese mtodo. En el
segundo caso, avanza automticamente una lnea.

Cuando se enva la instruccin EndDoc establece los valores de estas


propiedades a 0, 0. NewPage establece igualmente los valores 0, 0.

DeviceName

Devuelve el nombre del dispositivo permitido por un controlador. Esta propiedad es


solo de lectura

Sintaxis

[Link]

Cada controlador de impresora acepta uno o ms dispositivos por ejemplo, HP


LaserJet III es un nombre de dispositivo.

DrawMode

Devuelve o establece un valor que determina el aspecto de la salida de un mtodo


grfico. Vea la Ayuda de VB para mayor detalle.

DrawStile

Devuelve o establece un valor que determina el estilo de lnea de la salida de


mtodos grficos.

Sintaxis

[Link] [= nmero]

El nmero especifica el estilo de lnea :

(Predeterminado) Continuo.

Rayas.

Puntos.

Raya - punto.

Raya - punto - punto.

Transparente.

Continuo interior.

Observaciones

Si DrawWidth se define con un valor mayor que 1, los valores de DrawStyle


entre 1 y 4 producen una lnea continua (el valor de la propiedad DrawStyle no
cambia). Si DrawWidth se define como 1, DrawStyle produce el efecto para cada
valor descrito en la tabla anterior.

DrawWidth

Devuelve o establece la anchura de lnea de lo dibujado con los mtodos grficos.

Sintaxis

[Link] [= tamao]

tamao es una expresin numrica comprendida entre 1 y 32.767 que representa


la anchura de la lnea en pixeles. El valor predeterminado es 1, es decir, un pxel
de ancho.

Comentarios

Puede incrementar el valor de esta propiedad para aumentar la anchura de la


lnea. Si el valor de la propiedad DrawWidth es mayor que 1, los valores de 1 a 4
en la propiedad DrawStyle producirn una lnea continua (el valor de DrawStyle
no se modifica). Si se establece 1 en DrawWidth, DrawStyle producir los
resultados mostrados en la tabla de esta propiedad.

DriverName

Devuelve el nombre del controlador de un objeto Printer. Esta propiedad es solo


de lectura

Sintaxis

[Link]

Cada controlador tiene un nombre nico. Por ejemplo, el DriverName de varias


impresoras Hewlett-Packard es HPPCL5MS. El DriverName es normalmente el
nombre de archivo del controlador sin la extensin.

Duplex

Devuelve o establece un valor que determina si las pginas se imprimen por los

dos lados (si la impresora tiene esta caracterstica). No disponible en tiempo de


diseo.

Sintaxis

[Link] [= valor]

Donde valor es un valor o constante que especifica el tipo de impresin, tal como
se describe a continuacin

Constante

Valor Descripcin

bPRDPSimplex
orientacin actual.

vbPRDPHorizontal 2

Impresin en una sola cara con la

Impresin en dos caras con vuelta de pgina


horizontal.

vbPRDPVertical
vertical.

Impresin en dos caras con vuelta de pgina

Con impresin a doble cara horizontal, la parte superior de ambas caras de la hoja
estn en el mismo borde de la hoja. Con impresin a doble cara vertical, la parte
inferior de una pgina est en el mismo borde de la hoja que la parte superior de
la pgina siguiente. Vase el grfico existente en la ayuda de VB para la
propiedad Duplex

FillColor

Devuelve o establece el color usado para rellenar formas; FillColor tambin se usa
para rellenar crculos y cuadros creados con los mtodos grficos Circle y Line.

Sintaxis

[Link] [ = valor]

Donde valor es un valor o constante que determina el color de relleno. El valor


puede introducirse como RGB o con las constantes QB color

ejemplos
FillColor = QBColor(8)
FillColor = RGB (255,0,0)
El color predeterminado es el 0 (Negro).

FillStyle

Devuelve o establece el modelo usado para rellenar dibujos (crculos y los cuadros
creados con los mtodos grficos Circle y Line.

Sintaxis

[Link] [= nmero]

Donde nmero Un entero que especifica el estilo de relleno, tal como se describe
a continuacin

Valor Descripcin

Continuo.

(Predeterminado) Transparente.

Lnea horizontal.

Lnea vertical.

Diagonal hacia arriba.

Diagonal hacia abajo.

Cruzado.

Diagonal Cruzada.

Cuando la propiedad FillStyle se define con su valor predeterminado, 1


(Transparente), el valor de FillColor se ignora.

Font

Devuelve o establece el objeto Font (letra) del objeto Printer. Este objeto Font
tiene a su vez sus propiedades (Name, Size, Bold, Italic ... )

Podemos forzar la fuente a usar por el objeto Printer con un CommonDialog,


igualando la propiedad Name del objeto Font del Printer a la propiedad
FontName del CommonDialog

[Link] = [Link]

Podemos averiguar que fuente est usando el objeto Printer :

Tipofuente = [Link]

FontCount

Devuelve el nmero de fuentes disponibles para el dispositivo de presentacin


actual o la impresora activa. (Devuelve un nmero) Es solamente de lectura.

Sintaxis

numerodefuentes = [Link]

FontName

Devuelve el nombre de la fuente que est usando el objeto Printer

Sintaxis

nombredelafuente = [Link]

(El Objeto Printer admite esta propiedad como [Link] o FontName


indistintamente)

Fonts

Devuelve todos los nombres de fuente disponibles para el dispositivo de


presentacin actual o la impresora activa.

Sintaxis

[Link](ndice)

La propiedad Fonts funciona de forma conjunta con la propiedad FontCount, que

devuelve el nmero de nombres de fuente disponibles para el objeto. Las fuentes


disponibles en Visual Basic varan de acuerdo con la configuracin del sistema, y
los dispositivos de presentacin y de impresin. Use las propiedades Fonts y
FontCount para obtener informacin sobre las fuentes disponibles para pantalla o
impresora.

Por ejemplo, si queremos ver en Label1 todas las fuentes disponibles para el
objeto Printer, estableceremos el siguiente cdigo :

For i = 1 To [Link]
[Link] = [Link] + " " + [Link](i)
Next i

FontSize

Devuelve o establece el tamao de la fuente a utilizar para el texto mostrado en un


control o en una operacin de dibujo o impresin en tiempo de ejecucin.

Sintaxis

[Link] [= puntos]

Donde puntos es una expresin numrica que especifica el tamao de fuente a


utilizar, en puntos.

Puede utilizar esta propiedad para dar al texto el tamao que desee. El valor
predeterminado lo determina el sistema. Para cambiar este valor, especifique el
nuevo tamao de la fuente en puntos.
El valor mximo de FontSize es 2160 puntos.

Nota Las fuentes disponibles en Visual Basic varan dependiendo de la


configuracin del sistema y de los dispositivos de presentacin e impresin. En las
propiedades relacionadas con las fuentes slo pueden establecerse valores para
los que exista una fuente.

(El objeto Printer acepta tanto [Link] como FontSize)

FontBold, FontItalic, FontStrikethru y FontUnderline

Devuelve o establece los estilos de fuente en los siguientes formatos: Negrita,


Cursiva, Tachada y Subrayada.

[Link] [= lgico]
escribira con
[Link] [= lgico]

p.e [Link] = True


letra negrita

[Link] [= lgico]
[Link] [= lgico]

Para el objeto Printer, el establecimiento de estas propiedades no afecta al texto


ya escrito, solamente para lo que se escriba despus de cambiar la propiedad.
Aprovecha esta facilidad para cambiar de letra a lo largo de un documento.

En general, deber modificar la propiedad FontName antes de establecer los


atributos de tamao y estilo con las propiedades FontSize, FontBold, FontItalic,
FontStrikethru y FontUnderline. Sin embargo, cuando especifique un tamao
inferior a 8 puntos para una fuente TrueType, primero deber establecer el tamao
en puntos con la propiedad FontSize, luego especificar la propiedad FontName y
despus establecer de nuevo el tamao con FontSize. El entorno operativo
Microsoft Windows utiliza una fuente distinta para las fuentes TrueType con un

tamao inferior a 8 puntos.

Printer acepta FontBold [Link], FontItalic [Link] ....

FontTransparent

Devuelve o establece un valor que determina si el texto y los grficos de fondo de


un objeto Printer, se muestran en el espacio situado entre los caracteres.

Sintaxis

[Link] [= lgico]

La modificacin de FontTransparent en tiempo de ejecucin no afecta a los


grficos ni el texto ya dibujados en un objeto Printer .

ForeColor

Devuelve o establece el color de escritura para impresoras en color. El cambio de


color afecta solamente al texto que se enve despus de realizar el cambio.

hDC

Devuelve un controlador proporcionado por el entorno operativo Microsoft


Windows para el contexto de dispositivo de un objeto.

Sintaxis

[Link]

Esta propiedad es un controlador de contexto de dispositivo del entorno operativo


Windows. El entorno operativo Windows se encarga de la presentacin del
sistema asignando un contexto de dispositivo al objeto Printer. Se puede usar la
propiedad hDC para referirse al controlador del contexto de dispositivo de un
objeto. As se obtiene un valor que se pasa en las llamadas al API de Windows.
Nota El valor de la propiedad hDC puede cambiar en tiempo de ejecucin, as
que no se debe almacenar en una variable. En su lugar, use la propiedad hDC
cada vez que lo necesite.

Height Width

Devuelven o establecen las dimensiones del objeto Printer. No estn disponibles


en tiempo de diseo.

Sintaxis

[Link] [= nmero]
[Link] [= nmero]

Donde nmero indica las dimensiones del papel configurado para el dispositivo de
impresin. No disponibles en tiempo de diseo. Si se establecen en tiempo de
ejecucin, los valores de estas propiedades se utilizarn en lugar del de la
propiedad PaperSize.

Para el objeto Printer, estas propiedades se miden siempre en twips. Si establece


las propiedades Height y Width para un controlador de impresora que no admite
su uso, no se producir ningn error, y el tamao del papel continuar siendo el
mismo.

Es mas recomendable utilizar la propiedad PaperSize para establecer las

dimensiones del papel. !!!

Orientation

Devuelve o establece un valor que indica si los documentos se imprimen con


orientacin vertical u horizontal. No disponible en tiempo de diseo.

Sintaxis

[Link] [= valor]

valor es un valor o constante que determina la orientacin de la pgina, segn se


describe a continuacin :

Constante

Valor Descripcin

vbPRORPortrait

Los documentos se imprimen con el lado ms

corto
arriba.

vbPRORLandscape
ms largo

2
arriba.

Page
Devuelve el nmero de pgina actual.

Los documentos se imprimen con el lado

Sintaxis
pg. actual

Variable = [Link]

Variable contiene el nmero de la

Visual Basic mantiene un contador de pginas impresas desde el inicio de la


aplicacin o desde la ltima vez que se utiliz la instruccin EndDoc en el objeto
Printer. Este contador comienza por uno y se incrementa en uno cada vez que:

Se utiliza el mtodo NewPage.


Se utiliza el mtodo Print y el texto a imprimir no cabe en la pgina actual.

Nota La salida de los mtodos grficos que no quepa en la pgina actual no


genera una pgina nueva, sino que se recorta para ajustarla a la zona de
impresin de la pgina.

PaperBin
Devuelve o establece un valor que indica la bandeja predeterminada para la
alimentacin de papel durante la impresin. No disponible en tiempo de diseo.

Sintaxis

[Link] [= valor]

valor es un valor o constante que especifica la bandeja predeterminada, segn se


describe a continuacin :
Constante

Valor Descripcin

vbPRBNUpper

Utilizar papel de la bandeja superior.

vbPRBNLower

Utilizar papel de la bandeja inferior.

vbPRBNMiddle
vbPRBNManual

3
4

Utilizar papel de la bandeja intermedia.

Esperar a la insercin manual de cada hoja.

vbPRBNEnvelope 5

Utilizar sobres del alimentador de sobres.

vbPRBNEnvManual
pero esperar

Utilizar sobres del alimentador de sobres,

a la insercin manual.
vbPRBNAuto
bandeja

(Predeterminado) Utilizar papel de la

predeterminada actual.
vbPRBNTractor

vbPRBNSmallFmt 9

Utilizar papel del alimentador de papel pequeo.

vbPRBNLargeFmt 10

Utilizar papel de la bandeja de papel grande.

vbPRBNLargeCapacity
capacidad.
vbPRBNCassette

14

11

Utilizar papel del alimentador por traccin.

Utilizar papel del alimentador de gran

Utilizar papel del cartucho de cassette adjunto.

No todas las opciones estn disponibles en todas las impresoras. Consulte la


documentacin de la impresora para obtener descripciones ms especficas de
estas opciones.

PaperSize
Devuelve o establece un valor que indica el tamao de papel para la impresora
actual. No disponible en tiempo de diseo. El valor predeterminado es el
establecido en la configuracin de la impresora en Windows. Con esta propiedad
no se debe jugar alegremente. El valor que se le d a esta propiedad ser el
tamao de ese papel ficticio que comentbamos mas atrs.

Sintaxis

[Link] [= valor]

valor es un valor o constante que especifica el tamao del papel, segn se


describe a continuacin
Constante

Valor Descripcin

vbPRPSLetter

Carta, 8 x 11 .

vbPRPSLetterSmall

Carta pequea, 8 x 11 .

vbPRPSTabloid

Tabloide, 11 x 17 .

vbPRPSLedger

Libro, 17 x 11 .

vbPRPSLegal

Legal, 8 x 14 .

vbPRPSStatement

Declaracin, 5 x 8 .

vbPRPSExecutive

Ejecutivo, 7 x 10 .

vbPRPSA3

A3, 297 x 420 mm

vbPRPSA4

A4, 210 x 297 mm

vbPRPSA4Small

10

A4 pequeo, 210 x 297 mm

vbPRPSA5

11

A5, 148 x 210 mm

vbPRPSB4

12

B4, 250 x 354 mm

bPRPSB5

13

B5, 182 x 257 mm

vbPRPSFolio

14

Folio, 8 x 13 .

vbPRPSQuarto

15

Cuarto, 215 x 275 mm

vbPRPS10x14

16

10 x 14 .

vbPRPS11x17

17

11 x 17 .

vbPRPSNote

18

Nota, 8 x 11 .

vbPRPSEnv9

19

Sobre #9, 3 7/8 x 8 7/8 .

vbPRPSEnv10

20

Sobre #10, 4 1/8 x 9 .

vbPRPSEnv11

21

Sobre #11, 4 x 10 3/8 .

vbPRPSEnv12

22

Sobre #12, 4 x 11 .

vbPRPSEnv14

23

Sobre #14, 5 x 11 .

vbPRPSCSheet

24

Hoja tamao C

vbPRPSDSheet

25

Hoja tamao D

vbPRPSESheet

26

Hoja tamao E

vbPRPSEnvDL

27

Sobre DL, 110 x 220 mm

vbPRPSEnvC3

29

Sobre C3, 324 x 458 mm

vbPRPSEnvC4

30

Sobre C4, 229 x 324 mm

vbPRPSEnvC5

28

Sobre C5, 162 x 229 mm

vbPRPSEnvC6

31

Sobre C6, 114 x 162 mm

vbPRPSEnvC65

32

Sobre C65, 114 x 229 mm

vbPRPSEnvB4

33

Sobre B4, 250 x 353 mm

vbPRPSEnvB5

34

Sobre B5, 176 x 250 mm

vbPRPSEnvB6

35

Sobre B6, 176 x 125 mm

vbPRPSEnvItaly

36

Sobre, 110 x 230 mm

vbPRPSEnvMonarch

37

Sobre monarca, 3 7/8 x 7 .

vbPRPSEnvPersonal

38

Sobre, 3 5/8 x 6 .

vbPRPSFanfoldUS

39

Doblado estndar [Link]., 14 7/8 x 11 .

vbPRPSFanfoldStdGerman

40

Doblado estndar alemn, 8 x

vbPRPSFanfoldLglGerman

41

Doblado legal alemn, 8 x 13 .

12 .

vbPRPSUser

256

Definido por el usuario

Al establecer las propiedades Height o Width de una impresora, se establece


automticamente vbPRPSUser en PaperSize.

Port

Devuelve el nombre del puerto a travs del cual se enva un documento a una
impresora.

Sintaxis

puertousado = [Link]

El sistema operativo determina el nombre del puerto, como por ejemplo LPT1: o
LPT2:.

PrintQuality

Devuelve o establece un valor que indica la resolucin de la impresora. No


disponible en tiempo de diseo.

Sintaxis

[Link] [= valor]

valor es un valor o una constante que especifica la resolucin de la impresora,


segn se describe a continuacin :

Constante

Valor Descripcin

vbPRPQDraft

-1

Resolucin borrador

vbPRPQLow

-2

Resolucin baja

vbPRPQMedium

-3

Resolucin media

vbPRPQHigh

-4

Resolucin alta

Adems de los valores negativos predefinidos, tambin puede indicarse en valor


un nmero positivo de puntos por pulgada, como por ejemplo 300.

El valor predeterminado depende del controlador de la impresora y de su


configuracin actual. El efecto de estos valores vara segn la impresora y el
controlador. En ciertas impresoras, algunas opciones, o todas ellas, pueden
producir el mismo resultado.

ScaleHeight, ScaleWidth

Estas propiedades ya se comentaron mas atrs. Es completamente necesario


entender estas propiedades para poder manejar y dominar el objeto Printer. !

Devuelven o establecen el nmero de unidades de medida horizontal (ScaleWidth)


y vertical (ScaleHeight) del interior del papel donde vamos a volcar la informacin
del objeto Printer.

Sintaxis

[Link] [= valor]
[Link] [= valor]

Donde valor es una expresin numrica que especifica la medida horizontal o


vertical. Este valor va a determinar el nmero de unidades de medida que tiene el
papel, NO su medida. Es decir, podemos decir, mediante estas propiedades, que
el papel tiene 2100 unidades de ancho y 2970 unidades de alto. Si el papel es un
DIN A4 (Medidas 210 x 297 mm) esa unidad de medida sera precisamente una
dcima de milmetro. Podramos haber elegido otros valores, con lo que esa
unidad de medida ya no seran dcimas de mm. Sera una unidad de medida
cualquiera, pero el papel seguira siendo DIN A4 y seguira teniendo las mismas
medidas reales.

ScaleLeft, ScaleTop

Devuelven o establecen las coordenadas horizontal (ScaleLeft) y vertical


(ScaleTop) de los
bordes izquierdo y superior de un objeto al utilizar mtodos grficos o al situar
controles.

Sintaxis

[Link] [= valor]
[Link] [= valor]

donde valor es una expresin numrica que especifica la coordenada horizontal o


vertical. El valor predeterminado es 0.

Con estas propiedades y las relacionadas ScaleHeight y ScaleWidth, puede


configurar un sistema de coordenadas completo, con coordenadas positivas y
negativas. Estas cuatro propiedades de escala se relacionan con la propiedad
ScaleMode de la siguiente forma:

Al establecer un valor en cualquier otra propiedad de escala, en ScaleMode se


establece automticamente 0.

Al establecer en ScaleMode un nmero mayor que 0, ScaleHeight y ScaleWidth


cambian a la nueva unidad de medida, y en ScaleLeft y ScaleTop se establece 0.
Adems, los valores de CurrentX y CurrentY cambian para reflejar las nuevas
coordenadas del punto actual.

Resumindolo en palabras mas sencillas. Si, con las medidas de los ejemplos
anteriores (ScaleWidth = 2100, ScaleHeight = 2970) ponemos [Link]
= - 1050 estamos diciendo que la coordenada horizontal absoluta en la parte
izquierda de la hoja es de -1050. Si el ancho del papel es de 2100, la coordenada
X absoluta del eje central del papel ser entonces 0. Y la coordenada X de la
parte derecha del papel ser + 1050. Por lo tanto, si ejecutamos el mtodo
grfico :

[Link] (0,1000), 300

dibujar un circulo de radio 300, con el centro en el eje vertical de la hoja


(Coordenada X=0) a una altura de 1000 (Coordenada Y=1000) de la parte superior
del papel.

Si hubisemos puesto [Link] = - 1500 estaramos diciendo que la


coordenada Y absoluta de la parte superior del papel es - 1500. En ese caso, el
crculo anterior se colocara a una distancia de 2500 (2500 = 1000 + 1500) del
borde superior del papel.

ScaleMode
Devuelve o establece un valor que indica la unidad de medida de las coordenadas
de un objeto al utilizar mtodos grficos, o al situar controles.

Sintaxis

[Link] [= valor]

donde valor es un nmero entero que especifica la unidad de medida, segn se

describe a continuacin

0
User. Indica que una o ms de las propiedades ScaleHeight, ScaleWidth,
ScaleLeft y
ScaleTop tienen valores personalizados.
1
(Predeterminado) Twip (1440 twips por pulgada lgica; 567 twips por
centmetro
lgico).
2

Punto (72 puntos por pulgada lgica).

Pxel (la unidad mnima de la resolucin del monitor o la impresora).

Carcter (horizontal = 120 twips por unidad; vertical = 240 twips por unidad).

Pulgada.

Milmetro.

Centmetro.

Recomendacin del autor de esta Gua del Estudiante. Una vez mas
recomiendo que controle la posicin de los mtodos grficos y mtodo Print fijando
las unidades de medida mediante ScaleHeight, ScaleWidth, (Si le es prctico,
emplee ScaleLeft y ScaleTop para que le coincida el punto central del papel con
las coordenadas 0,0 y as usara coordenadas positivas y negativas) y cada vez
que escriba o dibuje, coloque el cursor de escritura mediante las propiedades
CurrentX y CurrentY

TrackDefault

Devuelve o establece un valor que determina si el objeto Printer apunta siempre a


la misma impresora, o si la impresora a la que apunta cambia cuando se modifica
la impresora predeterminada en el Panel de control del sistema operativo. No
disponible en tiempo de diseo.

Sintaxis

[Link] [= lgico]

Donde lgico es una expresin booleana que determina la impresora a la que


apunta el objeto Printer, segn se describe a continuacin.

True (Predeterminado) El objeto Printer cambia la impresora a la que apunta al


modificar la impresora predeterminada en el Panel de control del sistema
operativo.
False El objeto Printer contina apuntando a la misma impresora cuando se
modifica la impresora predeterminada en el Panel de control del sistema operativo.

Al modificar el valor de la propiedad TrackDefault mientras se realiza un trabajo


de impresin, se enva una instruccin EndPage implcita al objeto Printer.

TwipsPerPixelX, TwipsPerPixelY

Devuelve el nmero de twips per pixel de un objeto medido horizontal


(TwipsPerPixelX) o verticalmente (TwipsPerPixelY).

Sintaxis

[Link]
[Link]

En general, las rutinas del API de Windows requieren las medidas en pxels.

Puede utilizar estas propiedades para convertir rpidamente las dimensiones sin
cambiar el valor de la propiedad ScaleMode de los objetos.

Zoom

Devuelve o establece el porcentaje en que se ampla o reduce el resultado


impreso. No est disponible en tiempo de diseo.

Sintaxis

[Link] [= numero]

Donde numero es una expresin numrica que evala en el porcentaje de ajuste


de la salida impresa. El valor predeterminado es 0, que especifica que la pgina
impresa aparece con su tamao normal.

Comentarios

El valor de la propiedad Zoom ajusta el tamao de la pgina impresa, en un factor


de Zoom/100, en relacin con el tamao aparente de la salida impresa. Por
ejemplo, una pgina de tamao carta impresa con Zoom establecido como 50
contiene tantos datos como una pgina de tamao 17 por 22 pulgadas, porque el
texto y los grficos impresos se reducen a la mitad de su altura y anchura
originales.

El objeto Printers (Coleccin de objetos Printer)

La coleccin Printers le permite consultar las impresoras disponibles de forma que


pueda especificar la impresora predeterminada de la aplicacin. Por ejemplo, se
puede querer saber cual de las impresoras disponibles usa un controlador de

impresoras determinado. El siguiente cdigo comprueba todas las impresoras


disponibles para saber la primera impresora cuya orientacin de pgina sea
vertical:

Dim X As Printer
For Each X In Printers
If [Link] = vbPRORPortrait Then
' la define como predeterminada.
Set Printer = X
' Sale del bucle.
Exit For
End If
Next

Usando la instruccin Set se designa una de las impresoras de la coleccin


Printers como impresora predeterminada. El ejemplo anterior designa la impresora
identificada por la variable de objeto X, como impresora predeterminada de la
aplicacin.

Nota Si la coleccin Printers se usa para especificar una impresora concreta,


como Printers(3), slo se puede tener acceso a sus propiedades de modo lectura.
Para leer y escribir las propiedades de una impresora concreta, primero se tiene
que definir como impresora predeterminada de la aplicacin.

METODOS DEL OBJETO PRINTER

Circle

Dibuja un crculo, elipse o arco sobre un objeto. No acepta argumentos con


nombre.

Sintaxis

[Link] Step (x, y), radio, color, inicio, final, aspecto

Vea una explicacin completa de este mtodo en el captulo 7 Mtodos Grficos.

EndDoc

Termina una operacin de impresin enviada al objeto Printer, liberando el


documento al dispositivo de impresin o a la cola.

Sintaxis

[Link]

Si EndDoc se invoca inmediatamente despus del mtodo NewPage, no se


imprime la pgina en blanco adicional.

KillDoc

Termina inmediatamente el trabajo de impresin actual.

Sintaxis

[Link]

Si el Administrador de impresin del sistema operativo controla el trabajo de


impresin (el Administrador de impresin est ejecutndose y la impresin en
segundo plano est activada), KillDoc elimina el trabajo de impresin actual y la
impresora deja de recibir datos.
Si el Administrador de impresin no est controlando el trabajo de impresin (la
impresin en segundo plano est desactivada), puede que algunos o todos los
datos se enven a la impresora antes de que KillDoc pueda tener efecto. En este
caso, el controlador de la impresora inicializa la impresora en cuanto puede y
termina el trabajo de impresin.

Line

Dibuja lneas y rectngulos en un objeto. No acepta argumentos con nombre.

Sintaxis

[Link] Step (x1, y1) - Step (x2, y2), color, BF

Vea este mtodo mas ampliamente en el captulo 7 Mtodos Grficos.

NewPage

Termina la pgina actual y avanza a la pgina siguiente en el objeto Printer.

Sintaxis

[Link]

NewPage avanza a la pgina siguiente y restablece la posicin de impresin en la

esquina superior izquierda de la nueva pgina. Cuando se le llama, NewPage


incrementa la propiedad Page del objeto Printer en 1.

PaintPicture

Presenta el contenido de un archivo grfico (.BMP, .WMF, .EMF, .ICO o .DIB) en


un objeto Printer. No acepta argumentos con nombre.

Sintaxis

[Link] imagen, x1, y1, anchura1, altura1, x2, y2, anchura2, altura2,
opecod

Puede ver mas informacin acerca de este mtodo en el captulo 7 Mtodos


Grficos

Print

Imprime texto en el objeto Printer.

Sintaxis

[Link] lista_salida

Donde lista_salida es una expresin o lista de expresiones a imprimir. Si se omite,


se imprimir una lnea en blanco.

En el argumento lista_salida puede poner un texto directamente ([Link]


Hola) o una variable ([Link] Textoaescribir). Puede tambin introducir
algunas funciones de cadena como la siguiente:

Spc(n)
Se utiliza para insertar caracteres espacio en la salida, donde n es el
nmero de espacios a insertar.

Puede introducir tambin Tabuladores :

Tab(n)
Se utiliza para situar el punto de insercin en un nmero de columna
absoluto, donde n es el nmero de columna. Utilice Tab sin argumentos para situar
el punto de insercin en la lnea siguiente, al principio de la zona de impresin.

Nota.- El uso de los tabuladores puede traerle mas problemas que ventajas. Los
pasos de tabulacin dependen de cada impresora, y lo que es peor, de la
programacin de la propia impresora. Por lo tanto, al usar Tab no controlamos del
todo la posicin de las columnas. Es mucho mas prctico (y seguro) usar
[Link] y [Link] para posicionar el puntero de escritura del
Objeto Printer.

Al terminar de imprimir Cualquier carcter o tabulador, el objeto Printer generar


un Retorno de Carro y un Avance de Lnea, excepto que terminemos el mtodo
Print con un punto y coma :

Las instrucciones :

[Link] Hola
[Link] Qu tal ? generarn la siguiente salida por impresora :

Hola
Qu tal ?

Si pusisemos

[Link] Hola ;
[Link] Qu tal ? la salida por impresora sera :

Hola Qu tal ?

Nota Debido a que el mtodo Print imprime normalmente con caracteres de


espaciado proporcional, es importante recordar que no hay relacin entre el
nmero de caracteres impresos y el nmero de columnas de anchura fija que tales
caracteres ocupan. Por ejemplo, una letra ancha, como W, ocupa ms de una
columna de anchura fija, mientras que una letra estrecha, como I, ocupa menos.
Para tener en cuenta los casos en el que se utilizan caracteres con una anchura
mayor que la media, deber asegurarse de que las columnas de las tablas se
encuentren lo bastante lejos unas de otras. Como alternativa, puede utilizar en la
impresin una fuente de anchura fija (como Courier) para hacer que cada carcter
utilice slo una columna.

Para controlar perfectamente el punto donde se escribir el siguiente carcter,


utilice las propiedades CurrentX y CurrentY. Es mucho mas prctico que usar,
por ejemplo, el Tabulador Tab(n)

Si usa Tab(n) con una determinada impresora, puede verse con la desagradable
sorpresa que en otra impresora no funciona de la misma forma. Como al
desarrollar una aplicacin nunca sabe sobre que impresora va a imprimir, es mejor
que no utilice Tab(n), sustituyndolo por CurrentX.

Mtodo TextWidth

Puede conocer la anchura que va a ocupar un texto en la impresora. (o en un


Formulario, en un Picture) usando el Mtodo TextWidth

AnchodelTexto = [Link] (Textoaescribir)

Donde AnchodelTexto es una variable tipo Long que indicar el ancho (en las
unidades de medida definidas para el objeto Printer - Twips, Pixels, mm, o como
siempre recomendar, las establecidas mediante ScaleWidth y ScaleHeight) y
Textoaescribir es una variable tipo String que contiene el texto a escribir.

Si la cadena de texto cuya longitud de impresin queremos analizar contiene


retornos de carro, TextWidth devuelve la anchura de la lnea ms larga.

Mediante este mtodo puede escribir columnas de datos, mucho mejor que
usando el Tab(n).
Suponga que quiere escribir en una columna, los datos Dato(1), Dato(2),
....Dato(N) que son nmeros. Quiere escribirlos de tal forma que la parte derecha
del nmero quede alineada, como hacemos casi siempre para poder sumarlos con
facilidad. Supongamos que hemos establecido las Propiedades [Link]
= 21000 y [Link] = 29700. Damos por hecho que el papel es un DIN
A-4 (210 x 297 mm) por lo que estamos usando, como unidad de medida en
ambas coordenadas la centsima de mm.

Si queremos que las cifras queden alineadas en una columna cuya parte final sea
5000 (la parte final de esa columna quedar a 50 mm. del margen izquierdo del
papel), deberemos calcular la longitud de cada cifra, y poner, como inicio de
escritura de esa cifra 5000 - ancho :

Haramos un bucle mas o menos como este :

Dim Ancho as Long

Ancho ser una variable Long

For I = 1 To N

Imprimiremos N datos

Ancho = [Link] (Str(Dato(I)))


Printer) de cada

Calculamos el ancho (para el

[Link] = 5000 - Ancho


queden

dato. Lo restamos a 5000 para que

[Link] = K +(300 * I)
Y

alineados por atrs. La coordenada

[Link] Str(Dato(I))

ser una constante K mas 3 mm

Next I

Observe que el ancho de una determinada cadena de caracteres no tiene porqu


ser la misma para un Formulario que para el Printer. Depender del tipo de fuente
y del tamao de esa fuente que usemos en cada caso. Por eso, debe poner
siempre [Link], [Link], etc.

Mtodo TextHeight

Este mtodo es idntico al anterior, pero relativo a la altura. No vamos a alargar la


explicacin dada la similitud con el anterior. Este mtodo nos permite separar
adecuadamente las lneas de un escrito. Es muy til sobre todo cuando utilizamos
distintos tipos de letra dentro del mismo escrito.

Mtodo PSet

Asigna a un punto de un objeto Printer un color especificado. No acepta

argumentos con nombre.

Sintaxis

[Link] Step (x, y), color

Step
Opcional. Palabra reservada que especifica que las coordenadas son
relativas a la posicin grfica actual proporcionada por las propiedades CurrentX
y CurrentY.

(x, y)
Requeridos. Valores de simple precisin que indican las coordenadas
horizontales (eje x) y verticales (eje y) del punto a establecer.

color Opcional. Valor entero largo que indica el color RGB especificado para el
punto. Si se omite, se utiliza el valor de la propiedad ForeColor. Puede utilizar la
funcin RGB o la funcin QBColor para especificar el color.

El tamao del punto dibujado depende del valor de la propiedad DrawWidth.


Cuando DrawWidth es 1, PSet establece un pxel al color especificado. Cuando
DrawWidth es mayor que 1, se centra el punto en las coordenadas especificadas.

La forma en que se dibuja el punto depende de los valores de las propiedades


DrawMode y DrawStyle.

Cuando se ejecuta PSet, las propiedades CurrentX y CurrentY toman el valor del
punto especificado en los argumentos.

Vace un pxel con el mtodo PSet especificando las coordenadas del pxel y
utilizando el valor de la propiedad BackColor como argumento color.
FUNCION DoEvents

Cede el control de la ejecucin al sistema operativo, para que ste pueda procesar
otros eventos. Tambin nos permite conocer el nmero de formularios abiertos en
una aplicacin.

Sintaxis

DoEvents
Cede el control al sistema operativo

Sintaxis

variable=DoEvents
variable contendr un nmero indicando el nmero de formularios

abiertos en
este momento.

La funcin DoEvents devuelve tambin el nmero de formularios abiertos por una


versin nica de Visual Basic, como la versin estndar de Visual Basic. DoEvents
devuelve 0 en el resto de las aplicaciones.
El control no se devuelve hasta que el sistema operativo haya terminado de
procesar los eventos en cola y que (slo para Microsoft Windows) se hayan
enviado todas las teclas en la cola SendKeys.
Si partes de su cdigo consumen demasiado tiempo de procesamiento, use
peridicamente DoEvents para ceder el control al sistema operativo, de manera
que eventos como la entrada por el teclado o los clics del mouse (ratn) se
puedan procesar sin grandes retrasos. Utilice esta funcin sobre todo, cuando
tenga bucles demasiado largos que puedan interrumpir la entrada de datos por
teclado o ratn.

Precaucin Asegrese de que el procedimiento que ha cedido el control con


DoEvents no se ejecute de nuevo desde una parte diferente del cdigo antes de

que regrese la primera llamada a DoEvents. Esto podra causar resultados


impredecibles. Adems, no use DoEvents si existe la posibilidad de que otras
aplicaciones interacten con el procedimiento, de formas imprevistas, durante el
tiempo en ste ha cedido el control.

EJEMPLO

Para explicar la funcin DoEvents se ha preparado un pequeo ejercicio con un


formulario principal (Form1) y dos formularios auxiliares, estos ltimos solamente a
efectos de contar, mediante DoEvents el nmero de formularios abiertos.

Se declara la variable PARAR como booleana en las declaraciones del Form1

El botn COMENZAR introduce un bucle que no parara nunca. Tambin pone


Label1 de color Verde.

Private Sub Command1_Click()


[Link] = RGB(0, 255, 0)
Do While PARAR = False
N=N+1
If N = 1000 Then

'Cada vez que N=1000 ejecuta la funcin DoEvents.

DoEvents
N=0
End If
Loop
End Sub

En el formulario Form1, al que previamente le hemos puesto la propiedad


KeyPreview a True, se le ha puesto este cdigo en su procedimiento KeyPress:

Private Sub Form_KeyPress(KeyAscii As Integer)


PARAR = True
[Link] = RGB(255, 255, 0)
End Sub

Si no hubisemos puesto DoEvents en una parte del bucle del contador, nunca se
podra acceder al Procedimiento KeyPress del formulario, pues el programa lo
nico que hara ser dar vueltas en el bucle indefinidamente.

El botn ROJO tiene este cdigo:

Private Sub Command2_Click()


PARAR = True
[Link] = DoEvents
tenemos

'Aqu comprobamos los Formularios que

[Link] = RGB(255, 0, 0)

'abiertos en este momento.

End Sub

Lo mismo ocurrira con el botn ROJO. Al estar el programa haciendo el bucle


continuamente, nunca podramos entrar el Procedimiento Click de este botn.

Los botones FORM2, cierra Form2, FORM3, cierra Form3, lo nico que hacen es
mostrar u ocultar Form2 y Form3 a efectos de poder comprobar cuantos
formularios tenemos abiertos.

Private Sub Command4_Click()


[Link]
End Sub

Private Sub Command6_Click()


[Link]
End Sub

Private Sub Command5_Click()


[Link]

End Sub

Private Sub Command7_Click()


[Link]
End Sub

Por ltimo SALI nos saca del programa. Observe que si no hubisemos puesto
DoEvents en el medio del bucle, tampoco podramos salir del programa, puesto
que el sistema operativo no podra comprobar que hemos hecho Click en este
botn.

Private Sub Command3_Click()


End
End Sub

Realice esta pequea prctica con la lnea DoEvents del botn COMENZAR
activada y desactivada (Con una comilla simple). Preprese para, en este ltimo
caso, detener la aplicacin pulsando Ctr-Pausa, pues de otra forma no la podr
detener.
(El siguiente tema ha sido tomado parcialmente de las pginas de Mundo Visual Visual Basic.)
Presentacin Modal de formularios. Ventana modal

Se dice que un Formulario o cualquier tipo de ventana se presenta de forma


Modal cuando un elemento de ese formulario o ventana toma el foco en el
momento de mostrarse, y exige que se realice alguna gestin sobre ella antes de
permitir que otra parte de la aplicacin tome de nuevo el foco. La actuacin que
generalmente exige un formulario o ventana es ocultarse.

Para ver esto, cree una aplicacin con dos formularios. El primero (Form1) puede
ser el formulario donde se realizan todas las operaciones de la aplicacin. El
segundo (Form2) puede ser el tpico formulario donde se presenta la informacin
del fabricante de la aplicacin, al que se accede normalmente desde el men, con
la palabra Acerca de...

Cree un men en el primer formulario con esa palabra y ponga este formulario
como formulario inicial de la aplicacin. En el procedimiento click de este men
ponga el siguiente cdigo :

[Link] 1

El 1 detrs de la expresin Show indica que el formulario Form2 debe mostrarse


de forma Modal, lo que significa que no se podr volver a operar con ningn
elemento de Form1 hasta que se oculte o descargue el formulario Form2. Ponga
en este Form2 el tpico botn de Aceptar, cuyo cdigo puede ser simplemente :

[Link]

Ejecute la aplicacin y comprobar como se comporta un formulario mostrado


como Modal.

Lo dicho para un formulario puede aplicarse para otro tipo de ventanas. El


MessageBox y la ventana del CommonDialog son dos ejemplos de ventanas
modales. Veamos la primera :

La caja de Mensajes. MessageBox o MsgBox

Las cajas de mensajes o MessageBox, tienen una funcin clara, que es la de


mostrar una determinada informacin, aviso, o pregunta para que el usuario tenga
conocimiento de ella y acte.

Hay 2 formas diferentes de mostrar informacin:

1 - El aviso es s, que tiene por objetivo mostrar una informacin de inters.

2 - El aviso con espera de respuesta, que muestra una informacin esperando que
el usuario seleccione una de las respuestas posibles para que el programa la trate.

Una caja de mensaje, puede ser por ejemplo, la instruccin MsgBox "Hola". Por
defecto, la caja de mensaje ser similar a esta:

Debe darse cuenta de algunas cosas:


En primer lugar el mensaje, "Hola" que se escribe a continuacin de la palabra
MsgBox, tambin debe darse cuenta del botn Aceptar que tiene el Focus de la
ventana activa y que slo hay ese botn, y por ltimo el ttulo de la ventana.

Podemos modificar estos parmetros para alcanzar nuestros objetivos, por eso,
vamos a escribir ahora este cdigo: MsgBox "Hola", ,"Ejemplo" .

El resultado es:

Como podemos apreciar en el cdigo, la caja de mensaje posee un ttulo Ejemplo


y el mensaje, pero es posible que deseemos escribir un mensaje en varias lneas
con salto de prrafo. Nada tan fcil como este cdigo por ejemplo: MsgBox "Hola"
& vbCrLf & "Esto es un ejemplo.", , "Ejemplo".
El resultado es:

Habr observado en la expresin anterior que se ha utilizado vbCrLf (Visual Basic


Carriage Return Line Feed, VB retorno de carro y avance de lnea) Vea mas
adelante la aclaracin de esta expresin. Con ella logramos introducir un salto de
lnea.

Supongo que se habr percatado de que entre el mensaje y el ttulo de la ventana,


hemos escrito dos comas, esto es porque entre las comas, debe ir un nmero que
representar el icono a mostrar. Existen cuatro iconos diferentes adems de la
posibilidad de no mostrar ninguno. Los iconos son:

Estos iconos corresponden a los siguientes mensajes:


Mensaje crtico.
Mensaje de pregunta.
Mensaje exclamativo.
Mensaje de informacin.

(Slo en W32. En Windows [Link] dispone de otros diferentes, aunque con el mismo
significado)

Para mostrar el icono en cuestin o para que Visual Basic lo entienda, es


necesario escribir lo siguiente:

Mensaje crtico.

VbCritical

16

Mensaje de pregunta.

VbQuestion

32

Mensaje exclamativo.

VbExcalamqtion

48

64

Mensaje de informacin. VbInformation

Note que es lo mismo insertar VbCritical o 16.

Vamos a ver un ejemplo aadiendo un icono al ltimo ejemplo:


MsgBox "Hola" & vbCrLf & "Esto es un ejemplo.", VbQuestion , "Ejemplo"

El resultado es:

Ahora bien, es posible que queramos mostrar algn otro botn que o bien no sea
el de Aceptar o que adems del botn de Aceptar haya ms botones. Para este
propsito, tenemos los siguientes parmetros:

Aceptar
Aceptar y Cancelar

vbOKOnly
vbOKCancel

Anular, Reintentar, Ignorar vbAbortRetryIgnore

S, No y Cancelar

vbYesNoCancel

S y No

vbYesNo

Reintentar y Cancelar

vbRetryCancel

Aplicacin modal

vbApplicationModal

0 (Es la caja de mensaje sin


icono)

La forma de hacer esto es sumar al parmetro del icono que queremos mostrar el
valor de los botones que deseamos que aparezcan.
As por ejemplo:
MsgBox "Hola" & vbCrLf & "Esto es un ejemplo.", VbQuestion + vbYesNo ,
"Ejemplo"
El resultado es:

An as, es posible que deseemos que el Focus lo adquiera otro un botn


determinado. Por ejemplo, en este caso el Focus lo tiene el botn S, pero es
posible que deseemos que lo tenga el botn No por ejemplo. Esto se consigue con
los siguientes parmetros:
Primer botn predeterminado

vbDefaultButton1

Segundo botn predeterminado vbDefaultButton2

256

Tercer botn predeterminado

512

vbDefaultButton3

Por ejemplo: MsgBox "Hola" & vbCrLf & "Esto es un ejemplo.", VbQuestion +
vbYesNo + vbDefaultButton2, "Ejemplo"

El resultado es:

Si no se seala el botn predeterminado, Visual Basic seleccionar el primer


botn. En caso de seleccionar como predeterminado un botn que no existe, (por
ejemplo el tercero), Visual Basic seleccionar el primero.

Ahora bien, si decidimos mostrar un mensaje esperando una respuesta, o


queremos saber que botn ha pulsado el usuario, esto lo podemos conseguir
mediante el siguiente cdigo de respuestas:
Aceptar

vbOK

Cancelar

vbCancel

Anular

vbAbort

Reintentar

vbRetry

Ignorar

vbIgnore

vbYes

No

vbNo

As por ejemplo, el siguiente cdigo:

Dim Resp As Integer

Resp = MsgBox("Hola" & vbCrLf & "Esto es un ejemplo.", VbQuestion + vbYesNo +


vbDefaultButton2, "Ejemplo")

If Resp = 6 Then
MsgBox "Ha pulsado SI"
Else
MsgBox "Ha pulsado NO"
End If

Tiene el resultado siguiente:

Si pulsamos el botn S obtendremos una accin, y si pulsamos el otro botn otra


accin.

Ahora bien, para elegir o seleccionar un evento o accin, el usuario debe saber
combinar los cdigos, sabiendo que un MsgBox posee la siguiente sintaxis
principal:

MsgBox Mensaje, Botones, Ttulo de la ventana

InputBox

El InputBox o caja de entrada es otra de las partes ms utilizadas para la


interaccin del usuario con la aplicacin. Es importante que el usuario interacte
con la aplicacin para ser el protagonista de esta.

El InputBox nos permite sacar una caja donde el usuario pasar un parmetro,
valor o dato para que el programa lo trate y lo ejecute.

El mensaje que quiere que aparezca se realiza de forma casi idntica al


MessageBox. Puede escribirse varias lneas de texto seguidas por la constante de
Visual Basic vbCrLf o salto de lnea o prrafo.

La sentencia es:

Val = InputBox (Mensaje, Titulo, ValorPredeterminado)

Val almacenar el texto escrito por el usuario, que puede ser una cantidad, cadena
string, etc.

Por ejemplo:
Dim Val As String

Val = InputBox("Deme su nombre", "Ejemplo")


MsgBox "Su nombre es: " & Val

Tiene como resultado:

(El usuario teclea el nombre - Mundo Visual - y hace click en Aceptar. A


continuacin se muestra el MsgBox - 2 lnea del cdigo anterior )

Ahora bien, podemos determinar un texto predeterminado a la caja de entrada,


como por ejemplo:

Dim Val As String

Val = InputBox("Deme su nombre", "Ejemplo", "Mundo Visual")


MsgBox "Su nombre es: " & Val
Obtendremos como resultado:

Es importante determinar que si el usuario elige el botn Cancelar, el programa


devolver una cadena de caracteres igual a 0, es decir, Val ="".

La caja de entrada puede ser sin embargo ms personalizada mediante dos


parmetros como son la posicin de la ventana de entrada de datos en la pantalla.
Estos parmetros se ponen a continuacin del ValorPredeterminado.
Por ejemplo:

Dim Val As String


Val = InputBox("Deme su nombre", "Ejemplo", "Mundo Visual", 1200, 1400)
Situar la ventana en el eje de las X a 1200 Twips (posicin horizontal) y la Y a
1400 twips (posicin vertical).

Salto de pgina

En versiones anteriores de Visual Basic, la forma de realizar un salto de pgina en


un TextBox era cambiando la propiedad Multiline a True y escribiendo una
constante string cualquiera con valor igual a Chr$(13) & Chr$(10), es decir salto de
prrafo.
Con la versin Visual Basic 4.0, se usa una constante vbCrLf que realiza esta
funcin.

Repaso: Hemos visto en este captulo el uso de MsgBox, y InputBox, los cuales
nos van a servir de gran utilidad en nuestros proyectos Visual Basic.
EL CONTROL RICH TEXT BOX
El control RichTextBox es una caja de texto con mas prestaciones que el TextBox. Este
control solamente est implementado en la versin de 32 bits. No est normalmente en la
caja de herramientas, por lo que habr que ir a Herramientas | Controles Personalizados.
El icono que presenta en la caja de herramientas es el siguiente :

Frente a la rigidez del TextBox, este control nos permite escribir un texto utilizando
distintos tipos de fuentes en el mismo texto, e introducir mas de 65.536 caracteres, lmite
mximo del TextBox. Aparte de estas, tiene otras caractersticas respecto a la forma de
guardar y leer el texto en un fichero, que le convierten en una herramienta muy til para el
diseo de aplicaciones en las que haya que introducir documentos de texto.

Propiedades

El RichTextBox tiene todas las propiedades del TextBox, y adems otras que son las que le
dan las caractersticas excepcionales a este control. Las tres siguientes propiedades son
idnticas para ambos controles :

SelLenght

Devuelve o establece el nmero de caracteres seleccionados. Los caracteres


seleccionados son aquellos que se ponen en vdeo inverso cuando
arrastramos con el ratn.

SelStart

Devuelve o establece el nmero del carcter de comienzo del texto


seleccionado.

SelText
ningn

Devuelve o establece la cadena de caracteres seleccionados. Si no hay


carcter seleccionado devuelve la cadena (cadena vaca)

En el ejemplo, el texto seleccionado es ejemplo nos permitir, texto que hemos


seleccionado con el ratn. Las propiedades anteriores tomarn estos valores para ese texto
seleccionado :

SelLenght = 21

SelStart = 5

(Recuerde que el espacio tambin es un carcter)

(La e de ejemplo es la sexta letra, pero empieza a contar por la 0)

SelText = ejemplo nos permitir

Recuerde que estas propiedades son tanto de lectura como de escritura. Es decir, puede
seleccionar un texto con el ratn y analizar ese texto seleccionado, o seleccionar el texto
dndole valores a estas propiedades.

Las diferencias entre uno y otro control comienzan ahora. En un RichTextBox, con un
texto seleccionado, podemos cambiar el tipo de letra, su tamao, su color, etc.

Usemos para ello las siguientes propiedades, que solamente las tiene el RichTextBox :

SelBold, SelItalic, SelStrikethru, SelUnderline

Estas propiedades son del tipo Booleano (True/False) y nos permitirn poner el texto
seleccionado en Negrita, Cursiva, Tachada y Subrayada respectivamente.

Por ejemplo, [Link] = True pondr el negrita el texto seleccionado.


[Link] = True pondr en cursiva el texto seleccionado.
[Link] = True pondr en tachado el texto seleccionado.
[Link] = True pondr en subrayado el texto seleccionado.
( RTB = Nombre del control RichTextBox )

Si el texto seleccionado est en la parte final del texto, o si el cursor de escritura est al
final del escrito y no se ha seleccionado ningn texto, la propiedad elegida permanecer
vigente para la escritura que se realice a partir de ese punto.

SelFontName
el texto

Esta propiedad devuelve o establece el nombre de la fuente en


seleccionado. P.e. [Link] = Arial

SelFontSize

Devuelve o establece el tamao de la fuente en el texto seleccionado.


P.e. [Link] = 10

Al igual que las otras propiedades, si el texto seleccionado est al final del texto, o si el
cursor de escritura est al final del escrito, la propiedad elegida permanecer vigente para la
escritura que se realice a partir de ese punto.

Pero el RichTextBox tiene propiedades exclusivas.

SelRTF
Devuelve o establece el texto (en formato .RTF) de la seleccin actual de un control
RichTextBox. No est disponible en tiempo de diseo.

Sintaxis

[Link] [= cadena]

Donde cadena es una expresin de cadena en formato .RTF.

Esta propiedad es equivalente a la propiedad SelText y funciona de forma idntica, pero en


este caso el texto reemplazado o devuelto mediante la propiedad SelRTF est en formato
RTF. Esta propiedad devuelve una cadena de longitud cero ("") si no hay texto seleccionado
en el control.
Puede utilizar la propiedad SelRTF junto con el Mtodo Print para escribir archivos .RTF.
En el siguiente ejemplo, el cdigo abre un fichero ([Link]) y guarda en l el texto
seleccionado en el control RichTextBox1

Open "[Link]" For Output As 1

Print #1, [Link]


Close 1

TextRTF
Devuelve o establece el texto de un control RichTextBox, incluido todo el cdigo .RTF.

Sintaxis

[Link] [= cadena]

Donde cadena es una expresin de cadena con formato .RTF.

Al establecer la propiedad TextRTF se reemplaza el contenido completo de un control


RichTextBox por la nueva cadena.
Puede utilizar la propiedad TextRTF junto con el Mtodo Print para escribir archivos
.RTF. Cualquier procesador de textos capaz de leer texto codificado en formato RTF puede
leer el archivo resultante.

OTRAS PROPIEDADES
El RichTextBox tiene otras propiedades, unas similares a las del resto de controles, otras
con ciertas particularidades.

Appearance
Plano o tridimensional, como en el resto de los controles.

AutoVerbMenu

Propiedad Booleana que indica si se presenta un men emergente cuando el usuario hace
click con el botn derecho del ratn. El men emergente muestra los comandos tpicos de
cortar, copiar y pegar. Si esta propiedad est a True muestra el men. False no lo muestra.

Sintaxis

[Link] = True / False

BorderStyle
Sin borde o con borde (None o Fixed Single)

BulletIndent
Devuelve o establece la cantidad de sangra utilizada en un control RichTextBox cuando
SelBullet se establece a True.

Sintaxis

[Link] [= entero]

donde entero es un entero que determina la cantidad de sangra. Estas propiedades utilizan
las unidades de modo de escala del objeto Form que contiene el control RichTextBox.

NOTA. Hay que establecer la propiedad BulletIndent antes de establecer como True la
propiedad SelBullet. Por ejemplo :

[Link] = 2500
[Link] = True

Estas dos lneas de cdigo realizan una sangra de 2500 (en las unidades en las que estemos
midiendo el Formulario que contiene al RichTextBox) y convierte en vieta el prrafo que
estuviese seleccionado.

La propiedad BulletIndent devuelve Null si la seleccin abarca mltiples prrafos con


distintos ajustes de margen.

SelBullet

Devuelve o establece un valor que determina si un prrafo del control RichTextBox que
contiene la seleccin actual o el punto de insercin tiene el estilo de vieta. No est
disponible en tiempo de diseo.

Si queremos activar (o desactivar) el estilo de vieta en un prrafo, usaremos la sintaxis :

[Link] = True / False

Si activamos el estilo vieta, aparecer un punto a la izquierda del prrafo.

Si queremos leer la propiedad, es decir, si queremos saber si un prrafo tiene estilo de


vieta, usaremos la siguiente sintaxis :

Variable = [Link]

En este caso podemos tener tres valores :


Null. La seleccin abarca ms de un prrafo y contiene una mezcla de estilos de vieta y no
vieta.
True. Los prrafos de la seleccin tienen estilo de vieta.
False. La prrafos de la seleccin no tienen estilo de vieta.

DisableNoScroll
Devuelve o establece un valor que determina si estn desactivadas las barras de
desplazamiento en el control RichTextBox.

Sintaxis

[Link] = True / False

Si es False, las barras de desplazamiento aparecen normalmente. Si es True, las barras de


desplazamiento aparecen atenuadas.

Enabled
Propiedad Booleana. Activa o desactiva el RichTextBox

FileName
Esta propiedad devuelve o establece el nombre del fichero .RTF cargado en el
RichTextBox. Si ejecutamos la lnea de cdigo :

[Link] =C :\CursoVB\[Link]

lo que ocurrir es que nuestra aplicacin cargar el fichero C :\CursoVB\[Link] en el


RichTextBox RTB1. Es decir, hace lo mismo que el Mtodo LoadFile (Vea mas abajo).
Slo puede especificar los nombres de archivos de texto o archivos .RTF vlidos para esta
propiedad.
Le recomendamos que para cargar un texto en un RTB use siempre el mtodo LoadFile en
vez de la propiedad Filename.

Si lo que hacemos con esta propiedad es consultar el fichero cargado en el RTB :

Variable = [Link]

obtendremos en Variable el nombre (y Path) del fichero que tenemos cargado en el RTB

HideSelection
Devuelve o establece un valor que determina si el texto seleccionado aparece resaltado
cuando un control pierde el enfoque.

Sintaxis
propiedad

[Link] = True / False

para establecer la

Variable = [Link]

para leerla

Si la propiedad HideSelection est a True, el texto seleccionado no aparece resaltado


cuando el control pierde el enfoque. Si est en False, el texto seleccionado aparece
resaltado cuando el control pierde el enfoque.

Puede usar esta propiedad para indicar el texto resaltado mientras otro formulario o cuadro
de dilogo tiene el enfoque; por ejemplo, en una rutina de revisin ortogrfica.

Locked
Igual que le ocurre al TextBox, si ponemos esta propiedad a True impedimos que se pueda
cambiar el texto existente en el RichTextBox mediante el teclado.

MaxLength
Esta propiedad marca el nmero mximo de caracteres que puede contener. Si se pone a 0
(Predeterminado) admite cualquier nmero de caracteres.

MousePointer
Igual que para el resto de los controles.

Multiline
Igual que para el TextBox. Si est a True (predeterminado) el RichTextBox puede contener
varias lneas. Si est a False, una solo.

OLEDragMode
OLEDropMode
Estas dos propiedades son similares a la DragMode de otros controles. Se vern con mas
detalle al estudiar el Drag & Drop.

RightMargin
Devuelve o establece el margen derecho del texto en un control RichTextBox.

Sintaxis

[Link] [ = valor]

Donde valor es una expresin numrica que especifica el espacio en Twips desde el margen
derecho del texto al margen derecho del control. Esta propiedad se utiliza para impedir que
la lnea de texto sobrepase el margen derecho del RichTextBox

Cuando esta propiedad tiene el valor 0 (predeterminado), las lneas de escritura pueden
superar el lmite del RichTextBox. Si se le da un valor bajo (1 por ejemplo), las lneas se
ajustan al ancho del RTB, introduciendo retornos de carro automticos.

ScrollBars
Pone barras de desplazamiento al RichTextBox.
Esta propiedad puede establecerse a 0 (None, ninguna), a 1 (Horizontal), 2 (Vertical) o 3
(Both, ambas). Cuando las barras de desplazamiento no son necesarias, bien porque hay
pocas lneas, bien porque hay pocos caracteres por lnea, las barras de desplazamiento estn
desactivadas.
Las barras de desplazamiento pueden desactivarse mediante la propiedad DisableNoScroll.

SelAlignment

Devuelve o establece un valor que controla la alineacin de los prrafos de un control


RichTextBox. No est disponible en tiempo de diseo.

Sintaxis

[Link] [= valor]

valor = Un entero o una constante que determina la alineacin del prrafo, como se describe
a continuacin.

Los valores admitidos para valor son:

Constante

Valor

Descripcin

Null

Ninguno.

La seleccin actual abarca ms de un prrafo con distintas


alineaciones.

rtfLeft

(Predeterminado) Izquierda. El prrafo se alinea a lo largo del


margen izquierdo.

rtfRight
derecho.
rtfCenter

1
2

Derecha. El prrafo se alinea a lo largo del margen


Centro. El prrafo se centra entre los mrgenes izquierdo y
derecho.

La propiedad SelAlignment determina la alineacin de todos los prrafos que tienen texto
en la seleccin actual o del prrafo que contiene el punto de insercin si no hay texto
seleccionado.
Para distinguir entre los valores de Null y 0 al leer esta propiedad en tiempo de ejecucin,
use la funcin IsNull con la instruccin If...Then...Else. Por ejemplo:

If IsNull([Link]) = True Then


' Cdigo que se ejecuta cuando la seleccin es mixta.
ElseIf [Link] = 0 Then
' Cdigo que se ejecuta cuando la seleccin est alineada a la izquierda.
...
End If

SelProtected

Devuelve o establece un valor que determina si est protegida la seleccin actual. No est
disponible en tiempo de diseo.

Sintaxis

[Link] [ = valor ]

valor es un valor de tipo Variant que determina si la seleccin actual est protegida, como
se describe a continuacin

Valor Descripcin
Null

La seleccin contiene un mezcla de caracteres protegidos y no protegidos.

True

Todos los caracteres de la seleccin est protegidos.

False Ninguno de los caracteres de la seleccin est protegido.

El texto protegido tiene igual apariencia que el texto normal, pero el usuario final no puede
modificarlo. Es decir, el texto no se puede cambiar en tiempo de ejecucin. Esto le permite
crear formularios con el control RichTextBox y tener zonas que pueda modificar el usuario
final.

SelCharOffset

Devuelve o establece un valor que determina si el texto del control RichTextBox aparece en
la lnea base (normal), como un superndice sobre la lnea base o como un subndice por
debajo de la lnea base. No est disponible en tiempo de diseo.

Sintaxis

[Link] [= desplazamiento]

desplazamiento
= un entero que determina a qu distancia de la lnea base del texto se
separan los caracteres de la seleccin actual o que siguen al punto de insercin, como se
describe a continuacin.

Los valores de desplazamiento son:

Valor

Descripcin

Null

Ninguno. La seleccin tiene una mezcla de caracteres con desplazamientos


diferentes.

Normal. (Predeterminado) Todos los caracteres aparecen en la lnea base de


texto normal.

Entero positivo
el

Superndice. Los caracteres aparecen por encima de la lnea base en

nmero de twips especificado.


Entero negativo Subndice. Los caracteres aparecen por debajo de la lnea base en el
nmero
de twips especificado.

SelTabCount, SelTabs

Devuelven o establecen el nmero de tabulaciones y las posiciones absolutas de tabulacin


de texto de un control RichTextBox. No estn disponibles en tiempo de diseo.

Sintaxis

[Link] [= contador]
[Link](ndice) [= ubicacin]

Las sintaxis de las propiedades SelTabCount y SelTabs constan de las siguientes partes:

NombreRTB Nombre del RichTextBox


contador

Un entero que determina el nmero de posiciones de tabulacin del prrafo o


los prrafos seleccionados o en el prrafo o los prrafos que siguen al punto
de insercin.

ndice

Un entero que identifica una tabulacin especfica. La primera ubicacin de


tabulacin tiene un ndice cero (0). La ltima ubicacin de tabulacin tiene
un ndice igual SelTabCount menos 1.

ubicacin
unidades

Un entero que especifica la ubicacin de la tabulacin designada. Las


empleadas para expresar posiciones de tabulacin estn determinadas por el
modo de escala del objeto Form u otro objeto que contenga el control
RichTextBox .

De forma predeterminada, al presionar TAB mientras escribe en un control RichTextBox el


enfoque pasa al siguiente control del orden de tabulacin, segn especifica la propiedad
TabIndex. Un modo de insertar una tabulacin en el texto consiste en presionar
CTRL+TAB. Sin embargo, a los usuarios habituados a trabajar con procesadores de texto la
combinacin de teclas CTRL+TAB puede resultarles extraa. Puede activar el uso de la
tecla TAB para insertar una tabulacin en un control RichTextBox si cambia temporalmente
la propiedad TabStop de todos los controles del objeto Form a False mientras el control
RichTextBox tenga el enfoque. Por ejemplo:

Private Sub RichTextBox1_GotFocus()


' Pasa por alto los errores de controles sin la propiedad TabStop.
On Error Resume Next
' Desactiva el cambio de enfoque al presionar TAB.
For Each Control In Controls
[Link] = False
Next Control

End Sub

Restablezca la propiedad TabStop de los otros controles cuando el control RichTextBox


pierda el enfoque.

METODOS DEL CONTROL RichTextBox

El control RichTextBox cuenta con unos mtodos especiales para abrir un fichero y guardar
el texto que contiene un poco especiales. Estos mtodos (SaveFile y LoadFile) se pueden
usar solamente cuando queremos guardar o leer el texto en formato .RTF. Con ellos no es
necesario abrir el fichero (con Open Nombrefichero .....) ni cerrarlo, pero siempre para
guardar o leer texto en formato RTF. Podemos leer o guardar el texto de un RichTextBox
como texto plano (Como los ficheros ASCII .TXT). Para ello debemos utilizar los mtodos
Open Nombrefichero For Input / Output vistos en el captulo de ficheros.

METODO SaveFile
Guarda el contenido de un control RichTextBox en un archivo.

Sintaxis

[Link](nombre_ruta, tipo_archivo)

Donde nombre_ruta (Parmetro requerido) es una expresin de cadena que define la ruta de
acceso y el nombre del archivo que va a recibir el contenido del control, y tipo_archivo es
un entero o una constante que especifica el tipo de archivo cargado, como se describe a
continuacin :

rtfRTF

1
rtfText
texto.

El control RichTextBox guarda su contenido como un archivo .RTF.


El control RichTextBox guarda su contenido como un archivo de

El valor predeterminado es 0. Si no se pone este parmetro, toma el valor 0 por defecto.

Ejemplo
[Link] C :\CursoVB\[Link], 0

Guarda el contenido del RichTextBox RTB1 en un fichero llamado [Link] que est en
el directorio CursoVB, con formato RTF

Aparte del mtodo SaveFile, puede utilizar la funcin Print de Visual Basic y las
propiedades TextRTF y SelRTF del control RichTextBox para escribir archivos .RTF. Por
ejemplo, puede guardar el contenido de un control RichTextBox en un archivo .RTF de este
modo:

Open "[Link]" For Output As 1


Print #1, [Link]
Close #1

METODO LoadFile

Carga un archivo .RTF o un archivo de texto en un control RichTextBox.

Sintaxis

[Link] nombre_ruta, tipo_archivo

Donde nombre_ruta (Parmetro requerido) es una expresin de cadena que define la ruta de
acceso y el nombre del archivo que se va a cargar en el control, y tipo_archivo es un
entero o una constante que especifica el tipo de archivo cargado, como se describe a
continuacin

rtfRTF

El archivo cargado debe ser un archivo .RTF vlido.

rtfText

El control RichTextBox carga cualquier archivo de texto.

Al cargar un archivo con el mtodo LoadFile, el contenido del archivo cargado reemplaza a
todo el contenido del control RichTextBox. Esto hace que cambien los valores de las
propiedades Text y rtfText.

Tambin puede usar la funcin Input de Visual Basic y las propiedades TextRTF y
SelRTF del control RichTextBox para leer archivos .RTF. Por ejemplo, puede cargar el
contenido de un archivo .RTF en el control RichTextBox de este modo:

Open "C :\CursoVB\[Link]" For Input As 1


[Link] = Input$(LOF(1), 1)
Close #1

METODO Find

Busca una cadena especfica en el texto de un control RichTextBox.

Sintaxis

Variable = [Link] (cadena, inicio, fin, opciones)

Donde :
cadena(Necesario)

Una expresin de cadena que desea buscar en el control.

inicio (Opcional)
comienza

Un ndice de caracteres de tipo Integer que determina dnde


la bsqueda. Cada carcter del control tiene un ndice entero que lo
identifica de forma nica. El primer carcter de texto del control tiene
un ndice 0.

fin

(Opcional)

Un ndice de carcter de entero que determina dnde termina la


bsqueda.

Opciones (Opcional) Una o ms valores o constantes utilizadas para especificar


caractersticas opcionales, como se describe a continuacin.

Valor Constante

Descripcin

rtfWholeWord Determina si una coincidencia se basa en una palabra completa o en


parte de una palabra.

rtfMatchCase Determina si una coincidencia se basa el uso de maysculas y


minsculas de la cadena especificada adems del texto de la cadena.

rtfNoHighlight

Determina si una coincidencia aparece resaltada en el control

RichTextBox.
Puede combinar mltiples opciones si utiliza el operador Or.

Si se encuentra el texto buscado, el mtodo Find resalta el texto especificado y devuelve un


nmero con la posicin del primer carcter resaltado. Si no se encuentra el texto
especificado, el mtodo Find devuelve 1.
Si utiliza el mtodo Find sin la opcin rtfNoHighlight aunque la propiedad HideSelection
sea True y el control RichTextBox no tenga el enfoque, el control seguir resaltando el
texto encontrado. Los usos posteriores del mtodo Find slo buscarn el texto resaltado
hasta que se mueva el punto de insercin.

El comportamiento de bsqueda del mtodo Find vara segn la combinacin de valores


especificados para los argumentos inicio y fin. Esta tabla describe los comportamientos
posibles:

Inicio

Fin

Comportamiento de bsqueda

Especificado Especificado Busca desde la ubicacin inicial especificada hasta la


ubicacin final especificada.
Especificado Omitido

Busca desde la ubicacin inicial especificada hasta el final del


texto del control.

Omitido

Especificado Busca desde el punto de insercin actual hasta la ubicacin


final especificada.

Omitido

Omitido

Busca en la seleccin actual si el texto est seleccionado o en


todo el contenido del control si no hay texto seleccionado.

METODO GetLineFromChar

Devuelve el nmero de la lnea que contiene una posicin de carcter especificado en un


control RichTextBox.

Sintaxis

Variable = [Link] (pos_carcter)

Donde pos_carcter (Requerido) es un entero largo que especifica la posicin del carcter
cuya lnea desea identificar. El ndice del primer carcter del control RichTextBox es 0.

Utilice el mtodo GetLineFromChar para averiguar qu lnea del texto de un control


RichTextBox contiene una determinada posicin de carcter. Es posible que necesite
hacerlo porque puede variar el nmero de caracteres de cada lnea, lo que hace muy difcil
averiguar qu lnea del texto contiene un determinado carcter, identificado por su posicin
en el texto.

METODO SelPrint

Enva texto con formato de un control RichTextBox a un dispositivo de impresin.

Sintaxis

[Link](hdc)

Donde hdc es el contexto de dispositivo del dispositivo que va a utilizar para imprimir el
contenido del control.

Si hay texto seleccionado en el control RichTextBox, el mtodo SelPrint slo enviar el


texto seleccionado al dispositivo de destino. Si no hay texto seleccionado, se enviar el
contenido completo del control RichTextBox al dispositivo.
El mtodo SelPrint no imprime texto desde el control RichTextBox. En su lugar, enva una
copia del texto con formato a un dispositivo que pueda imprimirlo. Por ejemplo, puede
enviar el texto al objeto Printer utilizando cdigo como ste:

[Link]([Link])

Observe que la propiedad hDC del objeto Printer se utiliza para especificar el argumento de
contexto de dispositivo del mtodo SelPrint.

Nota Si utiliza el objeto Printer como destino del texto desde el control RichTextBox,
deber inicializar en primer lugar el contexto de dispositivo del objeto Printer imprimiendo
algo como una cadena de longitud cero.

METODO Span

Selecciona texto en un control RichTextBox basndose en un conjunto de caracteres


especificado.

Sintaxis

[Link] juego_caracteres, hacia_adelante, negado

donde :

juego_caracteres (Requerido) Una expresin de cadena que especifica el juego de


caracteres que se va a buscar al ampliar la seleccin, basndose en el valor de negado.

hacia_adelante (Opcional) Una expresin booleana que determina en qu sentido se mueve


el punto de insercin, como se describe mas adelante.

Negado (Opcional) Una expresin booleana que determina si los caracteres de


juego_caracteres definen el conjunto de caracteres de destino o se excluyen del conjunto de
caracteres de destino, como se describe mas adelante.

Los valores para hacia_adelante son:

True (Predeterminado) Selecciona texto desde el punto de insercin actual o desde el


principio de la seleccin actual hacia delante, hacia el final del texto.
False Selecciona texto desde el punto de insercin actual o el principio de la seleccin
actual hacia atrs, hacia el principio del texto.

Los valores para negado son:

True Los caracteres incluidos en la seleccin son los que no aparecen en el argumento
juego_caracteres. La seleccin se detiene en el primer carcter encontrado que aparece en
el argumento juego_caracteres.
False (Predeterminado) Los caracteres incluidos en la seleccin son los que aparecen en el
argumento juego_caracteres. La seleccin se detiene en el primer carcter encontrado que
no aparece en el argumento juego_caracteres.

El mtodo Span se utiliza principalmente para seleccionar fcilmente una palabra o una
frase en el control RichTextBox.
Si el mtodo Span no encuentra los caracteres especificados basndose en los valores de los
argumentos, el punto de insercin o la seleccin actual permanece sin cambios.
El mtodo Span no devuelve datos.

METODO Upto

Mueve el punto de insercin hasta el primer carcter (sin incluirlo) que sea miembro del
conjunto de caracteres especificado en un control RichTextBox.

Sintaxis

[Link] (juego_caracteres, hacia_adelante, negado)

Donde :

juego_caracteres (Requerido) Una expresin de cadena que especifica el conjunto de


caracteres que se va a buscar al mover el punto de insercin, basndose en el valor de
negado.
hacia_adelante
(Opcional) Una expresin booleana que determina en qu sentido se
mueve el punto de insercin, como se describe en Valores.

negado
(Opcional) Una expresin booleana que determina si los caracteres de
juego_caracteres definen el conjunto de caracteres de destino o se excluyen del conjunto de
caracteres de destino, como se describe en Valores.

Valores

Los valores de hacia_adelante son:

True (Predeterminado) Mueve el punto de insercin hacia delante, hacia el final del texto.
False Mueve el punto de insercin hacia atrs, hacia el principio del texto.

Los valores para negado son:

True Los caracteres no especificados en el argumento juego_caracteres se utilizan para


mover el punto de insercin.
False (Predeterminado) Los caracteres especificados en el argumento juego_caracteres se
utilizan para mover el punto de insercin.

El Portapapeles y el RichTextBox

Imagnese que seleccionamos un texto en un RichTextBox y ese texto lo metemos al


portapapeles. Dado que el texto est escrito en RTF, Como nos lo guarda el Portapapeles ?

La solucin es que puede guardarlo en las dos versiones. En formato de texto plano
(Guarda estrictamente los caracteres ASCII del texto seleccionado) o como texto
enriquecido (RTF), guardando en este caso, adems del texto limpio y puro, la informacin
del tipo de letra, tamao, color, etc. tpicas del formato RTF.

Para ello debemos indicarle al portapapeles en qu formato queremos guardarlo. La lnea de


cdigo :

[Link] [Link], vbCFRTF

guarda en el portapapeles el texto seleccionado en ese momento. La lnea

[Link] [Link], vbCFRTF

guarda en el portapapeles todo el contenido del RichTextBox (llamado RTB1 en los


ejemplos) en formato RTF

Las lneas :

[Link] [Link], vbCFText


[Link] [Link], vbCFRTF

guardarn, respectivamente, el texto seleccionado y todo el texto de RTB1, en formato de


texto plano (el texto ASCII solamente)

APENDICE

Constantes del control RichTextBox

Constante

Valor Descripcin

Propiedad Appearance
rtfFlat

Uniforme. Pinta sin efectos visuales.

rtfThreeD

(Predeterminado). 3D. Pinta con efectos tridimensionales.

Mtodo Find
rtfWholeWord 2

Determina si una coincidencia se basa en una palabra completa o en


parte de una palabra.

rtfMatchCase 4

Determina si una coincidencia se basa en el uso de maysculas y


minsculas de la cadena especificada adems del texto de la cadena.

rtfNoHighlight

Determina si una coincidencia aparece resaltada en el control

RichTextBox.

Mtodos LoadFile y SaveFile


rtfRTF

(Predeterminado) RTF. El archivo cargado debe ser un archivo .RTF


vlido (mtodo LoadFile) o el contenido del control se guarda en un
archivo .RTF (mtodo SaveFile).

rtfText

Texto. El control RichTextBox carga cualquier archivo de texto


(mtodo LoadFile) o el contenido del control se guarda en un archivo
de texto (mtodo SaveFile).

Propiedad MousePointer
rtfDefault

(Predeterminado) La forma est determinada por el objeto.

rtfArrow

Flecha.

rtfCross

Cruz (cursor en forma de cruz).

rtfIbeam

Cursor en forma de I.

rtfIcon

Icono (cuadrado pequeo dentro de un cuadrado).

rtfSize

Tamao (flecha de cuatro puntas que seala al norte, sur, este y oeste)

rtfSizeNESW 6

Tamao NE-SO (flecha de dos puntas que seala al nordeste y al


sudoeste).

rtfSizeNS

Tamao N S (flecha de dos puntas que seala al norte y al sur).

rtfSizeNWSE 8

Tamao NO, SE.

rtfSizeEW

Tamao EO (flecha de dos puntas que seala al este y al oeste).

rtfUpArrow

10

Flecha hacia arriba.

rtfHourglass 11

Reloj de arena (espere).

rtfNoDrop

No colocar.

12

rtfArrowHourglass

13

Flecha y reloj de arena.

rtfArrowQuestion

14

Flecha y signo de interrogacin.

rtfSizeAll

15

Ajustar todo.

rtfCustom

99

Icono personalizado especificado por la propiedad MouseIcon.

Propiedad Selalignment
rtfLeft
margen

(Predeterminado) Izquierda. El prrafo se alinea a lo largo del


izquierdo.

rtfRight
rtfCenter

1
2

Derecha. El prrafo se alinea a lo largo del margen derecho.

Centro. El prrafo se centra entre los mrgenes izquierdo y derecho.

Propiedad Scrollbars
rtfNone

(Predeterminado) Ninguna.

rtfHorizontal 1

Slo barra de desplazamiento horizontal.

rtfVertical

Slo barra de desplazamiento vertical.

rtfBoth

Barras de desplazamiento horizontal y vertical.

El FORMATO RTF

Cuando se edita un texto mediante un procesador de textos, el fichero resultante se guarda


don un formato distinto para cada procesador. De esta forma, un texto editado en WP no es
compatible con el P.T. AmiPro, con Word o con cualquier otro. Los fabricantes de estos
procesadores de textos han tenido que incluir una herramienta capaz de convertir un
formato a otro para poder alcanzar la compatibilidad entre ellos que el mercado exiga.

El Formato de Texto Enriquecido pretende ser un nexo de unin entre todos los
procesadores de texto, para poder intercambiar ficheros editados en uno u otro. De hecho,
las ltimas versiones de los mas importantes procesadores de textos incluyen la posibilidad
de guardar y buscar el texto en este formato. (WP, Word)

Este formato consiste en guardar mediante caracteres ASCII plenamente legibles tanto el
texto escrito como los tipos de letra, tamao, saltos de carro, etc. Veamos un ejemplo
comparativo del mismo texto, guardado en ASCII y RTF

Este es un texto utilizado para explicar el Formato de Texto Enriquecido (RTF). El Formato de
Texto Enriquecido es un formato de intercambio de textos entre distintos procesadores. Es, en
esencia, una idea para crear una forma comn de intercambiar textos.
El RTF guarda los datos codificados en ASCII, es decir, el fichero resultante es legible plenamente ya que los caracteres que utiliza son ASCII, pero lleva una determinada codificacin para
poder
cambiar de letra, de tamao, etc.
Puede guardar grficos tal como lo hara cualquier procesador de textos.
Fin

{\rtf1\ansi\deff0\deftab720{\fonttbl{\f0\fswiss MS Sans Serif;}


{\f1\froman\fcharset2 Symbol;}{\f2\fswiss MS Sans Serif;}}
{\colortbl\red0\green0\blue0;}
\deflang1034\pard\plain\f2\fs17 Este es un texto utilizado para explicar
el Formato de Texto Enriquecido (RTF). El Formato de
\par Texto Enriquecido es un formato de intercambio de textos entre
distintos procesadores. Es, en

\par esencia, una idea para crear una forma com\'fan de intercambiar
textos.
\par El RTF guarda los datos codificados en ASCII, es decir, el fichero
resultante es legible plenamen\par te ya que los caracteres que utiliza son ASCII, pero lleva una
determinada codificaci\'f3n para poder
\par cambiar de letra, de tama\'f1o, etc.
\par Puede guardar gr\'e1ficos tal como lo har\'eda cualquier procesador
de textos.
\par Fin
\par
\par
\par }

Estos textos de guardaron desde un RichTextBox. Algunas lneas estn truncadas, pues en
el RTF original eran mas largas que las de este texto.

Puede observarse que codifica los acentos, los saltos de lnea, etc., pero todo ello usando
caracteres ASCII plenamente legibles.

MUY IMPORTANTE

Observe que el fichero .RTF comienza por {\rtf Cuando tenga que importar un
texto hacia un RichTextBox, puede que ese texto est en formato RTF o
como Texto Plano (Fichero ASCII puro) Para saber si el texto est en RTF
analice los Cinco primeros caracteres del texto a importar. Si son {\rtf
es que est en presencia de un texto RTF.

Para saber si un fichero contiene texto enriquecido, basta con abrirlo


como un fichero secuencial, (recuerde que un fichero .RTF tiene
solamente caracteres ASCII) y leer los cinco primeros caracteres.

La Ayuda de Windows .

El Objeto App.

LA AYUDA DE WINDOWS
[Link]

Toda aplicacin bien terminada debe tener una ayuda. Cualquier aplicacin realizada en
Visual Basic puede tenerla, usando para ello los recursos que brida Windows.

La presentacin de la ayuda podra hacerse mediante un formulario, donde se presentan


distintos ficheros segn las necesidades del usuario. Sin embargo esta forma de presentar la
ayuda nunca llegar a ser tan completa como la que brinda Windows, y el trabajo a
desarrollar para igualar la presentacin de Windows sera laborioso. Solucin : utilizar los
recursos de Windows.

El recurso de Windows es el programa [Link] Todas las ayudas de aplicaciones


Windows se muestran mediante este programa. Windows dispone de otra utilidad, el
programa [Link] (Help Compiler) que puede adaptar el fichero .RTF donde escribir la
ayuda, a un formato capaz de ser interpretado por el [Link] Lo vamos viendo
todo paso a paso.

Antes de comenzar a explicar como se realiza una ayuda Windows vamos a comentar el
formato de archivos RTF. Este formato posiblemente le sea familiar debido a que el control
RichTextBox puede guardar y leer ficheros en ese formato. Las siglas RTF vienen
precisamente de Rich Text Format, en castellano, Formato de Texto Enriquecido.

Cuando se edita un texto mediante un procesador de textos, el fichero resultante se guarda


don un formato distinto para cada procesador. De esta forma, un texto editado en WP no es
compatible con el P.T. AmiPro, con Word o con cualquier otro. Los fabricantes de estos
procesadores de textos han tenido que incluir una herramienta capaz de convertir un
formato a otro para poder alcanzar la compatibilidad entre ellos que el mercado exiga.

El Formato de Texto Enriquecido pretende ser un nexo de unin entre todos los
procesadores de texto, para poder intercambiar ficheros editados en uno u otro. De hecho,
las ltimas versiones de los mas importantes procesadores de textos incluyen la posibilidad
de guardar y buscar el texto en este formato. (WP, Word)

Este formato consiste en guardar mediante caracteres ASCII plenamente legibles tanto el
texto escrito como los tipos de letra, tamao, saltos de carro, etc. Veamos un ejemplo
comparativo del mismo texto escrito en Word, guardado en RTF y en ASCII :

Texto1

Este texto est escrito en Word. Observe que podemos poner letra negrita, letra cursiva,
letra subrayada. Podemos cambiar el color de las letras, rojo, verde, azul. Podemos cambiar
el tamao de las letras a tamao mas grande, mas pequeo, etc.

Fin Texto 1

El mismo texto en ASCII puro :

Texto1

Este texto est escrito en Word. Observe que podemos poner letra negrita, letra cursiva, letra

subrayada. Podemos cambiar el color de las letras, rojo, verde, azul. Podemos cambiar el
tamao de las letras a tamao mas grande, mas pequeo, etc.

Fin Texto 1

Y ahora el mismo texto en formato RTF. En este formato hubo que seccionar las lneas para
poder mostrarlas en una hoja, ya que RTF utiliza lneas sin retornos de carro. Se han
seccionado las lneas terminndolas con un guin bajo y comenzando en la lnea siguiente
tambin con un guin bajo.

{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f5\fswiss\fcharset0\fprq2 Arial;}}_


_{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;_
_\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;
\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\_
_green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\_
blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue_
_192;}{\stylesheet{\widctlpar
\f5\fs20\lang1034 \snext0 Normal;}{\*\cs10 \additive Default Paragraph Font;}_
_}{\info{\author LUIS SUAREZ BERNALDO}{\operator LUIS SUAREZ BERNALDO}_
_{\creatim\yr1997\mo3\dy9\hr11\min8}{\revtim\yr1997\mo3\dy9\hr11\min9}_
_{\version1}{\edmins1}{\nofpages1}
{\nofwords38}{\nofchars220}{\*\company }{\vern57431}}\margl1701\margr1701\_
_margt1417\margb1417 \deftab708\widowctrl\ftnbj\aenddoc\hyphhotz425\formshade_
_ \fet0\sectd \linex0\headery709\footery709\colsx709\endnhere {\*\pnseclvl1

\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstar_
_t1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\_
_pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}
{\*\pnseclvl5
\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcl_
_tr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\_
_pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pn_
_start1\pnindent720\pnhang
{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{_
_\pntxtb (}{\pntxta )}}\pard\plain \qj\widctlpar \f5\fs20\lang1034 Texto1
\par
\par Este texto est\'e1 escrito en Word. Observe que podemos poner letra _
_{\b negrita}, letra {\i cursiva}, letra {\ul subrayada}. Podemos cambiar_
_ el color de las letras, {\cf6 rojo}, {\cf4 verde}, {\cf2 azul}. Podemos _
_cambiar el tama\'f1o de las letras a {
\fs24 tama\'f1o mas grande}, {\fs16 mas peque\'f1o}, etc.
\par
\par
\par Fin Texto 1
\par \pard \widctlpar
\par }

Como puede observar, el RTF incluye el texto escrito casi en ASCII, pero aadiendo una
serie de datos respecto al tipo de letra, codifica los acentos, las ees, y hasta incluye,
tomndolo del ordenador, el nombre del operador que lo ha escrito. Estas informaciones

tambin se guardan cuando se archiva un texto en el formato propio del procesador de


textos, pero lo hace en binario, por lo que no lo podemos visualizar. El formato RTF, dentro
de que mete toda esa informacin adicional, lo archiva con caracteres ASCII.

La utilidad que tiene Windows para presentar las ayudas utiliza precisamente este formato
RTF. Por ello, debemos disponer de un procesador de textos que pueda guardar el texto
escrito en este formato. (Word, WP5, WP6 y otros) Los ejemplos de estos apuntes se han
realizado en Word.

Antes de decidirnos a escribir el fichero de ayuda debemos pensar muy bien lo que vamos a
poner en l. Pensemos ante todo a que personas va dirigida la aplicacin, sus posibles
conocimientos de informtica y de otros temas que estarn relacionados con la aplicacin.
Es decir, planifiquemos la ayuda antes de comenzar a hacerla.

Para acceder a la ayuda, Windows ofrece la posibilidad de pulsar F1 . Nuestras aplicaciones


deben sacar la ayuda pulsando F1. Lo podrn hacer mediante otros procedimientos.
Comencemos por lo mas sencillo, una ayuda de una nica pgina.

Escriba el texto de ayuda con Word y gurdelo en formato RTF, en cualquier directorio,
pero preferentemente en uno que no se mezcle con otros ficheros para poder localizarlo
mejor. Cree si es necesario un directorio exclusivo para la ayuda. Imaginemos que lo
creamos y es el C :\DIRAYUDA, donde guardamos el fichero de ayuda con el nombre
[Link]

Este archivo no lo puede utilizar directamente el programa [Link]. Hay que


compilarlo. Para ello utilizamos el compilador [Link]. Este compilador no es una
herramienta Windows, por lo que tendr que ir al DOS y ejecutarlo. El programa [Link]
se encuentra en el directorio C :\ ..... \VB\HC

Pero al compilador [Link] hay que suministrarle la informacin para que pueda trabajar.
Esa informacin se la damos en un fichero que le pasaremos como parmetro, que debe
tener extensin .HPJ y que meteremos en el mismo directorio donde tengamos el fichero de
ayuda [Link]

Este fichero estar editado en ASCII puro. Puede editarlo con el EDIT de MS-DOS o con el
Block de Notas de Windows. Imaginemos que lo vamos a llamar [Link] y como
se dijo, se meter en el mismo directorio donde est el fichero de ayuda. (C :\DIRAYUDA)
El nombre que decida para este fichero con extensin .HPJ ser el que tenga el fichero de
ayuda (Que se obtendr de la compilacin y tendr por extensin .HLP) Tendr, de
momento, dos lneas.

[FILES]
[Link]

Vayamos al directorio C :\ ...... \VB\HC (en MS-DOS) y tecleemos

HC C:\DIRAYUDA\ [Link]

La compilacin no suele dar problemas sobre todo en un fichero de ayuda tan simple de una
nica pgina. Al compilar, obtenemos un fichero con el mismo nombre que el fichero .HPJ
y extensin .HLP, ([Link] en nuestro caso) que lo dejar en el directorio donde
estuviera el programa [Link]. (Posiblemente el C :\VB\HC) Debe moverlo a otro
directorio donde no estorbe y lo podamos localizar sin problemas. Movmoslo al
C :\DIRAYUDA Vayamos a nuestra aplicacin VB y abramos el men de Herramientas |
Opciones para sacar el cuadro de Opciones. Vaya a la pestaa de Proyecto y busque el
directorio y nombre del fichero .HLP haciendo click sobre el cuadrado con tres puntos (...)
que est a la derecha del TextBox de Archivo de Ayuda. Se le abrir un CommonDialog
para buscarlo.

NOTA : Para evitar liarse con los directorios, es medida siempre prudente llevarse el
compilador de ayudas [Link] al directorio donde tengamos el fichero .RTF y el .HPJ.

Haga click en Aceptar y ejecute la aplicacin. Pulse F1. SORPRESA ! Tenemos en


pantalla la ventana de ayuda de Windows con el fichero que habamos escrito. F1 ha
invocado a [Link] y este programa present el fichero de ayuda asociado con el
proyecto.
Observe que el texto se adapta a las dimensiones de la ventana. Y si supera en vertical las
dimensiones de la ventana, aparecen barras de scroll verticales. Puede de esta forma
recorrer todo el fichero de ayuda.

Sin embargo este procedimiento no sera el mas indicado para una informacin de ayuda
extensa. Deberemos poner varias pginas. Si lo hacemos as, al pulsar F1 siempre aparecer
la pgina 1. Si aparece siempre la pgina 1, pongamos en esta primera pgina el ndice de
temas, y en las pginas sucesivas cada uno de los temas. Ya veremos como acceder a cada
una de las pginas haciendo click sobre la lnea del ndice que contiene el ttulo del tema
deseado. Tal y como lo hace con cualquier aplicacin Windows.

Volvamos al editor Word y abramos el fichero que habamos creado de una pgina, y
adale mas pginas introduciendo avances de pgina manuales (Se introducen con
Control + Intro)

Imaginemos que tenemos esta configuracin del fichero :

INDICE

1 - Introduccin a la aplicacin
2 - Acceso a la Base de Datos
3 - Introduccin de datos
4 - Lectura de datos

---------------

salto de pgina manual - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Introduccin a la Aplicacin

Esta aplicacin est realizada para . . . . . . . . . .

---------------

salto de pgina manual - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Acceso a la Base de Datos

Para abrir la Base de datos . . . . . . . . .

---------------

salto de pgina manual - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Introduccin de datos

Para introducir datos . . . . . . . . . . . .

---------------

salto de pgina manual - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Lectura de datos

Para leer los datos . . . . . . . . . . . . . . . .

Ya tenemos hecho un fichero de ayuda con varias pginas. No es suficiente esto, ya que
[Link] , pulsando F1, solamente nos mostrar la pgina 1. Debemos hacer algo
para, una vez en la pgina 1, que nos estar mostrando el ndice, poder acceder a cada una
de las pginas haciendo click sobre la lnea del ndice que contiene el tema de inters.

Para ello debemos poner un identificador a cada una de las pginas. Este identificador debe
ser nico, es decir, no pueden existir dos pginas con el mismo identificador.

Para introducir un identificador en una pgina, una vez que tenga el fichero de ayuda
terminado, sitese con el cursor al comienzo del ttulo de la primera pgina (despus del
ndice), justamente al lado de Introduccin a la Aplicacin . Inserte en ese punto una Nota
al pi (Abra el Men Insertar | Nota al Pi del Word) Le aparecer esta ventana :

Introduzca una almohadilla (#) en el TextBox Marca personal. Haga click sobre Aceptar.

Le aparecer en la parte inferior de la pantalla un cuadro para introducir el identificador de


esa pgina. Repita el proceso para todas las pginas insertndoles una Nota al pi a cada
una. Al final obtendr este resultado :

También podría gustarte