![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Hook [D5, WinME]
Gayrus © (2002-03-06 16:18:00)Создаю компонент с хуком, а когда просто ложу его на форму, винда пишет, мол, Программа выполнила недоступную... и т.д. В чём дело?
Юрий Зотов (2002-03-07 17:39:00) [1]Если хук локальный - можно в модуле самого компонента, если глобальный - то только в отдельной DLL.
Gayrus (2002-03-07 16:11:00) [2]Тогда где объявить эту функцию?
Виктор Щербаков (2002-03-07 12:24:00) [3]
> ...иначе в него будет неявно передаваться лишний параметр Self.
Передаваться не будет, но компилятор будет генерировать код такой, как будто бы он должен передаваться.
Юрий Зотов (2002-03-07 12:16:00) [4]Похоже, Ваш хук - это метод объекта? Это неверно, хук может быть только самостоятельной функцией, иначе в него будет неявно передаваться лишний параметр Self.
Gayrus (2002-03-07 03:50:00) [5]Я даже заменил свой хук на найденый здесь, в форуме, и всёравно: function TGHook.HookProc(code:integer; wParam:Word; LParam:LongInt):LongInt;stdcall;
var Key:Word;
msg:PEVENTMSG;
Wnd:hWnd;
begin
if Code>=0 then begin
result:=0;
msg:=Pointer(LParam);
Key:=msg.paramL and 255;
Wnd:=msg.hwnd;
If FMouse then case msg.message of
WM_LBUTTONDOWN:If Assigned(FOnMouseDown)then FOnMouseDown(Self,Wnd,mbLeft);
WM_MBUTTONDOWN:If Assigned(FOnMouseDown)then FOnMouseDown(Self,Wnd,mbMiddle);
WM_RBUTTONDOWN:If Assigned(FOnMouseDown)then FOnMouseDown(Self,Wnd,mbRight);
WM_MOUSEMOVE :If Assigned(FOnMouseMove)then FOnMouseMove(Self);
end;
If FKeyBoard then case msg.message of
WM_KEYDOWN:If Assigned(FOnKeyDown)then FOnKeyDown(Self,Key);
WM_KEYUP :If Assigned(FOnKeyUp)then FOnKeyUp(Self,Key);
end;
If FWindow then case msg.message of
WM_CREATE:If Assigned(FOnWindowCreate)then FOnWindowCreate(Self,Wnd);
WM_CLOSE :If Assigned(FOnWindowClose)then FOnWindowClose(Self,Wnd);
end;
end;//If code>=0
end;
Dimaond Cat (2002-03-06 22:08:00) [6]у меня была такаяже пурга, и дело было именно в неправильности нарисания компонента , а именно использования в нем SetwindowsHokEx, но есть добрые люди например Юоий Зотов, короче выкладывай свой компонет (особенно ту часть где хучишь) будем искать баг.
Юрий Зотов (2002-03-06 16:59:00) [7]Каков вопрос - таков ответ: в компоненте.
MBo (2002-03-06 16:59:00) [8]значит, ошибка уже в конструкторе