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