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

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

обработка сообщений и наследование


msg ©   (2008-06-05 14:57:00) 

подскажите как должно быть на самом деле.
исходные данные:
mdi приложение.
главное окно - унаследовано от базовой формы.
в базовой форме есть обработчик wm_user + 1000;
при посылке сообщения наследнику (application.mainform) обработчик срабватывает.

mdi чайлды так же унаследованы от базового класса (отличного от базового класса главной формы). в базовом классе тоже есть обработчики wm_user + 1000.
Но когда в цикле перебираем mdi чайлды и шлем им wm_user + 1000 то никаких вызовов в наследниках не происходит.


ZENsan   (2008-06-06 11:52:00) [1]

Да. Полностью согласен. Беру слова назад. Полиморфизм, правда с другой внутренней реализацией.


Игорь Шевченко   (2008-06-05 20:10:00) [2]


> Ну это не чистий полиморфизм конечно


это чистый полиморфизм


ZENsan   (2008-06-05 19:48:00) [3]

Ну это не чистий полиморфизм конечно.. а емуляция его.


Palladin   (2008-06-05 18:25:00) [4]

директива message ужеподразумевает свойства полиморфизма у метода... и, кстати, в справке об этом однозначно дали понять...


ZENsan   (2008-06-05 17:50:00) [5]

Или написав просто inherited ты это подразумевал..


ZENsan   (2008-06-05 17:49:00) [6]

Погоди. Ради интереса.. А как это ты procedure OnSomeMSG(vat TMessage); message WM_SOMEMESSAGE; перекрывать будешь в потомках.
Мне интересно. Ведь описать их как виртуальную нелзя...


Игорь Шевченко   (2008-06-05 17:39:00) [7]


> вообще в потомках помоему и нельзя переопределять эту процедуру.


можно


ZENsan   (2008-06-05 17:36:00) [8]

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


ZENsan   (2008-06-05 17:35:00) [9]

инхеритед...


msg   (2008-06-05 15:42:00) [10]

вот теперь все понятно. сенкс.


Игорь Шевченко   (2008-06-05 15:40:00) [11]


> должен ли сработать статический обработчик сообщения в предке,
>  если сообщение послылается окну его наследника.
> в наследнике обработчика нет


Должен


msg   (2008-06-05 15:35:00) [12]

мне просто интересно, должен ли сработать статический обработчик сообщения в предке, если сообщение послылается окну его наследника.
в наследнике обработчика нет.


Игорь Шевченко   (2008-06-05 15:27:00) [13]

msg   (05.06.08 15:25) [2]

мало кода.


msg   (2008-06-05 15:25:00) [14]

for i := 0 to MdiChildCount - 1 do PostMessage(MdiChild[i].Handle,WM_USER+1000,0,0);

...

procedure TMyBaseMdiChildClass.OnMessage(var Msg : TMessage); message wm_user + 1000;
begin
CallMyVirtualMethod;
end;

После цикла в потомках не происходит вызова виртуального перекрытого CallMyVirtualMethod;


ZENsan   (2008-06-05 15:09:00) [15]

Исходник можно чуток?


Наверх

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