今回はモーフでキーボードイベントを受け取る方法について学ぶ。
まず、テキスト入力などで用いるようなキー入力を処理する方法について説明する。
キーボードイベントは、keyStroke:メッセージの引数としてモーフが受け取る。受け取ったキーボードイベントに対して、keyCharやkeyString、keyValueのメッセージを送ることで、文字や文字列、文字コードを得ることができる。
例えば、受け取った文字を画面に表示したい場合には以下のようにkeyStroke:メソッドを実装する。また、マウスイベントの時と同様、handlesKeyStroke:メソッドがtrueを返して、キーボードイベントを受け取れるようにする必要がある。
keyStroke: anEvent self inform: anEvent keyString
handlesKeyStroke: anEvent ^ true
加えて、イベントを受け取るモーフがキーボードフォーカスを取得しなければならない。
Morphicでは、ActiveHandモーフがキーボードフォーカスを管理しているので、
ActiveHand keyboardFocus: モーフ
のように明示的にモーフにキーボードフォーカスを移す必要がある。
整理するとキーボードイベントを処理するには、以下の3つが必要である。
- キーボードフォーカスを取得する
- handlesKeyStroke:メソッドを実装してtrueを返す
- keyStroke:メソッドを実装して、キーボードイベントを受け取る
keyDown:メッセージとkeyUp:メッセージを用いると、キーボードを押したのと離したのを区別してイベントを受け取ることができる。この場合もこれまでと同様に、handlesKeyDown:メソッドとhandlesKeyUp:メソッドをそれぞれ実装するか、これらのイベントをまとめて受け取れるようにするhandlesKeyboard:メソッドを実装する。
今回は実際に試せる例を紹介しなかった。近いうちにキーボードイベントを処理する例を紹介しようと思う。
(第10回おわり)