キー・イベントのハンドリング

キーボードからのキー・イベント(例えば、ファンクションキー、コントロールキー(Ctrl)、シフトキー(Shift)、Altキー、複合キー(Ctrl+Alt+AキーやShift+Aキーなど))が発生した場合に、何かの処理を実行する方法を説明します。

以下のサンプルでは、Ctrl+Aの操作が行われた場合に、ポップアップメッセージを表示いたします。

{value
        {Frame
            background = “red”, width = 3cm, height = 3cm,
            {on e:AttachEvent at v:Frame do
                def accel =
                    {KeyAccel
                        key-accel-string = “Ctrl+A”,
                        {on Action do
                            {popup-message “Press the Ctrl+A key.”}
                        }
                    }
               
                {if-non-null
                    focus-manager = {v.get-focus-manager}
                 then
                    {focus-manager.add-key-accel accel}
                }
            }
        }
}

まず、あるキーイベントが発行されたときの動作を定義するために、KeyAccelオブジェクトを引数にキーを文字列で指定します。これを表示している画面に登録するため(実際にはFocusManagerに登録することとなります)、Frameからget-focus-managerを利用して、FocusManagerを取得し、add-key-accelで作成したKeyAccelを追加します。複数キーを登録する場合もこれと同様に新しいKeyAccelを作成し、FocusManagerに追加していきます。

上記コードにより、Ctrl+Aを押下すると、「press the Ctrl+A key.」というメッセージボックスが表示されます。 

また、各コントロールのオプションでmnemonicというオプションがあり、これを用いることで簡単にキーイベントを設定することができます。ただし、これは”Alt+キー”しかできませんので注意してください。