![]() |
|
#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 за предложенную конструкцию признаю тяжеловато мне здесь пока разобраться но буду пробовать
|