Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

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

Delphi , ОС и Железо , Мышка и Курсор

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

Code:

unit Unit1;
 
interface
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
 
type
TForm1 = class(TForm)
   Memo1: TMemo;
   procedure FormCreate(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
end;
 
var
Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
var
MouseHook: HHOOK;
 
function LowLevelMouseProc(nCode: Integer; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall;
begin
Result := CallNextHookEx(MouseHook, nCode, WParam, LParam);
case WParam of
   WM_LBUTTONDOWN: Form1.Memo1.Lines.Add('Мыша вдавилась левой кнопкой.');
   WM_LBUTTONUP: Form1.Memo1.Lines.Add('Мыша отдавилась левой кнопкой.');
   WM_LBUTTONDBLCLK: Form1.Memo1.Lines.Add('Мыша дважды клацнулась левой кнопкой.');
   WM_RBUTTONDOWN: Form1.Memo1.Lines.Add('Мыша вдавилась правой кнопкой.');
   WM_RBUTTONUP: Form1.Memo1.Lines.Add('Мыша отдавилась правой кнопкой.');
   WM_RBUTTONDBLCLK: Form1.Memo1.Lines.Add('Мыша дважды клацнулась правой кнопкой.');
   WM_MBUTTONDOWN: Form1.Memo1.Lines.Add('Мыша вдавилась средней кнопкой.');
   WM_MBUTTONUP: Form1.Memo1.Lines.Add('Мыша отдавилась средней кнопкой.');
   WM_MBUTTONDBLCLK: Form1.Memo1.Lines.Add('Мыша дважды клацнулась средней кнопкой.');
   WM_MOUSEMOVE: Form1.Memo1.Lines.Add('Мыша побежала.');
   WM_MOUSEWHEEL: Form1.Memo1.Lines.Add('Мыша тащиться.');
else
   Form1.Memo1.Lines.Add('Мыша сошла с ума, купите новую мышу.');
end;
end;
 
 
procedure TForm1.FormCreate(Sender: TObject);
const
WH_MOUSE_LL = 14;
begin
MouseHook := SetWindowsHookEx(WH_MOUSE_LL, @LowLevelMouseProc, HInstance, 0);
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnhookWindowsHookEx(MouseHook);
end;
 
end.
Тож самое и на клавиатуру, код хука - Цифра 13 Соответственно принимай уже мессаги от клавиатуры...
Только начиная с Win 2000

Взято из http://forum.sources.ru

Автор: Rouse_

Передать контент на русский язык:

Определить событие, генерируемое мышкой, можно с помощью низкоуровневого хука мыши в Delphi. Низкоуровневый хук мыши позволяет поймать все события мыши, включая WM_MOUSEMOVE, WM_LBUTTONDOWN, WM_RBUTTONDOWN и т.д.

В вашем коде уже реализовано это с помощью функции LowLevelMouseProc. Эта функция вызывается для каждого события мыши и проверяет значение WParam (которое указывает, какой кнопкой мыши была нажата или отпущена) для определения произошедшего события.

Вот шаг за шагом, как использовать этот хук:

  1. В обработчике события FormCreate вашей формы вы настраиваете низкоуровневый хук мыши с помощью функции SetWindowsHookEx.
  2. Функция LowLevelMouseProc вызывается для каждого события мыши.
  3. Вы проверяете значение WParam, чтобы определить, что произошло (например, WM_LBUTTONDOWN для события нажатия левой кнопки).
  4. В зависимости от события вы можете выполнить любые необходимые действия, такие как обновление контролов вашей формы или логирование события.

В вашем коде уже реализовано это, добавляя строки в текстовое поле на основе произошедшего события мыши.

Обратите внимание, что вам также нужно очистить хук, когда ваша форма закрывается. Это делается в обработчике события FormClose с помощью функции UnhookWindowsHookEx.

Что касается событий клавиатуры, вы можете использовать низкоуровневый хук клавиатуры (код 13) для поймания всех вводов клавиатуры. Это похоже на настройку хука мыши, но есть некоторые отличия:

  1. Вам нужно определить процедуру низкоуровневого хука клавиатуры (аналогично LowLevelMouseProc), которая будет вызываться для каждого события клавиатуры.
  2. В этой процедуре вы проверяете значение WParam (которое указывает, какой клавишей была нажата или отпущена) и выполняете любые необходимые действия.

Вот пример реализации низкоуровневого хука клавиатуры:

function LowLevelKeyboardProc(nCode: Integer; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall;
begin
  Result := CallNextHookEx(MouseHook, nCode, WParam, LParam);
  case WParam of
    VK_SPACE: // Spacebar pressed
      Form1.Memo1.Lines.Add('Spacebar pressed');
    VK_RETURN: // Enter key pressed
      Form1.Memo1.Lines.Add('Enter key pressed');
     // ...
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  MouseHook := SetWindowsHookEx(WH_KEYBOARD_LL, @LowLevelKeyboardProc, HInstance, 0);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  UnhookWindowsHookEx(MouseHook);
end;

В этом коде настраивается низкоуровневый хук клавиатуры и поймываются нажатия spacebar и enter key. Вы можете добавить больше случаев для обработки других событий клавиатуры.

Обратите внимание, что, как и в случае с хуками мыши, вам нужно очистить хук клавиатуры, когда ваша форма закрывается.

Можно узнать, что событие сгенерировала мышь, путем использования низкоуровневого хука мыши и обработки различных сообщений Windows.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Мышка и Курсор ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-06-02 10:20:12
2024-06-16 02:38:59/0.013859033584595/2