Verwenden der IME-Klasse

Flash Player 9 und höher, Adobe AIR 1.0 und höher

Mit der IME-Klasse können Sie den Eingabemethoden-Editor (IME) des Betriebssystems über Flash Player oder AIR steuern.

Mit ActionScript können Sie ermitteln,

  • ob ein IME auf dem Computer des Benutzers installiert ist ( Capabilities.hasIME ),

  • ob der IME auf dem Computer des Benutzers aktiviert oder deaktiviert ist ( IME.enabled ),

  • welchen Konvertierungsmodus der aktuelle IME verwendet ( IME.conversionMode ).

Sie können ein Eingabetextfeld mit einem bestimmten IME-Kontext verknüpfen. Wenn Sie zwischen Eingabefeldern wechseln, können Sie auch den IME beispielsweise zwischen Hiragana (Japanisch), Ziffern mit voller Breite, Ziffern mit halber Breite, direkter Eingabe usw. umschalten.

Benutzer können mithilfe eines IME ASCII-fremde Textzeichen aus Multibyte-Sprachen wie Chinesisch, Japanisch oder Koreanisch eingeben.

Weitere Informationen zur Verwendung von IMEs finden Sie in der Dokumentation des Betriebssystems, für das Sie die Anwendung entwickeln. Weitere Ressourcen finden Sie auf den folgenden Websites:

Hinweis: Wenn ein IME auf dem Computer des Benutzers deaktiviert ist, treten mit Ausnahme von Capabilities.hasIME beim Aufrufen von „IME“-Methoden oder „IME“-Eigenschaften Fehler auf. Nach dem Aktivieren eines IME werden ActionScript-Aufrufe von „IME“-Methoden und „IME“-Eigenschaften wie erwartet durchgeführt. Wenn Sie beispielsweise einen IME für Japanisch verwenden, muss dieser aktiviert werden, bevor IME-Methoden oder IME-Eigenschaften aufgerufen werden können.

Überprüfen, ob ein IME installiert und aktiviert ist

Vor dem Aufrufen von IME-Methoden oder IME-Eigenschaften sollten Sie immer überprüfen, ob auf dem Computer des Benutzers ein IME installiert und aktiviert ist. Im folgenden Codebeispiel wird veranschaulicht, wie Sie vor dem Aufrufen von Methoden überprüfen können, ob ein IME installiert und aktiviert ist:

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

Mit diesem Code wird zunächst mithilfe der Capabilities.hasIME -Eigenschaft überprüft, ob ein IME installiert ist. Wenn diese Eigenschaft auf true gesetzt ist, wird dann mit der IME.enabled -Eigenschaft überprüft, ob der IME aktiviert ist.

Ermitteln des derzeit aktivierten IME-Konvertierungsmodus

Beim Erstellen mehrsprachiger Anwendungen müssen Sie möglicherweise ermitteln, welcher Konvertierungsmodus aktiviert ist. Mit dem folgenden Codebeispiel wird veranschaulicht, wie überprüft wird, ob ein IME installiert ist, und wenn ja, welcher IME-Konvertierungsmodus aktiviert ist:

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

Mit diesem Code wird zunächst überprüft, ob ein IME installiert ist. Anschließend wird überprüft, welcher Konvertierungsmodus im aktuellen IME verwendet wird. Dazu wird die IME.conversionMode -Eigenschaft mit den einzelnen Konstanten der IMEConversionMode-Klasse verglichen.

Festlegen des IME-Konvertierungsmodus

Beim Ändern des Konvertierungsmodus des Benutzer-IME müssen Sie sicherstellen, dass der Code in einen try..catch -Block eingeschlossen ist, da das Festlegen eines Konvertierungsmodus mit der conversionMode -Eigenschaft einen Fehler auslösen kann, wenn der IME den Konvertierungsmodus nicht festlegen kann. Das folgende Beispiel veranschaulicht, wie Sie den try..catch -Block beim Festlegen der IME.conversionMode -Eigenschaft verwenden:

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

Mit diesem Code wird zunächst ein Textfeld erstellt, in dem eine Statusmeldung angezeigt werden kann. Wenn der IME installiert ist, wird dieser dann aktiviert und der Konvertierungsmodus auf Koreanisch gesetzt. Wenn auf dem Computer des Benutzers kein koreanischer IME installiert ist, wird in Flash Player oder AIR ein Fehler ausgelöst und vom try..catch -Block abgefangen. Der try..catch -Block zeigt die Fehlermeldung in dem zuvor erstellten Textfeld an.

Deaktivieren des IME für bestimmte Textfelder

In einigen Fällen können Sie bei Bedarf den IME eines Benutzers deaktivieren, während der Benutzer Zeichen eingibt. Bei einem Textfeld, in dem nur numerische Zeichen eingegeben werden können, kann der IME beispielsweise deaktiviert werden, sodass die Dateneingabe nicht verlangsamt wird.

Im folgenden Codebeispiel wird veranschaulicht, wie Sie die Ereignisse FocusEvent.FOCUS_IN und FocusEvent.FOCUS_OUT überwachen und den IME des Benutzers entsprechend deaktivieren können:

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

In diesem Beispiel werden die beiden Eingabetextfelder phoneTxt und nameTxt erstellt. Dann werden zwei Ereignis-Listener zum Textfeld phoneTxt hinzugefügt. Wenn der Benutzer den Fokus auf das Textfeld phoneTxt setzt, wird ein FocusEvent.FOCUS_IN -Ereignis ausgelöst und der IME deaktiviert. Wenn das Textfeld phoneTxt nicht mehr den Fokus hat, wird das FocusEvent.FOCUS_OUT -Ereignis ausgelöst und der IME wieder aktiviert.

Überwachen von IME-Kompositionsereignissen

IME-Kompositionsereignisse werden ausgelöst, wenn ein Kompositionsstring festgelegt wird. Wenn der IME des Benutzers installiert und aktiviert ist und der Benutzer beispielsweise einen String auf Japanisch eingibt, wird das IMEEvent.IME_COMPOSITION -Ereignis ausgelöst, sobald der Benutzer den Kompositionsstring auswählt. Um das IMEEvent.IME_COMPOSITION -Ereignis überwachen zu können, müssen Sie einen Ereignis-Listener zur statischen ime -Eigenschaft der System-Klasse hinzufügen ( flash.system.System.ime.addEventListener(...) ), wie im folgenden Beispiel dargestellt:

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

Mit diesem Code werden zwei Textfelder erstellt und dann zur Anzeigeliste hinzugefügt. Das erste Textfeld inputTxt ist ein Eingabetextfeld, in dem der Benutzer japanischen Text eingeben kann. Das zweite Textfeld outputTxt ist ein dynamisches Textfeld, in dem Fehlermeldungen angezeigt werden oder in dem der japanische String wiederholt wird, den der Benutzer im Textfeld inputTxt eingibt.