Главная страница
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.013 c
2-1258192297
AlexDan
2009-11-14 12:51
2010.01.03
положение GetPath


15-1257150981
Kolan
2009-11-02 11:36
2010.01.03
Форма Т-12


1-1231762680
WanderBuild
2009-01-12 15:18
2010.01.03
Нужна помощь по работе с ресурсами (конкретно RT_VERSION)


15-1256225989
Empleado
2009-10-22 19:39
2010.01.03
Поднять облака! Интересно, о какой "установке" идет речь ?...


1-1232613443
harisma
2009-01-22 11:37
2010.01.03
Использование AdjustClientRect