Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit MouseWheelHook;
- interface
- implementation
- uses
- Classes, Controls, Dialogs, Forms, Messages, Windows;
- var
- mouseHookHandle: HHOOK;
- type
- TWinControlAccess = class(TWinControl);
- function DoCtrlMouseWheel(ctrl: TWinControl; delta: Integer; p: TPoint): Boolean;
- var
- keyState: TKeyboardState;
- shiftState: TShiftState;
- begin
- GetKeyboardState(keyState);
- shiftState := KeyboardStateToShiftState(keyState);
- Result := TWinControlAccess(ctrl).DoMouseWheel(shiftState, delta, p);
- end;
- function MouseHookProc(code: Integer; messageId: WPARAM; msgData: LPARAM): LRESULT stdcall;
- var
- msgStruct: TMouseHookStructEx;
- p: TPoint;
- ctrl: TWinControl;
- delta: Integer;
- begin
- if (Code >= 0) and (messageId = WM_MOUSEWHEEL) then
- begin
- msgStruct := PMouseHookStructEx(msgData)^;
- p := msgStruct.MouseHookStruct.pt;
- ctrl := FindVCLWindow(p);
- if ctrl <> nil then
- begin
- delta := SmallInt(msgStruct.mouseData shr 16);
- if DoCtrlMouseWheel(ctrl, delta, p) then
- Exit(1);
- end;
- end;
- Result := CallNextHookEx(mouseHookHandle, code, messageId, msgData);
- end;
- initialization
- mouseHookHandle := SetWindowsHookEx(WH_MOUSE, @MouseHookProc, HInstance, GetCurrentThreadId);
- finalization
- if mouseHookHandle <> 0 then
- UnhookWindowsHookEx(mouseHookHandle)
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement