Captura de entradas de teclado

Los objetos de visualización que heredan su modelo de interacción de la clase InteractiveObject pueden responder a eventos del teclado mediante detectores de eventos. Por ejemplo, se puede colocar un detector de eventos en el escenario para detectar entradas de teclado y responder a las mismas. En el código siguiente, un detector de eventos captura una pulsación de tecla y se muestran las propiedades de nombre de tecla y código de tecla:

function reportKeyDown(event:KeyboardEvent):void
{
    trace("Tecla pulsada: " + String.fromCharCode(event.charCode) + 
" (código de carácter: " + event.charCode + ")"); } stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);

Alguna teclas, como la tecla Ctrl, generan eventos aunque no tengan un glifo de representación.

En el ejemplo de código anterior, el detector de eventos del teclado captura la entrada de teclado para todo el escenario. También se puede escribir un detector de eventos para un objeto de visualización específico en el escenario; este detector de eventos se activaría cuando se seleccionara el objeto.

En el siguiente ejemplo, las pulsaciones de teclas se reflejan en el panel Salida cuando el usuario escribe en la instancia de TextField. Si se mantiene presionada la tecla Mayús, el color del borde de TextField cambiará temporalmente a rojo.

En este código se supone que hay una instancia de TextField denominada tf en el objeto Stage (el escenario).

tf.border = true;
tf.type = "input";
tf.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown);
tf.addEventListener(KeyboardEvent.KEY_UP,reportKeyUp);

function reportKeyDown(event:KeyboardEvent):void
{
    trace("Tecla pulsada: " + String.fromCharCode(event.charCode) + 
" (código de tecla: " + event.keyCode + " código de carácter: "
+ event.charCode + ")"); if (event.keyCode == Keyboard.SHIFT) tf.borderColor = 0xFF0000; } function reportKeyUp(event:KeyboardEvent):void { trace("Tecla soltada: " + String.fromCharCode(event.charCode) +
" (código de tecla: " + event.keyCode + " código de carácter: " +
event.charCode + ")"); if (event.keyCode == Keyboard.SHIFT) { tf.borderColor = 0x000000; } }

La clase TextField también notifica un evento textInput que se puede detectar cuando un usuario escribe texto. Para más información, consulte Captura de entrada de texto.

Aspectos básicos de los códigos de teclas y los códigos de caracteres

Se puede acceder a las propiedades keyCode y charCode de un evento de teclado para determinar la tecla que se ha presionado y activar a continuación otras acciones. La propiedad keyCode es un valor numérico que se corresponde con el valor de una tecla del teclado. La propiedad charCode es el valor numérico de la tecla en el juego de caracteres actual. (El juego de caracteres predeterminado es UTF-8, que es compatible con ASCII.)

La principal diferencia entre el código de tecla y los valores de caracteres es que el valor del código de tecla representa una tecla determinada del teclado (el 1 de un teclado es distinto del 1 de la fila superior, pero la tecla que genera "1" y la tecla que genera "!" es la misma) y el valor de carácter representa un carácter determinado (los caracteres R y r son distintos).

NOTA

 

Para más información sobre las correspondencias entre las teclas y los valores de códigos de caracteres en ASCII, consulte Teclas del teclado y valores de códigos de tecla.

Las correspondencias entre las teclas y sus códigos de tecla dependen del dispositivo y del sistema operativo. Por esta razón, no se deben utilizar asignaciones de teclas para activar acciones. Se deben utilizar los valores constantes predefinidos que proporciona la clase Keyboard para hacer referencia a las propiedades keyCode apropiadas. Por ejemplo, en lugar de utilizar la asignación de tecla para la tecla Mayús, se debe utilizar la constante Keyboard.SHIFT (como se indica en el ejemplo de código anterior).

Aspectos básicos de la precedencia de KeyboardEvent

Al igual que con los otros eventos, la secuencia de eventos de teclado se determina por la jerarquía de objetos de visualización, no en el orden en que se asignan métodos addEventListener() en el código.

Por ejemplo, supongamos que se coloca un campo de texto tf dentro de un clip de película denominado container y que se añade un detector de eventos para un evento de teclado en ambas instancias, como se muestra en el siguiente ejemplo:

container.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown);
container.tf.border = true;
container.tf.type = "input";
container.tf.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown);

function reportKeyDown(event:KeyboardEvent):void
{
    trace(event.currentTarget.name + " detecta la pulsación de tecla: " + 
String.fromCharCode(event.charCode) + " (código de tecla: " +
event.keyCode + " código de carácter: " + event.charCode + ")"); }

Como hay un detector en el campo de texto y en su contenedor principal, se llama dos veces a la función reportKeyDown() por cada pulsación en el campo de texto. Hay que tener en cuenta que por cada tecla pulsada, el campo de texto distribuye un evento antes de que el clip de película contenedor distribuya un evento.

El sistema operativo y el navegador Web procesarán los eventos de teclado antes que Adobe Flash Player. Por ejemplo, en Microsoft Internet Explorer, si se pulsan Ctrl+W se cierra la ventana del navegador antes de que un archivo SWF contenido pueda distribuir un evento de teclado.


Flash CS3

 

Enviarme un mensaje de correo electrónico cuando se añadan comentarios a esta página | Informe de comentarios

Página actual: http://livedocs.adobe.com/flash/9.0_es/main/00000311.html