Documentation Flash CS3 |
|||
| Programmation avec ActionScript 3.0 > Capture des données saisies par l'utilisateur > Capture de la saisie au clavier | |||
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énements. 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 de la touche 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'instance 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 instance TextField nommé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 de la saisie de texte.
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 principale différence 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 en savoir plus sur le mappage entre les touches et les codes de caractère ASCII correspondants, voir Touches du clavier et valeurs de code correspondantes. |
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).
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 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 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 texte envoie un événement avant que le clip container distribue un événement.
Le système d'exploitation et le navigateur Web traiteront les événements de clavier avant Adobe Flash Player. 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 distribue un événement de clavier.
Flash CS3
M'envoyer un message électronique lorsque des commentaires sont ajoutés à cette page | Rapport de commentaire
Page en cours: http://livedocs.adobe.com/flash/9.0_fr/main/00000311.html