Язык WordBasic - практический подход

Операторы рисования


 
Каждый из перечисленных ниже операторов делает следующие:
переводит режим просмотра из обычного в просмотр расположения страницы; помещает соответствующий объект рисования по умолчанию в верхний левый угол текущей страницы до начала текста. Объекты обычно ориентированы с левого верхнего к правому нижнему углу. Слова “объект по умолчанию” означают, что такой объект имеет фиксированные размеры и форму, но так как это объект рисования, то с ним можно производить всевозможные преобразования: перемещать, растягивать, поворачивать и т.д. Важно то, что рисунок наносится поверх текста.
Оператор DrawLine
– помещает прямую линию перед текстом в начале текущей страницы. Для макрокоманды этот оператор почти бесполезен, важнее было бы иметь возможность рисовать линию между заданными точками.
Оператор DrawArc – помещает дугу.
Оператор DrawEllipse

эллипс (правда он по умолчанию круг).
Пример. Нарисуем калейдоскоп из кругов произвольного размера, цвета и разбросанных случайным образом по заданной области.
 
Sub MAIN
For i = 1 To 100


c = Int(Rnd() * 16)
f = Int(Rnd() * 16)
x = Int(Rnd() * 300)
y = Int(Rnd() * 200)
DrawEllipse
h1 = Int(Rnd() * 75)
FormatDrawingObject .FillColor = f, .LineColor = c, /
.HorizontalPos = x, .VerticalPos = y, .Height = h1, /
.Width = h1
Next i
End Sub
 
DrawRectangle – добавляет прямоугольник (по умолчанию квадрат).
DrawRoundRectangle – добавляет прямоугольник со скруглёнными углами.
DrawTextBox – добавляет ограниченную текстовую область к уровню рисунка. Это квадрат со стороной один дюйм.
DrawCallout – добавляет выноску (пояснение). Выноска содержит текст в прямоугольной области и стрелку, указывающую на поясняемую часть рисунка. С ней связан целый ряд операторов, которые рассмотрены чуть далее.
 
Более сложно рисуется произвольная ломанная линия, которая может быть замкнутой. Делается это с помощью двух операторов (DrawFreeformPolygon и DrawSetPolyPoints) и двумерного массива с координатами вершин.
Первая размерность массива должна быть не меньше числа вершин, иначе линия будет построена лишь частично и будет выдано сообщение об ошибке. Начало координат расположено в верхнем левом углу, первая координата задает расстояние по вертикали, а вторая по горизонтали. Оператор DrawFreeformPolygon просто помещает объект типа отрезок прямой в начало текущей страницы, а DrawSetPolyPoints применяет его к массиву с координатами. Лучше это видно на примере. Построим прямоугольник.
 
Sub MAIN
DrawFreeformPolygon
Dim вершины$(5, 2)
вершины$(1, 1) = "5 cm"
вершины$(1, 2) = "8 cm"
вершины$(2, 1) = "5 cm”
вершины$(2, 2) = "3 cm"
вершины$(3, 1) = "7 cm"
вершины$(3, 2) = "3 cm"
вершины$(4, 1) = "7 cm"
вершины$(4, 2) = "8 cm"
вершины$(5, 1) = "5 cm"
вершины$(5, 2) = "8 cm"
DrawSetPolyPoints 5, вершины$()
End Sub
 
При записи координат можно указать в каких единицах считать координаты (cm, pt). Сложный объект можно строить, например, пересчитывая координаты в массиве вершины$. Однако при большом количестве вершин это не самое простое занятие, поэтому для рисования произвольной ломанной линии существует несколько вспомогательных операторов и функций.
Функция DrawCountPolyPoints, как следует из её названия, возвращает число точек в произвольном полигоне.
Синтаксис:
DrawCountPolyPoints [(объект)]
Аргумент – либо номер объекта, принимающий значение от 1 до DrawCount(), либо, если аргумент опущен, текущий рисованный объект. Иначе возникает ошибка. Кстати, объект номер 1 тот, который отмечен якорем оператором с помощью оператора DrawSetRange (см. ниже).
Оператор DrawGetPolyPoints позволяет присвоить элементам двумерного массива координаты вершин ломанной линии.
Синтаксис:
DrawGetPolyPoints массив[$]() [, объект]
 
Заполняет двумерный массив координатами точек указанного рисованного объекта, который должен быть ломанной линией. Этот массив можно использовать в качестве аргумента оператора DrawSetPolyPoints для рисования другого объекта такого же типа.


Для определения размера массива следует применять функцию DrawCountPolyPoints(). Массив
может быть как числовым, так и символьным.
 
Следующие операторы работают только с объектами, нарисованными из меню Рисование. Если объект встроенный произойдёт ошибка.
DrawFlipHorizontal
– переворачивает выбранный рисованный объект слева направо.
DrawFlipVertical –
переворачивает выбранный рисованный объект сверху вниз.
Вот интересный пример с этими операторами, который я нашёл в Microsoft TechNet
#6/1996 г.:
 
Sub MAIN
If SelInfo(27) = - 1 Then FileNewDefault
DrawArc
FormatDrawingObject .HorizontalPos = 225, /
.VerticalPos = 110
For Cnt = 1 To 1000
DrawFlipHorizontal
DrawFlipVertical
Next Cnt
End Sub
 
DrawRotateLeft –
переворачивает выбранный рисованный объект на 90 градусов против часовой стрелки.
DrawRotateRight – переворачивает выбранный рисованный объект на 90 градусов по часовой стрелке.
 
Задание. Используя операторы поворота, добейтесь, чтобы в предыдущем примере дуга вращалась вокруг обеих диагоналей квадрата.
 
Массив параметров
 
В WordBasic, в отличие от других Бейсиков, существует множество операторов с громадным количеством параметров. Конечно можно каждый раз задавать аргументы оператора, но есть более интересный путь: для облегчения работы с параметрами в язык введены так называемые “массивы параметров”. Такой массив (по синтаксису его правильнее было бы называть структурой) объявляется оператором Dim c указанием какому оператору (а на самом деле диалоговому окну) он соответствует.
Синтаксис:
 
Dim dlg as имя_оператора
 
Например.
 
Dim dlg As FormatDrawingObject
 
Оператор FormatDrawingObject позволяет установить цвет и тип линии, цвет заливки, тень и множество других вещей. Заполнить массив параметров текущими значениями можно с помощью оператора:
 
GetCurValues dlg
 
Их можно извлекать оттуда и анализировать отдельно, что тоже одно из преимуществ этого метода.
К элементам массива можно обращаться как к элементам структуры с помощью составного имени: имя_массива.имя_аргумента
Например.
 
dlg.LineType = 1
dlg.LineColor = 5
 
Для изменения параметров следует выполнить оператор с массивом параметров в качестве аргумента:
 
FormatDrawingObject dlg
 

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