使用 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_INFocusEvent.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; 
    } 
}

此範例會先建立 phoneTxtnameTxt 兩個輸入文字欄位,然後再將兩個事件偵聽程式加入至 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 文字欄位中輸入的日文字串。