Está en la página 1de 19

Luis Lujan Avanzado

Visual Basic

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
Sistemas y Computacion LuisLu

118

Luis Lujan Visual Basic Avanzado 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. 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 coloc arlo 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 Appearance ClipControls DataField DrawWidth Enabled Fontransparent ForeColor Height LinkMode LinkTimeout Negotiate Picture ScaleWidth TabIndex WhatThisHelp Width Autoredraw DataSource FillColor HelpContextID LinkTopic ScaleHeight TabStop Autosize DragIcon FiilStyle Index MouseIcon ScaleLeft Tag Backcolor DragMode Font Left MousePointer ScaleMode Top BorderStyle DrawStile

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)

Sistemas y Computacion

LuisLu

119

Luis Lujan Avanzado

Visual Basic

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. 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 W hatThisHelp BorderStyle Height Picture Width Datafield Index Stretch DataSource Left Tag DragIcon MouseIcon Top DragMode MousePointer Visible

Un Image puede disponer de los siguientes procedimientos : Click MouseMove DblClick DragDrop MouseUp DragOver GotFocus MouseDown

PROPIEDADES DE LOS CONTROLES PictureBox e Image Align (PictureBox solamente) Permite colocar el control en el borde superior ( lign Top), en el inferior ( lign A A 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.
Sistemas y Computacion LuisLu

120

Luis Lujan Avanzado

Visual Basic

Cuando se ados a a uno de los bordes, el tamao del control se ajusta automticamente a la anchura o altura del formulario. Sintaxis NombrePictureBox.Align [= nmero] nmero Un entero que especifica cmo se presenta el control. Puede tomar los siguientes valores : (Predeterminado cuando el control se coloca en un formulario no MDI). Con este valor, el control mantiene el tamao y la posicin tiempo de diseo. (Predeterminado cuando el control se coloca en formularios MDI) El 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 a la anchura del formulario. El control se coloca en la parte izquierda del formulario y su altura es a la altura del formulario. El control se coloca en la parte derecha del formulario y su altura es igual la altura del formulario.

0-None asignada en 1-Top control 2-Bottom igual 3-Left igual 4-Right a

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 Autoredraw

(PictureBox e Image) 3D o Flat, como en otros controles (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.

Sistemas y Computacion

LuisLu

121

Luis Lujan Avanzado Autosize (PictureBox solamente)

Visual Basic

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)

Igual que otros controles

DrawMode DrawStyle DrawWidth

(PictureBox solamente) (PictureBox solamente) (PictureBox solamente) Formas de responder a los mtodos grficos. Lo ver en el captulo correspondiente (PictureBox e Image) Habilitado. Igual que otros controles.

Enabled

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. E el control Image el tamao puede n depender del grfico que se introduzca y del valor de la propiedad Stretch. HelpContextID Index (PictureBox solamente) Igual que otros controles (PictureBox e Image) Igual que otros controles (PictureBox solamente)

LinkItem, LinkMode, LinkTimeout, LinkTopic

Sistemas y Computacion

LuisLu

122

Luis Lujan Avanzado

Visual Basic 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 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 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 (Predeterminado) Forma que determine el objeto. Flecha. Cruz (puntero en forma de cruz). Forma de I. Icono (pequeo cuadrado dentro de otro cuadrado). Tamao (flecha de cuatro puntas: norte, sur, este y oeste). Tamao NE SO (flecha doble apuntando al nordeste y al sudoeste). Tamao N S (flecha doble apuntando al norte y al sur). Tamao NO SE (flecha doble apuntando al noroeste y al sudeste). Tamao O E (flecha doble apuntando al oeste y al este). Flecha hacia arriba. Reloj de arena (espera). No soltar. Flecha y reloj de arena. Flecha e interrogacin. Tamao de todo (personalizable en Microsoft Windows NT 3.51)
LuisLu

Sistemas y Computacion

123

Luis Lujan Avanzado 99 Icono personalizado anteriormente. Name (PictureBox e Image) especificado en la propiedad

Visual Basic MouseIcon explicada

Nombre del control

Picture

(PictureBox e Image) 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] Nombre del Control Expresin numrica que especifica la medida horizontal o vertical.

objeto valor

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 ScaleMod e 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)

Sistemas y Computacion

LuisLu

124

Luis Lujan Avanzado

Visual Basic 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 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 grfico. El grfico cambia su tamao para ajustarlo al del control. (Predeterminado) El control cambia su tamao para ajustarlo al del

Si Stretch tiene el valor True, al cambiar el tamao del control tambin se cambiar el del grfico q contenga. Cuando aumenta el tamao del control, mantiene las ue 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

Sistemas y Computacion

LuisLu

125

Luis Lujan Avanzado IMAGE LIST

Visual Basic

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)

Sistemas y Computacion

LuisLu

126

Luis Lujan Visual Basic Avanzado 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 Set Picture1.Picture = ImageList1.ListImages(pepe).Picture
Sistemas y Computacion LuisLu

127

Luis Lujan Avanzado

Visual Basic

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 :

Sistemas y Computacion

LuisLu

128

Luis Lujan Avanzado

Visual Basic

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.
Sistemas y Computacion LuisLu

129

Luis Lujan Avanzado El Caption (opcional) es la palabra que figurar debajo del icono del botn. Un botn se identifica por su ndice. ( Toolbar1.buttons(1) )

Visual Basic

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 click) 2 - Button Group Solo uno de los botones del grupo puede estar puls ado. 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. Botn monostable. (Se pulsa, pero no se mantiene pulsado) Botn Biestable. (Se mantiene pulsado y se levanta con otro

3 - Separator 4 - PlaceHolder

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. El control Toolbar tiene los siguientes eventos :
Sistemas y Computacion LuisLu

130

Luis Lujan Avanzado ButtonClick

Visual Basic

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

Sistemas y Computacion

LuisLu

131

Luis Lujan Visual Basic Avanzado 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] 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
Sistemas y Computacion LuisLu

132

Luis Lujan Visual Basic Avanzado 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.

Sistemas y Computacion

LuisLu

133

Luis Lujan Avanzado

Visual Basic

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 a signatura, 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.

Add (Mtodo de la coleccin Controls)


Agrega un control a la coleccin Controls y devuelve una referencia al mismo.
Sistemas y Computacion LuisLu

134

Luis Lujan Avanzado Sintaxis

Visual Basic

Set NombredelControl = NombredelFormulario.Controls.Add (progID, name, container)

Donde: NombredelControl que esta control en su NombredelFormulario ProgID biblioteca en el citado

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. Es el formulario donde se va a meter el nuevo control. (Puede ser Me) Es una cadena que identifica al control. Se obtiene del Examinador de Objetos de Visual Basic. Consiste en una cadena que indica la donde se encuentra, seguido del nombre que puede ver analizador de Objetos, separados ambos por un punto.

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 NuevoBoton.Top = 120 NuevoBoton.Caption = Soy un Botn
Sistemas y Computacion LuisLu

135

Luis Lujan Avanzado NuevoTextBox.Visible = True NuevoTextBox.Left = 2000 NuevoTextBox.Top = 100

Visual Basic

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"

Sistemas y Computacion

LuisLu

136