Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Отследить вращение колесика мыши в мышки вне приложения [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]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо