IME クラスの使用

Flash Player 9 以降、Adobe AIR 1.0 以降

IME クラスを使用すると、オペレーティングシステムの IME を Flash Player または Adobe AIR 内で操作できます。

ActionScript から、次の事項を調べることができます。

  • ユーザーのコンピューターに IME がインストールされているかどうか( Capabilities.hasIME

  • ユーザーのコンピューターで IME が有効になっているかどうか( IME.enabled

  • 現在の IME で使用されている変換モード( IME.conversionMode

テキスト入力フィールドを特定の IME コンテキストに関連付けることができます。 それにより、入力フィールド間をフォーカスが移動するのに従って IME の変換モード(ひらがな、全角数字、半角数字、直接入力など)の切り替えができます。

IME を使用すると、中国語、日本語、韓国語といったマルチバイトの言語で ASCII 以外の文字を入力できるようになります。

IME の使用方法の詳細については、アプリケーションの開発対象であるオペレーティングシステムのマニュアルを参照してください。 追加情報については、次の Web サイトを参照してください。

注意: IME がユーザーのコンピューターでアクティブではない場合、IME のメソッドまたはプロパティの呼び出しは、 Capabilities.hasIME を除き、失敗します。IME を手動でアクティブにすると、それ以降の ActionScript による 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 変換モードが現在アクティブであるかを確認する方法を示しています。

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 がどの変換モードを使用しているかを確認するために、 IME.conversionMode プロパティを IMEConversionMode クラス内のそれぞれの定数と照合します。

IME 変換モードの設定

ユーザーの IME の変換モードを変更するときは、コードが try..catch ブロック内にラップされていることを確認する必要があります。なぜなら、 conversionMode プロパティを使用して変換モードを設定すると、IME が変換モードを設定できない場合にエラーがスローされる可能性があるからです。次のコードは、 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 によってエラーがスローされ、 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 という 2 つの入力テキストフィールドを作成した後、2 つのイベントリスナーを phoneTxt テキストフィールドに追加します。ユーザーが phoneTxt テキストフィールドにフォーカスを設定すると、 FocusEvent.FOCUS_IN イベントが送出され、IME は無効になります。 phoneTxt テキストフィールドがフォーカスを失うと、 FocusEvent.FOCUS_OUT イベントが送出され、IME が再び有効になります。

IME 入力イベントの待ち受け

IME 入力イベントは、入力ストリングが設定されようとしているときに送出されます。 例えば、ユーザーが IME を有効にしてあり、それをアクティブにして日本語でストリングを入力する場合、ユーザーが入力ストリングを選択すると同時に IMEEvent.IME_COMPOSITION イベントが送出されます。 IMEEvent.IME_COMPOSITION イベントを待ち受けるためには、次の例に示すように、System クラス( flash.system.System.ime.addEventListener(...) )の静的プロパティ ime にイベントリスナーを追加する必要があります。

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; 
}

上記のコードは 2 つのテキストフィールドを作成し、表示リストに追加します。最初のテキストフィールド、 inputTxt は、ユーザーが日本語テキストを入力できる入力テキストフィールドです。2 番目のテキストフィールド、 outputTxt は、ユーザーに対するエラーメッセージを表示するか、ユーザーが inputTxt テキストフィールドに入力した日本語ストリングをエコーするための動的テキストフィールドです。