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;

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