Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.055 c
8-1085230558
ricks
2004-05-22 16:55
2004.08.08
Формат файла WMA (или ASF)


3-1089660270
softmaster
2004-07-12 23:24
2004.08.08
И снова по ФастРепорт вопросик...


14-1089989650
ruslan
2004-07-16 18:54
2004.08.08
WebBrowser


6-1086544697
Prankster.
2004-06-06 21:58
2004.08.08
Проверка на живость


1-1090862637
-= MAX =-
2004-07-26 21:23
2004.08.08
Передать переменную из одного модального окна в другое




   Наверх