Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.08;
Скачать: CL | DM;

Вниз

Отследить вращение колесика мыши в мышки вне приложения   Найти похожие ветки 

 
Michael   (2004-07-19 10:02) [0]

отловить направление движения скролла мышки вне приложения
Я поставил 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-26 14:34) [1]

Неужели никто не знает


 
Subdigger ©   (2004-07-26 14:38) [2]

procedure WMVScroll(var Msg: TWMVScroll); message WM_VSCROLL;


 
Subdigger ©   (2004-07-26 14:39) [3]

procedure TCustomGrid.WMVScroll(var Msg: TWMVScroll);
begin
 ModifyScrollBar(SB_VERT, Msg.ScrollCode, Msg.Pos, True);
end;


 
Michael   (2004-07-26 18:15) [4]

Subdigger ©   (26.07.04 14:39) [3]
Делфи не знает что такое "ModifyScrollBar"


 
KSergey ©   (2004-07-27 07:06) [5]

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.


 
Serge_ ©   (2004-07-27 08:17) [6]

Вот как я это делал:

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;


 
Michael   (2004-07-27 11:13) [7]

Serge_ ©   (27.07.04 08:17) [6]
Ваш пример работает.
Но только когда приложение активно.
Мне нужно отловить направление движения скролла мышки не зависимо приложение активно или нет.


 
Digitman ©   (2004-07-27 11:35) [8]


> Michael   (27.07.04 11:13) [7]


> Мне нужно отловить направление движения скролла мышки не
> зависимо приложение активно или нет


глоб.хук подходит для перехвата сист.событий/сообщений, ассоциированных только с GUI-приложениями

иными словами, если в дан.момент активно окно некоего консольного Win32-приложения, то хоть до дырки протирай в этот момент мышью коврик - глоб.хук не поможет


 
WondeRu ©   (2004-07-27 12:13) [9]

2Michael
однозначно, используй DirectInput! Разбираться будешь минут 15!


 
Michael   (2004-07-28 07:48) [10]

WondeRu ©   (27.07.04 12:13) [9]
Спасибо попробою DirectInput.
Если честно неразу с ним не имел дела.



Страницы: 1 вся ветка

Текущий архив: 2004.08.08;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.097 c
3-1089968904
VadimKV
2004-07-16 13:08
2004.08.08
Как получить Код (скрипт) всей БД в FB1.5???


9-1082710156
Yar-Com
2004-04-23 12:49
2004.08.08
Библиотека для работы с SSE/SSE2


4-1088593773
noname
2004-06-30 15:09
2004.08.08
CreateRemoteThread в Win9X


1-1090788416
Юрий Ж.
2004-07-26 00:46
2004.08.08
Проблема с копированием в ClipBoard!


14-1090735169
GrayFace
2004-07-25 09:59
2004.08.08
Лучший хостинг