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 :