†Sibylのお部屋†
作成開始日 2021.12.26
最終更新日 2022.01.12
イベント | 処理対象 | 入力の型 | 備 考 |
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);でキーコードを確認すると良い。