1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| const
WH_MOUSE_LL = 14;
WM_MOUSEWHEEL_ROLL = $020A;
WM_MOUSEWHEEL_UP = $0208;
UserEventMouseWheel = $11000000; // identifiant dans WParam
UserEventWheelUp = $00010000; // la roue a été tournée vers le haut
UserEventWheelDown = $00020000; // la roue a été tournée vers le bas
UserEventWheelClick = $00030000; // la roue a été cliquée
var
// variables pour hook général de fenêtres pour gérer des évènements MOUSE
GenHookMouseHandles: TStringList; // handle de la fenêtre hookée
GenHookMouseWndProc: integer; // WNDPROC ancienne du process hooké
...
// fonction HOOK pour une form en général
function GenHookMouse_LL_FUNC(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
hTemp : HWND;
s : String;
i : integer;
delta: integer;
sHandle: string;
begin
if wParam=WM_MOUSEWHEEL_ROLL then begin
delta := (PMSLLHOOKSTRUCT(lParam)^.mouseData and $FFFF0000) shr 16;
if (delta and $8000)<>0 then delta := delta or $FFFF0000;
hTemp := WindowFromPoint(PMSLLHOOKSTRUCT(lParam)^.POINT);
sHandle := inttostr(hTemp);
if GenHookMouseHandles.IndexOf(sHandle)>=0 then begin
// générer le USER_EVENT
if delta>0 then SendMessage(MainFormHandle,CM_PANORAMIC_USER,UserEventMouseWheel or UserEventWheelUp,delta)
else SendMessage(MainFormHandle,CM_PANORAMIC_USER,UserEventMouseWheel or UserEventWheelDown,0-delta);
Result := CallNextHookEx(GenHookMouseWndProc, nCode, wParam, lParam);
result := 0;
exit;
end;
end;
if wParam=WM_MOUSEWHEEL_UP then begin
hTemp := WindowFromPoint(PMSLLHOOKSTRUCT(lParam)^.POINT);
sHandle := inttostr(hTemp);
if GenHookMouseHandles.IndexOf(sHandle)>=0 then begin
// générer le USER_EVENT
SendMessage(MainFormHandle,CM_PANORAMIC_USER,UserEventMouseWheel or UserEventWheelClick,0);
Result := CallNextHookEx(GenHookMouseWndProc, nCode, wParam, lParam);
result := 0;
exit;
end;
end;
Result := CallNextHookEx(GenHookMouseWndProc, nCode, wParam, lParam);
end; |
Partager