Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.025 c
15-1147412642
User_OKA
2006-05-12 09:44
2006.06.04
Watches


15-1147356788
Петр
2006-05-11 18:13
2006.06.04
Delphi


15-1146854934
ArtemESC
2006-05-05 22:48
2006.06.04
Глаза...


2-1147774425
Konnor
2006-05-16 14:13
2006.06.04
SQL


8-1136560269
Syrnik
2006-01-06 18:11
2006.06.04
DShow: Разделить стерео аудио на 2 моно




   Наверх