Visual Basic 6. Руководство разработчика


Рисование на объекте


UserControl

Теперь уже есть функционирующий элемент управления, при создании которого не было особых проблем, поскольку Visual Basic создал его скелет. Элемент управления интегрирован в среду разработки, его пиктограмма появилась на панели элементов управления, и он может быть уже использован, как обычный элемент управления. Он даже имеет свое собственное окно свойств. Теперь наста­ло время сделать элемент управления реально работающим. Необходимо доба­вить код, уникальный для данного элемента управления, который рисует надпись.

Код вывода на экран видимого интерфейса элемента управления обычно помещается в событие Paint. Visual Basic инициирует это событие каждый раз, когда элемент управления должен быть перерисован. Таким образом, нужно добавить код, перерисовывающий элемент управления. Сейчас давайте скопируем процедуру DrawCaption(), разработанную ранее в этой главе, в элемент управления. Откройте окно объекта UserControl, в котором находится код элемента управления, и вставьте туда процедуру DrawCaption(). В обработчике события Paint объекта UserControl вставьте следующую строку, которая вызывает процедуру DrawCaptionQ:

DrawSubroutine

Этот вызов в событии Paint гарантирует, что каждый раз, когда разработчик изменяет размеры элемента управления, или при обновлении формы, весь объект UserControl будет также перерисован.

Процедура DrawCaption() рисует на объекте Form. Объект UserControl фактически идентичен объекту Form, поэтому может использовать те же самые методы рисования. Откройте окно кода объекта UserControl, вставьте код подпрограммы DrawCaption() и замените все вхождения "Me" на "UserControl", чтобы процедура рисовала на объекте UserControl.

Подпрограмма DrawCaption() должна также вызываться для перерисовки надпи­си всякий раз, когда изменяется какое-либо из специальных свойств элемента управления. Свойствами, которые влияют на вид выводимого текста наряду со стан­дартными свойствами Picture и BackColor, являются Caption, TextAlignment и Effect. Вставьте в коды этих свойств элемента управления процедуру Property Let со строкой, вызывающей событие UserControl_Paint. Доработанная процедура Property Let для свойства Effect показана ниже (подчеркнута вставленная строка).


Public Property Let Effect (ByVal New_Effect As Effects)

m_Effect = New_Effect

PropertyChanged "Effect"

UserControl Paint

End Property

Рисование на объекте UserControl идентично рисованию на объекте Form. Элементы управления, которые подобно элементу управления FLEXLabel рисуют свой видимый интерфейс и не полагаются на стандартные элементы управления, называются user-drawn

(нарисованные пользователем). Позже в главе будет показано, как строить специальные элементы управления на основе конституэнтных.

Попробуйте изменить свойство, определяющее цвет элемента управления FLEXLabel. Появится знакомое диалоговое окно, в котором можно выбрать или задать новый цвет. Заметьте, мы не предпринимали никаких мер для реализации этого свойства. Если посмотреть код элемента управления, можно заметить, что мастер объявил тип свойств Backcolor и ForeColor как OLE_COLOR. Когда Visual Basic видит тип OLE_COLOR, он знает, как обрабатывать соответствующие свойства в окне свойств.

Примечание

OLE_COLOR не является общим типом данных, который можно использовать в объявлениях обычных переменных Visual Basic, но он имеет определенный смысл. Он выводит диалоговое окно Color Selection (Выбор цвета) всякий раз, когда пользователь пробует устанавливать новое значение для свойства, определяющего цвет. Если определить тип свойств Backcolor или Forecolor как Long, то пользователь элемента управления для задания цвета должен будет вводить в окне свойств целое значение (например, HOOFFOO для зеленого цвета).


Содержание раздела