Графика
В VB есть три графических объекта, которые позволяют работать с графикой, это:
-
форма (Form);
-
управляющий элемент графическое поле (PictureBox);
-
рисунок (Image).
Форма и графическое поле – это два объекта-контейнера, которые:
-
способны содержать в себе точечный рисунок из графического файла;
-
обладают графическими методами и позволяют с помощью графических методов рисовать на своей поверхности;
-
способные содержать в себе другие управляющие элементы.
Объект Image (рисунок) может только содержать в себе точечный рисунок, не обладает графическими методами и не не может включать управляющих элементов, т.е. не является контейнером.
Графические методы
Для задания цвета графических объектов в VB используется специальная функция RGB, название которой образовано по первым буквам английских слов Red (красный), Green (зеленый) и Blue (синий). Функция использует три целочисленных аргумента RGB(R, G, B), которые могут принимать значения от 0 до 255. Первый параметр определяет интенсивность красного цвета, второй – интенсивность зеленого, третий – интенсивность синего. При значении параметра 0 – соответствующий цвет полностью отсутствует, 255 – максимальная интенсивность.
Ниже в таблице приводятся значения параметров RGB-функции для наиболее распространенных цветов.
|
Для нанесения точки применяется метод PSet: [Объект.]PSet(x,y)[,Цвет]
где х и y – координаты точки.
Например, нанесет точку синего цвета инструкция: PSet(300,400), RGB(0,0,255)
Стереть точку можно инструкцией, которая задает для нее цвет фона: PSet(300,400), BackColor
Для рисования линии, соединяющей точку (x1, y1) с точкой (x2, y2), следует применить метод
Line: [Объект.]Line [(x1, y1)] – [Step](x2, y2)[, Цвет]
Линия включает первую точку, но не включает вторую, конечную точку. Это полезно при рисовании замкнутого контура. Последнюю точку линии можно обозначить инструкцией PSet Step (0, 0)[, Цвет]
Слово Step перед координатами означает, что они отсчитываются относительно последней точки рисования.
Например, инструкция Line (100, 200)–(150, 250) эквивалентна инструкции Line (100, 200)–Step(50, 50).
Если первая пара координат опущена, то линия будет нарисована от позиции текущей точки, которой является последняя точка рисования, до точки с координатами (x2, y2). Текущая точка может быть также задана с помощью ее координат CurrentX и CurrentY.
Например, следующие инструкции нарисуют треугольник:
CurrentX = 500
CurrentY = 1500
Line –(2000, 3000)
Line –(1000, 3000)
Line –(500, 1500)
Для рисования прямоугольников вместе с методом Line используется аргумент B, например инструкция
Line (200, 200)–Step(1000, 1000), , B
нарисует квадрат со стороной 1000 твипов. Две запятые перед аргументом B указывают, что аргумент Цвет опущен.
Для рисования окружностей, эллипсов, дуг и секторов может быть применен метод Circle. Ниже показан синтаксис этого метода: [Объект.]Circle [Step](x, y), Радиус[, [Цвет][, [Нач], [Кон][, Вид]]]
Здесь приняты некоторые новые обозначения:
x, y – координаты центра;
Радиус – радиус окружности, для эллипса – размер более длинной полуоси;
Нач и Кон – выраженный в радианах угол начала и угол конца дуги, которые присутствуют или отсутствуют в обращении к методу только вместе;
Вид – отношение вертикальной полуоси эллипса к горизонтальной полуоси (по умолчанию равен 1).
Например, процедура Form_Click в режиме выполнения после щелчка на форме нарисует на форме дугу окружности с центром в точке с координатами 2000, 1500, радиуса 1000 твипов, от начальной точки, расположенной под углом pi / 2, против часовой стрелки, до конечной точки, находящейся под углом pi / 3:
Private Sub Form_Click()
Const pi = 3.14159265
Circle (2000, 1500), 1000, , pi / 2, pi / 3
End Sub
Если перед началом или перед концом дуги поставить знак минус, то при рисовании дуги эта точка дуги будет соединена прямой с центром окружности.
Обращение Circle (600, 1000), 800, , , , 2 нарисует эллипс, вертикальная ось которого равна 1600, а горизонтальная ось равна 800.
При рисовании прямоугольника, круга или эллипса эти фигуры могут быть заполнены сплошным цветом или цветными линиями.
Свойство FillStyle отвечает за вид заполнения рисуемой фигуры, предлагая на выбор один из восьми видов заполнения. По умолчанию имеет значение 1 – Transparent (прозрачное, фигура выглядит незаполненной). Значение этого свойства 0 – Solid обеспечивает заполнение фигуры сплошным цветом, установленным свойством FillColor. Остальные значения 2 – 7 предлагают заполнение вертикальными, горизонтальными, наклонными линиями или в клетку.
Толщина линии при выводе задается значением свойства DrawWidth объекта.
Будет линия сплошной или различного вида прерывистой – определяет значение свойства DrawStyle объекта.
Свойство AutoRedraw формы или графического поля разрешает (при его значении, равном True) или запрещает (при его значении, равном False) перерисовывание результатов работы графических методов, например при изменении размеров окна.
Методы, осуществляющие вывод информации на форму, позволяют направлять ее непосредственно на принтер. Принтер (объект Printer) рассматривается как особая форма, размер которой совпадает с размером печатаемой страницы. Метод Scale применим для объекта Printer и позволяет установить нужную систему координат.
-
Реализовать практически следующие графические команды:
Private Sub Graf11_Click()
Const pi = 3.14159265
Cls 'очистка экрана
DrawWidth = 1 'установка толщины линии
PSet (300, 400), RGB(100, 0, 255) ' отрисовка точки
Line (400, 500)-(650, 1050) ' отрисовка линии
CurrentX = 500
CurrentY = 1500
Line -(2000, 3000) ' отрисовка треугольника
Line -(1000, 3000)
Line -(500, 1500)
Line (200, 200)-Step(1000, 1000), , B ' отрисовка прямоугольника
Circle (2000, 1500), 500, , pi / 2, pi / 3 ' отрисовка дуги
Circle (3600, 2000), 800, , , , 2 ' отрисовка эллипса
Form1.FillStyle = 0
Circle (4000, 3500), 600, RGB(255, 0, 0) ' отрисовка окружности
End Sub
-
Построим график функции у = -0.25х3 + 0.14х2 + 0.25 х – 25 на отрезке значений аргумента[-10,+10]. Анализ показывает, что область значений функции на этом отрезке: -270 < у < +270.
Option Explicit
Function Primer(x As Single) As Single
Primer = -0.25 * x ^ 3 + 0.14 * x ^ 2 + _
0.25 * x - 25
End Function
Private Sub Form_Click()
Dim x As Single
Scale (-10, -270)-(10, 270) 'установка масштаба
Cls 'очистка экрана
DrawWidth = 1 'установка толщины линии
Line (-10, 0)-(10, 0) 'рисование оси Х
Line (0, -270)-(0, 270) 'рисование оси Y
CurrentX = -10 'текущее значение Х
CurrentY = Primer(-10) 'текущее значение Y
For x = Step 0.5
Line -(x, Primer(x)) 'построение графика
Next
End Sub
Постановка задачи 1: Реализовать приложение, которое рисует окружность, при помощи клавиш F1..F10 позволяет изменить цвет окружности, при помощи клавиш со стрелками обеспечивает перемещение окружности по экрану - влево, вправо, вниз, вверх.
В модуле :
Public x As Long
Public y As Long '* Координаты *
Public r As Long '* Радиус *
Public c As Long '* Цвет *
Const pi = 3.14159265
Private Sub Упрокр_Click()
Cls 'очистка экрана
AutoRedraw = True
DrawStyle = 0 '
DrawWidth = 2 'установка толщины линии
c = RGB(0, 0, 255) '* !!! Не трогать !!! *)
x = Form1.Width \ 2 '* !!! Не трогать !!! *)
y = Form1.Height \ 2 '* !!! Не трогать !!! *)
r = 500 '* !!! Не трогать !!! Но если очень хочется, то ... *)
Form1.FillStyle = 1
Circle (x, y), r, c
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Cls 'очистка экрана
Select Case KeyCode
'Изменение цвета окружности
Case 112
c = RGB(255, 255, 255) 'белый - F1
Case 113
c = RGB(0, 200, 255) 'голубой - F2
Case 114
c = RGB(255, 0, 0) 'красный - F3
Case 115
c = RGB(0, 255, 0) 'ярко зеленый - F4
Case 116
c = RGB(0, 0, 255) 'синий -F5
Case 117
c = RGB(0, 255, 255) 'бирюзовый - F6
Case 118
c = RGB(255, 0, 255) 'лиловый - F7
Case 119
c = RGB(255, 255, 0) 'желтый - F8
Case 120
c = RGB(200, 0, 0) 'темно красный -F9
Case 121
c = RGB(0, 200, 0) 'темно зеленый - F10
' Перемещение окружности по экрану при ' помощи стрелок
Case 37 'cтрелка влево
If x > r + 300 Then
Circle (x, y), r, Form1.BackColor
x = x - 300
End If
Case 40 'cтрелка вниз
If y + 300 < Form1.Height - (2 * r + 300) Then
Circle (x, y), r, Form1.BackColor
y = y + 300
End If
Case 38 'cтрелка вверх
If y > (r + 300) Then
Circle (x, y), r, Form1.BackColor
y = y - 300
End If
Case 39 'cтрелка вправо
If x < Form1.Width - (r + 300) Then
Circle (x, y), r, Form1.BackColor
x = x + 300
End If
End Select
Circle (x, y), r, c
End Sub