![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Правила вызова методов класса (ООП) [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;