フリーソフト

マウス、キーボードの処理

[BCB] マウスカーソルを消す/表示する

//消す
do { } while (ShowCursor(FALSE)<0);

//表示する
do { } while (ShowCursor(TRUE)>=0);

[Delphi] マウスホイールに対応する

type
  TForm1 = class(TForm)
  private
   procedure WMMousewheel(var Msg: TMessage); message WM_MOUSEWHEEL;
        :

implemetation

procedure TForm1.WMMousewheel(var Msg: TMessage);
begin
 if (Msg.WParam > 0) then begin
    //奥の方向にホイール
  Sendmessage(○○.Handle, WM_VSCROLL, SB_LINEUP, 0); //or SB_PAGEUP
 end
  else
  begin
    //手前の方向にホイール
  Sendmessage(○○.Handle, WM_VSCROLL, SB_LINEDOWN, 0); //or SB_PAGEDOWN
 end;
end;

[BCB] Enterキーで次のコントロールにフォーカスを移動する

void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
  if (Key==VK_RETURN) {
    SendMessage(Handle, WM_NEXTDLGCTL, 0, 0);
    Key=0x00;
  }
}

[BCB] マウスのボタンの数を取得する

int NumOfButton=GetSystemMetrics(SM_CMOUSEBUTTONS);

switch (NumOfButton) {
case 0:
  //マウスがない
  break;
case 1:
  //ボタンが1個
  break;
case 2:
    :

}

[BCB] マウスが接続されているか調べる

if (GetSystemMetrics(SM_MOUSEPRESENT)) {
  //接続されている
} else {
  //接続されていない
}

[BCB] 矢印キーやタブキーを捕まえる

class TForm1 : public TForm
{
  protected:
    void __fastcall CMDialogKey(Messages::TWMKey &Message)
    {
      if (Message.CharCode != VK_LEFT) TForm::Dispatch(&Message);
    }
BEGIN_MESSAGE_MAP
  MESSAGE_HANDLER(CM_DIALOGKEY, Messages::TWMKey, CMDialogKey);
END_MESSAGE_MAP(TForm)
};

[Delphi] Caps Lock、Num Lockの状態を調べる

Caps LockがOnになっているかを調べる例です。

begin
 if (GetKeyState(VK_CAPITAL) and $1 <> 0) then begin
  //Caps LockがOnになっている
 end else begin
  //Caps LockがOffになっている
 end;
end;

VK_CAPITALの代わりにVK_NUMLOCKとすればNum Lockの状態を取得できます。

[Delphi] キーが押されているか調べる

あるキーが押されているかどうかは GetKeyState 関数を使います。引数には仮想キーコードを渡します。キーが押されている場合は戻り値の最上位1ビットが1にセットされます。 Caps Lockなどトグルするキーの状態は最下位の1ビットを調べます。

begin
 if (GetKeyState(VK_F1) < 0) then begin
  //キーが押されているときの処理
 end;
end;

まさにそのとき、キーが押されているかを取得するにはGetAsyncKeyStateを使ったほうがよいかもしれません。