Toetsenbordinvoer vastleggen

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

U kunt ervoor zorgen dat weergaveobjecten die het interactiemodel overerven van de klasse InteractiveObject, op toetsenbordgebeurtenissen reageren door gebeurtenislisteners te gebruiken. U kunt bijvoorbeeld een gebeurtenislistener in het werkgebied plaatsen om te luisteren naar en te reageren op toetsenbordinvoer. In de volgende code legt een gebeurtenislistener een toetsdruk vast, waarna de eigenschappen van de toetsnaam en de toetscode worden weergegeven:

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

Sommige toetsen, zoals Ctrl, genereren wel gebeurtenissen, maar hebben geen glyph-aanduiding.

In het vorige codevoorbeeld wordt toetsenbordinvoer voor het hele werkgebied door de toetsenbordgebeurtenislistener vastgelegd. U kunt ook een gebeurtenislistener voor een specifiek weergaveobject in het werkgebied schrijven; deze gebeurtenislistener wordt geactiveerd wanneer het object focus heeft.

In het volgende voorbeeld worden toetsaanslagen alleen in het deelvenster Uitvoer weergegeven wanneer de gebruiker iets in de instantie TextField invoert. Als u Shift ingedrukt houdt, wordt de rand van TextField tijdelijk rood.

In deze code wordt aangenomen dat er een instantie TextField met de naam tf in het werkgebied bestaat.

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; 
    } 
}

De klasse TextField maakt ook melding van een gebeurtenis textInput waar u naar kunt luisteren wanneer een gebruiker tekst invoert. Zie Tekstinvoer vastleggen voor meer informatie.

Opmerking: In de AIR-runtime kan een toetsenbordgebeurtenis worden geannuleerd. In de Flash Player-runtime kan een toetsenbordgebeurtenis niet worden geannuleerd.

Toetscodes en tekencodes

U kunt toegang krijgen tot de eigenschappen keyCode en charCode van een toetsenbordgebeurtenis om te bepalen welke toets is ingedrukt en vervolgens andere handelingen te activeren. De eigenschap keyCode is een numerieke waarde die overeenkomt met de waarde van een toets op het toetsenbord. De eigenschap charCode is de numerieke waarde van die toets in de huidige tekenset. (De standaardtekenset is UTF-8, die ASCII ondersteunt.)

Het voornaamste verschil tussen de toetscode en de tekenwaarden is het feit dat een toetscodewaarde voor een bepaalde toets op het toetsenbord staat (de 1 op het numerieke toetsenblok verschilt van de 1 op de bovenste rij, maar de toets waarmee ‘1’ wordt gegenereerd is gelijk aan de toets waarmee ‘!’ wordt gegenereerd), terwijl de tekenwaarde voor een bepaald teken staat (de tekens R en r zijn verschillend).

Opmerking: Zie de klasse flash.ui.Keyboard in de Naslaggids voor ActionScript 3.0 voor het Adobe Flash-platform voor meer informatie over de toewijzingen van toetsen aan de bijbehorende tekencodewaarden in ASCII.

De toewijzingen tussen toetsen en de bijbehorende toetscodes zijn afhankelijk van het apparaat en het besturingssysteem. Gebruik daarom geen toetstoewijzingen om handelingen te activeren. Gebruik in plaats daarvan de vooraf gedefinieerde constante waarden die worden aangeboden via de klasse Keyboard ter verwijzing naar de gewenste eigenschappen keyCode . Gebruik in plaats van de toetstoewijzing voor Shift bijvoorbeeld de constante Keyboard.SHIFT (zoals getoond in het vorige codevoorbeeld).

Hogere prioriteit KeyboardEvent

Zoals ook bij andere gebeurtenissen het geval is, wordt de volgorde van toetsenbordgebeurtenissen bepaald door de hiërarchie van weergaveobjecten en niet door de volgorde waarin methoden addEventListener() in code worden toegewezen.

Stel bijvoorbeeld dat u een tekstveld met de naam tf in een filmclip met de naam container plaatst en een gebeurtenislistener voor een toetsenbordgebeurtenis aan beide instanties toevoegt, zoals getoond in het volgende voorbeeld:

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 + ")"); 
}

Aangezien zowel het tekstveld als de bovenliggende container een listener bevat, wordt de functie reportKeyDown() voor elke toetsaanslag in TextField tweemaal aangeroepen. Voor elke ingedrukte toets verzendt het tekstveld een gebeurtenis voordat de filmclip container een gebeurtenis verzendt.

Het besturingssysteem en de webbrowser verwerken toetsenbordgebeurtenissen vóór Adobe Flash Player of AIR. Als er bijvoorbeeld in Microsoft Internet Explorer op Ctrl+W wordt gedrukt, wordt het browservenster gesloten voordat een eventueel daarin opgenomen SWF-bestand een toetsenbordgebeurtenis verzendt.