Форум: "Основная";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
Внизнужно ли перекрывать функцию? Найти похожие ветки
← →
sda (2006-04-24 19:47) [0]Есть мой компонент, хочу написать наследника... Там есть процедуры, которые ловят сообщения CM_MOUSEENTER, CM_MOUSELEAVE:
TMyComp = class(TCustomControl)
private
procedure CMMouseEnter(var Message: TMessage); Message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); Message CM_MOUSELEAVE;
В наследнике эти процедуры нужно немного переделать таким образом:
TMyNewComp = class(TMyComp)
private
procedure CMMouseEnter(var Message: TMessage); Message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); Message CM_MOUSELEAVE;
.....
procedure TMyNewComp.CMMouseEnter(var Message: TMessage);
begin
if <условие> then
inherited;
end;
procedure TMyNewComp.CMMouseLeave(var Message: TMessage);
begin
if <условие> then
inherited;
end;
т.е. если выполняется какое-то условие то выполнить все те действия которые в компоненте родителе в этой процедуре... А вопрос такой, в таком случае нужно ли в родителе объявлять эти процедуры как virtual, а в наследнике override?
← →
Мефисто (2006-04-24 19:55) [1]>> нужно ли в родителе объявлять эти процедуры как virtual, а в наследнике override?
Нет
← →
jack128 © (2006-04-24 20:24) [2]обработчики сообщений всегда отрабатывают как динамические методы. никакие virual/dymanic/override к ним не применимы..
← →
icWasya © (2006-04-25 10:11) [3]>> нужно ли в родителе объявлять эти процедуры как virtual, а в наследнике override?
>Нет
более того, в наследнике эти процедуры можно объявить даже с другими именамиTMyNewComp = class(TMyComp)
private
procedure MyNewMouseEnter(var Message: TMessage); Message CM_MOUSEENTER;
procedure MyNewMouseLeave(var Message: TMessage); Message CM_MOUSELEAVE;
, и всё будет правильно работать. Главное, правильно указать код сообщения (CM_MOUSEENTER,CM_MOUSELEAVE)
← →
vl_chel © (2006-04-25 12:39) [4]Настоятельно советую посмотреть как сделано подобное в VCL
Обявлена процедура MouseEnter(....); virtual;
в ней прописана вся работа с объектом
ее вызов в процедуре
procedure MyNewMouseEnter(var Message: TMessage); Message CM_MOUSEENTER;
которая занимается обработкой непосредственно сообщения и передачей данных в MouseEnter
при наследовании переопределяется теoverride
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.037 c