Когда вы хотите послать группе компонентов команду "перерисуй себя", вы должны сделать это на уровне, общем для всех компонентов. Для всех компонентов есть только одна общая вещь - все они происходят от TComponent. Так что, например, когда вы адресуете все компоненты форме, вы должны все их обрабатывать как объекты TComponent, а не как метки или кнопки. Вы должны, в известной мере, накладывать маски на лицо каждого компонента формы, чтобы все они выглядели одинаково - и все выглядели как TComponents.

Способ накладывания масок на объекты называется приведением типов - и в Object Pascal это легче всего сделать, использовав операцию AS. Операция AS обрабатывает один класс как (as) другой. Левый операнд операции AS должен быть экземпляром объекта, а его правый оператор должен быть классом объектов. Затем Delphi обрабатывает экземпляр объекта слева так, буд-то он класса, показанного справа:

(MyButton AS TControl).ShowHint : = True;

Здесь мы имеем экземпляр объекта МуВипоп, класса ТВийоп, приводим его к типу класса ТСо1Йго1 посредством использования операции АБ. Тут существуют хитрости в отношении операции А8, которые я не могу полностью объяснить в этой книге, но я хочу дать вам почувствовать, для чего используется Ав. Например, (поверьте мне на слово) существует хорошая идея заключить выражение для Л8 в скобки, чтобы избежать проблемы старшинства операций. (Но спросите себя: будет ли компилятор пытаться оценить без круглых скобок что это - МуВиШп.ЗЬо^упНий или ТСотйгоЬвЬогупНт!?)

Строка кода, показанная выше, корректна и компилируема, но не очень полезна. Все это помещает "маску" ТСо1Лго1 на объекте ТВиМоп. Чтобы показать, как этот механизм действует в полиформизме - да, нам надо "много форм", или, по крайней мере, больше, чем одна.

Приведение типов с А5

Приведение типов стоит позади всего полиформизма. Это в действии можно увидеть с помощью простой программы, которая пропускает все щелчки через единственный обработчик событий ОпСНск, и которая затем устанавливает общие свойства всем элементам управления посредством полиморфной ссылки. Это проект POL.YITEST.DPR на дискете, прилагаемой к книге. Основная форма показана на Рисунке 10.3.

Форма проекта POLYTEST.DPR имеет несколько типичных элементов управления-метка, редактирование, кнопка и пульт. У всех есть сквозные пояснения, доступные посредством установки их свойств ShowHint в True. Каждый имеет "персонализированные" пояснения, указывающие - какой вид элемента управления представляет. Если вы запускаете программу и задержали курсор мышки на кнопке над ней, высвечивается желтый текст подсказки "я кнопка!". Метка скажет - "я метка!", и так далее.

Существует единственная процедура обработки события OnCIick, и она служит всем четырем формам и элементам управления.

Обычно, каждый элемент управления имеет собственный обработчик события для каждого события, но в этом нет ничего нерушимого. Вы можете прогнать все события через единственный обработчик события, чтобы убедиться в общности процесса обработки, или еще по какой другой причине. Это делается не часто, но, разумеется, может быть сделано. Общий вызов обработчика событий OnCIick показан на Листинге 10.1.


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в среде Delphi



Новости за месяц

  • Декабрь
    2021
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31