На этом шаге мы рассмотрим операции рисования.
Для изображения текста, пикселов и различных геометрических фигур существует несколько предикатов VPI, которые начинаются с префикса draw_. Операции рисования в окне используют текущие настройки рисования для данного окна, к которым обращаются как к инструментам рисования. Инструментами являются: перо (Реn), кисть (Brush), режим рисования (Drawmode), шрифт (Font), цвет изображения (Foreground Color), цвет фона (Background Color) и режим заполнения фона (Background Filling Mode).
Настройки всех текущих инструментов рисования для окна можно записать в отдельную переменную и затем использовать ее для восстановления этих свойств при помощи предикатов win_GetDrawTools/l и win_SetDrawTools/2:
SaveTools=win_GetDrawTools(Win), % Изменяем настройки рисования и рисуем с различными свойствами win_SetDrawTools(Window,SaveTools), % Восстанавливаем сохраненные настройки
Компоненты объекта инструментов рисования определены в домене drawtools:
global domains drawtools=draw_tools( pen, brush, drawmode, font, color foreground, color background, bk_mode)
Линии и контуры фигур рисуются при помощи перьев (PEN). Параметры линии, например ширина, стиль и цвет, могут быть изменены установкой атрибутов пера перед его использованием (таблица 1).
Стиль | Значение |
---|---|
ps_Hollow | Прозрачная линия |
ps_Solid | Сплошная линия |
ps_Dash | Пунктирная линия |
ps_Dot | Точечная линия |
ps_DashDot | Штрих-пунктирная линия |
ps_DashDotDot | Штрих-пунктирно-пунктирная линия |
Для перьев существует специальный домен:
global domains penWidth=integer pen=pen(penWidth,penStyle,color)
Предикат win_GetPen возвращает текущее перо. Часто он используется для временного изменения пера и восстановления старого пера после рисования.
Pen=win_GetPen(Window)
Предикат win_SetPen/2 изменяет перо для данного окна. Следующий код устанавливает перо со сплошной красной линией и шириной 2 пиксела.
PenWidth=2, Pen=pen(PenWidth,ps_Solid,color_Red), win_SetPen(Window,Pen)
Текст отображается текущим цветом изображения, и если домен bk_mode имеет значение bk_Opaque, то фон будет залит текущим цветом фона. При использовании значения bk_Transparent цвет фона будет прозрачным:
global domains bk_mode=integer constants bk_Transparent=1 bk_Opaque=2
Для изменения текущего режима фона используется предикат:
win_SetBackMode(Window,Bk_Mode)
Для закрашивания фигур используются кисти. Параметрами кисти являются цвет и стиль узора - заполнителя.
global domains brush=brush(patStyle, color)
Стили узора-заполнителя и их описание приведены в таблице 2.
Идентификатор стиля | Значение |
---|---|
pat_Hollow | Нет заполнителя |
pat_Solid | Однотонная кисть определенного цвета |
pat_Horz | Горизонтальная штриховка |
pat_Vert | Вертикальная штриховка |
pat_Fdiag | Диагональная штриховка снизу вверх (слева направо) |
pat_Bdiag | Диагональная штриховка сверху вниз (слева направо) |
pat_Cross | Горизонтальная и вертикальная перекрестная штриховка |
pat_DiagCross | Диагональная штриховка крест-накрест |
Предикат win_GetBrush возвращает текущую кисть.
CurrentBrush=win GetBrush(Window)
Предикат win_SetBrush/2 изменяет текущую кисть для окна.
win_SetBrush(Window,NewBrush)
Текущий шрифт изменяется вызовом предиката:
win_SetFont(Window,FontBinary)
Вы можете получить текущий шрифт вызовом предиката:
FontBinary=win_GetFont(Window)
На следующем шаге мы рассмотрим режимы рисования.