MindでGUIプログラミング
■ 1999-01-17 [Tcl/Tk] 特殊キーシム
アプリケーションの操作は、マウスで行うのが通常ですが、ノートパソコンなどにインストールして使いたいスケジュールソフトなどの場合には、マウスだけでなく、キーを打鍵して操作したいもの。
Tcl/Tkでは、そうしたキーのイベントを感知して処理をさせるとき、マウスイベントと同様に「bind」コマンドを使います。例えば、通常の文字キーをバインド設定する場合には、次のように指定すればOKです。
例:aキーをバインド設定する場合
bind . <Key-a> {mindcmd ○○処理}
ここで「<Key-a>」と書いた中の「a」は、キーイベントの名前で「キーシム(keysym)」と呼ばれているようです。
文字キーの場合は上のようにすんなり指定できますが、では、カーソルキーやリターンキーなど、操作系のキーにバインド設定したい場合は、どうするのか?
Tcl/Tkでは、そんな時のために、操作系のキーそれぞれに「特殊キーシム」が定義されており、これを使うようになっています。
その「特殊キーシム」を使って実用的なMindソースの例を書いてみます。
例えば、以下のように記述しておけば、左カーソルキーを押した時に「目的の何か処理」を実行させることができます。
--------------ここから--------------
左カーソルキー処理するとは (パラメータ、・・、パラメータ数 → ・)
イベント引数を捨て
目的の何か処理をすること。
メイン実行するとは
・・・・窓を表示し
・・・・処理し
※---------------------------------------キー操作のためのbind設定
「bind . <Key> {mindcmd %K}」を 評価する。
イベント分岐とは 本定義 (パラメータ、パラメータ数、イベント名 → ・)
文字列事例をとる
"Left"なら 左カーソルキー処理する
"・・"なら ・・・・・・処理する
"・・"なら ・・・・・・処理する
例外なら イベント引数を捨て
事例終り。
メインとは
メイン実行すること。
--------------ここまで--------------
赤色の行がバインド関連の指定です。ここで、bind設定の中に書いている「%K」は、キーシム名を取得するイベント変数です。そして、イベント分岐の中に書いた"Left"が左カーソルキーの特殊キーシムであり、右カーソルキーならRight、リターンキーならReturnという具合に記述すればOKでした。
ところが、前画面キーと次画面キーの特殊キーシムは、「PageUp」「PageDown」と記述しても認識してくれません。手持ちの書籍を見ても、特殊キーシムの一覧表が載っていないので困ってしまいました。
そこで、実際にキーを押した時にその特殊キーシムの名前を表示させる処理を追加して、PageUpキー、PageDownキーのキーシムを調べてみました。
--------------ここから--------------
キーシム表示するとは (パラメータ、・・、パラメータ数 → ・)
捨て
ダイヤログにモニタ表示する。
メイン実行するとは
・・・・窓を表示し
・・・・処理し
※---------------------------------------キー操作のためのbind設定
「bind . <Key> {mindcmd %K}」を 評価する
「bind . <Key> {mindcmd キーシム %K}」を 評価する。
イベント分岐とは 本定義 (パラメータ、パラメータ数、イベント名 → ・)
文字列事例をとる
"Left"なら 左カーソルキー処理する
"キーシム"なら キーシム表示する
"・・"なら ・・・・・・処理する
"・・"なら ・・・・・・処理する
例外なら イベント引数を捨て
事例終り。
--------------ここまで--------------
この結果、PageUpキーのキーシムは「Prior」、PageDownキーのキーシムは「Next」であることが分かりました。
これUNIXやXウィンドウでは常識なのかな?
ともかく、めでたしめでたし。(^o^)v