No logro entender el funcionamiento de los menus.
Miro el ejemplo menus.prg y, vale, lo compilo y funciona, pero intento reproducir un menú más amplio como el de la aplicacion SV y no me funciona.
¿ Podria alguien indicarme como es su funcionamiento? o donde existe documentacion al respecto?
Un saludo
Juan José
Funcionamiento de los menus
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Juan José, Javier,
Los menus en Pocket PC no están practicamente documentados por Microsoft, y son un poco liosos. Teneis un ejemplo en tutor03.rc y tutor03.prg:
1. No se pueden crear desde código. Siempre hay que definirlos en el fichero de recursos.
2. En el fichero de recursos se usan TRES partes para crearlos:
1a parte:
#ifdef _CE
102 RCDATA
BEGIN
102, 2,
I_IMAGENONE, 202, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, 202, 0, 0,
I_IMAGENONE, 203, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, 203, 0, 1,
END
#endif
Usamos ese #ifdef porque los editores de recursos habituales no saben interpretar esos valores. RCDATA significa "datos adicionales". Hay que darle el mismo número que tenga el menu (102), y se repite nuevamente después de BEGIN.
A continuación viene el valor 2, que indica cuantos menuitems tiene. A más menuitems, hay que aumentar ese valor.
Cada menuitem termina en 0, salvo el último que termina en 1.
El texto de cada menuitem no se especifica ahí, sino que se indica por un número. En este caso 202 y 203. Esos valores se buscan en una tabla de cadenas que hay que declarar a continuación:
2a parte:
STRINGTABLE DISCARDABLE
BEGIN
202 "First"
203 "Second"
END
Por último viene la definición del menú:
3a parte:
102 MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "it works", 100
END
POPUP ""
BEGIN
MENUITEM "Test", 110
END
END
Fijaros en que usa el valor 102 que es el mismo que usa su RCDATA. Cada menuitem tiene un número (100, 110) que es él identificador del menuitem y que usaremos desde el PRG:
DEFINE MENU oMenu RESOURCE 102 // Usa el menu 102
REDEFINE MENUITEM ID 100 OF oMenu ACTION MsgInfo( "MenuItem action" ) WHEN .f. // Define la acción para el menuitem código 100
REDEFINE MENUITEM ID 110 OF oMenu ACTION MsgAlert( "FWCE power!" ) // Define la acción para el menuitem código 110
Es un tanto lioso, pero es así como lo ha diseñado Microsoft para Windows Mobile y no tenemos otra forma de hacerlo.
Los menus en Pocket PC no están practicamente documentados por Microsoft, y son un poco liosos. Teneis un ejemplo en tutor03.rc y tutor03.prg:
1. No se pueden crear desde código. Siempre hay que definirlos en el fichero de recursos.
2. En el fichero de recursos se usan TRES partes para crearlos:
1a parte:
#ifdef _CE
102 RCDATA
BEGIN
102, 2,
I_IMAGENONE, 202, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, 202, 0, 0,
I_IMAGENONE, 203, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, 203, 0, 1,
END
#endif
Usamos ese #ifdef porque los editores de recursos habituales no saben interpretar esos valores. RCDATA significa "datos adicionales". Hay que darle el mismo número que tenga el menu (102), y se repite nuevamente después de BEGIN.
A continuación viene el valor 2, que indica cuantos menuitems tiene. A más menuitems, hay que aumentar ese valor.
Cada menuitem termina en 0, salvo el último que termina en 1.
El texto de cada menuitem no se especifica ahí, sino que se indica por un número. En este caso 202 y 203. Esos valores se buscan en una tabla de cadenas que hay que declarar a continuación:
2a parte:
STRINGTABLE DISCARDABLE
BEGIN
202 "First"
203 "Second"
END
Por último viene la definición del menú:
3a parte:
102 MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "it works", 100
END
POPUP ""
BEGIN
MENUITEM "Test", 110
END
END
Fijaros en que usa el valor 102 que es el mismo que usa su RCDATA. Cada menuitem tiene un número (100, 110) que es él identificador del menuitem y que usaremos desde el PRG:
DEFINE MENU oMenu RESOURCE 102 // Usa el menu 102
REDEFINE MENUITEM ID 100 OF oMenu ACTION MsgInfo( "MenuItem action" ) WHEN .f. // Define la acción para el menuitem código 100
REDEFINE MENUITEM ID 110 OF oMenu ACTION MsgAlert( "FWCE power!" ) // Define la acción para el menuitem código 110
Es un tanto lioso, pero es así como lo ha diseñado Microsoft para Windows Mobile y no tenemos otra forma de hacerlo.
Last edited by Antonio Linares on Wed Nov 22, 2006 7:53 am, edited 1 time in total.
-
- Posts: 78
- Joined: Wed May 31, 2006 8:49 am
Creacon de Menus
Gracias Antonio, ya habia empezado a utilizr botones.
Un saludo
Juan José
Un saludo
Juan José
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
> Cada menuitem termina en 0, salvo el último que termina en 1.
Esto es erróneo. Cada menuitem, en el RCDATA del fichero RC,
ha de terminar en un número consecutivo, empezando por cero.
Aqui teneis un ejemplo completo:
http://fivetechsoft.com/forums/viewtopic.php?t=5342
Esto es erróneo. Cada menuitem, en el RCDATA del fichero RC,
ha de terminar en un número consecutivo, empezando por cero.
Aqui teneis un ejemplo completo:
http://fivetechsoft.com/forums/viewtopic.php?t=5342