Форум: "Основная";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];
ВнизОтследить вращение колесика мыши в мышки вне приложения Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c