Иллюстрированный самоучитель по Турбо Паскалю
Вывод изображения
Заполнение области
Видимый элемент может быть частично или полностью перекрыт другими видимыми
элементами. Turbo Vision позволяет располагать окна на экране в произвольном
порядке, в том числе и накладывая их друг на друга. С помощью метода
Procedure GetClipRect(var R: TRect)
видимый элемент может получить координаты минимальной площади, которую он
должен заполнить в данный момент. Обращение к GetClipRect обычно используется в
методе Draw и позволяет до минимума сократить время обновления информации на
экране.
Следует помнить, что в правильно построенной программе никакой другой видимый
элемент не должен вторгаться в область владения данного элемента. Поэтому, если
видимый элемент не заполнит всю выделенную ему область, этого за него не сделает
никто другой, и незаполненная область окажется «замусоренной» предыдущим выводом
в эту часть экрана.
Для вывода на экран не рекомендуется использовать стандартную процедуру Write
(WriteLn), т.к. она заполняет только ту часть экрана, которая необходима для
вывода, в то время как длина строки в видимом элементе может быть больше строки
вывода. С другой стороны, эта процедура игнорирует границы видимого элемента и
может «залезть» в чужую область.
Вывод в Turbo Vision основан на применении методов MoveChar, MoveStr и
WriteLine. Все три метода используют переменную типа TDrawBuffer в качестве
буфера видеопамяти. Метод MoveChar заполняет буфер нужным символом, например,
пробелом или символом Char (#176) - этим символом заполняется фон панели экрана.
Метод MoveStr переносит в буфер строку (подстроку), а метод WriteLine переносит
буфер в видеопамять и таким образом осуществляет собственно вывод на экран.
Тип TDrawBuffer представляет собой массив слов:
type
TDrawBuffer = array [0..MaxViewWidth-1] of
Word;
Константа MaxViewWidth определена в интерфейсной части модуля Views и
устанавливает максимально возможную длину вывода (132 символа). Элементы массива
задают двухбайтные последовательности, используемые в видеопамяти ПК для
размещения кода выводимог/о символа (младший байт) и его атрибутов (старший
байт). Байт атрибутов определяет цвет выводимого символа и цвет фона, а также
содержит признак мерцания (рис. 17.1).

Рис. 17.1. Байт атрибутов видеопамяти
При обращении к методам MoveChar и MoveStr байт атрибутов задается в качестве
одного из параметров обращения. Его можно получить с помощью функции GetColor,
параметр обращения к которой определяет нужный номер элемента палитры.