使用 IME 類別
Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本
IME 類別可讓您在 Flash Player 或 Adobe AIR 中操作作業系統的 IME。
您可以使用 ActionScript 判斷下列資訊:
使用者的電腦中是否已安裝 IME (Capabilities.hasIME)
使用者的電腦目前啟用或停用 IME (IME.enabled)
目前 IME 所使用的轉換模式 (IME.conversionMode)
您可以將輸入文字欄位與特定的 IME 內容產生關聯。當您在多個輸入欄位之間進行切換時,也可以將 IME 切換為平假名 (日文)、全形數字、半形數字和直接輸入等等。
IME 可讓使用者以多位元組的語言 (例如中文、日文及韓文) 輸入非 ASCII 的文字字元。
如需有關使用 IME 的詳細資訊,請參閱您為其開發應用程式之作業系統的說明文件。如需其它資源,請參閱下列網站:
備註: 如果 IME 未在使用者的電腦上啟用,呼叫 Capabilities.hasIME 之外的 IME 方法或屬性便會失敗。 您以手動方式啟用 IME 之後,對於 IME 方法和屬性的後續 ActionScript 呼叫都會如預期地發揮作用。例如,假設您使用的是日文 IME,則必須在呼叫任何 IME 方法或屬性之前啟用該 IME。
檢查是否已安裝並啟用 IME
在您呼叫任何 IME 方法或屬性之前,請務必檢查目前使用者的電腦中是否已安裝並啟用該 IME。下列程式碼說明如何在呼叫任何方法之前,檢查使用者是否已安裝並啟動 IME:
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.");
}
上述程式碼會先檢查使用者是否已使用 Capabilities.hasIME 屬性,安裝了 IME。如果將此屬性設定為 true,程式碼接著就會使用 IME.enabled 屬性,檢查使用者目前是否已啟用該 IME。
判斷目前所啟用的 IME 轉換模式
建置多國語言應用程式時,您可能需要判斷使用者目前已啟動的轉換模式。下列程式碼說明如何檢查使用者是否已安裝 IME,以及如果已經安裝,那麼目前啟動的 IME 轉換模式為何:
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.";
}
上述程式碼會先檢查使用者是否已安裝 IME,然後再藉由比較 IME.conversionMode 屬性與 IMEConversionMode 類別中的每一個常數,檢查目前使用的 IME 轉換模式為何。
設定 IME 轉換模式
當您變更使用者的 IME 轉換模式時,必須確保程式碼是位於 try..catch 區塊中,因為如果 IME 無法設定轉換模式時,使用 conversionMode 屬性來設定轉換模式便會擲回錯誤。下列程式碼會示範如何使用 try..catch 區段來設定 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;
}
}
上述程式碼會先建立文字欄位,以便用來向使用者顯示狀態訊息。接著,如果已安裝 IME,則此程式碼會啟用 IME,並將轉換模式設定為韓文。如果使用者的電腦中沒有安裝韓文 IME,Flash Player 或 AIR 就會擲回錯誤,而且 try..catch 區塊便會捕捉到此錯誤。try..catch 區塊會在先前建立的文字欄位中顯示該錯誤訊息。
停用特定文字欄位的 IME
在某些情況下,您可能要在使用者輸入字元期間,停用使用者的 IME。例如,假設某個文字欄位只接受數值輸入,您可能就不希望 IME 出現並拖慢資料輸入的速度。
下列範例會示範如何偵聽 FocusEvent.FOCUS_IN 和 FocusEvent.FOCUS_OUT 事件,並加以停用使用者的 IME:
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;
}
}
此範例會先建立 phoneTxt 和 nameTxt 兩個輸入文字欄位,然後再將兩個事件偵聽程式加入至 phoneTxt 文字欄位。當使用者將焦點設定為 phoneTxt 文字欄位時,就會傳送 FocusEvent.FOCUS_IN 事件並停用 IME。當 phoneTxt 文字欄位失去焦點時,則會傳送 FocusEvent.FOCUS_OUT 事件並重新啟用 IME。
偵聽 IME 組成事件
當設定組成字串時,就會傳送 IME 組成事件。例如,假設使用者已啟用並啟動 IME,然後以日文輸入字串,則一旦使用者選取該組成字串,就會傳送 IMEEvent.IME_COMPOSITION 事件。為了偵聽 IMEEvent.IME_COMPOSITION 事件,您必須將事件偵聽程式加入至 System 類別中的靜態 ime 屬性 (flash.system.System.ime.addEventListener(...)),如下所示:
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;
}
上述程式碼會建立兩個文字欄位,並加入顯示清單中。第一個文字欄位 inputTxt 是可讓使用者輸入日文文字的輸入文字欄位,第二個文字欄位 outputTxt 是動態文字欄位,可讓使用者看到錯誤訊息,或回應使用者在 inputTxt 文字欄位中輸入的日文字串。