Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.47 MB
Время: 0.03 c
11-1078503469
Delpher_Gray
2004-03-05 19:17
2004.08.08
PBitMap --> PJpeg


3-1089893434
XAdmin
2004-07-15 16:10
2004.08.08
OLE error 80040E21


1-1090930373
maxim_m_m
2004-07-27 16:12
2004.08.08
как заменить txfxfButton на кнопку


14-1090486247
syte_ser78
2004-07-22 12:50
2004.08.08
Загадка


1-1090565921
Jaxtor
2004-07-23 10:58
2004.08.08
Уничтожение всех объектов данного класса





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский