キーダウン メッセージへの応答

提供: RAD Studio
移動先: 案内検索

マウスダウン メッセージとキーダウン メッセージの処理 への移動


KeyDown メソッドは、コントロールの OnKeyDown イベント用の protected メソッドです。コントロール自身が、Windows のキーダウン メッセージに応答して KeyDown メソッドを呼び出します。継承した KeyDown メソッドをオーバーライドする場合は、OnKeyDown イベントの呼び出しに加えて、他の応答を行うコードも含めることができます。

KeyDown メソッドをオーバーライドするには:

  1. 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);
   .
   .
   .
};
  1. 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 イベント ハンドラに記述されたコードがあれば、それが実行されます。

関連項目