WMMouseWheel не работает в Delphi - PullRequest
       15

WMMouseWheel не работает в Delphi

4 голосов
/ 13 ноября 2010

Я написал следующий код: procedure MouseWheel(var Msg:TWMMouseWheel);message WM_MOUSEHWHEEL; Я использовал его для компонента на основе TPanel (TMyP = class (TPanel)) (Обратите внимание, что я не хочу использовать TCustomPanel по своим собственным причинам)

Но в любом случае событие не вызывается, когда я использую колесико мыши на панели. Пожалуйста, помогите мне!

Ответы [ 2 ]

12 голосов
/ 13 ноября 2010

Сообщения колесика мыши отправляются на элемент управления с фокусом.И панели обычно не фокусируются.

Я использую этот обработчик TApplicationEvents.OnMessage в своих приложениях для отправки сообщения колеса мыши в окно под курсором мыши вместо сфокусированного элемента управления.

procedure TMainDataModule.ApplicationEventsMessage(var Msg: tagMSG; var Handled: Boolean);
var
  Wnd: HWND;
begin
  if Msg.message = WM_MOUSEWHEEL then
  begin
    Wnd := WindowFromPoint(Msg.pt);
    // It must be a VCL control otherwise we could get access violations
    if IsVCLControl(Wnd) then
      Msg.hwnd := Wnd; // change the message receiver to the control under the cursor
  end;
end;
4 голосов
/ 13 ноября 2010

В дополнение к ответу Андреаса Хаусладена вам нужно знать, что некоторые драйверы мыши не отправляют WM_MOUSEWHEEL и вместо этого отправляют несколько сообщений WM_VSCROLL. Вы должны проверить это также.

Upd: Обратите внимание, что существуют также сообщения WM_HSCROLL, которые также могут отправляться некоторыми мышами, у которых есть два колеса или наклонное колесо. Вот почему я написал WM_SCROLL изначально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...