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

Вниз

нужно ли перекрывать функцию?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.044 c
2-1148019646
elena_pp
2006-05-19 10:20
2006.06.04
Как сделать механизм обновления исполняемого файла


1-1145987180
vidiv
2006-04-25 21:46
2006.06.04
Русские буквы и RichEdit 2.0


2-1147970308
Freeek
2006-05-18 20:38
2006.06.04
поиск фрагмента текста


10-1120228814
Juice
2005-07-01 18:40
2006.06.04
TLB->PAS


15-1147122323
alex-drob
2006-05-09 01:05
2006.06.04
Интернет по MAC