Capture de la saisie au clavier

Flash Player 9 et les versions ultérieures, Adobe AIR 1.0 et les versions ultérieures

Les objets d’affichage qui héritent de leur modèle d’interaction de la classe InteractiveObject peuvent répondre à des événements de clavier à l’aide d’écouteurs d’événement. Par exemple, vous pouvez placer un écouteur d’événement sur la scène pour écouter et répondre à une saisie au clavier. Dans le code suivant, un écouteur d’événement capture une saisie au clavier et le nom et les propriétés de code de la touche sont affichés :

function reportKeyDown(event:KeyboardEvent):void 
{ 
    trace("Key Pressed: " + String.fromCharCode(event.charCode) +         " (character code: " + event.charCode + ")"); 
} 
stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);

Certaines touches (Ctrl, par exemple) génèrent des événements, même si elles n’ont pas de représentation de glyphes.

Dans l’exemple de code précédent, l’écouteur d’événement de clavier a capturé une saisie au clavier pour la scène entière. Vous pouvez également écrire un écouteur d’événement pour un objet d’affichage spécifique sur la scène ; cet écouteur d’événement est déclenché lorsque l’objet a le focus.

Dans l’exemple suivant, les frappes de touches apparaissent dans le panneau Sortie uniquement lorsque l’utilisateur tape dans l’occurrence de TextField. S’il maintient la touche Maj enfoncée, la couleur du contour du TextField devient temporairement rouge.

Ce code suppose qu’il existe une occurrence de TextField appelée tf sur la scène.

tf.border = true; 
tf.type = "input"; 
tf.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown); 
tf.addEventListener(KeyboardEvent.KEY_UP,reportKeyUp); 
 
function reportKeyDown(event:KeyboardEvent):void 
{ 
    trace("Key Pressed: " + String.fromCharCode(event.charCode) +         " (key code: " + event.keyCode + " character code: "         + event.charCode + ")"); 
    if (event.keyCode == Keyboard.SHIFT) tf.borderColor = 0xFF0000; 
} 
 
function reportKeyUp(event:KeyboardEvent):void 
{ 
    trace("Key Released: " + String.fromCharCode(event.charCode) +         " (key code: " + event.keyCode + " character code: " +         event.charCode + ")"); 
    if (event.keyCode == Keyboard.SHIFT) 
    { 
        tf.borderColor = 0x000000; 
    } 
}

La classe TextField signale également un événement textInput que vous pouvez écouter lorsqu’un utilisateur saisit du texte. Pour plus d’informations, voir Capture du texte saisi par l’utilisateur .

Remarque : dans le moteur d’exécution d’AIR, il est possible d’annuler un événement de clavier. En revanche, dans le moteur d’exécution de Flash Player, un événement de clavier ne peut pas être annulé.

Codes de touches et de caractères

Les propriétés keyCode et charCode d’un événement clavier permettent de déterminer la touche utilisée et de déclencher d’autres actions. La propriété keyCode est une valeur numérique qui correspond à la valeur de la touche sur le clavier. La propriété charCode est la valeur numérique de cette touche dans le jeu de caractères actuel (le jeu de caractères par défaut est UTF-8, qui prend en charge ASCII).

La différence principale entre le code de touche et les valeurs de caractères est la suivante : la valeur du code de touche représente une touche déterminée du clavier (la touche 1 sur le pavé numérique est différente du 1 sur le clavier central, mais cette dernière permet à la fois de générer 1 et &) alors que la valeur du caractère représente un caractère particulier (les caractères R et r sont différents).

Remarque : pour plus d’informations sur le mappage entre les touches et le code de caractère ASCII correspondant, voir la classe flash.ui.Keyboard dans le manuel Guide de référence ActionScript 3.0 pour la plate-forme Adobe Flash .

Les mappages entre les touches et leurs codes de touches dépendent du périphérique et du système d’exploitation. C’est pourquoi vous ne devez pas utiliser de mappages de touches pour déclencher des actions. A la place, utilisez les valeurs de constante prédéfinies fournies par la classe Keyboard pour référencer les propriétés keyCode appropriées. Par exemple, au lieu d’utiliser le mappage de touche pour la touche Maj, utilisez la constante Keyboard.SHIFT (comme indiqué dans l’exemple de code précédent).

Priorité des événements KeyboardEvent

Comme avec d’autres événements, la séquence d’événement de clavier est déterminée par la hiérarchie d’objet d’affichage et non par l’ordre dans lequel les méthodes addEventListener() sont affectées dans le code.

Supposons par exemple que vous placiez un champ de texte tf au sein d’un clip nommé container et que vous ajoutiez un écouteur d’événement pour l’événement de clavier à chaque occurrence, comme indiqué dans l’exemple suivant :

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 + " hears key press: " +         String.fromCharCode(event.charCode) + " (key code: " +         event.keyCode + " character code: " + event.charCode + ")"); 
}

Etant donné qu’il existe un écouteur sur le champ de texte et sur son conteneur parent, la fonction reportKeyDown() est appelée deux fois pour chaque frappe de touche dans le TextField. Notez que pour chaque touche actionnée, le champ de texte envoie un événement avant que le clip container ne distribue un événement.

Le système d’exploitation et le navigateur Web traiteront les événements de clavier avant Adobe Flash Player ou AIR. Par exemple, dans Microsoft Internet Explorer, lorsque vous appuyez sur Ctrl+W, vous fermez la fenêtre du navigateur avant qu’un fichier SWF contenu ne distribue un événement de clavier.