![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отследить вращение колесика мыши в мышки вне приложения [D7, WinXP]
Michael © (2004-07-19 10:02:00)отловить направление движения скролла мышки вне приложения
Я поставил Hook на мышь.
var HookHandle: hHook;
function HookProc(Code:integer; WParam:word; LParam:Longint):Longint; stdcall;
var msg: PEVENTMSG;
begin
if Code >= 0 then begin
result := 0;
msg := Pointer(LParam);
if msg.message = WM_MOUSEMOVE then Form1.Caption:= IntToStr(msg.ParamL)+' x '+IntToStr(msg.ParamH);
if msg.message = WM_MOUSEWHEEL then beep;
end else result:= CallNextHookEx(HookHandle, code, WParam, LParam);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
HookHandle := SetWindowsHookEx(WH_JOURNALRECORD, @HookProc, HInstance, 0);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if HookHandle > 0 then UnhookWindowsHookEx(HookHandle);
end;
Все работает кроме одного.
Не знаю как отловить направление движения скролла мышки?
Сообщения от скролла идут if msg.message = WM_MOUSEWHEEL then
а как их обработать чтобы узнать вверх поворачивается колесо
или вниз?
Michael (2004-07-28 07:48:00) [1]WondeRu © (27.07.04 12:13) [9]
Спасибо попробою DirectInput.
Если честно неразу с ним не имел дела.
WondeRu (2004-07-27 12:13:00) [2]2Michael
однозначно, используй DirectInput! Разбираться будешь минут 15!
Digitman (2004-07-27 11:35:00) [3]
> Michael (27.07.04 11:13) [7]
> Мне нужно отловить направление движения скролла мышки не
> зависимо приложение активно или нет
глоб.хук подходит для перехвата сист.событий/сообщений, ассоциированных только с GUI-приложениями
иными словами, если в дан.момент активно окно некоего консольногоWin32-приложения, то хоть до дырки протирай в этот момент мышью коврик - глоб.хук не поможет
Michael (2004-07-27 11:13:00) [4]Serge_ © (27.07.04 08:17) [6]
Ваш пример работает.
Но только когда приложение активно.
Мне нужно отловить направление движения скролла мышки не зависимо приложение активно или нет.
Serge_ (2004-07-27 08:17:00) [5]Вот как я это делал:
rocedure THexViewCtrl.WHEEL_ROLL(Var message:TWMMouseWheel);
var Dn:boolean;
begin
Inherited;
if F_ScrollBar=nil then exit;
//ShowWindow(hinter.Handle,sw_hide);
Dn:=Message.WheelDelta<0;
if Dn then F_ScrollBar.Position:=F_ScrollBar.Position+1
else F_ScrollBar.Position:=F_ScrollBar.Position-1;
end;
KSergey (2004-07-27 07:06:00) [6]wParam
...
The high-order word indicates the distance the wheel is rotated, expressed in multiples or divisions of WHEEL_DELTA, which is 120. A positive value indicates that the wheel was rotated forward, away from the user; a negative value indicates that the wheel was rotated backward, toward the user.
Так гласит MSDN
Наверняка в исходниках VCL можно что-либо поискать, или в RxLib.
Michael (2004-07-26 18:15:00) [7]Subdigger © (26.07.04 14:39) [3]
Делфи не знает что такое 'ModifyScrollBar'
Subdigger (2004-07-26 14:39:00) [8]procedure TCustomGrid.WMVScroll(var Msg: TWMVScroll);
begin
ModifyScrollBar(SB_VERT, Msg.ScrollCode, Msg.Pos, True);
end;
Subdigger (2004-07-26 14:38:00) [9]procedure WMVScroll(var Msg: TWMVScroll); message WM_VSCROLL;
Michael (2004-07-26 14:34:00) [10]Неужели никто не знает