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
テキストフィールドに入力した日本語ストリングをエコーするための動的テキストフィールドです。
|
|
|