Använda klassen IME

Flash Player 9 och senare, Adobe AIR 1.0 och senare

Klassen IME gör att du kan hantera operativsystemets IME-program i Flash Player eller Adobe AIR.

Med ActionScript kan du kontrollera följande:

  • Om ett IME-program är installerat på användarens dator ( Capabilities.hasIME )

  • Om IME-programmet är aktiverat eller inaktiverat på användarens dator ( IME.enabled )

  • Vilket konverteringsläge som används av aktuellt IME-program ( IME.conversionMode )

Du kan koppla ett indatatextfält till en bestämd IME-kontext. När du växlar mellan indatafält kan du även växla IME-programmet mellan Hiragana (japanska), fullbredds numeriskt, halvbredds numeriskt, direktinmatning osv.

Med ett IME kan användare skriva tecken som saknar ASCII-kodning, till exempel kinesiska, japanska och koreanska.

Mer information om att arbeta med IME-program finns i dokumentationen för det operativsystem som du utvecklar programmet för. Fler resurser finns på följande webbplatser:

Obs! Om IME-programmet inte är aktivt på användarens dator går det inte att anropa andra IME-metoder eller IME-egenskaper än Capabilities.hasIME . När du har aktiverat IME-programmet manuellt, fungerar efterföljande ActionScript-anrop till IME-metoder och IME-egenskaper. Om du till exempel använder ett japansk IME-program måste du aktivera det innan du kan anropa någon IME-metod eller IME-egenskap.

Kontrollera om ett IME-program är installerat och aktiverat

Innan du anropar någon IME-metod eller IME-egenskap bör du alltid kontrollera om det finns ett IME-program installerat och aktiverat på användarens dator. Följande kod visar hur du kontrollerar om användaren har ett IME-program installerat och aktiverat innan du anropar någon metod:

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

Föregående kod kontrollerar först om användaren har ett IME-program installerat med hjälp av egenskapen Capabilities.hasIME . Om egenskapen är inställd på true kommer koden sedan att kontrollera om användarens IME-program är aktiverat. Detta görs med hjälp av egenskapen IME.enabled .

Kontrollera vilket IME-konverteringsläge som är aktiverat

När du skapar flerspråkiga program kan du behöva kontrollera vilket konverteringsläge som är aktivt hos användaren. Följande kod visar hur du kontrollerar om användaren har ett IME-program installerat och, om så är fallet, vilket IME-konverteringsläge som är aktivt:

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

Föregående kod kontrollerar först om användaren har ett IME-program installerat. Sedan kontrollerar koden vilket konverteringsläge det aktuella IME-programmet använder genom att jämföra egenskapen IME.conversionMode med alla konstanter i klassen IMEConversionMode.

Ställa in IME-konverteringsläget

När du ändrar konverteringsläget för användarens IME-program måste du se till att koden placeras inom ett try..catch -block, eftersom en inställning av konverteringsläget med hjälp av egenskapen conversionMode kan ge ett fel om IME-programmet inte kan ställa in konverteringsläget. I följande kod visas hur du använder ett try..catch -block när du ställer in egenskapen IME.conversionMode :

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

Föregående kod skapar först ett textfält, som används för att visa ett statusmeddelande för användaren. Om IME-programmet är installerat aktiverar koden sedan IME-programmet och ställer in konverteringsläget på koreanska. Om användarens datorn inte har ett koreanskt IME-program installerat, genereras ett fel av Flash Player eller AIR som fångas upp av try..catch -block. Blocket try..catch visar felmeddelandet i det tidigare skapade textfältet.

Inaktivera IME-programmet för vissa textfält

I vissa fall kanske du vill inaktivera användarens IME-program medan de skriver tecken. Om du till exempel har ett textfält som bara godtar numerisk inmatning, kanske du inte vill att IME-programmet ska visas och göra att inmatningen av data tar lång tid.

Följande exempel visar hur du kan lyssna efter händelserna FocusEvent.FOCUS_IN och FocusEvent.FOCUS_OUT och inaktivera användarens IME-program på lämpligt sätt:

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

Det här exemplet skapar två indatatextfält, phoneTxt och nameTxt , och lägger sedan till två händelseavlyssnare till textfältet phoneTxt . När användaren ställer in fokus på textfältet phoneTxt skickas en FocusEvent.FOCUS_IN -händelse och sedan inaktiveras IME-programmet. När textfältet phoneTxt förlorar fokus, skickas händelsen FocusEvent.FOCUS_OUT för att aktivera IME-programmet igen.

Lyssna efter IME-kompositionshändelser

IME-kompositionshändelser skickas när en kompositionssträng ställs in. Om användaren till exempel har sitt IME-program aktiverat och aktivt och skriver en sträng på japanska, skickas händelsen IMEEvent.IME_COMPOSITION så fort användaren väljer kompositionssträngen. För att kunna lyssna efter händelsen IMEEvent.IME_COMPOSITION måste du lägga till en händelseavlyssnare till den statiska händelsen ime i klassen System ( flash.system.System.ime.addEventListener(...) ), som i följande exempel:

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

I föregående kod skapas två textfält som läggs till i visningslistan. Det första textfältet, inputTxt , är ett indatatextfält som gör att användaren kan skriva japansk text. Det andra fältet, outputTxt , är ett dynamiskt textfält som visar felmeddelanden för användaren eller visar de japanska tecken som användaren skriver i textfältet inputTxt .