Форум: "Начинающим";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
ВнизКак перехватить событие MouseWheelUp MouseWheelDown Найти похожие ветки
← →
HF-Trade © (2006-02-17 12:21) [0]Здравствуйте Господа, Такой вопросик -
Есть такая функция
GetAsyncKeyState
С помощью нее можно узнать была ли нажата конпка мыши\клавиатуры.
А как узнать что было событие колесика =)
В НЕ ОБЛАСТИ ФОРМЫ.
← →
begin...end © (2006-02-17 12:27) [1]Хук?
← →
HF-Trade © (2006-02-17 12:41) [2]Да пофигу как)))
Сама функция какая?)
(Вообщет лучше без хука, я в таймер загнал).
← →
begin...end © (2006-02-17 12:48) [3]> HF-Trade © (17.02.06 12:41) [2]
Функции: SetWindowsHookEx/CallNextHookEx/UnhookWindowsHookEx.
Тип хука: WH_MOUSE_LL (не требует создания DLL, но возможен только для NT-систем) или WH_MOUSE (требует создания DLL, но работает как в NT, так и в 9x).
Примеры есть в интернете.
> Вообщет лучше без хука, я в таймер загнал
Вообще-то, лучше с хуком. Потому что тогда таймер будет не нужен, и Ваша процедура ловушки будет вызываться именно тогда, когда нужно -- при нажатии кнопок мыши (WM_LBUTTONDOWN/WM_RBUTTONDOWN/...) или при прокрутке колеса (WM_MOUSEWHEEL).
← →
КаПиБаРа © (2006-02-17 12:49) [4]HF-Trade © (17.02.06 12:41) [2]
Вообщет лучше без хука, я в таймер загнал
В таймер...
это методологически неверно. Делай через хук, что бы потом не переписывать.
← →
HF-Trade © (2006-02-17 12:57) [5]Все дело в том что если с хуком то у при нажатии на колесико(как на среднюю кнопку) у человека виснет все намертво.))) Я не знаю почему=) У меня все норм. Помимо этого дальнейший обработчик эмулирует пару кликов мыши с задержками и ее перемещение, вообщем чтоб работало ПРАВИЛЬНО - приходится снимать хук в начале обработчика, а в конце его снова ставить. Проверял иначе на секунду подвисает окно в котором эмулируется клик.
> begin...end ©
А можно пример WH_MOUSE_LL (для ХР, без ДЛЛ).
← →
КаПиБаРа © (2006-02-17 13:16) [6]HF-Trade © (17.02.06 12:57) [5]
Попробуй у него запустить простую тестовую программу с хуком, которая подсчитывает количество нажатий на кнопку мыши и выводит на форму.
Если будет работать, то причина зависания в твоей программе. Если тоже будет виснуть выкладывай сюда код.
← →
HF-Trade © (2006-02-17 13:28) [7]Да дал я ему на тест - говорит кнопка для снятия хука вообще не нажимается.
Через раз все виснет...
Вот код -
Var
HookHandle: hHook;
implementation
{$R *.dfm}
function HookProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;
var
msg: PEVENTMSG;
begin
if Code >= 0 then begin
result := 0;
msg := Pointer(LParam);
with Form1 do
case msg.message of
WM_MBUTTONDOWN:
CheckBox3.Checked:=True;
WM_MBUTTONUP:
CheckBox3.Checked:=False;
WM_LBUTTONDOWN:
CheckBox1.Checked:=True;
WM_LBUTTONUP:
CheckBox1.Checked:=False;
WM_RBUTTONDOWN:
CheckBox2.Checked:=True;
WM_RBUTTONUP:
CheckBox2.Checked:=False;
end;
end
else
Result := CallNextHookEx(HookHandle, code, WParam, LParam);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
HookHandle := SetWindowsHookEx(WH_JOURNALRECORD, @HookProc, HInstance, 0);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
UnhookWindowsHookEx(HookHandle);
end;
← →
КаПиБаРа © (2006-02-17 14:19) [8]http://www.delphikingdom.com/asp/viewitem.asp?catalogid=548
← →
begin...end © (2006-02-17 16:28) [9]> HF-Trade © (17.02.06 12:57) [5]
> А можно пример WH_MOUSE_LL (для ХР, без ДЛЛ).const
WH_MOUSE_LL = 14;
var
H: HHOOK;
function HookProc(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT; stdcall;
type
PMSLLHOOKSTRUCT = ^MSLLHOOKSTRUCT;
MSLLHOOKSTRUCT = packed record
pt: TPoint;
mouseData: Cardinal;
flags: Cardinal;
time: Cardinal;
dwExtraInfo: DWORD;
end;
const
Fmt = "CursorX = %d CursorY = %d WheelDelta = %d";
begin
if (code = HC_ACTION) and (wparam = WM_MOUSEWHEEL) then
with PMSLLHOOKSTRUCT(lparam)^ do
MessageBox(0,
PChar(Format(Fmt, [pt.X, pt.Y, SmallInt(HiWord(mouseData)) div WHEEL_DELTA])),
"WM_MOUSEWHEEL",
0);
Result := CallNextHookEx(0, code, wparam, lparam)
end;
begin
H := SetWindowsHookEx(WH_MOUSE_LL, HookProc, HInstance, 0)
end.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.017 c