关 中 输 法
2010-04-10 15:04 宝宝合凤凰 阅读(481) 评论(0) 收藏 举报| 使用 IME 類別 | |||
问题的重现过程如下:
打开输入法聊天的情况下,点击了游戏NPC对话打开NPC对话框。在没有关闭输入法的情况下,选择一个键盘小游戏。此时游戏中的键盘上下左右侦听会失效。
遇到这种情况我们可以利用AS3的一个输入法控制的类——IME,在打开小游戏的时候自动关闭输入法。
IME类很简单,记住两个属性就行了。
属性:IME.enabled 当输入法打开时值为true 设置为false将关闭输入法。
属性:IME.conversionMode 大陆地区默认值通常为"CHINESE",设置值为ALPHANUMERIC_HALF可以进入半角输入状态
使用 IME 類別
IME 類別可讓您在 Flash Player 中操作作業系統的 IME。
您可以使用 ActionScript 判斷下列資訊:
- 使用者的電腦中是否有安裝 IME (
Capabilities.hasIME) - 使用者的電腦目前啟用或停用 IME (
IME.enabled) - 目前 IME 所使用的轉換模式 (
IME.conversionMode)
您可以將輸入文字欄位與特定的 IME 內容產生關聯。當您在多個輸入欄位之間進行切換時,也可以將 IME 切換為平假名 (日文)、全形數字、半形數字和直接數入等等。
IME 可讓使用者以多位元組的語言 (例如中文、日文及韓文) 輸入非 ASCII 的文字字元。
如需有關使用 IME 的詳細資訊,請參閱您在為其開發應用程式之作業系統的說明文件。如需其它資源,請參閱下列網站:
- http://www.microsoft.com/globaldev/default.mspx
- http://developer.apple.com/documentation/
- http://java.sun.com/
|
注意 |
|
如果使用者的電腦中未啟用 IME,則呼叫 |
副主題
檢查是否已安裝並啟用 IME
在您呼叫任何 IME 方法或屬性之前,請務必檢查使用者的電腦中是否已安裝並啟用該 IME。下列程式碼會說明如何在呼叫任何方法之前,檢查使用者是否已安裝並啟動 IME:
if (Capabilities.hasIME)
{
if (IME.enabled)
{
trace("IME 已安裝且啟用。");
}
else
{
trace("IME 已安裝,但尚未啟用。請啟用您的 IME 並再試一次。");
}
}
else
{
trace("IME 尚未安裝。請安裝一項 IME 並再試一次。");
}
上一段程式碼會先使用 Capabilities.hasIME 屬性,檢查使用者是否已安裝 IME。如果將此屬性設定為 true,程式碼接著就會使用 IME.enabled 屬性,檢查使用者目前是否已啟用該 IME。
判斷目前所啟用的 IME 轉換模式
建置多國語言應用程式時,您可能需要判斷使用者目前啟動的轉換模式。下列程式碼會說明如何檢查使用者是否已安裝 IME,以及如果已經安裝,那麼目前啟動的 IME 轉換模式為何:
if (Capabilities.hasIME)
{
switch (IME.conversionMode)
{
case IMEConversionMode.ALPHANUMERIC_FULL:
tf.text = "目前的轉換模式為全形英數模式。";
break;
case IMEConversionMode.ALPHANUMERIC_HALF:
tf.text = "目前的轉換模式為半形英數模式。";
break;
case IMEConversionMode.CHINESE:
tf.text = "目前的轉換模式為中文模式。";
break;
case IMEConversionMode.JAPANESE_HIRAGANA:
tf.text = "目前的轉換模式為日文平假名模式。";
break;
case IMEConversionMode.JAPANESE_KATAKANA_FULL:
tf.text = "目前的轉換模式為日文全形片假名模式。";
break;
case IMEConversionMode.JAPANESE_KATAKANA_HALF:
tf.text = "目前的轉換模式為日文半形片假名模式。";
break;
case IMEConversionMode.KOREAN:
tf.text = "目前的轉換模式為韓文模式。";
break;
default:
tf.text = "目前的轉換模式為 " + IME.conversionMode + ".";
break;
}
}
else
{
tf.text = "請安裝 IME 並再試一次。";
}
上一段程式碼會先檢查使用者是否已安裝 IME。然後再藉由比較 IME.conversionMode 屬性與 IMEConversionMode 類別中的每一個常數,檢查目前使用的 IME 轉換模式為何。
設定 IME 轉換模式
當您變更使用者的 IME 轉換模式時,必須確定該段程式碼是位於 try..catch 區段中,因為如果 IME 無法設定轉換模式時,使用 conversionMode 屬性來設定轉換模式便會擲回錯誤。下列程式碼說明在設定 IME.conversionMode 屬性時,try..catch 區塊的使用方式:
var statusText:TextField = new TextField;
statusText.autoSize = TextFieldAutoSize.LEFT;
addChild(statusText);
if (Capabilities.hasIME)
{
try
{
IME.enabled = true;
IME.conversionMode = IMEConversionMode.KOREAN;
statusText.text = "轉換模式為 " + IME.conversionMode + ".";
}
catch (error:Error)
{
statusText.text = "無法設定轉換模式。\n" + error.message;
}
}
上一段程式碼會先建立文字欄位,以便用來向使用者顯示狀態訊息。接著,如果已安裝 IME,則此程式碼會啟用 IME 並將轉換模式設定為韓文。如果使用者的電腦中沒有安裝韓文 IME,Flash Player 就會擲回錯誤,而且 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 = "請安裝 IME 並再試一次。";
}
function imeCompositionHandler(event:IMEEvent):void
{
outputTxt.text = "您輸入了: " + event.text;
}
上一段程式碼會建立兩個文字欄位,並將之加入至顯示清單中。第一個文字欄位 inputTxt 是可讓使用者輸入日文文字的輸入文字欄位,第二個文字欄位 outputTxt 是動態文字欄位,可讓使用者看到錯誤訊息,或回送使用者在 inputTxt 文字欄位中輸入的日文字串。
浙公网安备 33010602011771号