Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не глобальный хук, Не глобальный хук 
:(
    Опции темы
Diamond Cat
Дата 26.4.2002, 22:00 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вопрос примерно такой, пытаюсь создать компонент который отрабатывалбы сообщения от мыши
проходящие в моей программе и на всех кмпонентах находящихся в окне программы.
Ставить глобальный хук, как мне подсказали, в данном случае, не корректно
поэтому стал ставить хук на этот процесс, но программу все время вышибает,  и дополнительный вопрос как обратится из Componentmy.MouseProc к просудурам описанным в данном компоненте?
вот примерный код
Код

type
TComponentmy= class (TCustomControl)
...
protected
...
 procedure paint:override;
 function MouseProc(Code, W,l : Integer): integer;  stdcall;
...
implementation

var
CompCount: integer = 0;
Hook: HHOOK = 0;
....

procedure TComponentmy.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 TComponentmy.MouseProc(Code, W,l : Integer):integer; stdcall;
begin
//[B]тут хотелось бы обратиться  к TComponentmy.Paint[/B]
MouseProc:=CallNextHookEx(Hook, Code, W,L )
end;
:notify
  Вверх
TAPAKAH
Дата 27.4.2002, 06:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 27.3.2002

Репутация: нет
Всего: нет



Я думаю тебе лучше написать отдельно
единую процедуру MouseProc  а уж в ней вызывать метод MouseProc у всех компонентов твоего класса которые она найдёт
и на самом деле тут у тебя ряд неточностей ...
Я так понимаю

var
CompCount: integer = 0;
Hook: HHOOK = 0;

это у тебя глобальные переменные .. так что если ты создашь больше одного контрола то она рухнет.

В общем некорректно ты написал ..

надо так :
1. Инициализируешь хук 1 раз на процедуру MouseProc

А в ней ищешь все свои компоненты и вызываешь метод.
По хорошему напрямую вызывать тоже плохо .. надо бы посылать сообщение определенного вида .. например MY_MESSAGE_MOUSE
Но это уже на твоей совести

function MouseProc(Code, W,l : Integer):integer; stdcall;
begin
// ищешь все свои компоненты данного класса и вызываешь у них определённую функцию :)  MouseProc
end;
PM MAIL   Вверх
Diamond Cat
Дата 27.4.2002, 23:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











с чегобы вдруг он должен рухнуть, от того что compcount изменяется, хотя пожалуй, что не корректно делать глобальным hhook хотя это тоже еще вопрос.
вводить дополнительные цепочки обработки сообщений не хотелось бы, с таким вариантом решения можно былобы поставить глобальный хук (благо с ним вопросов нет) но мне такой вариант не подходит. ???
  Вверх
TAPAKAH
Дата 28.4.2002, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 27.3.2002

Репутация: нет
Всего: нет



Ну под рухнет я имел в виду что работать у тебя будет только один компонент ... остальные будут просто торчать на форме. Ведь хук ты создаёшь один раз .. Но дело твоё! Каждый пишет как хочет ..
PM MAIL   Вверх
Diamond Cat
Дата 28.4.2002, 14:38 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Согласен это действительно ошибка с моей стороны , но тем не менее это не решение проблемы,наиболее актуален вопрос  по передаче управления методам класса
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0405 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.