FAQ VCL
Клавиатура и мышь\Мышь

:: Меню ::
:: На главную ::
:: FAQ ::
:: Заметки ::
:: Практика ::
:: Win API ::
:: Проекты ::
:: Скачать ::
:: Секреты ::
:: Ссылки ::

:: Сервис ::
:: Написать ::

:: MVP ::

:: RSS ::

Яндекс.Метрика

Как узнать временной интервал между щелчками мыши, воспринимаемыми системой как двойной щелчок?

procedure TForm1.Button1Click(Sender: TObject);
begin
   Caption := IntToStr( GetDoubleClickTime );
end;


Как изменить временной интервал между щелчками мыши, воспринимаемыми системой как двойной щелчок?

// Способ первый
procedure TForm1.Button1Click(Sender: TObject);
begin
   SetDoubleClickTime( 5000 );
end;

// Способ второй
procedure TForm1.Button1Click(Sender: TObject);
begin
   SystemParametersInfo(SPI_SETDOUBLECLICKTIME, Integer(500), nil, 0);
end;


Как узнать скорость движения указателя мыши?

function GetMouseSpeed: integer;
begin
   SystemParametersInfo( SPI_GETMOUSESPEED, 0, @Result, 0 );
   // SystemParametersInfo( SPI_GETMOUSESPEED, 0, @Result, SPIF_SENDCHANGE );
end;


Как изменить скорость движения указателя мыши?

// Диапазон значений параметра Speed должен находиться
// в пределах от 1 до 20
function SetMouseSpeed( Speed: integer ): boolean;
begin
   Result := SystemParametersInfo( SPI_SETMOUSESPEED, 1, Pointer( Speed ), 0 );
   // Result := SystemParametersInfo( SPI_SETMOUSESPEED, 1, Pointer( Speed ), SPIF_SENDCHANGE );
end;


Как скрыть/показать курсор мыши в приложении?

ShowCursor( false ); // Скрыть
ShowCursor( true ); // Показать


Как реагировать на горизонтальную прокрутку колесом мыши?

// В Delphi 2010 и выше такая константа есть
const
  WM_MOUSEHWHEEL = $020E;

type
  TForm1 = class(TForm)
  private
    procedure WMMouseHWheel( var Msg: TMessage ); message WM_MOUSEHWHEEL;
  end;

{...}

implementation

{...}

// Минимальная версия клиентской ОС - Windows Vista [desktop apps only]
// Минимальная версия серверной ОС - Windows Server 2008 [desktop apps only]
procedure TForm1.WMMouseHWheel(var Msg: TMessage);
begin
   // Щелчок колесом вправо
   if Msg.WParamHi = $0078 then
      Caption := '>>>';
   // Щелчок колесом влево
   if Msg.WParamHi = $FF88 then
      Caption := '<<<';
end;


Как узнать количество кнопок мыши?

procedure TForm1.Button1Click(Sender: TObject);
begin
   ShowMessage(IntToStr(GetSystemMetrics(SM_CMOUSEBUTTONS)));
end;


Как узнать, есть ли у мыши колесо прокрутки?

procedure TForm1.Button1Click(Sender: TObject);
begin
   if GetSystemMetrics(SM_MOUSEWHEELPRESENT) > 0 then
      ShowMessage('Колесо прокрутки есть.')
   else
      ShowMessage('Колеса прокрутки нет.');
end;


Как узнать, поддерживает ли мышь горизонтальную прокрутку?

procedure TForm1.Button1Click(Sender: TObject);
begin
   if GetSystemMetrics(SM_MOUSEHORIZONTALWHEELPRESENT) > 0 then
      ShowMessage('Горизонтальная прокрутка поддерживается.')
   else
      ShowMessage('Горизонтальная прокрутка не поддерживается.');
end;


Как определить, какая кнопка мыши нажата?

procedure TForm1.Timer1Timer(Sender: TObject);
var
  LeftMB, RightMB, MiddleMB: string;
begin
   if GetAsyncKeyState(VK_LBUTTON) and $8000 <> 0 then
      LeftMB := 'да'
   else
      LeftMB := 'нет';

   if GetAsyncKeyState(VK_MBUTTON) and $8000 <> 0 then
      MiddleMB := 'да'
   else
      MiddleMB := 'нет';

   if GetAsyncKeyState(VK_RBUTTON) and $8000 <> 0 then
      RightMB := 'да'
   else
      RightMB := 'нет';

   Caption := Format('Левая: %s, средняя: %s, правая: %s', [LeftMB, MiddleMB, RightMB]);
end;

При использовании материала - ссылка на сайт обязательна