Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Barras De Menús En Gambas
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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

 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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!
 
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes ¿iconos En Menús En Gambas 3? ociokart General 6 Domingo, 23 Septiembre 2012, 21:48 Ver último mensaje
arubioc
No hay nuevos mensajes Crear Menús Contextuales. shordi Aplicaciones/Fragmentos de Código 2 Miercoles, 29 May 2013, 11:16 Ver último mensaje
shordi
No hay nuevos mensajes Barras Separadoras En Los Menús shordi General 1 Domingo, 15 Noviembre 2015, 13:42 Ver último mensaje
shordi
No hay nuevos mensajes Ejemplo De Creación De Menús Popup shordi Aplicaciones/Fragmentos de Código 2 Lunes, 28 Marzo 2016, 17:32 Ver último mensaje
shordi
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron