Ejercicio de SYSGUI #11: Menús (con revisión 1.0x)
Las ventanas de SYSGUI pueden tener barras de menú. La forma
de hacerlo es activando la bandera "tener barra de menú" ($0800$)
cuando se crea la ventana, y luego usando el mnemónico ‘SETMENU’ para reemplazar
el menú fijo asumido por omisión para su nuevo menú.
He aquí el programa reporteador de eventos del Ejercicio #4,
el cual tiene la bandera "tener barra de menú" activada. También hemos
cambiado el botón de pulsar en una caja de edición, para demostrar que el tablero
del menú funcionará posteriormente. (sólo las líneas 30 y 40 han sido cambiadas).
0010 OPEN (1)"X0"
0020 PRINT (1)'SEMICHARS'
0030 PRINT (1)'WINDOW'(100,100,100,100,"Reportador de Eventos",$0803$,
0030:$FFFFFEFF$)
0040 PRINT (1)'EDIT'(101,10,10,50,15,"",$$)
0050 DIM E$:TMPL(1)
0060 READ RECORD (1,SIZ=LEN(E$))E$
0070 PRINT E.CONTEXT,"", E.CODE$, E.ID,"", HTA(BIN(E.FLAGS,1)),
E.X, E.Y
0080 GOTO 60
Trate de correrlo así como está. Usted notará que obtiene el
menú fijo asumido por omisión. Hasta contiene un ítem, que es chequeable. Intente
operarlo y observe los eventos del comando de menú ('C'). El valor $04$ en la
bandera es la condición de chequeado, y aplica solamente para ítems de menús
chequeables. El número que usted ve en el campo de ID indica que comando de
menú es enviado. Los números en el menú asumido por omisión no tienen significado
especial.
Obviamente, para hacer cualquier cosa útil vamos a necesitar
nuestro propio menú. Trate de adicionar las siguientes líneas de código y córralo
de nuevo. Considere la coma que va al final de la línea 41 y el uso de WRITE
en lugar de PRINT en las líneas restantes. Note también el espacio antes la
palabra "Exit" y las comas dentro de comillas.
0041 PRINT (1)'SETMENU', <--- Poner
coma del final
0042 WRITE (1)"File,1,,"+$0A$+" Exit,2,,"+$0A$
El mnemónico 'SETMENU' prepara el canal para recibir un menú.
El menú mismo consiste de una línea de texto por cada ítem del menú, indentado
con espacios antepuestos para mostrar el nivel en la jerarquía. El menú es terminado
con una línea en blanco. En el ejemplo mínimo de arriba, la barra del menú contendrá
una opción única, la del menú de Archivo. El menú de Archivo activado contiene
a su vez un ítem, con opción de Salir (Exit). Observe que "Exit" está
indentado, para indicar que debe aparecer dentro de la opción "File"
del menú. Finalmente, las comillas del final ("") proveen un {linefeed}
extra para terminar el menú.
Cada ítem u opción del menú consiste de cuatro parámetros separados por comas.
Write (1)"Ítem, Etiqueta, Acelerador, Bandera"
- Item: generalmente se usa para el nombre que va a llevar la opción.
- Etiqueta: se usa para IDentificar la opción
- Acelerador
- Bandera: es para dar condiciones a la opción: S, C, U, D.
El primero es el ítem con el título del menú, con espacios antepuestos
para especificar el lugar en la jerarquía de los ítems. El segundo campo es
para el ítem de "etiqueta" (tag). La etiqueta es justamente un número
utilizado para identificar ese ítem. Los tags de menú son controles IDs muy
usados, excepto que son usados de otro modo, de manera que la existencia de
un control con el mismo número como una etiqueta de menú no provocará un problema.
El tercer campo es donde cualquier tecla de acelerador puede ser especificada.
El cuarto campo puede contener banderas especiales acerca de esos ítems del
menú.
Corra el programa de nuevo y note la apariencia del menú "File",
con el comando "Exit" debajo. Cuando el comando "Exit" es
seleccionado, unos eventos tipo 'C' llegan con el campo de ID igual a 2, que
es la etiqueta del comando "Exit". Cualquier número desde 1 al 31999
puede ser usado para tags o etiquetas de menú. Del número 32000 en adelante
están reservados para uso de BASIS. Actualmente solamente 3 de esas etiquetas
de menú son reservadas. Estos son los comandos para cortar (32027), copiar (32028)
y pegar (32029) en el tablero.
|