Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.01.03;
Скачать: [xml.tar.bz2];

Вниз

Правила вызова методов класса (ООП)   Найти похожие ветки 

 
intlex   (2009-11-13 17:58) [0]

Допустим есть форма c расположенными на ней контролами (общий предок у них TControl), у некоторых из них перекрыт метод Hide:

 TSomeControl = class(TControl)
 ...
 public
 ...
   procedure Hide;
 ...
 end;

Когда я в некоторой функции выполняю следующий код:

 n := Form1.ControlCount - 1;
 for i := 0 to n do
   Controls[i].Hide;

то вызывается метод класса TControl.
Проверку типа

 if Controls[i] is TSomeControl then TSomeControl(Controls[i]).Hide;

сделать не могу, т.к. не знаю какие там объекты вообще могут быть,
а переделывать TControl.Hide в виртуальный боязно)
Подскажите пожалуйста, может есть другие способы, чтобы вызывались перекрытые методы?


 
Юрий Зотов ©   (2009-11-13 18:57) [1]

procedure Hide; override;


 
Юрий Зотов ©   (2009-11-13 18:59) [2]

Вдогонку - если, конечно, Hide виртуальный (нет Delphi под рукой, негде посмотреть).


 
Юрий Зотов ©   (2009-11-13 19:03) [3]

А если Hide невиртуальный, то возможен другой вариант - через Dispatch посылать контролу сообщение типа CM_xxx (какое именно - это надо подсмотреть в Controls.pas).


 
intlex   (2009-11-13 19:08) [4]

мдя, походу надо вместо перекрытия Hide добавить
procedure CMVisibleChanged(var Message: TMessage); message CM_VISIBLECHANGED


 
Юрий Зотов ©   (2009-11-13 19:09) [5]

Блин. Че-то я прифигел к концу дня. Все проще: Visible := false


 
intlex   (2009-11-13 19:09) [6]

Юрий Зотов, спасибо за помощь!


 
Юрий Зотов ©   (2009-11-13 19:10) [7]

> intlex   (13.11.09 19:08) [4]

походу зачем?


 
intlex   (2009-11-13 19:15) [8]

чтобы повесить на visible класса Tsomecontrol свой обработчик, то нужно перекрывать свойство Visible, а так же 2 метода его обработки read write,
в случае с сообщением будет проще - меньше писать)


 
intlex   (2009-11-13 19:17) [9]

к тому же корректно отработают варианты типа somecontrol.visible := value и somecontrol.hide



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2010.01.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.004 c
2-1258131218
abajun
2009-11-13 19:53
2010.01.03
продолжение работы программы после нажатия клавиши


1-1231953992
Тыщ
2009-01-14 20:26
2010.01.03
Как использовать строковые константы в asm..end?


2-1257856327
Nutz
2009-11-10 15:32
2010.01.03
Delphi + ZipForge (out of memory)


2-1258117693
stas
2009-11-13 16:08
2010.01.03
Чем заменить конструкцию использующую Application


15-1256418198
XXL
2009-10-25 01:03
2010.01.03
Давно ли delphimaster рекламирует сомнительные сайты ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский