IME sınıfını kullanma

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

IME sınıfı, Flash Player veya Adobe AIR uygulamasında, işletim sisteminin IME'sini işlemenize olanak sağlar.

ActionScript'i kullanarak şunları belirleyebilirsiniz:

  • Kullanıcının bilgisayarında bir IME yüklü olup olmadığı (Capabilities.hasIME)

  • Kullanıcının bilgisayarında IME'nin etkinleştirilmiş mi yoksa devre dışı mı bırakılmış olduğu (IME.enabled)

  • Geçerli IME'nin kullandığı dönüştürme modu (IME.conversionMode)

Girdi metni alanını belirli bir IME bağlamıyla ilişkilendirebilirsiniz. Girdi alanları arasında geçiş yaptığınızda, Hiragana (Japonca), tam genişlikte sayılar, yarım genişlikte sayılar, doğrudan girdi, vb. arasında da IME'yi değiştirebilirsiniz.

IME, kullanıcıların Çince, Japonca ve Korece gibi çok baytlı dillerde ASCII olmayan metin karakterlerini yazmasına olanak sağlar.

IME'lerle çalışma hakkında daha fazla bilgi için, uygulamanızı geliştirdiğiniz işletim sisteminin belgelerine bakın. Ek kaynaklar için, aşağıdaki web sitelerine bakın:

Not: Bir IME, kullanıcının bilgisayarında etkin değilse, Capabilities.hasIME dışındaki IME yöntemlerine veya özelliklerine yapılan çağrılar başarısız olur. Bir IME'yi elle etkinleştirdikten sonra, ardından IME yöntemlerine ve özelliklerine yapılan ActionScript çağrıları beklenen şekilde gerçekleşir. Örneğin, Japonca IME kullanıyorsanız, herhangi bir IME yöntemini veya özelliğini çağırabilmeniz için öncelikle bu IME'yi etkinleştirmeniz gerekir.

IME'nin yüklü ve etkinleştirilmiş olup olmadığını kontrol etme

Herhangi bir IME yöntemini veya özelliğini çağırmadan önce, kullanıcının bilgisayarında geçerli olarak IME'nin yüklü ve etkinleştirilmiş olup olmadığını kontrol etmeniz gerekir. Aşağıdaki kod, siz herhangi bir yöntem çağırmadan önce kullanıcıda IME yüklü ve etkinleştirilmiş olup olmadığının nasıl kontrol edildiğini gösterir:

if (Capabilities.hasIME) 
{ 
    if (IME.enabled) 
    { 
        trace("IME is installed and enabled."); 
    } 
    else 
    { 
        trace("IME is installed but not enabled. Please enable your IME and try again."); 
    } 
} 
else 
{ 
    trace("IME is not installed. Please install an IME and try again."); 
}

Önceki kod Capabilities.hasIME özelliğini kullanarak, kullanıcının bir IME yüklemiş olup olmadığını kontrol eder. Bu özellik true değerine ayarlanırsa, kod, IME.enabled özelliğini kullanarak, kullanıcının IME'sinin geçerli olarak etkinleştirilmiş olup olmadığını kontrol eder.

Geçerli olarak hangi IME dönüştürme modunun etkinleştirilmiş olduğunu belirleme

Çok dilli uygulamalar oluşturduğunuzda, geçerli olarak kullanıcıda hangi dönüştürme modunun etkin olduğunu belirlemeniz gerekebilir. Aşağıdaki kod, kullanıcıda IME yüklü olup olmadığının ve IME yüklüyse, hangi IME dönüştürme modunun geçerli olarak etkin olduğunun nasıl kontrol edildiğini gösterir:

if (Capabilities.hasIME) 
{ 
    switch (IME.conversionMode) 
    { 
        case IMEConversionMode.ALPHANUMERIC_FULL: 
            tf.text = "Current conversion mode is alphanumeric (full-width)."; 
            break; 
        case IMEConversionMode.ALPHANUMERIC_HALF: 
            tf.text = "Current conversion mode is alphanumeric (half-width)."; 
            break; 
        case IMEConversionMode.CHINESE: 
            tf.text = "Current conversion mode is Chinese."; 
            break; 
        case IMEConversionMode.JAPANESE_HIRAGANA: 
            tf.text = "Current conversion mode is Japananese Hiragana."; 
            break; 
        case IMEConversionMode.JAPANESE_KATAKANA_FULL: 
            tf.text = "Current conversion mode is Japanese Katakana (full-width)."; 
            break; 
        case IMEConversionMode.JAPANESE_KATAKANA_HALF: 
            tf.text = "Current conversion mode is Japanese Katakana (half-width)."; 
            break; 
        case IMEConversionMode.KOREAN: 
            tf.text = "Current conversion mode is Korean."; 
            break; 
        default: 
            tf.text = "Current conversion mode is " + IME.conversionMode + "."; 
            break; 
    } 
} 
else 
{ 
    tf.text = "Please install an IME and try again."; 
}

Önceki kod ilk olarak kullanıcıda IME yüklü olup olmadığını kontrol eder. Daha sonra IME.conversionMode özelliğini, IMEConversionMode sınıfındaki sabitlerin her biriyle karşılaştırarak geçerli IME'nin hangi dönüştürme modunu kullandığını kontrol eder.

IME dönüştürme modunu ayarlama

Kullanıcının IME'sinin dönüştürme modunu değiştirdiğinizde, kodun bir try..catch bloğu içinde sarıldığından emin olmanız gerekir, bunun nedeni, IME dönüştürme modunu ayarlayamazsa, conversionMode özelliği kullanılarak dönüştürme modu ayarlandığında bir hata atılabilmesidir. Aşağıdaki kod, try..catch bloğunun, IME.conversionMode özelliği ayarlanırken nasıl kullanıldığını gösterir:

var statusText:TextField = new TextField; 
statusText.autoSize = TextFieldAutoSize.LEFT; 
addChild(statusText); 
if (Capabilities.hasIME) 
{ 
    try 
    { 
        IME.enabled = true; 
        IME.conversionMode = IMEConversionMode.KOREAN; 
        statusText.text = "Conversion mode is " + IME.conversionMode + "."; 
    } 
    catch (error:Error) 
    { 
        statusText.text = "Unable to set conversion mode.\n" + error.message; 
    } 
}

Önceki kod ilk önce, kullanıcıya durum mesajı görüntülemek için kullanılan bir metin alanını oluşturur. Daha sonra, IME yüklüyse, kod IME'yi etkinleştirir ve dönüştürme modunu Korece olarak ayarlar. Kullanıcının bilgisayarında Korece IME yükü değilse, Flash Player veya AIR tarafından bir hata atılır ve bu hata try..catch bloğu tarafından yakalanır. try..catch bloğu, önceden oluşturulan metin alanında hata mesajını görüntüler.

Belirli metin alanları için IME'yi devre dışı bırakma

Bazı durumlarda, kullanıcılar karakterleri yazarken kullanıcıların IME'sini devre dışı bırakmak isteyebilirsiniz. Örneğin, yalnızca sayısal girdiyi kabul eden bir metin alanınız varsa, IME'nin gelip veri girişini yavaşlatmasını istemeyebilirsiniz.

Aşağıdaki örnek, FocusEvent.FOCUS_IN ve FocusEvent.FOCUS_OUT olaylarını nasıl dinleyip buna göre kullanıcının IME'sini devre dışı bırakabileceğinizi göstermektedir:

var phoneTxt:TextField = new TextField(); 
var nameTxt:TextField = new TextField(); 
 
phoneTxt.type = TextFieldType.INPUT; 
phoneTxt.addEventListener(FocusEvent.FOCUS_IN, focusInHandler); 
phoneTxt.addEventListener(FocusEvent.FOCUS_OUT, focusOutHandler); 
phoneTxt.restrict = "0-9"; 
phoneTxt.width = 100; 
phoneTxt.height = 18; 
phoneTxt.background = true; 
phoneTxt.border = true; 
addChild(phoneTxt); 
 
nameField.type = TextFieldType.INPUT; 
nameField.x = 120; 
nameField.width = 100; 
nameField.height = 18; 
nameField.background = true; 
nameField.border = true; 
addChild(nameField); 
 
function focusInHandler(event:FocusEvent):void 
{ 
    if (Capabilities.hasIME) 
    { 
        IME.enabled = false; 
    } 
} 
function focusOutHandler(event:FocusEvent):void 
{ 
    if (Capabilities.hasIME) 
    { 
        IME.enabled = true; 
    } 
}

Bu örnek, phoneTxt ve nameTxt adında iki girdi metni alanı oluşturur ve sonra phoneTxt metin alanına iki olay dinleyicisi ekler. Kullanıcı odağı phoneTxt metin alanına ayarladığında, bir FocusEvent.FOCUS_IN olayı gönderilir ve IME devre dışı bırakılır. Odak phoneTxt metin alanından çıktığında, IME'yi yeniden etkinleştirmek için FocusEvent.FOCUS_OUT olayı gönderilir.

IME oluşturma olaylarını dinleme

IME oluşturma olayları, bir oluşturma dizesi ayarlandığında gönderilir. Örneğin, kullanıcının IME'si etkinleştirilmişse ve aktif durumdaysa, kullanıcı Japonca bir dize yazdığında, oluşturma dizesini seçtiği anda IMEEvent.IME_COMPOSITION olayı gönderilir. IMEEvent.IME_COMPOSITION olayını dinlemek için, aşağıdaki örnekte gösterildiği gibi, System sınıfında (flash.system.System.ime.addEventListener(...)) statik ime özelliğine bir olay dinleyicisi eklemeniz gerekir:

var inputTxt:TextField; 
var outputTxt:TextField; 
 
inputTxt = new TextField(); 
inputTxt.type = TextFieldType.INPUT; 
inputTxt.width = 200; 
inputTxt.height = 18; 
inputTxt.border = true; 
inputTxt.background = true; 
addChild(inputTxt); 
 
outputTxt = new TextField(); 
outputTxt.autoSize = TextFieldAutoSize.LEFT; 
outputTxt.y = 20; 
addChild(outputTxt); 
 
if (Capabilities.hasIME) 
{ 
    IME.enabled = true; 
    try 
    { 
        IME.conversionMode = IMEConversionMode.JAPANESE_HIRAGANA; 
    } 
    catch (error:Error) 
    { 
        outputTxt.text = "Unable to change IME."; 
    } 
    System.ime.addEventListener(IMEEvent.IME_COMPOSITION, imeCompositionHandler); 
} 
else 
{ 
    outputTxt.text = "Please install IME and try again."; 
} 
 
function imeCompositionHandler(event:IMEEvent):void 
{ 
    outputTxt.text = "you typed: " + event.text; 
}

Önceki kod iki metin alanı oluşturur ve bu metin alanlarını görüntüleme listesine ekler. Birinci metin alanı olan inputTxt, kullanıcının Japonca metin girmesine olanak sağlayan bir girdi metni alanıdır. İkinci metin alanı olan outputTxt, kullanıcıya hata mesajları görüntüleyen veya kullanıcının inputTxt metin alanına yazdığı Japonca dizeyi yankılayan bir dinamik metin alanıdır.