Главная страница
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.019 c
15-1257377007
Германн
2009-11-05 02:23
2010.01.03
.NET class library


3-1232619397
Novice
2009-01-22 13:16
2010.01.03
Разделить параметры запроса.... или как-то так...


2-1258031986
Zhanna
2009-11-12 16:19
2010.01.03
Сортировка файла по дате


2-1258113824
Acrisim
2009-11-13 15:03
2010.01.03
Многострочный едит


2-1258047678
AntonioBanderas
2009-11-12 20:41
2010.01.03
Игра пятнашки