Klavye girdisini yakalama

Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü

Etkileşim modelini InteractiveObject sınıfından miras alan görüntüleme nesneleri olay dinleyici kullanarak klavye olaylarına yanıt verebilir. Mesela Sahne alanına klavye girişini dinleyecek ve yanıt verecek bir olay dinleyici yerleştirebilirsiniz. Aşağıdaki kodda bir olay dinleyici basılan bir tuşu yakalar ve tuş adı ile tuş kod özellikleri görüntülenir:

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

Ctrl tuşu gibi bazı tuşlar herhangi bir glif temsil etmiyor olsa da olay oluştururlar.

Bir önceki kod örneğinde, klavye olay dinleyicisi Sahne alanının tümü için klavye girişi yakalamıştı. Ayrıca Sahne alanı üzerindeki belirli bir görüntüleme nesnesi için bir olay dinleyicisi yazabilirsiniz; bu olay dinleyicisi nesne odaklı olduğunda tetiklenir.

Aşağıdaki örnekte tuş vuruşları sadece kullanıcı TextField örneği içerisine yazdığı zaman Çıktı paneline yansıtılmaktadır. Shift tuşu basılı tutulduğunda TextField öğesinin kenarlık rengi geçici olarak kırmızıya dönüşür.

Bu kod Sahne alanında tf adlı bir TextField örneği olduğunu varsayar.

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

TextField sınıfı ayrıca bir kullanıcı metin girdiğinde dinleyebileceğiniz bir textInput olayı rapor eder. Daha fazla bilgi için Metin girdisi yakalama bölümünü inceleyin.

Not: AIR çalışma zamanında, bir klavye olayı iptal edilebilir. Flash Player çalışma zamanında, bir klavye olayı iptal edilemez.

Tuş kodları ve karakter kodları

Basılan tuşu belirlemek ve diğer eylemleri tetiklemek için bir klavye olayının keyCode ve charCode özelliklerine erişebilirsiniz. keyCode özelliği klavyedeki bir tuşun değerine karşılık gelen sayısal değerdir. charCode özelliği ise o tuşun geçerli karakter kümesi içindeki sayısal değeridir. (Varsayılan karakter kümesi ASCII destekleyen UTF-8'dir.)

Tuş kodu ve karakter değeri arasındaki temel fark bir tuş kodu değerinin klavye üzerindeki belirli bir tuşu temsil etmesi (sayısal tuş takımındaki 1 harf tuşlarının üst sırasındaki 1'den farklıdır ancak "1"i çıkaran tuş ve "!" çıkaran tuş aynıdır) ve karakter değerinin belirli bir karakteri temsil etmesidir. (R ve r karakterleri birbirinden farklıdır.)

Not: ASCII'da anahtarlar ve karakter kod değerleri arasındaki eşlemeler için, Adobe Flash Platformu için ActionScript 3.0 Başvurusu'ndaki flash.ui.Keyboard sınıfına bakın.

Tuşlar ve tuş kodları arasındaki eşlemeler cihaza ve işletim sistemine bağlıdır. Bu nedenle eylemleri tetiklemek için tuş eşlemeleri kullanmamanız gerekir. Onun yerine uygun keyCode özelliklerine başvurmak için Keyboard sınıfı tarafından sağlanan önceden tanımlı sabit değerleri kullanmanız gerekir. Örneğin, Shift tuşu için tuş eşleme kullanmak yerine Keyboard.SHIFT sabitini kullanın (yukarıdaki kod örneğinde gösterildiği gibi).

KeyboardEvent önceliği

Diğer olaylarda olduğu gibi klavye olay sırası kod içindeki addEventListener() yöntemlerinin atanma sırasına göre değil görüntüleme nesnesi hiyerarşisine göre belirlenir.

Aşağıdaki örnekte olduğu gibi container adlı bir film klibinin içerisine tf adlı bir metin alanı yerleştirdiğinizi ve her iki örneğe bir klavye olayı için bir olay dinleyicisi eklediğinizi düşünün:

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

Hem metin alanında hem de üst kabında bir dinleyici olduğundan TextField içerisindeki her tuş vuruşu için reportKeyDown() işlevi iki kez çağrılır. Her basılan tuş için container film klibinden önce metin alanının bir olay gönderdiğine dikkat edin.

İşletim sistemi ve web tarayıcı klavye olaylarını Adobe Flash Player ve AIR uygulamalarından önce işleyecektir. Örneğin, Microsoft Internet Explorer uygulamasında Ctrl+W tuş bileşimi herhangi bir SWF dosyası bir klavye olayı göndermeden tarayıcı penceresini kapatacaktır.