Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.041 c
2-1148131942
roman_ln
2006-05-20 17:32
2006.06.04
как заполнить комб список с помощью цикла


6-1138653753
Alexis
2006-01-30 23:42
2006.06.04
Мониторинг файла в Internet


1-1146041042
tickler
2006-04-26 12:44
2006.06.04
обратная нумерация строк в memo


15-1147350795
carmen
2006-05-11 16:33
2006.06.04
tpu


2-1147762632
ttt_111
2006-05-16 10:57
2006.06.04
Работа с QRreport.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский