Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.03;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
15-1257111012
Юрий
2009-11-02 00:30
2010.01.03
С днем рождения ! 2 ноября 2009 понедельник


15-1257172006
Loky1984
2009-11-02 17:26
2010.01.03
Не запускается Delphi6


15-1257313780
Kolan
2009-11-04 08:49
2010.01.03
Делать DMClient опенсорсным?


2-1258024266
webpauk
2009-11-12 14:11
2010.01.03
Подогнать размер RichEdit в зависимости от шрифта и кол-ва строк


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