2009-04-14 8 views
7

Si agrego un detector a KeyboardEvent.KEY_DOWN, puedo averiguar el código de clave y el código de carácter.Averigüe la tecla presionada de carácter

El código de tecla asigna un carácter diferente según el teclado.

El charCode es tan inútil, según la ayuda:

valores de código

El carácter son los valores de teclado inglés. Por ejemplo, si presiona Shift + 3, charCode está # en un teclado japonés, tal como está en un teclado inglés.

Entonces, ¿cómo puedo saber qué carácter presionó el usuario?

Respuesta

2

Se quedaron fuera una parte muy importante de la cita o que faltaba, donde lo encontró:

Por ejemplo, si pulsa Shift + 3, el método getASCIICode() devuelve # en un Teclado japonés, tal como lo hace en un teclado inglés.

http://livedocs.adobe.com/flex/201/langref/flash/events/KeyboardEvent.html

Esto es probablemente más útil:

La propiedad charCode es el valor numérico de dicha tecla en el conjunto de caracteres actual (el conjunto de caracteres por defecto es UTF-8, que soporta ASCII).

http://livedocs.adobe.com/flex/2/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000480.html

Su aplicación determina lo que se utiliza caracteres establecidos, lo que significa que incluso si la tiene que usar teclas separadas de diferentes locales de teclado para producir el mismo carácter, que tendrá el mismo charCode.

+0

Los enlaces son obsoletos y no son útiles de todos modos. Ver mi respuesta. –

0

Escribir caracteres japoneses hiragana etc. a menudo requieren varias teclas y, a veces, incluso seleccionando el carácter apropiado de un menú desplegable. Es probable que desee escuchar un evento diferente, algo así como un evento de cambio de un campo de texto.

1

NOTA: (. Esto se trata de mensajes de teclado en general y no se aplica a ActionScript sólo yo leído mal la pregunta y proporciona una respuesta más profunda que era útil)

En realidad, el camino del teclado para ventanas char es una MUY complejo, es algo como esto:

  • Teclado enviar scancode al controlador de dispositivo del teclado (KDD).
  • KDD envía un mensaje a la cola de mensajes del sistema.
  • El sistema luego envía el mensaje a la secuencia de primer plano que creó la ventana con el foco del teclado actual.
  • El bucle de mensaje del hilo recoge el mensaje y determina la traducción correcta del carácter.

El carácter "real" que se escribió no se calcula hasta que finaliza todo el proceso, ya que cada ventana e hilo pueden estar en una configuración regional diferente y no se puede "traducir" la clave sin conocer la configuración regional y el historial del buffer de claves.

Los mensajes "WM_KEYDOWN" y "WM_KEYUP" no se pueden convertir simplemente con MapVirtualKey o algo así porque no sabe cuántas pulsaciones de teclas constituyen un solo carácter. El método simple es manejar el evento 'WM_CHAR' y usar eso. Considere lo siguiente:

  • es-local, pulsa las teclas siguientes a + '+ a, se obtiene la siguiente salida "a'a"
  • pt-BZ local, pulsa las siguientes teclas de una + '+ a, se obtiene la siguiente salida 'AA'

Así que en ambos ejemplos se podrían obtener 3 keyDown, mensajes keyUp, pero en la primera obtiene 3 WM_CHAR y en el segundo que consigue solamente 2.

El siguiente artículo es realmente bueno para los conceptos básicos: http://msdn.microsoft.com/en-us/library/ms646267(VS.85).aspx

1

No puede utilizar efectivamente charCode o keyCode para determinar el carácter que se ha ingresado. Debe comparar cadenas solo. El KeyboardEvent no le da el texto ingresado, que también es tonto.

En mi caso implementé un evento KeyboardEvent.KEY_DOWN además de un evento TextEvent.TEXT_INPUT. En el controlador para este último implementé toda la funcionalidad donde el charCode era necesario y no variaba según la configuración regional del teclado (por ejemplo, barra espaciadora o enter). En el primero revisé la propiedad de texto del evento para comparar lo que necesitaba independientemente de la configuración regional.

olvidó mencionar que este post me dio a entender que la solución: How to find out the character pressed key in languages?

Cuestiones relacionadas