![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Хук не глобальный [D5, Win95/98]
Dimaond Cat © (2002-04-20 23:02:00)Вопрос примерно такой, пытаюсь создать компонент который отрабатывалбы сообщения от мыши
проходящие в моей программе и на всех кмпонентах находящихся в окне программы.
Ставить глобальный хук, как мне подсказали, в данном случае, не корректно
поэтому стал ставить хук на этот процесс, но программу все время вышибает,
вот примерный код, помогите где ошибка
type
TComponent= class (TCustomControl)
...
protected
...
function MouseProc(Code, W,l : Integer): integer; stdcall;
...
implementation
var
CompCount: integer = 0;
Hook: HHOOK = 0;
....
procedure TComponent.Create (AOwner: TComponent);
begin
...
if not (csDesigning in ComponentState) then
begin
Inc(CompCount);
if CompCount = 1 then Hook := SetWindowsHookEx(WH_MOUSE,@TComponent.MouseProc, 0, GetCurrentThreadid);
end
end;
function TComponent.MouseProc(Code, W,l : Integer):integer; stdcall;
begin
MouseProc:=CallNextHookEx(Hook, Code, W,L )
end;
Dimaond Cat (2002-04-25 23:30:00) [1]Если это так то очень плохо.
Gayrus (2002-04-25 03:04:00) [2]TComponent.MouseProc - по моему дело в этом, hook не может являться потомком какого-то класса.
Dimaond Cat (2002-04-24 21:12:00) [3]2 Deusпо некоторым причинам onmousemove мне не подходит, одна из причин что компонент должен откликаться на движения мыши не только над собой но и над другими объектами находящимися в окне моейпрограммыю
Deus (2002-04-24 14:26:00) [4]2Dimaond Cat © (20.04.02 23:02):
А OnMouseMove?
Dimaond Cat (2002-04-24 00:32:00) [5]2 Fantasistна самом деле я не заменял стандартный Tcomponent, просто я его так назвал в конкретно этом примере. Ошибка похоже именно в том что наедается стек
>> Метод класса получает указатель на экземпляр класса при вызове, а в функции MouseProc его не преполагается.
Как это лечить если не сложно пример
Fantasist (2002-04-22 22:49:00) [6]>StAL © (22.04.02 19:23)
По моему там достаточно ясно сказанно, что хук не глобальный.
Ошибка первым делом в том, что передается адрес метода класса. Метод класса получает указатель на экземпляр класса при вызове, а в функции MouseProc его не преполагается. Это может накрыть стек.
И честно говоря, мне кажется слегка странноватым переопределять стандартный класс TComponent.
StAL (2002-04-22 19:23:00) [7]Вы ставите хук прямо в компоненте. Это не корректно, хук нужно ставить в DLL. В сатье "Hooks - Аспекты реализации" на этом сайте подробно рассказано о глобальных ловушках.
Если же у Вас все-таки не получится, пишите мне на
stalcom@ukr.net
С уважением, StAL