Ejercicio de SYSGUI #6: Botones herramienta (Tools Buttons)
En este ejercicio, introducimos un nuevo tipo de control llamado
"botón herramienta". Los botones herramienta son muy utilizados, pero
tienen algunas diferencias muy importantes respecto a los push buttons:
BOTONES DE PULSAR |
son un objeto intrínsico o de Windows
pueden recibir enfoque de teclado
tiene significación especial cuando la navegación de teclado es permitida. |
BOTONES HERRAMIENTA |
son un control de hábito suministrado por
BASIS
pueden verse mejor que los botones de pulsar
pueden mostrar un título regular o una imagen de un bitmap
no pueden recibir enfoque de teclado
están excluidos de la orden de navegación de teclado pueden operar normalmente
o como un "botón de conmutación"
informa una gran cantidad de detalle en cada evento
son idealmente apropiados para uso en "barras de herramientas" |
Para aprovecharnos más del botón herramienta, por favor teclee
en la versión modificada del reportero de eventos del Ejercicio #4. Si usted
salvó el reportero original de eventos, la única diferencia con el original
es que no estamos mostrando los eventos de movimiento de ratón (máscara con
$FFFFFEFF$), y una línea 40 que dice 'tbutton' en lugar de 'button'.
También usaremos ID 101 en lugar de ID 1, desde ahí no hay forma de usar un
botón herramienta para el propósito estándar de que control ID 1 es supuesto
a servir. De otra manera, eso es justamente el reportero de eventos del Ejercicio
#4.
0010 OPEN (1)"X0"
0020 PRINT (1)'SEMICHARS'
0030 PRINT (1)'WINDOW'(100,100,100,100,"Reportero de Eventos",$03$,
0030:$FFFFFEFF$)
0040 PRINT (1)'TBUTTON'(101,10,10,50,15,"OK",$$)
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)),
0070:E.X, E.Y
0080 GOTO 60
Lo primero que usted va a notar al correr
el programa es que el botón herramienta mira y actúa justamente como el regular
botón de pulsar. O lo hace? Bien, conocemos ya que
no se comporta de la misma manera si la navegación de teclado estuviera permitida,
pero eso es algo mucho más diferente.
Intente hacer click en el botón herramienta
algunas pocas veces y mire el reporte de eventos. La información de eventos
realmente cambia en dependencia de *donde* usted haga click, dentro del botón.
Cuánto útil esto sea depende de su aplicación. Mucho más útil es el hecho que
el informe también indica si el control y/o teclas shift están oprimidas
durante el click, y cuál botón del ratón es oprimido.
Aún más interesante es el hecho que el botón
herramienta pueda ser hecho para operar como un botón conmutador. Para hacer
esto, interrumpa y termine el programa (haga click en la ventana de la consola
para enfocar, luego de Ctrl-C, y digite END), y haga este pequeño cambio:
0040 PRINT (1)'TBUTTON'(101,10,10,50,15,"OK",$0400$)
Cuando usted lo corra de nuevo, va a notar que el botón herramienta
ahora permanece abajo de donde usted hizo click la primer vez, y cambia el estado
con cada click. Si usted quisiera el estado inicial del botón que está abajo,
use justamente la bandera estándar "inicialmente chequeada". Como
usted ve, un botón herramienta cambiable se comporta muy parecido a una caja
de chequeo. (Si usted quisiera intentarlo, use justamente $0404$ en lugar de
$0400$. Estos medios son "cambiables e inicialmente chequeados").
Mientras el programa está corriendo, intente
dar click en el botón algunas veces. Usted va a notar que el estado del conmutador
es informado junto con todo lo demás en el parámetro de banderas. El estado
del conmutador (E.FLAGS) tiene un valor $10$. De otra manera, todo evento reportado
es idéntico, independientemente de si el botón herramienta es cambiable o no.
|