Barras De Menús En Gambas


Objetivo: Barras De Menús En Gambas
Para hacer un menú en un formulario gambas basta con hacer click con el botón derecho en el formulario y elegir menu editor

La pantalla que sale es muy similar a la que veíamos en VB, pero con una importante diferencia. La propiedad group que sirve para indicar el manejador de eventos permite que una opción del menú pueda tener el mismo evento que un botón del formulario.

Así por ejemplo si tenemos una opción Abrir y tenemos un botón o imagen que también sirva para abrir podemos poner a ambos el mismo group y solo tendremos que escribir un código para ambos casos.

Ejemplo de creación de un menú
Citar:
1. En el formulario botón derecho y 'editor de menu'
2. Pulsar 'insertar' para añadir un elemento nuevo
2.1 Nombre: Fichero. Título: &Fichero.
3. Pulsar 'insertar' para añadir un elemento nuevo. Pulsar -> para insertar una entrada dentro de Fichero
3.1 Nombre: AbrirFichero. Grupo: Abrir. Título: &Abrir. Activar CTRL y elegir 'A'. Imagen: pinchar en seleccionar imagen, elegir stock y elegir icono open.
4. Pinchar en siguiente
5. Pulsar 'insertar' para añadir un elemento nuevo
5.1 Nombre: GrabarFichero. Grupo: Grabar. Título: &Grabar. Activar CTRL y elegir 'G'. Imagen: pinchar en seleccionar imagen, elegir stock y elegir icono save
6. Pinchar en siguiente
7. Pinchar en siguiente
8. Pulsar 'insertar' para añadir un elemento nuevo
8.1 Nombre: barra. Nada mas
9. Pinchar en siguiente
10. Pulsar 'insertar' para añadir un elemento nuevo
10.1 Nombre: Salir. Grupo: Salir. Título: &Salir. Activar CTRL y elegir 'X'. Imagen: pinchar en seleccionar imagen, elegir stock y elegir icono End
11. Pinchar en OK


Con esto ya hemos creado un menu genérico.
Control A --> Abrir archivo. Control G --> grabar archivo. Control X --> salir.

Ahora crearemos la barra del menú.
Citar:
1. Ponemos un contenedor en la zona en la que corresponda la barra. Si es una barra horizontal pensar en el HPanel o en el toolbar (con propiedad orientacion=horizontal). Si es una barra vertical pensar en VPanel o en el control toolbar (con propiedad orientacion=vertical).
2. Dentro del container insertar un toolbutton.
2.1 Propiedad Group=Open. Picture=open. Tooltip="Abrir fichero"
3. Dentro del container insertar un toolbutton
3.1 Propiedad Group=Grabar. Picture=save. Tooltip="Grabar fichero"
4. Dentro del container insertar un toolbutton
4.1 Propiedad Group=Salir. Picture=End. Tooltip="Salir"


Hay botones como el de la negrita que son ON o OFF. Estos toolbutton deberían tener activada la propiedad toogle y deberían tener un valor inicial en Value.
Hay botones como el de alineación que son de tipo radiobutton. Estos botones al acivarlos desactivan otros. Estos botones deberían tener activada la propiedad radio y tener un value inicial.

Por último programar eventos en sus manejadores
sub Abrir_Click
print "abrir"
end
sub Grabar_click
print "grabar"
end
sub Salir_click
print "salir"
end

Perfil MP  
Objetivo: Re: Barras De Menús En Gambas
Acabo de probar como funcionan los popup menu.

Tan simple como esto.

En un formulario poner dos variables publicas
Public BarraMenu as menu
Public ItemMenu as menu


Para crearlos (yo voy a hacerlo en form_open por comodidad)
public form_open()

BarraMenus=new menu(me) '--> crear el menu

itemmenu=new(menu(BarraMenus) as "PrimerItem" '---> crear el primer item
ItemMenu.text="Primera opción"

itemmenu=new(menu(BarraMenus) as "SegundoItem" '---> crear el segundo item
ItemMenu.text="Segunda opción"

itemmenu=new(menu(BarraMenus) as "TercerItem" '---> crear el tercer item
ItemMenu.text="Tercera opción"

...
end


Ahora programar lo que harán las opciones del menu
public sub PrimerItem_click()
message.info("primera opción")
end sub

public sub SegundoItem_click()
message.info("Segunda opción")
end sub

public sub TercerItem_click()
message.info("Tercera opción")
end sub


Ahora ponemos dos objetos en el formulario, los que querais. Yo pongo dos botones por comodidad buton1 y buton2

Por último asociar ese menú popup ya funcional a los dos botones. Quieo que el menu salga en la posición x e y de cada control.

Public sub Buton1_MouseDown()
if mouse.right then
BarraMenus.popup(last.x, last.y)
endif

Public sub Buton2_MouseDown()
if mouse.right then
BarraMenus.popup(last.x, last.y)
endif


Como veis las dos rutinas hacen lo mismo. Podría haber hecho una rutina común para ambas, pero me ha parecido mejor por claridad dejarlas separadas para que se vea el funcionamiento del menú popup.

¡Que simple!

Perfil MP  
Objetivo: Re: Barras De Menús En Gambas
Para hacer que un menú emergente aparezca (popup), es mejor usar el evento _Menu del control en donde quieres que aparezca.

Por ejemplo:

Private sub Form1_Menu()

mimenu.popup()

End


Esto hará que al pulsar el botón derecho del ratón sobre el formulario, aparezca el menú bajo el cursor. Para hacer que aparezca desde un TrayIcon, echa un vistazo a este código: http://bashare.googlecode.com/files...rc-0.4.2.tar.gz , una útil aplicación que implementa todo esto.

Perfil MP  
Objetivo: Re: Barras De Menús En Gambas
¿Hay alguna manera de referenciar un menú por su nombre?
Algo que no sea me.menus[0].children[1] y cosas así.
Es que al insertar una opción más se descabalga todo el código.

Perfil MP  
Objetivo: Re: Barras De Menús En Gambas
Citar:
¿Hay alguna manera de referenciar un menú por su nombre?
Algo que no sea me.menus[0].children[1] y cosas así.
Es que al insertar una opción más se descabalga todo el código.


¿Cuál es concretamente el problema que mencionas?

Un menú se construye por medios de objetos menu, también las opciones de un menú o submenú son objetos menú; por ejemplo, una opción en un submenú tiene como contenedor a otro objeto menú creado previamente. Cada objeto menú lleva un nombre, por lo tanto puedes referenciar cada objeto menu por su nombre.

Supongamos que creas un menu archivo con esta forma con el editor de menús:

Archivo (mnuArchivo)
...Nuevo (mnuArchivoNuevo)
...Abrir (mnuArchivoAbrir)
...Cerrar (mnuArchivoCerrar)
...Salir ((mnuArchivoSalir)

La forma de referenciar el menú es:

me.mnuArchivo.Visible = TRUE
me.mnuArchivoNuevo.Checked = FALSE


Los objetos menu no exponen su contenedor, por eso en ellos la propiedad parent no existe. En consecuencia no puedes escribir algo como:

mnuArchivoCerrar.Parent


Si los creas por código, en vez de escribir:

BarraMenus=new menu(me) '--> crear el menu

itemmenu=new(menu(BarraMenus) as "PrimerItem" '---> crear el primer item
ItemMenu.text="Primera opción"

itemmenu=new(menu(BarraMenus) as "SegundoItem" '---> crear el segundo item
ItemMenu.text="Segunda opción"

itemmenu=new(menu(BarraMenus) as "TercerItem" '---> crear el tercer item
ItemMenu.text="Tercera opción"


Puedes escribir algo como:


PUBLIC SUB CreaMenu()
DIM mnu, mnuOpt AS Menu

mnu = NEW Menu(ME)
mnu.Name = "mnuArchivo"
mnu.Text = "Archivo"

mnuOpt = NEW Menu(mnu) AS "mnuArchivoNuevo"
mnuOpt.Name = "mnuArchivoNuevo"
mnuOpt.Text = "Nuevo"

mnuOpt = NEW Menu(mnu) AS "mnuArchivoAbrir"
mnuOpt.Name = "mnuArchivoAbrir"
mnuOpt.Text = "Abrir"

mnuOpt = NEW Menu(mnu) AS "mnuArchivoCerrar"
mnuOpt.Name = "mnuArchivoCerrar"
mnuOpt.Text = "Cerrar"

mnuOpt = NEW Menu(mnu) AS "mnuArchivoSalir"
mnuOpt.Name = "mnuArchivoSalir"
mnuOpt.Text = "Salir"

END

PUBLIC SUB mnuArchivoSalir_Click()
ME.Close
END


Espero te sirva. Saludos.

Objetivo: Re: Barras De Menús En Gambas
Perfecto, gracias. El problema no existía, es que yo me empeñaba en buscar los menú a partir de la colección Menus. Ni siquiera había intentado referenciarlos directamente. Me he roto los cuennos buscando formas de retorcer cosas como Menu.Children[0], y engendros por el estilo...
¿Cómo era el refran? "Un tonto sigue un camino. El camino se acaba y el tonto sigue"... o algo así. Pues eso.
Gracias de nuevo.

Perfil MP  

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.1409s (PHP: -1% SQL: 101%)
Consultas SQL: 28 - Debug off - GZIP Activado