Page 1 of 1

Funcionamiento de los menus

Posted: Wed Nov 08, 2006 12:14 pm
by juanjogascem
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é

Posted: Tue Nov 21, 2006 11:57 am
by helvant
estoy en las mismas, creo el menu pero no me sale en pantalla, solo sale la pantalla inicial. He escribo este reply para posicionarlo arriba por si alguien nos ayuda.

Salu2

Javier

Posted: Tue Nov 21, 2006 12:23 pm
by Antonio Linares
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.

Creacon de Menus

Posted: Wed Nov 22, 2006 7:37 am
by juanjogascem
Gracias Antonio, ya habia empezado a utilizr botones.

Un saludo
Juan José

Posted: Wed Nov 22, 2006 9:59 am
by helvant
Muchas gracias Antonio, estoy en ello

Salu2
Javier

Posted: Sun Dec 17, 2006 12:51 pm
by Antonio Linares
> 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