You are on page 1of 50

Inputs vs Eventos: Reaccionar ante una accin

Hasta ahora, en nuestros programas de "consola", las acciones de los usuarios,


las bamos controlando mediante la orden "input", donde el usuario escriba algo (por ejemplo la
opcin de un men) y el programa decida que hacer a continuacin (hacer listados, aadir registros
pidiendo mas datos, salir del programa, etc...)
En la programacin grfica, vamos a tener una serie de objetos (botones, cuadros de textos, etc),
los cuales son la forma en que el usuario se va a comunicar con la aplicacin, y mediante eventos se
recoge la accin realizada por el usuario.
Por ejemplo, un usuario hace click con el ratn sobre un botn llamado "Button1" se produce un
"evento" llamado _Click(), y se ejecuta el cdigo que tenga dicho botn asociado a ese evento:

Public Sub Button1_Click()


Print "hola"
End
Al ejecutarse "Button1_Click()", lo que se produce es una impresin en la consola de la palabra
"hola". (La consola tambin es accesible desde las aplicaciones grficas)
Como se ve, la forma de programar un evento es como si fuera una subrutina, siendo el nombre
de la subrutina formado por el nombre del objeto (Button1) seguido de un guin bajo "_" y el nombre
del evento "Click()"
Esta forma permite tambin, que dentro del mismo programa, mediante cdigo, se puedan
ejecutar estos eventos...
Public Sub Form_Open()
Button1_Click()
End
Normalmente cada objeto tiene varios eventos a los que responden, para ver los eventos que
tienen, en la pantalla grfica, se hace click con el botn derecho sobre ellos, se despliega el siguiente
men, y eligiendo la opcin de "Eventos", podemos ver todos los eventos relacionados con ese objeto:

Hay eventos que son comunes a todos los objetos, y otros no.
A continuacin se presenta una lista de los eventos ms usuales:

Evento
Click

Significado
El usuario hace una pulsacin click sobre el objeto (pulsa y suelta el boton
rapidamente)
DblClick
El usuario hace dos pulsaciones rpidas sobre el objeto
Enter
Se produce cuando entramos en el objeto con el puntero del raton
Leave
Se produce cuando sale del objeto con el puntero del raton
GotFocus
Se produce cuando el objeto consigue ser el foco del programa
LostFocus
Se produce cuando el objeto pierde el foco del programa
Drag/Drog Eventos relacionados con coger y soltar
KeyPress
Se produce cuando estamos en el objeto (tenemos el foco en el) y se pulsa una tecla.
Para saber que tecla se ha pulsado se usa key.code, el cual nos da el numero ASCII de
la tecla pulsada.
MouseDown Si se pulsa el boton del raton
MouseUp
Si se suelta el boton del raton.
MouseMove Si esta pulsado el boton del raton, y lo movemos dentro del objeto se produce este
evento. Se pueden obtener las coordenadas del raton, con mouse.x y mouse.y

Formularios y Cajas de Herramientas (1)


Para hacer un programa grfico, usaremos (ademas de clases y/o mdulos) tambin formularios.
En el Ide de gambas, para crear una aplicacin grfica, siguirmos los pasos del ejemplo hola mundo
usando un formulario.

Siguiendo los pasos del ejemplo, se llegara a la siguiente pantalla:

fig 1: detalle del editor de gambas3


En el punto (4) de la figura 1, podemos ver el formulario, que podemos cambiar de tamao,
pulsando en los cuadros blancos que aparecen al borde.
Las dimensiones del formulario tambin se pueden cambiar mediante cdigo, haz doble click en
el formulario (cambiaremos de la pestaa "FMain.form" a "Fmain.class", y aparecera esta pantalla,
donde podemos escribir el siguiente cdigo:

"Me" se refiere el objeto actual (que es nuestro formulario Fmain), y las propiedades width y height
(ancho y largo), le podemos dar valores para que cuando se ejecute, el formulario cuando se abra tenga
las dimensiones especificadas. Para ejecutarlo se pulsa sobre el botn indicado.

Ademas de las dos formas explicadas, hay una tercera, que es usando el panel de propiedades (punto 1
de la figura 1), donde podemos buscar la propiedad y cambiar su valor:

Como vemos el Ide de gambas, nos da la ayuda de la propiedad que estemos editando. (punto 2 de la
figura 1)
Nota:
La pestaa "jerarqua" nos sirve cuando aadamos varios objetos en un formulario, se puedan ordenar
para cuando pulsemos la tecla "Tab", "salten" de uno a otro segn nuestros criterio.

Pasamos a explicar el cuadro de herramientas: (punto 3 de la figura 1).


Aqui tenemos varias pestaas, con distintos botones:

Controles: Label, listbox, picturebox, progresbar, combobox, texbox,


etc...

Controles: listView, treeView, ColumView, DirView, FileView, GridView, TableView,


IconView

Diversos cuadros de dilogos estndares: colores, calendario, ficheros, carpetas, tipos de


letra

DrawArea (para dibujar) y distintos contenedores para organizar los


controles

Controles especiales: timer, printer embedder,


TryIcon
El contenido de estas pestaas puede aumentar si tenemos mas componentes aadidos al proyecto
(menu Proyecto/Propiedades/Componentes)
Para aadir un control a nuestro formulario, simplemente tenemos que "seleccionarlo" y
"arrastrarlo"

Para terminar, con esta introduccin a los formularios, se pueden aadir tantos formularios
como se necesiten (incluso podemos reutilizar formularios de otros proyectos), todo ello desde la

ventana del Proyecto (tecla F10) donde haciendo click en "Fuente", y Formulario podemos aadir
nuevos formularios o existentes

Para aadir nuevo formulario, elegimos la pestaa "Nuevo" y si es para aadir uno existente la
pestaa "Existente"

Pestaa Nueva (crear formulario vacio) y Existente (aadir formulario ya


creado)

Propiedades, Mtodos y Eventos de los controles


Todos los controles son clases y tienen:
Propiedades: definen valores de los controles.
Muchas clases tienen propiedades con el mismo nombre, que se usan para lo mismo.
La propiedad .Name: designa el nombre del control. Normalmente Gambas los va enumerando.
Pero esto nos dificultar trabajar con ellos. Por lo que se debe de sustituir por un nombre que
describa para que sirve.
Ejemplo:
Creamos un nuevo textbox, en un formulario, y el nombre inicial que nos pone gambas es
TextBox1. Hay que renombrarlo y ponerle algo que describa su funcin, en la propiedad .name
escribiremos "TextBoxNombre", esta se hace en la parte de propiedades del control en el IDE:

Luego para trabajar con el control en el cdigo fuente simplemente usaremos TextBoxNombre
algo que nos facilitar mucho el trabajo de que es lo que contiene o ir a contener dicho control.

La propiedad .X designa cual es la posicin en el eje X de la esquina superior del control.


La propiedad .Visible define si se ve el control o no
La propiedad .Enabled define si el control esta activado para su uso o no.
La propiedad .tag, es una propiedad muy interesante, ya que permite guardar informacin que

el programador estime necesario. Esta informacin puede ser del tipo variant (osea puede
contener cualquier tipo de datos: nmeros, textos, objetos, o otro variant)
La propiedad .tooltip: define el texto que se mostrar al pasar por el control y pararse un
momento en l. El ideal para mostrar informacin de lo que hace el control.
La propiedad .Background: define el color de fondo del control
La propiedad .ForeGround: define el color de la letra del control.
La propiedad .Alignment: define la alineacin del texto que tendr el control

Mtodos:
Son las funciones que tiene la clase (y el objeto instanciado de esa clase). El nombre y tarea que
hagan depende mucho del tipo clase que estemos usando. Tendris que ver la documentacin oficial
para tener ms detalles del mtodo en concreto para ver su funcionamiento en el control.
Algunos mtodos:
.Show(): muestra el control en tiempo de ejecucin.
.SetFocus(): hace que el foco del programa se asigne al control.
.Refresh(): redibuja el control. Para "forzar" el redibujo inmediato, hay que usar la orden Wait para que
se produza ,
Eventos:
Son las acciones que realiza el usuario sobre el control.
_Change(): se produce cuando hay un cambio (cambia el valor de una propiedad, por ejemplo)
_Click: se produce cuando el usuario hace un click del ratn dentro del control
_DblClick: se produce cuando un usuario hace doble click del ratn dentro del control.
_KeyPress: se produce cuando un usuario pulsa una tecla
_Enter: se produce cuando el puntero del ratn entra en el control
_Leave: se produce cuando el puntero del ratn sale en el control
_Lostfocus: se produce cuando el foco del programa lo pierde el control.
_gotFocus: se produce cuando el foco del programa lo adquiere el control.
_MouseDown(): se produce cuando el ratn esta dentro del control, y se pulsa el botn izquierdo del
ratn.
_MouseUp(): se produce cuando el ratn esta dentro del control, y se suelta el botn izquierdo del
ratn.
_MouseWheel: se produce cuando la rueda del raton se mueve o se pulsa.
_MouseMove: se produce cuando el ratn esta con el botn izquierdo pulsado y el puntero se mueve
dentro del control.
Por ejemplo: Evento Click, vemos los pasos que se producen:

1) El usuario hace click sobre un botn.


2) Este evento llama a la subrutina asociada al evento: "sub Boton1_click()"
3) Se ejecuta el cdigo contenido en la subruitna.
Nota:
El programador puede hacer llamar a la subrutina asociada al evento de un control, simplemente
llamndolo como si fuera una rutinaria normal.
En el siguiente captura de pantalla se puede ver como se organiza la ayuda en gambaswiki
(antiguo gambasdoc) de los controles:

http://gambaswiki.org/wiki/comp/gb.qt4/textarea

Resumen Controles y Contenedores


Resumen de controles
Classes, Boxes
and Widgets
Balloon

Exhibe un mensaje y un icono opcional dentro de un globo


amarillo.

ButtonBox

Un control compuesto incluyendo un TextBox y adems un


pequeo botn.

ColorButton

Permite que el usuario seleccione un color.

Un selector del color que permite que el usuario seleccione un


ColorChooser color de sus valores del RGB, valores de HSV, o de un sistema
predefinido de colores.
DateBox

Este control permite corregir un valor de la fecha. Proporciona un


pequeo botn que exhiba una ventana emergente del calendario.

DateChooser

Para elegir fecha, permite que el usuario elija una fecha dentro de
un calendario.

DirChooser

Este control permite que el usuario seleccione un directorio.

DirView

Este control permite que el usuario seleccione un directorio. Un


TreeView que exhibe un directorio y sus directorios de nio.

FileChooser

Este control permite que el usuario seleccione un fichero, o una


lista de ficheros en el mismo directorio.

FileView

FontChooser

Este control exhibe los ficheros situados en un directorio, mostrado


como iconos o en una visin detallada.
Permite que el usuario seleccione una fuente (tipo de letra)

IconView

Ejecuta un control que exhiba artculos del icono.

InputBox

Un cuadro de dilogo simple de la entrada.

MaskBox

Este control ejecuta un campo editable enmascarado.

MenuButton
Message
ScrollArea
Stock
TableView
ValueBox

Este control es un botn con una pequea flecha a la derecha que


exhibe un men mvil asociado.
Genera un formulario con un mensaje
Un DrawingArea con barras de desplazamiento (scroll)
Esta clase se utiliza para volver iconos predefinidos.
Un GridView editable. Utilice el mtodo del corregir; este mtodo
se debe llamar durante el evento click.
Un TextBox aumentado que permite que el usuario incorpore un
valor formatado.

Gambas
Containers
Expander

Es un contenedor que puede encogerse para ocultar su contenido y


expandirrse cuando pulsemos al icono triangular que aparece

IconPanel

Un multi-contenedor que utiliza un IconView para exhibir sus


diversas etiquetas.

ListContainer

Un ListBox especial pensado para los controles inalterables,


solamente.

SidePanel

Un contenedor que puede ser ocultado o ser vuelto a clasificar


segn el tamao.

ToolPanel

Una caja de herramientas con los paneles verticales scrollable


mltiples de la barra de herramientas.

Wizard

Un multi-contenedor que proporciona un interfaz wizard (tipico


formulario de atras-siguiente)

Qt4: gb.qt4 and


gb.qt4.ext
controls see
also gb.gtk.
Classes, Boxes
and Widgets
Button
Checkbox
ColumnView
ComboBox

Esta clase ejecuta un control de botn.


Ejecuta una control-caja, eso puede ser comprobada o
desenfrenado.
Ejecuta un control que exhiba un TreeView con las columnas.
Ejecuta un cuadro de texto combinado con un cuadro de lista
mvil.

Dial

Un control redondo de la gama, como un potencimetro.

DrawingArea

Un rea que se puede dibujar por el uso.

Editor

Un editor de texto con el sintaxis que destaca la ayuda.

GridView

Exhibe datos en una rejilla (como una hoja de calculo)

Highlight

Esta clase se utiliza para ejecutar destacar de encargo del sintaxis.

LCDlabel

Este control exhibe un nmero y letras como si fuera una pantalla


LCD (de segmentos)

Label

Una etiqueta que muestra un texto.

ListBox

Una etiqueta que muestra un texto.

ListView

Ejecuta una lista de artculos a eleccin del texto con los iconos.

Menu
Message

Esta clase representa un men mvil, o un elemento de un men


mvil.
Esta clase se utiliza para exhibir los cuadros de mensaje. (No un
elemento de un formulario)

MovieBox

Proporciona un control que exhiba imgenes animadas del GIF o


de MNG.

ProgressBar

Un control de la barra de progreso.

RadioButton

Un control del botn de opcin. Si comparte a padres, solamente


uno puede ser seleccionado al mismo tiempo.

ScrollBar

Provee de una barra de desplazamiento la gama definida por el


usuario.

Separator

Una lnea del separador.

Slider

Un resbalador vertical u horizontal, para el control de usuario de


un valor limitado.

SpinBox

Un aparato de la caja de vuelta que permite que el usuario elija un


valor entero con los botones arriba/abajos, o mecanografiando el
valor directamente en la caja de vuelta.

TextArea

Un control para edigtar texto multilnea

TextBox

Una sola lnea texto corrige control.

TextEdit

Esto ejecuta un redactor del rico-texto

TextLabel

Un control que exhibe el texto simple del HTML, segn lo


conocido como texto rico.

ToggleButton
ToolButton
TreeView

Un botn de palanca.
Un botn de la barra de herramientas, que exhibe su borde
solamente cuando el ratn incorpora el control.
Una vista de rbol de los artculos a eleccin del texto con los
iconos, puesta en un ndice una llave y exhibiendo una secuencia y
un icono para cada artculo.

Qt4/GTK
Containers
Frame

Es un contenedor con borde y etiqueta

Hbox

Es un contenedor que ordena los hijos (controles que contenga)


horizontalmente

Hpanel

Es un contenedor que ordena los hijos de arriba y abajo y luego de


izquierda a derecha

Hsplit

Ejecuta un divisor horizontal que permita que el usuario los vuelva


a clasificar segn el tamao arrastrando el lmite entre ellos.

Panel

Ejecuta un control contenedor con una borde cambiable.

PictureBox

Un control que exhibe una imagen.

ScrollView

Es un contenedor que muestra scroll en su contendido

TabPanel

Es similar a un TabStrip que utiliza las bodes finos

TabStrip

Un control contenedor con pestaas.

Vbox

Es un contenedor que ordena los hijos (controles que contenga)


verticalmente

Vpanel

Es un contenedor que ordena los hijos de la izquierda a derecha y


lugo de arriba y abajo

Vsplit

Ejecuta un divisor vertical que permita que el usuario los vuelva a


clasificar segn el tamao arrastrando el lmite entre ellos.

CONTROLES BASICOS
Controles: Escribir en el formulario (Label, TextLabel, LCDlabel)
Con

estos

controles

seremos

capaces

de

escribir

anotaciones

en

los

formularios.

Label: Usualmente se combina con los textbox para indicar que informacin debe de
introducir el usuario en el textbox, se usa a modo de etiqueta. La propiedad que se usa es el .text, para
escribir el texto que aparecer.
TextLabel: El textlabel admite cdigo en html, con lo cual podemos escribir en colores,
tamao de letras, y otros efectos.
LCDlabel / LCDNumbrer:
pantalla LCD (de segmentos).

Este control exhibe un nmero y letras como si fuera una

En el siguiente ejemplo vamos a crear un formulario con 3 controles: un label, un textlabel y un


lcdlabel

Al ejecutarlo la aplicacin obtenemos lo siguiente:

Controles: Recibir datos del usuario (textbox,TextArea,ValueBox, etc)

Textbox: Permite la entrada de texto por parte del usuario, incluso se puede editar el texto
introducido.
Nota: Tambin permite la entrada de nmeros, pero se tendrn que convertir en nmeros con la
funcin Val() pero puede dar problemas al intentar convertir texto en nmeros. Para introducir nmeros
es mejor usar el control valueBox

TextEdit: Es textbox avanzado, que permite la edicin de texto rico (formateado) para
ello, el contenido rico en formato, lo asignamos a la propiedad .richtext

TextArea: Es un editor que permite mltiples lineas. Los textbox, solo te permiten editar
una linea. Si tienes un texto con varios retornos de carros, no los puedes editar con un textbox. Para
este caso usamos el TextArea, con la propiedad .warp con valor true.

ValueBox: permite la entrada de solo nmeros

MaskBox: Este control permite la entrada de datos pero mediante una mscara, con lo cual
forzamos a que escriba el usuario los datos de una determinada manera. Para definir la mscara
usaremos la propiedad .mask

DataBox: nos sirve para introducir fecha, mediante un pequeo calendario.

ButtonBox: es una mezcla entre textbox y un botn. El uso que tiene es poder abrir cuadros
de dialogos o otros formularios, para asignarle valores.
Ejemplo: En este ejemplo vemos los Box colocados en un formulario:

Esto es lo que aparece una vez se ejecuta la aplicacin.

Los Box, son editables, y el usuario puede modificar/borrar o aadir nuevo contenido en cada uno de
ellos

Controles: Botones
Estos controles son los habituales botones usados para aceptar, cancelar o hacer cualquier operacin.
Para la configuracin del botn se usan varias propiedades:
.text : texto que tendr el botn
.picture: icono que llevar el botn
Para indicar que es lo que tiene que hacer el programa cuando se pulsa el botn se usa el evento _Click.
Dentro de este evento indicaremos el cdigo que se ejecutar.

Button: Esta clase ejecuta un control de botn.

ToggleButton: Un botn de palanca.

ToolButton: Un botn de la barra de herramientas, que exhibe su borde solamente cuando


el ratn incorpora el control.

ButtonBox: Un control compuesto incluyendo un TextBox y adems un pequeo botn.


( ejemplo en http://cursogambas.blogspot.com.es/2014/04/controles-recibir-datos-del-usuario.html )

ColorButton: Permite que el usuario seleccione un color.

MenuButton: Este control es un botn con una pequea flecha a la derecha que exhibe un
men mvil asociado.

Ejemplo sobre estos botones:

Captura de Aplicacin ejecutndose:

Controles Checkbox, SpinBox y RadioBotton.

Checkbox: Muestra una caja de control que puede ser activada o desactivada. El estado
del checkbox, se almacena en la propiedad .value. Un .value=TRUE significa que esta activada, y un
.value=False significa que esta desactivada.
SpinBox: Este control permite que el usuario elija un valor entero con los botones
arriba/abajos, o mecanografiando el valor directamente en la caja de vuelta.
Tendremos que usar 4 propiedades para definirlo:

.MaxValue: valor mximo que admite el spinbox


.MinValue: valor mnimo que admite el spinbox
.Step: nmero que se sumar o se restar (segn el botoncito pulsado), al valor que se est mostrando
.Value: contiene el nmero que el usuario a introducido.

RadioButton: Es un control donde podemos seleccionar una opcin, entre varias.


Si esta en el mismo contenedor, solo nos dejar seleccionar uno. Si quieres seleccionara varias
opciones, tienes que meterlos en contenedores distintos.
A continuacin un ejemplo: Comprar Lote de Ordenador
Vamos a crear un formulario donde el cliente pueda hacer lo siguiente
Tienes que dar las siguientes opciones del ordenador:
Si va ha llevar CPU y/O Memoria
La Cpu podr elegir entre I3, I5, I7
La Memoria podr elegir entre: 1 GB, 2 GB , 4 GB y 8 GB
Tambien hay que indicar como es la forma de pago: Metlico o Tarjeta.
Y finalmente poner el nmero de equipos que se van ha comprar
El programa al pulsar un botn genera un mensaje en un textlabel con todas las opciones elegidas.
como sera el formulario?.

Es muy importante usar la propiedad .name para poner un nombre identificativo a cada control
Este seria el codigo fuente, que segn lo que elijamos al pulsar "Hacer Pedido", genera en el Textlabel
el texto del pedido:

Esta es la aplicacin ejecutndose, cuando hemos elegido varias opciones, n de equipos y checkbox ,
habiendo pulsado el boton Hacer Pedido:

ListBox, ListView, ComboBox


ListBox: Le permite al usuario seleccionar (uno o varios) datos de una lista. Para asignar
los valores (item) que podr seleccionar el usuario, se usa el mtodo .add:
Sub Add ( Text As String [ , Index As Integer ] )
Ejemplo:
listboxPlatos.add("Patatas fritas con huevos")
http://gambaswiki.org/wiki/comp/gb.qt4/listbox/add
Para poder indicar al control que se pueden seleccionar varios valores de la lista se usa la propiedad
.mode, que le asignaremos la siguiente variable:
select.Mulitple: te permite seleccionar varios valores
select.None: no te permite seleccionar nada
select.simple: solo te permite seleccionar un valor

Ejemplo:
ListboxPlatos.mode=select.multiple
De esta forma en el listbox llamado ListboxPlatos, se pueden seleccionar varios item.

ListView: Es igual que un listbox, pero se le puede indicar un icono a cada item de la
lista.
Para ello el mtodo .add pide ms datos:
Function Add ( Key As String, Text As String [ , Picture As Picture, After As
String ] )
Explicacin de los parmetros de la funcin:
Key: es la "llave" que identifica univocamente el registro
Text: texto que aparecer
Picture: icono que aparece (opcional, si no se pone no aparece ningun icono)
After: indica despues del item donde se inserta el nuevo idem (opcional, sino se pone, se aade al final
de la lista.)

ComboBox: Es un cuadro de texto combinado con un cuadro de lista mvil.


El textbox que aparece en el combobox, puede ser editable o de solo lectura. Para ello hay que definir
el valor de la propiedad .readonly
Si es igual a true, solo ser de lectura, y si es igual a False, nos permite modificar el textbox del
combobox.
Ejemplo:
Tenemos en un formulario donde podemos:
Elegir varios platos a servir (se pueden seleccionar ms de uno) (teclas Ctrl + click del ratn)
Indicar si se van a servir en el desayuno, almuerzo, merienda o la cena (solo se puede seleccionar uno)
Indicar que persona (o nueva persona) que se encarga de hacerlo.
Cuando se pulse el botn "Genera Informe", se usa un textArea, para mostrar toda la informacin que
se ha seleccionado.

Formulario: disposicin de controles

Programa Ejecutndose

Controles: ScrollBar, Slider, Progressbar y Dial

ScrollBar: Provee de una barra de desplazamiento la gama definida por el usuario. En


muchos controles ya esta intregrado.
Con la propiedad .value indicamos el valor de la posicin de la barra.
Tenemos que definir para usarlo:
.minvalue: valor minino donde empieza a valor del scrollbar
.maxvalue: valor maximo hasta donde llegar el valor del scrollbar
.step: valor del paso que aumentar o disminuir la barrrita en el caso de hacer click en los botones
laterales.

Slider: Un resbalador vertical u horizontal, para el control de usuario de un valor limitado.


Basicamente es lo mismo que un ScrollBar.

ProgressBar: Un control de la barra de progreso. Nos sirve para mostrar el estado de una
tarea, por ejemplo descargando un archivo nos muestra que porcentaje llevamos.
La propiedad que usaremos es .value, que estar entre 0 y 1.
Por ejemplo para que marque el 80% de una tarea, debemos darle el valor de 0.80
progressbar1.value=0.8

Dial: Marcador circular que va desde el 1 al 100


Ejemplo de estos controles:
Al mover el slider, se mover la barra de progreso. Los ScrollVertical y Horizontal y el Dial, al
moverlos se muestran sus valores.

Aplicacin ejecutandose:

Controles Especiales: Timer


Timer:
El control Timer es un control especial, ya que lo nico que hace es producir el evento _Timer
cada cierto periodo de tiempo. Podemos tener varios controles timer a la vez activos, para hacer
distintas cosas a la vez.
Las propiedades que tiene son:
Propiedades:
.delay: indicamos el periodo en el que se producira el evento _Time en milisegundos. 1 segundo es
1000 milisegundos
Mtodos:
.star(): empieza a contar el tiempo y a producir el evento _Timer
.stop(): se para el control y ya no deja de producir eventos _Timer
Evento:
_Timer(): en este evento pondremos el cdigo que se tendr que ejecutar.
A continuacin un ejemplo:
En este ejemplo vamos a usar 2 timer:
- uno para hacer una animacin: es un picturebox que se desplace por la pantalla y que cuando llegue al
borde rebote y cambie de direccin

- otro para que haga un reclculo cada 1 segundo, usando la operacin indicada por un combobox, entre
los valores de 2 valuebox, y que presente el resultado en otro valuebox. Adems mostrar un mensaje
de la operacin que ha realizada.

Aplicacin ejecutndose:

Contenedores y Organizadores
Los contenedores y organizadores son controles que nos ayudan a organizar dentro de ellos los
controles que contengan(llamados hijos) y adems tambin admiten otros contenedores dentro de el
mismo (tambin llamado hijos)

Contenedores:

Panel: es el contenedor ms simple


Frame: Es un contenedor con borde (panel) y etiqueta. La etiqueta la definimos en la
propiedad .text
TabStrip: Un control contenedor con pestaas.
Propiedades:
.count: Una propiedad muy importante ya que indica el numero de pestaas que va a tener el
Tabstrip.
.text: El nombre de la pestaa se lo asignamos a la propiedad
.picture: podemos poner un icono en la pestaa, indicandoselo en esta propiedad
.orientation: las pestaas pueden tener varias orientaciones (normalmente la veremos arriba "top")
TabPanel: Es similar a un TabStrip que utiliza las bodes finos
ScrollView: es un panel pero aadido dos scrollview. Es usado para por ejemplo ver
fotografias de grandes dimensiones.
Hsplit: divide el panel en partes de forma Horizontal. Esta divisin la podemos desplazar
para aumentar la visibilidad de unos de los subpaneles. Por cada control aadido dentro del split, se
produce una divisin. Lo normal es usar otro contenedores dentro del Hsplit y asi organizar formularios
con gran nmero de controles
Vsplit: divide el panel en dos partes de forma Vertical. Esta divisin la podemos desplazar
para aumentar la visibilidad de unos de los subpaneles

Organizadores:

Hbox: es un contenedor que ordena los controles que contenga horizontalmente. Si los
anchos de los controles "hijos" (contenidos) es mayor al ancho del Hbox, no se veran.
La propiedad .autoresize=true hace que cambie de tamao (en el caso del HBox modifica el ancho),
para que quepan todos los controles que tenga dentro.
Hpanel: es muy parecido al HBox, pero con la ventaja de que si los controles contenidos
supera el ancho, se van creando filas para que los controles se coloquen, lo cual permite que se vean
todos los controles hasta superar el alto del Hpanel.
Vbox: Es un contenedor que ordena los hijos (controles que contenga) verticalmente (de
arriba a abajo)
Vpanel: igual que el Hpanel, pero empieza de arriba a abajo, y luego va creando columnas
de controles.
Ejemplo: Para que ver su uso tenemos este ejemplo

Formulario en el Ide: usando diversos


contenedores

Formulario en ejecucin
Como se ve los controles que estn dentro de los contenedores, a la hora de ejecutarse se organizan
segn el tipo de contenedor (Hbox, Hpanel, HSplit)

Contenedores y Organizadores II
Expander:
Es un contenedor que puede encogerse para ocultar su contenido y
expandirse cuando pulsemos al icono triangular que aparece. Su tamao es fijo, y la pestaa del
expander (triangulito) siempre aparece en el mismo lugar

SidePanel: Un contenedor que puede ser ocultado o ser vuelto a clasificar segn el
tamao. Se puede modificar el tamao como un Hsplit y la pestaa (dos triangulos), cambia de posicin
al esta extendido o no.
ListContainer: Un ListBox especial pensado para los controles inalterables, solamente.

ToolPanel: Una caja de herramientas con los paneles verticales scrollable mltiples de la
barra de herramientas.

IconPanel: Un multi-contenedor que utiliza un IconView para exhibir sus diversas


etiquetas. (paredido a un TabStrip). En la propiedad .Count definiremos el nmero de pestaas y con
.picture el icono que llevar al lado la propiedad .text. El tamao de la imagenes los .pictures tienen
que ser todas de la misma dimensin (no puedes mezclar iconos de 32x32 con iconos de 128x128, se
vern mal).

Wizard: Un multi-contenedor que proporciona un interfaz wizard (tipico formulario de


atras-siguiente)
Ejemplo con estos contenedores:

Controles para mostrar Archivos y Carpetas

DirView
Este control permite que el usuario seleccione un directorio. Un TreeView que exhibe un
directorio y sus directorios de nio.

DirChooser
Este control permite que el usuario seleccione un directorio. Da ms opciones que el DirView, ya que
permite mostrar archivos, archivos ocultos, previsualizar, etc.

FileChooser

Este control permite que el usuario seleccione un fichero, o una


lista de ficheros en el mismo directorio.

FileView

Este control exhibe los ficheros situados en un directorio, mostrado


como iconos o en una visin detallada.

IconView

Ejecuta un control que exhiba artculos del icono.

En los DirChooser y FileChooser, la propiedad ,SelectedPatch contiene la informacin de lo


seleccionado (en el Dirchoose la ruta del directorio y en el FileChooser la ruta y nombre del fichero).
Ejemplo: Lo que hace es que cuando selecionamos un directorio o un fichero, lo muestra en las
etiquetas (las label)

Componentes GridView y TableView


GridView: Exhibe datos en una rejilla (como una hoja de calculo)

TableView: Un GridView mejorado ya que permite editar los datos que se muestren.
Utilice el mtodo del corregir; este mtodo se debe llamar durante el evento click.

Propiedades importantes:
.Columns.Count: define el nmero de columnas que hay en la rejilla
.Rows.Count: define el nmero de filas que hay en el rejilla
.Columns.Width: define el ancho
.Rows[X].Height: define el alto que tendr la fila X
.text: Para poder asignar valores a las celdas de una rejilla, lo hacemos como si fuera un array de 2
dimensiones. Por ejemplo si tenemos un gridview, llamado RejillaDatosPersonales, vamos a asignarles
valores:
RejillaDatosPersonales[0,0].text="Juan" ' asignamos a la celda "A1" (primera fila y primera columna
en el margen izquierdo superior de la rejilla), el valor del texto "Juan".
Tambin podemos asignar alineaciones e iconos:
RejillaDatosPersonales[0,0].Alignment = Align.Right 'el contenido lo pone justificado a la derecha
RejillaDatosPersonales[0,0].Picture=picture["persona.png"] ' asigna una imagen llamada
"persona.png", que aparecer en la celda A1.
Hay que tener en cuenta que el ancho y alto de la celda se vern modificados por las dimensiones de la
imagen. Normalmente se aaden iconos que tengan las mismas dimensiones.
Puedes usar este programa que genera el cdigo necesario para definir un gridview (y tableview).

Es muy frecuente usar Gridview para mostrar los resultados de consultas de bases de datos.
Veremos un ejemplo de uso del evento _data para rellenar los datos cuando estos son muchos ya que
los presenta muy rpidamente y es la forma ptima.

Edicin de celdas:
Si queremos que el usuario pueda editar en la misma rejilla los datos, tenemos que usar el control
TableView, que permite hacerlo.
Para ello usamos el mtodo .Edit:
Si lo usamos sin parmetros lo editamos con un textbox.
TableViewDatos.edit '---> editar en textbox
Si le pasamos dos parmetros, uno un array de string y otro parametro que es un boolean para

indicarle si es solo lectura (valor True) o se puede escribir (valor False) , nos aparece un
combobox:
TableViewDatos.edit(TablaOpciones, True)
y el evento _Save para guardar lo editado:
1. Public Sub TableViewDatos_Save(Row As Integer, Column As Integer, Value As String)

2.
3.

'guardamos el valor cambiado en la celda


TableViewDatos[row, column].Text = Value

4. End Sub

Ejemplo Gridviews y Tableviews:


En este ejemplo se definen un gridviews y un tableview, el tableview, podemos editarlo, en la primera
columna nos aparecer un combobox de solo lectura y en el resto de columna un textbox, donde
podemos cambiar el texto

Otro Ejemplo:
Esta vez vamos a mostrar el resultado de una consulta de una base de datos, pero vamos a rellenar el
gridview con el evento _data (que es mucho ms eficiente que rellenarlo para resultados con muchas
filas).
Mas concretamente, el programa crea una base de datos sqlite con una tabla con 10.000 registros y los
muestras en un gridview.

Nota:
Una mejora del cdigo es poner en el evento data que se coloree la linea segn sea par o impar:
1. Public Sub GridView1_Data(Row As Integer, Column As Integer)

2.
3.
4.

$res.moveTo(row)
If row Mod 2 = 0 Then gridview1.Data.Background = Color.RGB(68, 186, 199)
GridView1.Data.text = Str($res[GridView1.Columns[column].text])

5. End

Coloreando las filas segn sea par o impar

ColumView y TreeView
TreeView: Una vista en forma de rbol de datos, pudiendo aadir iconos, lleva un valor
nico para indentificar cada dato (key)
Propiedades:
.Current: retorna el dato "actual", el que tiene el foco o el que esta seleccionado (si el modo de
seleccin en nico)
.Current.key: retorna la llave (key) del dato "actual"
.Selection: devuelve un array de cadenas con las llaves (keys) que los elementos seleccionados.
.item: retorna el cursor interno, o Null si el cursor interno no esta disponible.
Mtodos:
.add: Se usa el mtodo .add para aadir un dato, de la siguiente forma:
Function Add ( Key As String, Text As String [ , Picture As Picture, Parent As String, After
As String ] ) As _TreeView_Item
Siendo:
Key: id del nuevo dato
Text: texto del nuevo dato
Picture: icono del nuevo dato (si no se indica no se dibuja nada)
Parent: id del "padre" del que cuelga el dato, si no se pone nada se pone en el elemento raiz (root)
After: indica el id del "hermano" donde se pondr el nuevo dato. El hermano debe de tener el mismo

"padre", y si no se indica, se pone al final de los "hijos" del "padre" indicado


Para movernos dentro del control tenemos los siguientes mtodos.
.movechild(): mueve el cursor interno al primer nodo hijo. Devuelve True si no hay item hijo.
.moveparent(): mueve el cursor itnerno al nodo padre. Devuelve True si no hay padre (estariamos en el
nodo root)
.moveFist: mueve el cursor interno al item primero
.moveLast: mueve el cursor interno al item ultimo
.moveNext: mueve el cursor interno al item siguiente
.movePrevious: mueve el cursor interno al item anterior
.moveTo(key): mueve el cursor interno al item especificado por su llave (Key). Si no lo encuentra
devuelve True.
.remove(key): borra un item del arbol, indicando su llave (key)

ColumView: Es un control treeView pero implementando columnas


Propiedades:
.columns.count: indicas el numero de columnas
Ejemplos de como obtener datos:
Dim cv as new columnView
cv.columns.count=5 'tiene 5 columnas
....
valorCelda=cv[KEY][columna]
'Ver valor de la fila actual y primera columna
valorCelda=cv[cv.current.key][0]
Ejemplo:
Se trata de mostrar una baraja espaola, los distintos reyes y caballos, con sus palos y valor.
Al hacer click, nos muestra los datos del item seleccionado.

Controles grficos: PictureBox, ImageView y MovieBox


PictureBox: Un control que exhibe una imagen.
Algunas de sus propiedades principales son:
.picture: carga un objecto picture y lo muestra.
Ejemplo:
Tenemos un control Picturebox, llamado FotoCarnet, para que muestre el archivo
"imagen.png", lo hacemos de la siguiente forma:
FotoCarnet.picture=picture.load("imagen.png") ' carga usando mtodo load() de la clase picture
Tambin se puede usar esta otra forma:
FotoCarnet.picture=picture["imagen.png"] 'carga usando como si fuera un array de imagenes
Nota:
La ventaja que tiene esta ltima forma, es que es mucho ms rpida. Pero si la imagen
original del disco duro ha cambiado, no se vera modificado en el programa. Entonces hay
que usar la primera forma (.load)

.stretch: la imagen se va a mostrar adaptada a las dimensiones del control (puede verse deformada)

ImageView: Es un control que nos permite ver una imagen, pero tienes una barras de
scroll para ver la imagen
.image: en esta propiedad definimos la imagen que queremos que se carge en el control.
.zoom: define el nivel de zoom de la imagen: 1 es 100%, 2 es 200%, 0.50 es 50%.

MovieBox: Proporciona un control que exhiba imgenes animadas del GIF o de MNG.
Propiedades principales:
.path: definimos donde esta la ruta y el nombre del fichero .Gif o .Mng
.playing: ponemos en marcha la imagen animada o la paramos. (tambien nos sirve si esta parada o
moviendose)
Ejemplo:
En este ejemplo se puede ver un picturebox cuya imagen que tiene asignada es mayor que sus
dimensiones,y con un checkbox activo la propiedad .strech para que la imagen se adapte a las
dimensiones del picturebox. Tambien se muestra una animacin .gif, que pulsando un toggleButton se
ejecuta o para la animacin.

Aplicacin ejecutandose:

Crear Controles mediante cdigo


Algunas veces es necesario crear controles en tiempo de ejecucin, porque desconocemos
apriori cuantos nos van ha hacer falta. Para ello usamos el contructor del objeto que queramos crear,
mediante la siguiente sentencia:
ObjetoTipoNuevo= New ObjetoTipo (contenedor) as "Nombre_Observador_de_Eventos"
Ejemplo:
Imaginemonos que tenemos un juego donde, se necesita crear unas imgenes en tiempo de ejecucin de
los objetos que va seleccionando el personaje.
El principio empieza sin ningn objeto, luego va seleccionando objetos y los tiene que ir mostrando.
Bien
para
mostrarlos
crearemos
un
array
de
controles
PictureBox.
Cada vez que se seleccione un objeto, se crear un pictureboxtemporal, con los datos del objeto
recogido, y se le aade al array, para que se muestren:
La forma genrica seria:
hPictureBox = New PictureBox ( Parent As Container ) As "event name"
Se tiene que indicar donde va a estar el contenido y el nombre del observador que tiene asociado.
Ejemplo:

Nota:
Mochila es un control contenedor, por ejemplo un HPanel
ObjetosEnMochilas: es el observador que cuando se produzca un evento se ejecutar el cdigo (por
ejemplo _click)
Es muy importante usar la propiedad .tag de los nuevos objetos, para aadir informacin del objeto, y
luego usarlo mediante la orden Last.Tag (vease: http://gambaswiki.org/wiki/lang/last?l=es )
Nota2:
Se podra crear esto mismo, creando varios controles PictureBox y ocultandolos (con la propiedad
.visible=false), pero para hacerlo de esta forma necesitamos saber el numero de objetos mximo que
puede tener para crear dichos controles previos.

Pasar informacin de un formulario a otro


Pasar informacin de un formulario a otro
Existen varios mtodos para pasar informacin de un formulario a otro, pero se va a explicar el
que parece ms simple.
Imaginamos que tenemos dos formularios (Fmain y FormPregunta)
El formulario FormPregunta, es el encargado de recibir un dato (un texto por ejemplo) por parte
del usuario y lo va a enviar al formulario Fmain
En el formulario Fmain, es el encargado de mostrar el FormPregunta, y mostrar el dato recibido
de este formulario.
Este es el formulario Fmain:

Este es el cdigo del formulario Fmain:


' Gambas class file
Public Sub _new()
End
Public Sub Form_Open()
End
Public Sub recibirmensaje(texto As String)
TextLabelMostrarDato.text = texto
End
Public Sub ButtonAbrirFormulario_Click()
FormPregunta.Show()
End

Fijemonos que tenemos la funcion"recibirmensaje(texto as string)" que accesible desde todos los
formularios, modulos y clases porque es una funcin publica (Public), y que acepta como parametro un
texto.
Public Sub recibirmensaje(texto As String)
Este parmetro que recibe, lo va a asignar al textlabelMostrarDato.
TextLabelMostrarDato.text = texto
Bien, ahora pasamos al Formulario que tiene un textbox llamado "TextboxMensaje" y un botn
llamado "ButtonCerrar".

Este es su cdigo:
Public Sub Form_Open()
End
Public Sub ButtonCerrar_Click()
FMain.recibirmensaje(TextBoxMensaje.text)
Me.Close()
End
Cuando hacemos click en el botn, se ejecuta el cdigo contenido en
Public Sub ButtonCerrar_Click()

Fijemonos que es llamado el mtodo "recibirmensaje" del formulario Fmain:


FMain.recibirmensaje(TextBoxMensaje.text)
De esta manera, hemos pasado la informacin al formulario Fmain.

Trabajar con formularios: usar varios formularios en una aplicacin.


Normalmente en las aplicaciones que hagamos tendrn varios formularios. Para que se abra otro
formulario, hay que hacer uso del mtodo _Show o _ShowModal() del formulario que queramos abrir.

Por ejemplo: si tenemos un formulario llamado "FormUsuario", y lo queremos mostrar, se debe


escribir:
FormUsuario.Show()

FormUsuario.ShowModal()
La diferencia de usar el mtodo Show y ShowModal, es que con ShowModal indicamos hasta
que no se cierre el formulario que acabamos de abrir, no se atiende a los otros formularios que se
tengan abiertos de la aplicacin (quedan en "gris" y aunque se haga clic sobre ellos, no se pueden usar).
Este mtodo se usa mucho para elegir carpetas o archivos, donde necesitamos que nos den ese dato
para continuar con el programa.
Los formularios, al ser realmente como una clase (es una clase"especial" ya que tienen
asociadas una ventana con controles), tambin se pueden instanciar. Esto permite crear instancias,
objetos que son formularios independientes unos de otros, pero de la misma clase.
Para dejar ms claro lo que se acaba de decir, se tiene el siguiente este ejemplo:
Se trata de un programa con dos formularios, en el primero (Fmain) nos permite elegir varias formas de
abrir el segundo formulario (form1). Este segundo formulario le pasamos la informacin de como se a
abierto (usando la propiedad .tag) y tambin le pasamos la imagen que queremos que nos muestre,
usando el mtodo "setImagen()" del formulario form1.

Aplicacin ejecutndose:

Ejecutndose el programa, donde se han abierto 3 formularios Form1 en modo Show y con
instancias
Nota:
Cuando creamos un proyecto grfico, la "Clase de inicio", va a ser el formulario Fmain lo cual
indica que es lo primero que se ejecutar cuando arranque la aplicacin.
Esta "Clase de inicio" se puede cambiar a otro formulario o incluso a otro mdulo. Este cambio
se hace desde el men que sale, cuando pulsamos en la zona izquierda (donde esta el rbol del
proyecto).

FORMULARIOS PREDEFINIDOS
InputBox
Static Function InputBox ( Prompt As String [ , Title As String, Default As String
] ) As String

Este formulario esta prediseado, y nos permite obtener un texto solicitado al usuario. (Luego
este texto, si necesitamos que sea un nmero, se puede convertir en un nmero usando las funciones de
conversin de datos).
Funciona como una funcin que admite varios parmetros y nos devuelve un dato tipo string (cadena)
Parmetros:
Prompt

es el texto que se muestra en la parte delantera de la caja de texto donde el usuario introduce el valor.
Tenga en cuenta puede usar una cadena de texto enriquecido.
Title

Es el ttulo del cuadro de dilogo.


Default

Es el valor inicial del cuadro de texto.


Ejemplo:
Public Sub Form_Open()
Dim valor As String
valor = InputBox("Dame tu nombre:", "Formulario para pedir nombre", "no lo se")
'escribimos en la consola el valor obtenido
Print "La respuesta ha sido: ", valor
End
En pantalla obtendremos:

Message
Existe una clase con la que podemos crear mensajes para mostrar por pantalla: Message.
La cual
tiene la propiedad TiTle, que especifica el titulo que va a tener el mensaje, y varios mtodos para
indicar diversos tipos de mensajes (borrado, aviso, error, informacin y pregunta)
A continuacin se presenta un ejemplo de como usarlo:
Public Sub Form_Open()
Dim respuesta As Integer
'------------------------------------------'Ejemplo de uso de message.Delete (borrado)
'------------------------------------------Message.Title = "Borrar: Titulo del mensaje"
respuesta = Message.Delete("Texto", "boton 1", "boton 2", "boton 3")
Print "Mensaje Delete: respuesta elegida ", respuesta
'------------------------------------------'Ejemplo de uso de message.Warning (aviso)
'------------------------------------------Message.Title = "Warning: Titulo del mensaje"
respuesta = Message.Warning("Texto", "boton 1", "boton 2", "boton 3")
Print "Mensaje Warning: respuesta elegida ", respuesta
'------------------------------------------'Ejemplo de uso de message.Error (Error)
'------------------------------------------Message.Title = "Error: Titulo del mensaje"
respuesta = Message.Error("Texto", "boton 1", "boton 2", "boton 3")
Print "Mensaje Error: respuesta elegida ", respuesta
'------------------------------------------'Ejemplo de uso de message.info (informacion)
'------------------------------------------Message.Title = "Info: Titulo del mensaje"
respuesta = Message.Info("Texto", "boton 1")
Print "Mensaje Info: respuesta elegida ", respuesta
'------------------------------------------'Ejemplo de uso de message.Question (pregunta)
'------------------------------------------Message.Title = "Question: Titulo del mensaje"
respuesta = Message.Question("Texto", "boton 1", "boton 2", "boton 3")
Print "Mensaje Question: respuesta elegida ", respuesta
End

Dialog
La clase dialog, nos proporcionas los tpicos formularios de dilogo para:
- abrir un archivo (usando el mtodo .openfile)
- guardar un archivo (usando el mtodo .savefile)
- seleccionar un color (usando el mtodo .selectcolor)
- seleccionar un directorio (usando el mtodo .selectdirectory)
- seleccionar un tipo de letra (usando el mtodo .selectfont)
- seleccionar una fecha (usando el mtodo .selectdate)
Propiedad Definicion
path
title
filter
paths

Ejemplo
Dialog.Path =
define o retorna la ruta elegida
"/home/hjh/spiele/sudoku"
el titulo del cuadro de dialogo Dialog.Title = "Elige archivo"
Dialog.Filter =
define los filtros de ficheros a
[ "*.png;*.jpg;*.jpeg;*.bmp",
aplicar
"Imagenes", "*.svg", "Dibujos" ]
devuelve el array de directorios
elegidos

Ejemplo de uso: Dilogos En GAMBAS


Este control requiere GB.FORM.DIALOG.
En gambas existen varias clases de dilogos:
Se usan de la siguiente forma

dilogo Openfile, savefile y selectdirectory

dim Dialogo as dialog, Fichero as string


Dialogo.title="titulo de la ventana "
Dialogo.filter=[ "*.png;*.jpg;*.jpeg;*.bmp", "Imgenes";"*", "Todos los archivos" ]
Dialogo.path="/home"
if Dialogo.openfile( ) then
message.error(" el usuario cancel" )

else
Fchero=Dialogo.path
endif

En el caso de que se hayan seleccionado varios ficheros se debe mirar el array de Dialogo.path
dim Dialogo as dialog, Ficheros as string[]
Dialogo.title="titulo de la ventana "
Dialogo.filter=[ "*.png;*.jpg;*.jpeg;*.bmp", "Imgenes";"*", "Todos los archivos" ]
Dialogo.path=user.home
if Dialogo.openfile( ) then
message.error(" el usuario cancel" )
else
for each imagen in Dialog.path
Ficheros=split( Dialogo.path, "\n" )
next
end if
En este punto conviene mencionar aqu al objeto FILE.
Dim Fichero as string
Fichero=file.basename(dialog.path) ====> obtiene el nombre del fichero
Fichero=file.ext(dialog.path) ====> obtiene la extensin del fichero
Fichero=file.name(dialog.path) ====> obtiene el nombre completo del fichero
Fichero=file.dir(dialog.path) ====> obtiene el path del fichero
Selectcolor: Sirve para elegir un color.
Ojo! el cdigo de color no se corresponde con los colores constantes (color.blue por ejemplo)
Dialog.Color = ME. BackColor
IF Dialog.SelectColor() THEN RETURN
ME. BackColor = Dialog.Color

Selectfont: Sirve para elegir una fuente


Dialog.Font = TextArea Edit.Font
IF Dialog.SelectFont () THEN RETURN
TextAreaEdit.Font = Dialog.Font

Menus y Menus popups


Mens:
Hay dos formas de construir menus en gambas3, una mediante cdigo (no la veremos aqui) y
otra desde el formulario "Editor de Mens".
Para abrir este formulario hay que pulsar la teclas "ctrl + E" o haciendo click derecho sobre el
formulario nos aparece un men donde elegimos la opcin "Editor Menu.. ".

*
El formulario "Editor de Mens":

Podemos Insertar las entradas del men, donde podemos definir:


- Name: nombre usado posteriormente para el evento _Click
- Caption: Texto que aparecer
- Shortcut: Combinacin de teclas para la opcin del men: llamar al evento _Click. Si ponemos en
el caption el caracter &, marcamos para el usuario que tecla debe de pulsar.
- Picture: icono que aparecer junto al texto.
- Visible: si el menu o opcin del men es visible
- Enabled: si se puede seleccionar el men.
- Checked: si no tiene un icono, aparece el simbolo de checkeado o no en la opcin.
Este es un ejemplo de un men definido:

Mens Popup:
Para crear menus popup, tenemos que indicar que su propiedad Visible est desactivado.
En este caso es el "Menu1Popup", es el que tiene visible desactivado. Las opciones del men si deben
de tener "visible" activado
El control que tenga asociado el menu popup, tendr la propiedad .Popupmenu igualada al
nombre del menu (como si fuera una cadena de caracteres) Ejemplo:
GridView1.PopupMenu = "Menu1EspecialPopup"
Ejemplo: Men creado en las anteriores capturas de pantalla:

Ejemplo Menu

Ejemplo menu Popup

You might also like