使用 IME 类

通过使用 IME 类,您可以在 Flash Player 中运用操作系统的 IME。

使用 ActionScript 可以确定以下内容:

可以使用特定 IME 上下文关联输入文本字段。在输入字段之间切换时,还可以在平假名(日文)、全角数字、半角数字、直接输入等之间切换 IME。

利用 IME,用户可键入多字节语言(例如中文、日文和韩文)的非 ASCII 文本字符。

有关使用 IME 的详细信息,请参阅要为其开发应用程序的操作系统的文档。要获取其它资源,请参阅以下 Web 站点:

注意

 

如果用户计算机上 IME 未处于活动状态,则调用 IME 方法或属性(除 Capabilities.hasIME 之外)将失败。一旦手动激活 IME,随后对 IME 方法和属性的 ActionScript 调用即会正常运行。例如,如果使用日文 IME,则必须在调用任何 IME 方法或属性之前将它激活。

子主题

查看是否已安装并启用了 IME
确定当前启用的是哪种 IME 转换模式
设置 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,以及在安装 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 块中,因为使用 conversionMode 属性设置转换模式时,如果 IME 不能设置转换模式,则可能会引发错误。以下代码说明了在设置 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 = "Conversion mode is " + IME.conversionMode + ".";
    }
    catch (error:Error)
    {
        statusText.text = "Unable to set conversion mode.\n" + error.message;
    }
}

上面的代码先创建一个文本字段,该字段用于向用户显示状态消息。接下来,如果已安装 IME,该代码会启用 IME 并将转换模式设置为“韩文”。如果用户计算机上未安装韩文 IME,Flash Player 将引发错误,并由 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 文本字段中键入的日文字符串。


Flash CS3

 

评论添加到页面后给我发送电子邮件 | 评论报告

当前页: http://livedocs.adobe.com/flash/9.0_cn/main/00000328.html