Главная страница
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.058 c
2-1148054439
Мурзилка
2006-05-19 20:00
2006.06.04
кодировки


1-1146450343
Nikolaich
2006-05-01 06:25
2006.06.04
проблема с порядком окон после активации подсказки


15-1146559507
sts55555
2006-05-02 12:45
2006.06.04
Что будет с Delphi и с нами?


4-1142398689
fenixaz
2006-03-15 07:58
2006.06.04
факт создания или изменения файла


1-1145976859
Radistka Cat
2006-04-25 18:54
2006.06.04
подсветка отдельных слов в RichEdit