![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
обработка сообщений и наследование
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]Исходник можно чуток?