В VB можно строить изображения на следующих компонентах интерфейса:
· форма Form,
· графическое окно Picture Box.
Каждая графическая операция с этими компонентами использует систему координат области рисования. Система координат определяет местоположение точки в виде координат (x,y), где x – смещение точки по горизонтали, а y – смещение точки по вертикали. По умолчанию отсчет координаты x идет слева направо, а координаты y - сверху вниз
Начало отсчета x и y а также единицы измерения по x и y задаются свойствами компонента, настраиваемыми в окне свойств на этапе проектирования интерфейса программы.
Свойство ScaleMode задает единицы измерения и может принимать следующие значения
Значение | Единицы измерения |
0 – User | Определяются пользователем путем задания координат верхнего левого угла, ширины и высоты поля рисования (свойства ScaleLeft, ScaleTop, ScaleWidth, ScaleHeight – см. ниже) |
1 – Twip | Твипы. Это единицы по умолчанию. В одном дюйме 1440 твипов. |
2 – Point | Пункты. В одном дюйме 72 пункта. |
3 – Pixel | Пикселы – точки телевизионного растра. Число пикселов на дюйм зависит от разрешения монитора и его размера. |
4 – Character | Символы. Один символ имеет высоту 1/6 дюйма и ширину 1/12 дюйма. |
5 – Inch | Дюймы. |
6 – Millimeter | Миллиметры. |
7 – Centimeter | Сантиметры. |
Свойство ScaleLeft задает координату x верхнего левого угла поля рисования.
Свойство ScaleTopt задает координату y верхнего левого угла поля рисования.
Свойство ScaleWidth задает ширину поля рисования и измеряется слева направо.
Свойство ScaleHight задает высоту поля рисования и измеряется сверху вниз.
Свойства ScaleLeft, ScaleTop, ScaleWidth, ScaleHeight могут принимать любые значения, в том числе дробные и отрицательные.Например, если необходимо, чтобы графическое окно Picture1 для вывода графика функции y=sin(x) имело координаты поля рисования по x от 0 до 6,28 и по y от –1 до +1 нужно установить свойства:
Picture1.ScaleLeft=0
Picture1.ScaleTop=+1
Picture1.ScaleWidth=6,28
Picture1.ScaleHight=-2
По умолчанию левый верхний угол имеет координаты (0,0), а ширина и высота поля рисования вычисляются автоматически в твипсах по размерам компонента на экране.
Управление цветом
Поле рисования имеет 2 основных цвета, заданных соответствующими свойствами:
BackColor – цвет фона, используется при очистке области рисования.
ForeColor - цвет переднего плана, используется при рисовании. Для рисования конкретным цветом предварительно нужно установить этот цвет на переднем плане, а затем вызывать методы рисования этим цветом.
Значение цвета задается встроенными константами VB, например: vbRed - красный, vbGreen – зеленый и т.д.
Для установки цвета используется операция присваивания, например, чтобы нарисовать в графическом окне Picture1 линию белого цвета на желтом фоне необходимо запрограммировать
Picture1.BackColor=vbYellow
Picture1.Cls
Picture1.ForeColor=vbWhite
Pictire.Line (0,0)-(100,100)
Графические методы
Метод | Описание |
Cls | Стирает все изображение в поле рисования |
Pset | Рисует одну точку (пиксел) заданным цветом |
Point | Возвращает цвет заданной точки (пиксела) |
Line | Рисует линию, контурный или закрашенный прямоугольник |
Circle | Рисует окружность, эллипс или дугу |
PaintPicture | Выводит картинку из массива данных в произвольном месте |
Методом Cls можно в любой момент очистить поле рисования, которое закрашивается цветом фона (свойство BackColor):
· [ object ]. Cls
Без параметра object метод очищает всю экранную форму, в коде которой он исполняется.
Например, очистка поля рисования графического окна Picture1 с закраской в черный цвет:
Picture1.BackColor=vbBlack
Picture1.Cls
Метод Pset устанавливает цвет пиксела в заданной точке:
[ object ].Pset (x,y) [, color ]
Параметры x и y могут быть целыми, дробными или числовым выражением любой сложности.
Если цвет color не задан, по умолчанию используется цвет переднего плана (свойство ForeColor).
Например, нарисовать точку голубого цвета с координатами x=100, y=200 в графическом окне Picture1:
Picture1.Pset (100,200), vbBlue
Метод Line чертит линию между двумя точками с координатами (x1,y1) и (x2,y2):
Line (x1,y1) – (x2,y2) [, color ]
Или из предыдущей точки черчения в заданную точку с координатами (x2,y2):
Line – (x2,y2) [, color ]
Параметры x1,y1,x2,y2 могут быть целыми, дробными или числовым выражением любой сложности.
Если цвет color не задан, по умолчанию используется цвет переднего плана (свойство ForeColor).
Например, нарисовать линию синего цвета между точками (x=100, y=200) и (x=300, y=400) в графическом окне Picture1:
Picture1.Line (100,200) – (300,400), vbCyan
Порядок выполнения работы
2.1 Откройте проект Satm5.
2.2 Расположите ЭУ на форме frmSa:
· перейдите в окно Project Explorer и сделайте активной форму с именем frmSa,
· расположите на форме командную кнопку (по умолчанию будет создана кнопка с именем Command1),
· задайте ей свойства согласно таблице 2.1:
Таблица 2.1
Объект | Свойство | Значение |
Command1 | Name | CmdGrph |
Caption | &Graph | |
Font** | Arial, (полужирный) Bold,12 | |
MousePoiter | NoDrop | |
TabIndex |
2.3 Добавьте в проект новую форму – форму 3:
· перейдите в окно Project Explorer и убедитесь в том, что активна форма frmSa,
· выберите в строке менюсистемы программированияпункт Project,
· выполнитекоманду Add Form. В появившемся окне Add Form на закладке New предлагается по умолчанию Form,
· в окне Add Form нажмите кнопку Open. Обратите внимание на то, что в окне проекта появилась новая форма, которая по умолчанию называется Form1.
2.4 Для добавления в проект формы 4 и формы5 повторите п. 2.2.
2.5 Задайте свойства формам Form1, Form2 и Form3 согласно таблице 2.2. Переход от одной форме к другой осуществляйте двойным щелчком на пиктограмме формы в окне Project Explorer.
Таблица 2.2
Объект | Свойство | Значение |
Form1, Form3, Form2 | Height | |
Width | ||
Top | ||
BoderStyle | 1- Fixed Single | |
Form1 | Name | frmGrph1 |
Caption | График зависимости давления от высоты | |
Form2 | Name | frmGrph2 |
Caption | График зависимости плотности от высоты | |
Form3 | Name | frmGrph3 |
Caption | Графики зависимости температуры и скорости звука от высоты |
2.6 Задайте пути для сохранения проекта в своей личной папке:
· перейдите в окно Project Explorer и убедитесь в том, что активна форма с именем frmSa,
· откройте меню File,
· в открывшемся диалоговом окне Save File As:
ü убедитесь, что открыта ваша личная папка на диске Z:,
ü укажите имя файла satm6-1, нажмите на кнопку “ Save “,
· перейдите в окно Project Explorer и сделайте активной форму с именем frmTabl,
ü сохраните форму с именем satm6-2,
· аналогичным образом сохраните формы frmGrph1, frmGrph2 и frmGrph3 соответственно с именами satm6-3 satm6-4 satm6-5.
· откройте меню File,
· выполните команду Save Project As,
· в открывшемся диалоговом окне Save Project As введите имя файла satm6 (по умолчанию оно будет satm5) и нажмите на кнопку “ Save “
2.7 Расположите ЭУ на форме frmGrph1:
· перейдите в окно Project Explorer и сделайте активной форму с именем frmGrph1,
· расположите на форме командные кнопки Command1, Command2 и Command3,
· задайте им свойства согласно таблице 2.3:
Таблица 2.3
Объект | Свойство | Значение |
Группа командных кнопок | Font** | Arial, (полужирный) Bold,11 |
MousePoiter | NoDrop | |
Command1 | Name | CmdCnl |
Caption | &Cancel | |
Cancel | True | |
TabIndex | ||
Command2 | Name | CmdNxt |
Default | True | |
Caption | &Next | |
TabIndex | ||
Command3 | Name | CmdExt |
Caption | &Exit | |
TabIndex |
2.7 Расположите ЭУ на формах frmGrph2 и frmGrph3
· перейдите в окно Project Explorer и сделайте активной форму с именем frmGrph2,
· выполните п. 2.6,
· повторите предыдущие пункты с соответствующими изменениями.
2.8 Создайте предварительный код для обработки нажатия кнопки Graph на форме frmSa:
· перейдите в окно Project Explorer и сделайте активной форму с именем frmSa,
· выполните двойной щелчек на кнопке Graph
· введите в тело процедуры Private Sub cmdGrph_Click( ) текст
FrmGrph1.Show
Me.Hide
2.9 Создайте коды для обработки нажатий кнопок на форме frmGrph1:
· перейдите в окно Project Explorer и сделайте активной форму с именем frmGrph1,
· выполните двойной щелчек на кнопке Cancel
· введите в тело процедуры Private Sub cmdCnl_Click() текст
End
· выполните двойной щелчек на кнопке Next
· введите в тело процедуры Private Sub cmdNxt_Click() текст
FrmGrph2.Show
Me.Hide
· выполните двойной щелчек на кнопке Exit
· введите в тело процедуры Private Sub cmdExt_Click() текст
frmSa.Show
Me.Hide
2.10 Создайте коды для обработки нажатий кнопок на формах frmGrph2 и frmGrph3 (повторите п 2.8 с соответствующими изменениями).
2.11 Протестируйте программу с пустыми формами
· запустите программу на выполнение в среде VB5.0,
· установите курсор на кнопку Graph и нажмите клавишу Enter – вызывается форма frmGrph1,
· установите курсор на кнопку Next и нажмите левую клавишу мыши. На экран выводится форма frmGrph2,
· установите курсор на кнопку Next и нажмите клавишу Enter. Форма frmGrph3 становится активной.
· нажмите клавишу Esc. Обратите внимание на то, что происходит выход из программы с удалением всех форм с экрана.
2.11 Разместите на форме frmGrph1 графическое окно для вывода графика зависимости давления от высоты (высота – по оси Y снизу вверх от 0 до 15000 м, давление - по оси X слева направо от 10000 до 110000 паскалей).
· перейдите в окно Project Explorer и сделайте активной форму frmGrph1,
· откройте форму frmGrph1 кнопкой View Object на панели инструментов Object Explorer (вторая слева),
· щелчком мыши выберите компонент PictureBox из палитры компонентов Toolbox (вторая слева кнопка в верхнем ряду палитры),
· при нажатой кнопке мыши нарисуйте на форме frmGrph1 прямоугольник графического окна максимально возможного размера,
· задайте свойства графического окна в соответствии с таблицей:
Свойство | Значение |
Name | PctP_h |
ScaleMode | 0 – User |
ScaleLeft | |
ScaleTop | |
ScaleWidth | |
ScaleHight | -15000 |
AutoRedraw | True |
· разместите вокруг графического окна надписи с указанием граничных значений высоты и давления:
· слева от левой вертикальной рамки внизу надпись «0 км»
· слева от левой вертикальной рамки вверху надпись «15 км»,
· снизу под нижней горизонтальной рамкой слева надпись «10000 па»,
· снизу под нижней горизонтальной рамкой справа надпись «110000 па»,
(точное положение, размер надписей и их шрифт выбрать самостоятельно, по аналогии с графиками функций, приведенными в литературе),
· сохраните обновленную форму кнопкой Save на панели инструментов VB.
2.12 Разместите на форме frmGrph2 графическое окно для вывода графика зависимости плотности от высоты (высота – по оси Y снизу вверх от 0 до 15000 м, плотность - по оси X слева направо от 0,2 до 1,25).
· перейдите в окно Project Explorer, сделайте активной форму frmGrph2, и откройте ее,
· выберите компонент PictureBox из палитры компонентов Toolbox и при нажатой кнопке мыши нарисуйте на форме frmGrph2 прямоугольник графического окна максимально возможного размера,
· задайте свойства графического окна в соответствии с таблицей:
Свойство | Значение |
Name | PctR_h |
ScaleMode | 0 – User |
ScaleLeft | 0,2 |
ScaleTop | |
ScaleWidth | 1,05 |
ScaleHight | -15000 |
AutoRedraw | True |
· разместите вокруг графического окна надписи с указанием граничных значений высоты и плотности:
· слева от левой вертикальной рамки внизу надпись «0 км»
· слева от левой вертикальной рамки вверху надпись «15 км»,
· снизу под нижней горизонтальной рамкой слева надпись «0,2»,
· снизу под нижней горизонтальной рамки справа надпись «1,25»,
(точное положение, размер надписей и их шрифт выбрать самостоятельно, по аналогии с графиками функций, приведенными в литературе),
· сохраните обновленную форму кнопкой Save на панели инструментов VB.
2.13 Разместите на форме frmGrph3 графическое окно для вывода графиков зависимостей температуры и скорости звука от высоты в одной системе координат (высота – по оси Y снизу вверх от 0 до 15000 м, скорость/температура - по оси X слева направо от 200 до 350).
· перейдите в окно Project Explorer, сделайте активной форму frmGrph3, и откройте ее,
· разместите компонент PictureBox из палитры компонентов Toolbox на форме frmGrph3 с максимально возможным размером,
· задайте свойства графического окна в соответствии с таблицей:
Свойство | Значение |
Name | PctA_h |
ScaleMode | 0 – User |
ScaleLeft | |
ScaleTop | |
ScaleWidth | |
ScaleHight | -15000 |
AutoRedraw | True |
· разместите вокруг графического окна надписи с указанием граничных значений высоты и скорости/температуры:
· слева от левой вертикальной рамки внизу надпись «0 км»
· слева от левой вертикальной рамки вверху надпись «15 км»,
· снизу под нижней горизонтальной рамкой слева надпись «200»,
· снизу под нижней горизонтальной рамки справа надпись «350»,
(точное положение, размер надписей и их шрифт выбрать самостоятельно, по аналогии с графиками функций, приведенными в литературе),
· сохраните обновленную форму кнопкой Save на панели инструментов VB.
2.14 Протестируйте программу с пустыми графиками
· запустите программу на выполнение в среде VB5.0,
· установите курсор на кнопку Graph и нажмите клавишу Enter – вызывается форма frmGrph1 с полем для рисования графика и надписями о граничных значениях высоты и давления,
· установите курсор на кнопку Next и нажмите левую клавишу мышки. На экран выводится форма frmGrph2 с полем для рисования графика и надписями о граничных значениях высоты и плотности,
· установите курсор на кнопку Next и нажмите клавишу Enter. На экран выводится форма frmGrph3 с полем для рисования графика и надписями о граничных значениях высоты и скорости звука/температуры,
· нажмите клавишу Esc. Обратите внимание на то, что происходит выход из программы с удалением всех форм с экрана.
2.15 Разработайте алгоритм и запрограммируйте построение графиков. Исходные данные для построения берутся из массива gsngSa(), сформированного в программе предыдущей лабораторной работы после расчета таблицы (при нажатии на кнопку Table на форме frmSa. Расположение данных в этом массиве:
gsngSa(1,к) – к-е значение высоты
gsngSa(2,к) – значение давления на к-й высоте
gsngSa(3,к) – значение плотности на к-й высоте
gsngSa(4,к) – значение температуры на к-й высоте
gsngSa(5,к) – значение скорости звука на к-й высоте
к = 1,2,…, n где n – количество элементов во втором измерении массива gshgSa(), которое можно получить используя функцию Ubound, возвращающую максимальный индекс элемента в массиве:
n = Ubound(gsngSa,2)-1
Массив gsngSa находится в модуле формы frmSa и доступен только внутри этого модуля, поэтому все построения необходимо программировать в этой форме - при обработке события нажатия на кнопку «Graph» на форме frmSa.
С учетом этого текст обработчика события будет иметь следующий вид:
Private Sub CmdGrph_Click()
Dim k As Integer
'ПОСТРОИТЬ ГРАФИКИ ДАВЛЕНИЯ, ПЛОТНОСТИ И ТЕМПЕРАТУРЫ
FrmGrph1.PctP_h.Cls ' очистить поле графика 1
FrmGrph1.PctP_h.ForeColor = vbGreen ' цвет графика 1 - зеленый
FrmGrph2.PctR_h.Cls ' очистить поле графика 2
FrmGrph2.PctR_h.ForeColor = vbRed ' цвет графика 2 - красный
FrmGrph3.PctA_h.Cls ' очистить поле графика 3
FrmGrph3.PctA_h.ForeColor = vbYellow ' цвет графика 3 - желтый
FrmGrph1.PctP_h.PSet (gsngSa(2, 1), gsngSa(1, 1)) ' нарисовать начальную
' точку графика 1
FrmGrph2.PctR_h.PSet (gsngSa(3, 1), gsngSa(1, 1)) ' нарисовать начальную
' точку графика 2
FrmGrph3.PctAh.PSet (gsngSa(4, 1), gsngSa(1, 1)) ' нарисовать начальную
' точку графика 3
For k = 2 To UBound(gsngSa, 2)-1 ' Цикл по остальным
' точкам из массива gsngSa
FrmGrph1.PctP_h.Line -(gsngSa(2, k), gsngSa(1, k)) ' нарисовать линию до
' очередной точки графика 1
FrmGrph2.PctR_h.Line -(gsngSa(3, k), gsngSa(1, k)) ' нарисовать линию до
очередной точки графика 2
FrmGrph3.PctA_h.Line -(gsngSa(4, k), gsngSa(1, k)) ' нарисовать линию до
' очередной точки графика 3
Next k
'ПОСТРОИТЬ ГРАФИК СКОРОСТИ ЗВУКА НА ПОЛЕ ГРАФИКА ТЕМПЕРАТУРЫ
FrmGrph3.PctA_h.ForeColor = vbCyan ' цвет графика 4 - синий
FrmGrph3.PctA_h.PSet (gsngSa(5, 1), gsngSa(1, 1)) ' нарисовать первую точку
' графика 4
For k = 2 To UBound(gsngSa, 2)-1 ' Цикл по остальным
' точкам из массива gsngSa
FrmGrph3.PctA_h.Line -(gsngSa(5, k), gsngSa(1, k)) ' нарисовать линию до
' очередной точки графика 4
Next k
Me.Hide
FrmGrph1.Show ' показать форму для
' графика давления
End Sub
2.16 Создайте полный код обработчика события нажатия на кнопку «Graph» на форме frmSa:
· перейдите в окно Project Explorer и сделайте активной форму с именем frmSa,
· выполните двойной щелчок на кнопке «Graph»
· перепишите текст обработчика события – процедуру Private Sub cmdGrph_Click() в соответствии с текстом, приведенным в п. 2.15. Комментарии в тексте программы можно не вводить.
· сохраните обновленную форму кнопкой Save на панели инструментов VB.
2.17 Сохраните разработанный проект.
2.18 Протестируйте программу
· запустите программу на выполнение в среде VB5.0
· задайте расчет для полного диапазона высот от 0 до 15000 м с шагом не более 1000 м
· введите данные кнопкой OK
· выполните расчет таблицы данных кнопкой Table
· выполните расчет графиков и просмотр первого графика кнопкой Graph
· просмотрите все графики, переходя с формы на форму кнопками Next
· убедитесь, что полученные графики не содержат ошибок:
· каждый график должен перекрывать весь диапазон высот
· каждый график должен перекрывать почти весь диапазон по горизонтали
· графики должны иметь плавный вид, без разрывов и прямых участков
· изменение физических величин с высотой должно соответствовать законам стандартной атмосферы.
2.19 Исправьте обнаруженные ошибки и сохраните проект.
2.20 Продемонстрируйте работу программы преподавателю и защитите работу, ответив на контрольные вопросы по теоретической части и тексту программы.
2.31 Закройте среду программирования