†Sibylのお部屋†

【Sibyl】キー入力イベント:OnKeyPress/OnScan

作成開始日 2021.12.26
最終更新日 2022.01.12

キーが入力されたときのイベントハンドラには2種類ある。一つは通常文字(A、B、C、1、2,、3…など)が入力されたときのOnKeyPress、もう一つが制御キー(Enter、Esc、Tabなど)が入力されたときのOnScan。Ctrl+英字などもOnScanで処理する。

イベント 処理対象入力の型備 考
OnKeyPress 文字キーKey : Charその文字で判別、スペースもこちら
OnScan 制御キーKeyCode: TKeyCodeキーコードで判別、Ctrl+英字もこちら

OnKeyPressとOnScanの分担はちょっと微妙なところがある。スペースはOnScanに入れても良いような気もするのだが(kbSpaceも定義されている)、なぜかOnKeyPress。でも、TabはOnScanなんだよね。ホワイトスペースの入力と言う点では同類だと思うのだが…

OnKeyPressの場合は、引数Keyに入力された文字そのものが入る。なので;
If Key='a' Then ...
のような、非常に簡単な処理分岐が書ける。尤も、入力文字の型はStringじゃなくてCharなのだが「'a'」で良い(う〜ん、頭の中がC言語とごっちゃになってるかな)。

一方、OnScanはキーコード(整数値)で判別する。と言っても、事前に各キーのコードが定数として定義されているで、Escならば「kbEsc」、Tabならば「kbTab」、BackSpaceならば「kbBkSp」、Ctrl+Aならば「kbCtrlA」などのような形で扱える。

If KeyCode=kbBkSp Then ...
なお、これらのキーコード定数は必ずしも「kb」+「フルスペルのキー名」ではないようなので、ヘルプで「keycode」を検索して定数名を確認すること(ヘルプのSPCC Constantsの中に一覧がある)。特にカーソルキーの「kbCUp」や「kbCDown」などはカンではなかなか思い付かない。

【注意】EnterキーはkbEnter(=286)ではなく、kbCR(=264)。このように、実際に押してみないと判らないキーコードも存在する。入力が上手く機能しないときは、Caption:=ToStr(KeyCode);でキーコードを確認すると良い。


【Sibylのお部屋目次】 【ホーム】