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.
|
|
|
|
|