Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

WndProc, WindowProc [D5, NT4, Win2k]


Akni ©   (2002-10-22 00:19:00) 

Привет Мастерам!

Помогите, пожалуйста, разобраться с такой проблемой: как отловить события (Mouse and Keyboard Events), посылаемые какой-то конкретной MDI-форме приложения.
Пытаюсь у всех контролов этой формы подменить WindowProc c помощью такого кода:

var WMyMessage:TMsg;

procedure TfrmMDIChild.ISWndProc(var message: TMessage);
begin
with message do
begin
if (msg=WM_LBUTTONDOWN)
or (msg=WM_LBUTTONUP)
or (msg=WM_LBUTTONDBLCLK)
or (msg=WM_RBUTTONDOWN)
or (msg=WM_RBUTTONUP)
or (msg=WM_RBUTTONDBLCLK)
then
begin
WMyMessage:=Message;
bNewMessage:=true;
end;
end;
Inherited WndProc(Message);
end;

procedure TfrmMDIChild.FormCreate(Sender: TObject);
var i: integer;
begin
for i:=0 to ControlCount-1 do
begin
Controls[i].WindowProc:=ISWndProc;
end;
end;


В итоге получаю Stack overflow...
Что я делаю не так и как с этим бороться?

Заранее всем спасибо.


MBo   (2002-10-22 12:46:00) [1]

Oldproc:=Controls[i].WindowProc;
Controls[i].WindowProc:=NewProc;


Akni   (2002-10-22 12:41:00) [2]

to Игорь Шевченко
sorry za glupii vopros, no kak zapomnit" adres staroi prozeduri?


Игорь Шевченко   (2002-10-22 12:06:00) [3]

Надо для каждого control"a запоминать адрес его старой процедуры и вызывать ее а не inherited.


apay   (2002-10-22 10:31:00) [4]

ставь хуки, об этом много писалось...


Наверх

Титульная страница Поиск, карта сайта Написать письмо