キーダウン メッセージへの応答
マウスダウン メッセージとキーダウン メッセージの処理 への移動
KeyDown メソッドは、コントロールの OnKeyDown イベント用の protected メソッドです。コントロール自身が、Windows のキーダウン メッセージに応答して KeyDown メソッドを呼び出します。継承した KeyDown メソッドをオーバーライドする場合は、OnKeyDown イベントの呼び出しに加えて、他の応答を行うコードも含めることができます。
KeyDown メソッドをオーバーライドするには:
- KeyDown メソッドを TDBCalendar クラスに追加します。
type TDBCalendar = class(TSampleCalendar); . . . protected procedure KeyDown(var Key: Word; Shift: TShiftState; X: Integer; Y: Integer); override; . . . end;
class PACKAGE TDBCalendar : public TSampleCalendar { . . . protected: virtual void __fastcall KeyDown(unsigned short &Key, TShiftState Shift); . . . };
KeyDown メソッドを実装します。
procedure KeyDown(var Key: Word; Shift: TShiftState); var MyKeyDown: TKeyEvent; begin if not ReadOnly and (Key in [VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT, VK_END, VK_HOME, VK_PRIOR, VK_NEXT]) and FDataLink.Edit then inherited KeyDown(Key, Shift) else begin MyKeyDown := OnKeyDown; if Assigned(MyKeyDown) then MyKeyDown(Self, Key, Shift); end; end; void __fastcall TDBCalendar::KeyDown(unsigned short &Key, TShiftState Shift) { TKeyEvent MyKeyDown; // declare event type Set<unsigned short,0,8> keySet; keySet = keySet << VK_UP << VK_DOWN << VK_LEFT // assign virtual keys to set << VK_RIGHT << VK_END << VK_HOME << VK_PRIOR << VK_NEXT; if (!FReadOnly && // if control is not read only... (keySet.Contains(Key)) && // ...and key is in the set... FDataLink->Edit() ) // ...and field is in edit mode { TCustomGrid::KeyDown(Key, Shift); // call the inherited KeyDown method } else { MyKeyDown = OnKeyDown; // assign OnKeyDown event if (MyKeyDown != NULL) MyKeyDown(this,Key,Shift); // execute code in... } // ...OnKeyDown event handler }
KeyDown メソッドがマウスダウン メッセージに応答するとき、継承した KeyDown メソッドが呼び出されるのは、コントロールの ReadOnly プロパティが False で、押されたキーがカーソル制御キーの 1 つであり、しかもデータ リンク オブジェクトが編集モードになっている(つまり、フィールドを編集できる)場合だけです。フィールドが編集不可であったり、何か他のキーが押された場合は、OnKeyDown イベント ハンドラに記述されたコードがあれば、それが実行されます。