MetaCard y Revolution: Herramientas de autor multiplataforma para multimedia | ||
---|---|---|
Anterior | Capítulo 5. Otros elementos | Siguiente |
No abordaremos en este punto el acceso "básico" o "de bajo nivel" al mismo, aunque es posible con funciones como rawKeySym que permite acceder a los códigos del teclado directamente y cazar desde teclas como Insert/Pause/Print Screen hasta el girar de la rueda de los ratones.
La importancia de conocer la funcionalidad del lenguaje de cara a este periférico es por que este es una pieza fundamental desde la invención de los ordenadores hasta hoy, quizá cuando tengamos interfaces aurales la cosa cambien, pero mientras ... Un usuario experto en una aplicación es más efectivo y flexible en su modo de actuar con el teclado que con el ratón en una aplicación predominantemente de entrada de datos. Si la componente de trabajo visual es tan importante, le aconsejo que pruebe una tableta gráfica o una pantalla táctil para dos dimensiones, para 3D ... Bueno, ahí ya ni entro.
Podemos construir un breve entretenimiento sobre las funciones del teclado para ver cómo actúa añadiendo un campo de texto no editable para mostrar resultados y junto al siguiente código perteneciente a la única tarjeta de la pila:
# # Tarjeta # on keyUp quinCaracter put "Soltat:" && quinCaracter & return after fld "eixida" end keyUp on keyDown quinCaracter if (the altKey is "down") then put "Alt + " after fld "eixida" if (the shiftKey is "down") then put "Shf + " after fld "eixida" put "Pulsat:" && quinCaracter & " " after fld "eixida" end keyDown
Este código nos permitirá "cazar al vuelo" las pulsaciones del teclado, como en el caso del ratón tanto cuando se pulsa una tecla (la que sea) como cuando se suelta, se generarán los eventos de keyUp y keyDown. Estos eventos reciben un parámetro que es el caracter que ha sido pulsado o soltado. A partir de ahí podemos manipular el mismo. Nosotros nos limitaremos a mostrar un mensaje indicativo del evento que ha sido generado.
Con el tiempo el campo de texto se llenará de mensajes y dejaremos de verlos. Vamos a introducir un botón que limpie el contenido del campo de texto y así volveremos a ver aparecer ñlos mensajes y, claro, aunque podamos utiilzar el ratón vamos a facilitar que se pueda utilizar sin levantar las manos del teclado.
Hemos visto ya (apareció en la la sección de nombre Paso 12: comprobar el orden de tabulación en Capítulo 1) cómo introducir el orden de navegación por los controles dispuestos en el interfaz y como se puede utilizar el tabulador (Tab) para ir pasando de uno a otro. Esto es cómo, de una manera sencilla y eficaz, se puede hacer pase el "foco" de un control a otro sin, por supuesto, activarlos. Ya situados sobre el botón deseado, al pulsar la tecla Enter se genera el mismo evento que si se hubiese pulsado con el ratón sobre ese control.
Así pues, ya conocemos cómo movernos con el tabulador y cómo asignar a los botones los nemónicos (véase la Figura 5-7a, que muestra la caja de propiedades del botón y el valor asignado al campo Mnemonic de la pestaña Name) y los aceleradores (en la Figura 5-7b, esta vez en la pestaña de Accelerators se encuentran Accelerator Key, Accelerator Modifiers y Accelerator Text ) de teclado.
Sugerencia: Como curiosidad, decir que se puede preguntar por el estado de teclas especiales como se ha hecho en el ejemplo anterior con la tecla de mayúsculas (Shift) con las variantes: altKey/ metaKey/optionKey, capsLockKey, controlKey/commandKey (Ctrl Unix/Win o command en MacOS).
Importante: Una cosa a recordar es que la ejecución de un evento consume el mismo, así que lo que hagamos dentro estas de funciones de bajo nivel de acceso al teclado pueden romper la secuencia habitual. Un ejemplo de ampliación de la funcionalidad de MetaCard para aceptar caracteres acentuados lo veremos en la la sección de nombre Creando un nuevo comportamiento: campo de texto y caracteres acentuados en Capítulo 6. Aquí vamos a eliminar que llegue una tecla al usuario, nunca se verá el mensaje de que se suelta la tecla b. Para ello modificamos el primer evento como se muestra a continuación:
on keyUp quinCaracter if (quinCaracter is "a") then put "Soltat:" && toLower(quinCaracter) & return after fld "eixida" else if (quinCaracter is not "b" or quinCaracter is not "B") then\ put "Soltat:" && quinCaracter & return after fld "eixida" end keyUpCompruebe qué sucede si en uno (o los dos, no lo voy a decir) de estos eventos de un campo de texto editable consumimos el caracter y no lo "dejamos pasar".
Cierto es que las únicas teclas que suelo monitorizar son las flechas del cursor (con el evento arrowkey que recibe un parámetro que puede ser una de las cadenas de carácteres: "up", "down", "left" y "right". Pero puede hacer algo sencillo utilizando las propiedades:
navigationArrows que, con valor de cierto y sin un control seleccionado, se puede cambia la pila activa utilizando las teclas del cursor.
textArrows que a falso se traduce el efecto anterior.
Veremos otras posibilidades, como la utilización de la orden type, al hablar de un campo de texto en la la sección de nombre Efectos con el texto en Capítulo 7.
Ahora echaremos un vistazo a otros mensajes de interés a la hora de trabajar con campos de texto por lo que nos informan de la manipulación de sus contenidos en tiempo de ejecución. Lo siguiente hace referencia a la realización de acciones ante teclas frecuentes como return, enter o escape que, respectivamente, se traducen en los eventos returnInField, enterInField y escapeKey. Veamos un ejemplo donde se han utilizado estas acciones para ver cómo se pueden utilzar en el código. Dada una pila como la de la Figura 5-8, se ha de implementar:
Cada caracter que sea tecleado cuando esté activo el campo de texto inferior ("Desti") deberá ser traducido a su correspondiente carácter en mayúsculas y situado en la última posición del campo de texto. Para lo cual hay que hacer uso del evento keyDown y de la función toUpper de una forma similar a esta
# # Campo de texto "Desti" on keyDown quinCaracter put toUpper( quinCaracter ) after me end keyDown
Para que se vea cómo hacer la conversión y que sigue existiendo un evento independiene al soltar la tecla y que se ejecuta con el carácter esperado. De hecho puede probar a comentar un momento el código anterior, para ver que realmente está ahí y funcionando la anterior conversión y volver a dejarlo (descomentarlo) después de introducir unos cuantos caracteres en modo "normal".
# # Campo de texto "Desti" on keyUp quinCaracter put quinCaracter end keyUp
Que cuando se utilize la tecla return (esa que tiene en la parte principal del teclado, cerca de donde tiene el meñique derecho), en lugar de crear un salto de línea en el campo de texto, aparezca una caja de diálogo con todo el contenido del campo del texto hasta el momento.
# # Campo de texto "Desti" (continuación) on returnInField answer the text of me end returnInField
Que cuando se utilize la tecla intro (situada en la parte derecha inferior del teclado) haga que aparezca todo el texto, esta vez en la "Message Box".
# # Campo de texto "Desti" (continuación) on enterInField put the text of me end enterInField
Que al pulsar la tecla ESC (...) se muestre un mensaje ne la "Message Box" indicándolo.
# # Campo de texto "Desti" (continuación) on escapeKey put "Vale, vale: has pulsat ESC!" end escapeKey