Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.24;
Скачать: CL | DM;

Вниз

Хук не глобальный   Найти похожие ветки 

 
Dimaond Cat ©   (2002-04-20 23:02) [0]

Вопрос примерно такой, пытаюсь создать компонент который отрабатывалбы сообщения от мыши
проходящие в моей программе и на всех кмпонентах находящихся в окне программы.
Ставить глобальный хук, как мне подсказали, в данном случае, не корректно
поэтому стал ставить хук на этот процесс, но программу все время вышибает,
вот примерный код, помогите где ошибка
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;


 
StAL ©   (2002-04-22 19:23) [1]

Вы ставите хук прямо в компоненте. Это не корректно, хук нужно ставить в DLL. В сатье "Hooks - Аспекты реализации" на этом сайте подробно рассказано о глобальных ловушках.
Если же у Вас все-таки не получится, пишите мне на
stalcom@ukr.net

С уважением, StAL


 
Fantasist   (2002-04-22 22:49) [2]

>StAL © (22.04.02 19:23)

По моему там достаточно ясно сказанно, что хук не глобальный.

Ошибка первым делом в том, что передается адрес метода класса. Метод класса получает указатель на экземпляр класса при вызове, а в функции MouseProc его не преполагается. Это может накрыть стек.

И честно говоря, мне кажется слегка странноватым переопределять стандартный класс TComponent.



 
Dimaond Cat ©   (2002-04-24 00:32) [3]

2 Fantasist на самом деле я не заменял стандартный Tcomponent, просто я его так назвал в конкретно этом примере. Ошибка похоже именно в том что наедается стек

>> Метод класса получает указатель на экземпляр класса при вызове, а в функции MouseProc его не преполагается.

Как это лечить если не сложно пример


 
Deus ©   (2002-04-24 14:26) [4]

2Dimaond Cat © (20.04.02 23:02):
А OnMouseMove?


 
Dimaond Cat ©   (2002-04-24 21:12) [5]

2 Deus по некоторым причинам onmousemove мне не подходит, одна из причин что компонент должен откликаться на движения мыши не только над собой но и над другими объектами находящимися в окне моей программыю


 
Gayrus ©   (2002-04-25 03:04) [6]

TComponent.MouseProc - по моему дело в этом, hook не может являться потомком какого-то класса.


 
Dimaond Cat ©   (2002-04-25 23:30) [7]

Если это так то очень плохо.



Страницы: 1 вся ветка

Текущий архив: 2002.06.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
14-77614
[NIKEL]
2002-05-22 18:00
2002.06.24
Просто старая шутка :]


6-77531
DrKot
2002-04-14 18:45
2002.06.24
Порт 139 в windows как с ним работать


3-77310
Abu
2002-05-31 12:46
2002.06.24
Ошибка при изменении даты в DBGrid


4-77688
Y_Vovan
2002-04-26 15:56
2002.06.24
Как програмно создать юзера с паролем в Win98,Nt,W2K,Xp


14-77604
lak_b
2002-05-22 14:06
2002.06.24
расслабьтесь! ;)