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

Вниз

обработка сообщений и наследование   Найти похожие ветки 

 
msg   (2008-06-05 14:57) [0]

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

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


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

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


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

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;


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

msg   (05.06.08 15:25) [2]

мало кода.


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

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


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


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


Должен


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

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


 
ZENsan ©   (2008-06-05 17:35) [7]

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


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

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


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


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


можно


 
ZENsan ©   (2008-06-05 17:49) [10]

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


 
ZENsan ©   (2008-06-05 17:50) [11]

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


 
Palladin ©   (2008-06-05 18:25) [12]

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


 
ZENsan ©   (2008-06-05 19:48) [13]

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


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


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


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


 
ZENsan ©   (2008-06-06 11:52) [15]

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



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

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

Наверх




Память: 0.49 MB
Время: 0.023 c
15-1211436673
Caks
2008-05-22 10:11
2008.07.06
конвертация из basic в delphi


15-1211486281
BlueDragon
2008-05-22 23:58
2008.07.06
Задание с ЕГЭ 2008


2-1212997506
viperv
2008-06-09 11:45
2008.07.06
Компонент TWebBrowse


15-1211546863
Val
2008-05-23 16:47
2008.07.06
Исключения в RemoteDataModuleCreate


2-1212966315
Res
2008-06-09 03:05
2008.07.06
потоки