Главная страница
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.065 c
9-1131057224
JUS
2005-11-04 01:33
2006.06.04
Помогите со стрельбой:((( немогу блин сделать


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


15-1146768050
bogdan
2006-05-04 22:40
2006.06.04
Представить суму всемя способами


15-1147433391
Layner
2006-05-12 15:29
2006.06.04
Помогите определится с морем (на отпуск-июль)


4-1141572142
Veon
2006-03-05 18:22
2006.06.04
Взаимодействие с Edit