Vous êtes sur la page 1sur 21

Visual Basic - Gua del Estudiante Cap.

4
CONTROLES PARA MOSTRAR IMGENES
CREAR CONTROLES EN TIEMPO DE EJECUCIN
EL EXAMINADOR DE OBJETOS

_________________________________________________________________
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:
Nombreobjeto.Picture = LoadPicture (Path, Fichero)

Por ejemplo, si tenemos un formulario llamado Form1 y queremos rellenarlo con una imagen
contenida en el fichero de Windows metafile DOLLAR.WMF que se encuentra en el directorio
C:\VB\METAFILE\BUSINESS, deberemos ejecutar la instruccin:
Form1.Picture = LoadPicture (C:\VB\METAFILE\BUSINESS\DOLLAR.WMF)
Para "descargar" esa imagen de ese formulario, basta con ejecutar la misma instruccin sin
fichero alguno:
Form1.Picture = 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

LSB

Visual Basic - Gua del Estudiante

Captulo 4

Pgina 1

convertir una aplicacin de buena a excelente. No intente nunca mejorar una aplicacin mediocre
con un fondo artstico en un Formulario.
Adems de presentar imgenes, se puede escribir texto en un formulario. Para ello se utiliza el
mtodo grfico Print que veremos en el captulo de mtodos grficos
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 en la parte superior.
Inferior o 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 o rdoResultset)
Las propiedades de un PictureBox son:
Align
ClipControls
DrawWidth
ForeColor
LinkMode
Negotiate
ScaleWidth
WhatThisHelp

Appearance
DataField
Enabled
Height
LinkTimeout
Picture
TabIndex
Width

Autoredraw
Autosize
DataSource
DragIcon
FillColor
FiilStyle
HelpContextID Index
LinkTopic
MouseIcon
ScaleHeight ScaleLeft
TabStop
Tag

Backcolor
DragMode
Font
Left
MousePointer
ScaleMode
Top

BorderStyle
DrawStile
Fontransparent
LinkItem
Name
ScaleTop
Visible

Un PictureBox puede disponer de los siguientes procedimientos :


Click
KeyDown

Change
KeyPress

DblClick

DragDrop

DragOver

GotFocus

Al igual que en el formulario, se puede escribir texto en un PictureBox, utilizando el mtodo Print.
El control Picture puede ser contenedor de otros controles. Esto quiere decir que puede poner otros
controles dentro del picture, y esos controles tendrn un comportamiento especial en ciertos casos.
(Ver ms adelante el control Option)

CONTROL IMAGE

LSB

Visual Basic - Gua del Estudiante

Captulo 4

Pgina 2

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.
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
Enabled
Name
WhatThisHelp

BorderStyle
Height
Picture
Width

Datafield
Index
Stretch

DataSource
Left
Tag

DragIcon
MouseIcon
Top

DragMode
MousePointer
Visible

GotFocus

MouseDown

Un Image puede disponer de los siguientes procedimientos :


Click
MouseMove

DblClick
DragDrop
MouseUp

DragOver

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.

LSB

Visual Basic - Gua del Estudiante

Captulo 4

Pgina 3

Sintaxis
NombrePictureBox.Align [= 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.
(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.
El control se coloca en la parte inferior del formulario y su anchura es igual
a la anchura del formulario.
El control se coloca en la parte izquierda del formulario y su altura es igual
a la altura del formulario.
El control se coloca en la parte derecha del formulario y su altura es igual a
la altura del formulario.

1-Top
2-Bottom
3-Left
4-Right

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)
Esta propiedad le permite mostrar o no mostrar el PictureBox dentro de un formulario
donde tiene una barra de herramientas. No est disponible en tiempo de ejecucin.
Esta propiedad no es muy usual, por lo que omitimos una mayor explicacin. Recurra
a la ayuda para obtener mas detalles

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 o el texto presente. Si Autoredraw est a False, el control
no presentar las imgenes o texto 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.

Autosize

LSB

(PictureBox solamente)

Visual Basic - Gua del Estudiante

Captulo 4

Pgina 4

Si esta propiedad es True se cambia automticamente el tamao del PictureBox para


acomodarse al tamao de la imagen. Si es False, si la imagen es mayor que el
PictureBox la recortar, y si es menor, presentar una zona sin imagen.
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. Si
esta propiedad es True, un mtodo grfico repintar todo el Picture. Si es False,
solamente repintar la zona de la imagen que ha variado.
DataField
DataSource

(PictureBox e Image)
(PictureBox e Image)
Ver con mas detalles estas propiedades cuando estudie los Objetos enlazados a
Datos. Le van a permitir presentar una imagen desde una base de datos. Le permitir
tambin introducirla de una forma muy sencilla en la base de datos.

DragIcon
DragMode

(PictureBox e Image)

DrawMode
DrawStyle
DrawWidth

(PictureBox solamente)
(PictureBox solamente)
(PictureBox solamente)

Enabled

Igual que otros controles

Formas de responder a los mtodos grficos. Lo ver en el captulo correspondiente


(PictureBox e Image)
Habilitado. Igual que otros controles.

FillColor, FillStyle, Font, Fontransparent, ForeColor (PictureBox solamente)


Igual que otros controles.
Height, Width , Left, Top

(PictureBox e Image)

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.

LSB

Visual Basic - Gua del Estudiante

Captulo 4

Pgina 5

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
objeto.MouseIcon = LoadPicture(ruta)
objeto.MouseIcon = 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. Image1.MouseIcon = LoadPicture("C:\vb\icons\computer\disk05.ico")
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. Image1.MouseIcon = Picture1.picture
La propiedad MouseIcon proporciona un icono de mouse personalizado que se utiliza
cuando el valor de la propiedad MousePointer es 99.
MousePointer. Establece 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

objeto.MousePointer [= 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
anteriormente.

LSB

Visual Basic - Gua del Estudiante

Captulo 4

explicada

Pgina 6

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 la medida de las coordenadas, no a la escala !
ScaleHeight, ScaleWidth
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

objeto.ScaleHeight [= valor]
objeto.ScaleWidth [= valor]

objeto
valor

Nombre del Control


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

objeto.ScaleMode [= 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).

LSB

Visual Basic - Gua del Estudiante

Captulo 4

Pgina 7

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

objeto.Stretch [= lgico]

objeto
Nombre del control Image
lgico
Expresin booleana que especifica si el grfico adapta su tamao, segn
se describe a continuacin.
True
False

El grfico cambia su tamao para ajustarlo al del control.


(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

LSB

Visual Basic - Gua del Estudiante

Captulo 4

Pgina 8

IMAGE LIST
Lo ver mucho mas ampliamente en un captulo posterior. Se incluye en este captulo para que lo
pueda ir usando.
Este control no est normalmente en la caja de herramientas. Hay que introducirlo mediante los
Proyecto | Componentes y pertenece al grupo Microsoft Windows Common Controls
(COMCTL32.OCX) (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 (COMCTL32.OCX) incluye


adems de este los controles TabStrip, Toolbar, StatusBar, ProgressBar, TreeView, ListView y Slider.
Se ver con ms detalle en un prximo captulo (Cap. 16)

LSB

Visual Basic - Gua del Estudiante

Captulo 4

Pgina 9

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 :
ImageList1.Listimages (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 Picture1.Picture = ImageList1.ListImages (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. ListImages.Count
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 > ImageList1.ListImages.Count Then pepe = 1
LSB

Visual Basic - Gua del Estudiante

Captulo 4

Pgina 10

Set Picture1.Picture = ImageList1.ListImages(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 (COMCTL32.OCX).
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 :

LSB

Visual Basic - Gua del Estudiante

Captulo 4

Pgina 11

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
LSB

Visual Basic - Gua del Estudiante

Captulo 4

Pgina 12

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. ( Toolbar1.buttons(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
1 - Check
2 - Button Group

3 - Separator
4 - PlaceHolder

Botn monostable. (Se pulsa, pero no se mantiene pulsado)


Botn Biestable. (Se mantiene pulsado y se levanta con otro click)
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
El botn se convierte en un separador de anchura fija.
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 = NombreToolbar.Buttons.add ( [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 :
Toolbar1.Buttons(Indice).Enabled = False
Para saber que botn se ha pulsado, puede leerse la propiedad Key :
Text1.Text = Button.Key

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.

LSB

Visual Basic - Gua del Estudiante

Captulo 4

Pgina 13

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 Button.Index = 1 Then . . . .
If Button.Index = 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

LSB

Visual Basic - Gua del Estudiante

Captulo 4

Pgina 14

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
(COMCTL32.OCX).
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 = Nombrebarraestado.Panels.Add.( [ndice],[key],[Text],[estilo],[grfico]

LSB

Visual Basic - Gua del Estudiante

Captulo 4

Pgina 15

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]
creacin del panel se explican a continuacin.

que entran a formar parte en la sintaxis de

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 = statusbar1.Panels(Panel.Index).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. Nmeros
3 - sbrIns
El panel muestra el estado de la tecla Insert
4 - sbrScrl
El panel muestra el estado de la tecla Scroll / Lock
5 - sbrTime
El panel muestra la hora
6 - sbrDate
El panel muestra la fecha
Grfico - Es el grfico que va a tener el panel. Este grfico puede obtenerse desde un ImageList,
ImageList1.ListImages(n).Picture - o directamente desde el disco duro, mediante el
mtodo LoadPicture - LoadPicture("C:\vb\icons\comm\net09a.ico") 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
Dim pepe As Integer

Donde deba declararse a efectos del mbito

Set PanelNuevo = statusbar1.Panels.Add(pepe, "Contenido del Key " & Str(pepe), "Texto " &
Str(pepe), , LoadPicture("C:\vb\icons\comm\net09a.ico"))
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 Internet.

LSB

Visual Basic - Gua del Estudiante

Captulo 4

Pgina 16

Visual Basic - Gua del Estudiante - Ademdum 1 al Capitulo 4


CREAR CONTROLES EN TIEMPO DE EJECUCIN

Los ademdums se fueron introduciendo una vez que la Gua del Estudiante estuvo
casi terminada. Los temas tratados en los ademdums no constituyen en s mismos
materia suficiente para un nuevo captulo, ni se acoplan lgicamente a ninguno de los
captulos escritos. Por lo tanto, se ha decidido alojarlos en captulos que no eran
demasiado gruesos, aunque el contenido de los ademdums no encaje ni por su
contenido, ni por los conocimientos anteriores. No se preocupe que algunos
ademdums no los entienda. Posiblemente estemos usando un lenguaje que no se ha
visto todava en los captulos estudiados. Los podr repasar cuando lo considere
oportuno, una vez vaya avanzando en el curso.

Desde mis comienzos en la actividad educativa de esta asignatura, los alumnos siempre me
preguntaron por la posibilidad de crear controles en tiempo de ejecucin. Supongo que exista
alguna razn que yo desconozco para ello. Y digo esto porque no he tenido la necesidad de ello en
ninguno de mis proyectos, y no han sido precisamente pocos.
Quiero decir con esto que la creacin de controles en tiempo de ejecucin es algo muy llamativo,
pero de escaso sentido prctico. Sean los alumnos los que busquen utilidad a ello, y yo me limito a
mi obligacin de enserselo.
En anteriores versiones de VB era un proceso un poco tedioso. Haba que crear una matriz de
controles y aadir en tiempo de ejecucin tantos controles nuevos a esa matriz como necesitemos.
Era complicado. Haba que meter un control y ponerle Index = 0. Se le pone la propiedad Visible
= False y ya tenemos una matriz de controles. Una matriz de un solo control, pero al tener la
propiedad Index = 0 ya era una matriz. Ya en ejecucin, se utilizada el mtodo Load para crear los
controles que necesitamos. Los nuevos elementos de la matriz tendrn todas las propiedades del
elemento inicial, es decir, las del elemnto que tienen indice 0. Al ser una matriz, todos los controles
comparten el cdigo de sus procedimientos.
Para crear por ejejmplo, varios botones de comando, introduciremos primero uno con Index = 0
cmdBotonInicial(0) y cuando queramos crear un botn nuevo, invocamos el mtodo Load.
Recuerde que el nuevo botn tendr las mismas propiedades que el objeto inicial, por lo tanto sus
mismas propiedades Left y Top. Resultado: el nuevo botn queda completamente solapado con el
inicial, por lo que habr que cambiarle de posicin y coocarlo en las coordenadas deseadas.
Una de las propiedades que no se pasan al nuevo control es la propiedad Visible. Esta siempre
comienza a False. Por lo tanto tambin hay que ponerla a True para que veamos el nuevo control.
Este podra ser un cdigo para crear un botn de comando
Load cmdBotonInicial(1)
cmdBotonInicial(1).Visible = True
cmdBotonInicial(1).Left = cmdBotonInicial(0).Left + 1000
Es un poco complicado. Se suele hacer esto para que aparezca un control justamente donde
hacemos clic con el ratn sobre el formulario. Dejo al alumno la posibilidad de jugar con este
mtodo.
Veamos un mtodo ms sencillo.

LSB

Visual Basic - Gua del Estudiante

Captulo 4

Pgina 17

Add (Mtodo de la coleccin Controls)


Agrega un control a la coleccin Controls y devuelve una referencia al mismo.
Sintaxis
Set NombredelControl = NombredelFormulario.Controls.Add (progID, name, container)
Donde:
NombredelControl
que esta
control en su

Es la referencia del nuevo control devuelta por el mtodo Add. Debe ser
una variable tipo Control declarada previamente. Le recomiendo
variable tipo objeto tenga el mismo nombre que le va a dar al
parmetro Name. Le ahorrar muchas confusiones.

NombredelFormulario

Es el formulario donde se va a meter el nuevo control. (Puede ser Me)

ProgID

Es una cadena que identifica al control. Se obtiene del Examinador de


Objetos de Visual Basic. Consiste en una cadena que indica la biblioteca
donde se encuentra, seguido del nombre que puede ver en el
analizador de Objetos, separados ambos por un punto.

citado

Name
Es el nombre que va a tener el control. Le repito lo de ms atrs. Ponga
aqu la misma cadena que en NombredelControl.
Container
Es el nombre del contenedor de ese control si es que se quiere meter
dentro de un contenedor que a su vez est dentro del formulario. Un
contenedor de controles puede ser un PictureBox o un Frame. Aqu se
pondra el nombre del ese contenedor que debe existir en el formulario.
Vamos a ver como se puede declarar una variable tipo Control. Puede hacerlo segn estos tres
ejemplos, en el primero se declara que NuevoBoton es un control, (declaracin suficientemente
vlida ya que posteriormente al crearlo, le diremos que ese control es precisamente un
CommandButton) , en la segunda ya lo declaramos como objeto CommandButton, y la tercera es
la declaracin de un Objeto TextBox:
Dim NuevoBoton As Control
Dim NuevoBoton As CommandButton
Dim NuevoTextBox As TextBox
Esta declaracin es suficiente si no va a poner cdigo en los procedimientos de ese control. El
problema es que con esa declaracin no se puede introducir cdigo. Para ello debe declararse de
otra forma:
Private WithEvents NuevoBoton As CommandButton
Mediante esta declaracin (Que debe ponerse en la seccin de declaraciones del formulario), no
solamente estamos declarando que NuevoBoton es un CommandButton, sino que tendr los
mismos eventos (WithEvents) que un CommandButton.
El cdigo para crear estos dos controles es el siguiente:
(En el ejemplo se ha puesto en el procedimiento click de un botn de comando)
Set NuevoBoton = Me.Controls.Add("VB.CommandButton", "NuevoBoton1", Picture1)
Set NuevoTextBox = Me.Controls.Add("VB.TextBox", "NuevoTextBox", Picture1)
NuevoBoton.Visible = True
NuevoBoton.Left = 100

LSB

Visual Basic - Gua del Estudiante

Captulo 4

Pgina 18

NuevoBoton.Top = 120
NuevoBoton.Caption = Soy un Botn
NuevoTextBox.Visible = True
NuevoTextBox.Left = 2000
NuevoTextBox.Top = 100
Ahora vamos a introducir el cdigo en el procedimiento Click del botn de comando. Para ello
vamos a Herramientas | Agregar Procedimiento y tecleamos el nombre del procedimiento:
NuevoBoton_Click. Continuamos escribiendo el cdigo deseado en ese nuevo procedimiento que
acabamos de crear.
MsgBox "Esto Funciona"
Ejecutamos el programa y vemos que efectivamente, una vez creado el botn, al hacer click sobre
l sale el Mensaje Box. Volvamos a ver el cdigo. Cuando introducimos un procedimiento nuevo
creado por nosotros, ese procedimiento aparece en el desplegable de la derecha de la ventana de
cdigo. En el desplegable de la parte izquierda aparecen solamente los nombres de los controles
existentes en el formulario. Pero Oh sorpresa!, el procedimiento NuevoBoton_Click no est en el
desplegable de la parte derecha. Est en la parte izquierda, y como si fuese un botn que
realmente existe en tiempo de diseo. Ya hemos introducido cdigo en el botn recin creado.
Para el TextBox no ha hecho falta declararlo con la segunda declaracin, ya que no va a contener
cdigo. Podemos cambiarle las propiedades, estre ellas su propiedad Text:
NuevoTextBox.Text = "Hola Mi Amor, yo soy tu Lobo"
Texto que aparecer en el TextBox como si se tratase de un TextBox introducido durante el diseo.
Lgicamente, si ejecutamos la linea anterior antes de crear el TextBox dar un error.
Hay formas ms complicadas de crear controles, pero creo que con esta le basta. E insisto que
nunca me he visto en la necesidad de crear controles (lo cual no demuestra nada, lo reconozco)

Quitar controles
Para quitar controles agregados dinmicamente, se utiliza el mtodo Remove. Solamente se
pueden quitar los controles agregados con el mtodo Add (a diferencia de los controles agregados
con la instruccin Load, que se quitan mediante Unload ).
El siguiente ejemplo quita el control NuevoTextBox agregado dinmicamente:
Me.Controls.Remove "NuevoTextBox"

LSB

Visual Basic - Gua del Estudiante

Captulo 4

Pgina 19

Visual Basic - Gua del Estudiante - Ademdun 2 al Capitulo 4


EL EXAMINADOR DE OBJETOS
El Examinador de objetos es una herramienta que tienen Visual Basic para ver los objetos de las
colecciones, las propiedades, mtodos y eventos de los controles, los mtodos del proyecto, las
constantes . Lo entenderemos mejor abrindolo. Para abrirlo, basta con pulsar F2

Este es el analizador de objetos. Puede ver que tienen varias partes. Comencemos por arriba.
El desplegable donde pone Todas sirve para elegir una parte de todo lo que nos puede mostrar. En
este caso est mostrando todo lo que tienen el proyecto. Si observa la figura de la pgina siguiente
ver que est desplegado, mostrando todas las referencias y controles que tienen en ese
momento. Puede ver que tienen el MSCommDlg, porque a ese proyecto le habamos introducido
el CommonDialog. Si seleccionamos ese control, nos aparecen en la ventana Classes todas las
colecciones que tiene el CommonDialog, entre ellas el propio control, que si lo seleccionamos, en
la ventana de la derecha, (Miembros) aparecern todas la propiedades, los mtodos, y los eventos
(Claro que un CommonDialog no tienen eventos, pero s aparecern si mostramos cualquier otro
control)
Si le aadimos ahora una referencia (El acceso a una base de datos mediante DAO, por ejemplo)
aparecer esa referencia en la lista desplegable.
Los controles bsicos aparecen en la referencia VB. Aparecen concretamente los controles que
figuran en la barra de herramientas al abrir un nuevo proyecto. Si aadimos ms componentes
(Haciendo clic en la barra de men Proyecto | Componentes) veremos que aparecen nuevos
controles en el desplegable.

LSB

Visual Basic - Gua del Estudiante

Captulo 4

Pgina 20

En la casilla Miembros aparecen los mtodos, procedimientos y eventos de la clase seleccionada.


Al hacer click sobre cualquiera de estas propiedades, mtodos y eventos, en la parte inferior
aparece la explicacin del elemento elegido.
Parece que es un poco complicado. Nada ms lejos de la realidad. Ver que es una herramienta
que le va a ser muy til, y que la va a comprender una vez se decida a usarla, mucho antes que el
tiempo que necesitara para lerselo en este libro. Adelante.

LSB

Visual Basic - Gua del Estudiante

Captulo 4

Pgina 21

Vous aimerez peut-être aussi