![]() |
|
|
#1
|
|||
|
|||
|
Подскажите пожалуйста как уловить событие движение колёсика мышки.
Разыскал вот такую функцию но она не срабатывает: function GetNumScrollLines: Integer; begin SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, @Result, 0); end; |
|
#2
|
|||
|
|||
|
Вы пишете программу на Win32 API?
Если нет, то, вообще говоря, в объектном инспекторе для формы можно найти события OnMouseWheel, OnMouseWheelDown, OnMouseWheelUp. А если всё же пишите на Win32 API, то в оконной процедуре нужно просто среди прочего добавить реакцию на событие WM_MOUSEWHEEL. P.S. А та функция, что вы показали, просто возвращает количество строчек, прокручиваемых при однократном вращении колесика. |
|
#3
|
|||
|
|||
|
Моя программа запускается через консоль, затем по средствам кода создаётся форма, настраевается и на неё накладывается DirexX движок вполне вероятно что сам движок имеет также собственную форму. Пожалуйста опишите по подробнее как можно улавливать вращения колёсика.
|
|
#4
|
||||
|
||||
|
Если у тебя DerectX движек, то мышь там имеет 3-оси, x, y, z, последний как правило - колесо.
Если нет, то просто подмени оконную процедуру, окна своего движка и перехватывай WM_MOUSEWHEEL |
|
#5
|
|||
|
|||
|
Как работает WM_MOUSEWHEEL поясните пожалуйста?
|
|
#6
|
||||
|
||||
|
Код:
type
TWndProc = function (Wnd : HWND; msg : Cardinal; wParam, lParam : Integer) : Integer; stdcall;
var
NextWindowProc : TWndProc;//Сюде сохраняем указатель на старую оконную процедуру
function WndProc(Wnd : HWND; msg : Cardinal; wParam, lParam : Integer) : Integer; stdcall;
begin
case msg of
WM_MOUSEWHEEL :
begin
//Обрабатываешь тут
//если ошибюсь, то hiword(wParam) - и есть нужный тебе параметр
//На всякий случай пеередаем управление оригинальному обработчику
Result := NextWindowProc(wnd, msg, wParam, lParam);
end;
else
Result := NextWindowProc(wnd, msg, wParam, lParam);
end;
end;
//эта функция уситанавливает WndProc в качестве оконной процедуры
procedure SetnyWndProc(handle : hwnd);
begin
if IsWindow(handle) then
NextWindowProc := Pointer(setWindowLong(handle, GWL_WNDPROC, Integer(@WndProc)));
end. |
|
#7
|
|||
|
|||
|
Спасибо 0nni за предложенную конструкцию признаю тяжеловато мне здесь пока разобраться но буду пробовать
|