- もどる -
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
 - もどる -