Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Правила вызова методов класса (ООП) [D5, D7]


intlex ©   (2009-11-13 17:58:00) 

Допустим есть форма 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 в виртуальный боязно)
Подскажите пожалуйста, может есть другие способы, чтобы вызывались перекрытые методы?


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

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


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

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


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

> intlex   (13.11.09 19:08) [4]

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


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

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


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

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


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

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


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

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


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

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


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

procedure Hide; override;


Наверх

Титульная страница Поиск, карта сайта Написать письмо