入力メソッドがアクティブ時に文字列を取得するには

【ご質問】
入力メソッドがアクティブの時(input-method-focus-behaviorがInputMethodFocusBehavior.activateの時)の
入力キーイベントや文字列を取得することは可能でしょうか?

【回答】
“StartCompositionEvent”、”CompositionChangeEvent”、
“EndCompositionEvent”、”CompositionResultEvent”を利用することで可能です。

これらのイベントを入力コントロールのUIクラスに記述してはいかがでしょうか。

詳細は以下のサンプルをご参照ください。

{curl 7.0,8.0 applet}
{curl-file-attributes character-encoding = “shift-jis”}
{applet
    {compiler-directives careful? = true}
}

{let start:Frame = {Frame color = “blue”, font-weight = “bold”}}
{let change:Frame = {Frame font-weight = “bold” }}
{let end:Frame = {Frame color = “blue”, font-weight = “bold”}}
{let result:Frame = {Frame color = “red”, font-weight = “bold”}}

{VBox
    {TextField width = 5cm,
        input-method-focus-behavior = “activate”,
        ui-object = {SkinnableTextFieldUI
                        {on e:StartCompositionEvent do
                            {start.clear}
                            {change.clear}
                            {end.clear}
                            {result.clear}
                            {start.add replace? = true, “イベントが開始しました”}
                        },
                        {on e:CompositionChangeEvent do
                            {change.add replace? = true, e.string}
                        },
                        {on e:EndCompositionEvent do
                            {end.add replace? = true, “イベントが終了しました”}
                        },
                        {on e:CompositionResultEvent do
                            {result.add replace? = true, e.string}
                        }
                    }
    },
    {Table columns = 2,
        “イベントの開始”, start,
        “入力中の文字列”, change,
        “イベントの終了”, end,
        “入力結果”, result
    }
}