Консультация № 26547
18.09.2005, 20:55
0.00 руб.
0 4 4
Здравствуйте, господа эксперты.
Вопрос таков: есть две формы Form1 и Form2, причем Form1 хранит в себе ссылку на Form2, как Form1 может отлавливать все сообщения от Form2 (такие как движение, минимизация, изменение размера и т. п. ), причем нельзя переопределять функции типа Tform2.onMove, так как в form2 они уже могут быть определены, так как надо именно ей. т.е. другими словами Form2 не должна заботиться о том, чтобы form1 получала сообщения о своем изменении. Можно ли это сделать, не используя хуки?

Обсуждение

давно
Мастер-Эксперт
425
4118
19.09.2005, 05:25
общий
это ответ
Здравствуйте, Татьяна!
Если нельзя переопределить функции формы 2, то форма 1 должна отслеживать все действия формы 2. Боюсь, что это только хуки, которые специально для этого и предназначены. :)
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
19.09.2005, 09:02
общий
это ответ
Здравствуйте, Татьяна!
Ну зачем сразу хуки... Если Form1 и Form2 из одного приложения, можно отлавливать сообщения через Application.OnMesage, а потом по хендлу обрабатывать только принадлежащие нужной нам форме. См. Приложение.

Приложение:
procedure TForm2.ApplicationEventsMessage(var Msg: tagMSG; var Handled: Boolean);begin if Msg.hwnd = Form1.Handle then begin //Анализ сообщений предназначеных для Form1; end; Handled := false;end;procedure TForm2.FormCreate(Sender: TObject);begin Application.OnMessage := ApplicationEventsMessage;end;
Неизвестный
19.09.2005, 12:31
общий
это ответ
Здравствуйте, Татьяна!
Рассотрим на примере onshow:
1. Создаём в form1 переменную (например varOnShow) типа TNotifyEvent.
2. Создаём в form1 функцию совместимую с TNotifyEvent.
Например procedure MyShow(Sender: TObject);
3. при создании форм инициализируем переменную varOnShow значением функции OnShow из формы 2.
4. Присваиваем функции onshow формы 2 функцию MyShow;
5. В конце функции MyShow вызываем функцию, находящуюся по адресу, хранимому в переменной varOnShow. Например varOnShow(self);
Неизвестный
20.09.2005, 13:43
общий
это ответ
Здравствуйте, Татьяна!
Сделайте третий UNIT3, в который будете передавать все сообщения от Form2, и заталкивать в Form1
Форма ответа