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

Одно из чудесных пророчеств среды Windows состоит в том, что вы никогда не должны нервничать по поводу того, что вам прийдется вернуться в скверные времена старины, к DOS.

РИСОВАНИЕ И ПЕРЕРИСОВЫВАНИЕ

Проблема рисования в среде Windows состоит в том, что это не может прийти к вам немедленно: как ни крути, другое окно может перекрыть ваш рисунок частично или полностью, может уничтожить вашу графику. Что происходит, когда это вмешавшееся окно уходит? Плохие новости: вам надо все рисовать заново.

То же самое происходит, когда вы минимизируте окно с графикой в прямоугольник пиктограммы и затем двойным щелчком мыши на пиктограмме возвращаете первоначальное окно Форма появляется вновь - вместе с любым количеством элементов управления, которые вы могли поместить на эту форму. Но если вы рисуете какую-нибудь графику или текст на полотне формы, та и графика и текст уходят, и вы вынуждены рисовать их снова.

Так кто рисует форму и элементы управления? Windows (которая рисует окна и некоторые из стандартных элементов управления, типа простых кнопок), или библиотеки Delphi. И как она знает, когда их рисовать? Когда форму на экране неожиданно закрывают, или изменяют ее размер с помощью кнопки минимизации или максимизации, или когда вы переносите форму с пиктограммы, Windows чувствует это и посылает сообщение форме, чей статус изменяется. Сообщение -это специальной вид вызова функции, и система обмена сообщениями Windows связывает вместе все широко разбросанные механизмы в одно (более или менее) организованное целое. Windows посылает формам инструкцию перерисовать себя.

Тени объектно-ориентированных активных данных!

Форма может перерисовать себя, и посылает для этого в ответ каждому, расположенному на ней элементу управления, сообщение, чтобы они могли перерисовать себя также.

Существует событие, связанное с каждой формой, называемое OnPaint, и это событие запускается каждый раз, когда форма получает от Windows сообщение Redrav (Перерисовать). Если вы построили обработчик события для OnPaint, который обрабатывает это событие, вы можете перерисовать свою графику одновеменно с перерисовывающими себя формами и элементами управления.

Процедура FormPaint из Листинга 12.5 обрабатывает событие формы OnPaint. Всякий раз, когда форма перекрашивается (на экране это в любом случае перерисовывание) происходит событие, и на полотне формы перерисовывается узор. Это происходит автоматически.., настолько автоматически, что вам надо быть внимательным, чтобы этого не произошло, когда вам этого совсем не хочется. Само собой разумеется, что если вы очищаете форму, то рисование нового узора циклоиды откладывается. Если вы очищате форму и затем минимизируете программу до пиктограммы, то, обычно, узор перерисовывается сразу же, как только вы два раза щелкните мышью на пиктограмме, чтобы привести программу в ее нормальное оконное состояние. Но вы не захотите, чтобы она перерисовывалась, если область рисования предполагается очистить. Вот почему я использовал логическую переменную CanvasIsClear в Листинге 12.5 для управления любым узором, перерисованным внутри процедуры FormatPaint. Если CanvasIsClear установлено в True в то время, как происходит событие OnPaint, узор не перерисовывается.


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

Программирование в среде 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