Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаб_Раб_VB_2008_Visual_I_курс_6_лаб_раб

.pdf
Скачиваний:
29
Добавлен:
07.02.2016
Размер:
1.51 Mб
Скачать

исходного массива; с) Вычислить сумму элементов полученного массива;

d) Вывести исходный, полученный массивы и значение суммы.

27.a) одномерный массив из 10 элементов целого типа в диапазоне [45, 100]; b) Вставить два элемента по 1000, начиная с четвертого элемента исходного массива, сдвигая его элементы; с) Вычислить сумму элементов полученного массива;

d) Вывести массив до, и после изменения и значение суммы.

28.a) Одномерный массив из 8 элементов целого типа в диапазоне [16, 40]; b) Переставить четвертый элемент массива на последнее место, сдвигая элементы массива; с) Вычислить сумму элементов массива, начиная с пятого;

d) Вывести массив до, и после изменения и значение суммы.

29.a) Два одномерных массива по 6 элементов целого типа в диапазоне

[-10, 10];

b) Переставить три первых элемента первого массива на три последних места второго массива; с) Вычислить суммы исходного и преобразованного массивов;

d) Вывести два исходных массива, измененный массив и значение суммы.

30. a) Одномерный массив из 8 элементов целого типа в диапазоне [4, 36]; b) Поменять местами четвертый и седьмой элементы исходного массива; с) Найти максимальный элемент преобразованного массива;

d) Вывести исходный, полученный массивы, значения переставленных элементов и максимальный элемент.

Контрольные вопросы.

1.Какие способы открытия фала вы знаете?

2.Как можно записать в файл строку?

3.С помощью какого оператора можно закрыть открытый поток?

4.Назовите назначение метода Split.

5.Что означает строка OpenFileDialog1.Filter = "Text Files (*.txt)|*.txt"?

Лабораторная работа № 6

Основы управления графикой в Visual Basic 2008.

Цель работы: получить опыт управления графикой и научиться строить графики функций в среде Visual Basic 2008.

1. Управление графикой.

Создание хорошего интерфейса является важным компонентом любого пользовательского приложения. Visual Basic 2008 предлагает множество графических средств для улучшения интерфейса: создание линий, фигур и текста,

размещение изображений на форме, добавление анимации в приложение и многое другое.

В Visual Basic 2008 для работы с графикой используется интерфейс GDI+,

представляющий собой усовершенствованный интерфейс GDI (Graphics Device Interface, GDI). Пространство имен System.Drawing обеспечивает доступ к базовым средствам GDI+. Более сложные средства предоставляют пространства имен System.Drawing.Drawing2D, позволяющее работать с двумерной и векторной графикой, System.Drawing.Imaging, предлагающее дополнительные инструменты для работы с изображениями, и System.Drawing.Text,

предназначенное для работы с текстом.

При помощи графики в Visual Basic 2008 можно создавать графические объекты, текст, управлять графическими изображениями как объектами.

Интерфейс GDI+ полностью заменил GDI и является единственным программным способом построения и расположения графики в приложениях

Windows.

2. Первые шаги

Для построения объектов на форме необходимо познакомиться со структурами, позволяющими задавать основные атрибуты фигур (размер, цвет,

расположение), с классами, с помощью которых можно задать различные

параметры фигур (тип линии, вид заливки, шрифт текста), и перечислениями пространства имен System.Drawing. Не менее важным является класс Graphics

этого пространства имен.

С его помощью на форме или элементе управления можно расположить линии, фигуры, текст, изображения. Поэтому, приступая к работе с графикой, в

первую очередь необходимо создать объект Graphics, который используется в качестве поверхности для рисования, а также предназначен для создания графических изображений. Объект Graphics можно создать с помощью ссылки на графический объект, являющийся частью PaintEventArgs в событии Paint или методе OnPaint:

3. Структуры пространства имен System.Drawing

Структуры пространства имен System.Drawing, позволяющими задать координаты, размеры, цвет объектов. Хотя нередко можно обойтись без данных структур, они делают код более понятным и удобным.

Структура

Описание

 

 

Point

Задает целочисленные координаты точки на плоскости

PointF

Определяет расположение точки на плоскости. Координаты

 

имеют тип Single

Rectangle

Содержит информацию о расположении и размере

 

прямоугольника. Все данные типа Integer

RectangleF

Содержит информацию о расположении и размере

 

прямоугольника. Все данные типа Single.

Size

Определяет размер двумерного объекта с помощью пары

 

объектов типа Integer, задающих высоту и ширину объекта.

SizeF

Определяет размер двумерного о,бъекта с помощью пары

 

объектов типа Single, задающих высоту и ширину объекта

4. Типы линий.

Прежде чем приступать к построению линий и фигур, необходимо познакомиться с классом Pen пространства имен System.Drawing, позволяющим

задавать цвет, ширину, вид линии, стиль оформления ее краев. Экземпляр данного

класса создается с помощью следующих конструкторов:

Sub New(ByVal brush As Brush, ByVal width As Single) Sub New(ByVal color As Color, ByVal width As Single)

где:

brush — способ закраски линии;

color — цвет линии;

width — ширина линии. Этот параметр можно опустить, тогда по умолчанию

толщина линии задается равной 1.

Ддя изменения цвета линии предназначено свойство Color класса Pen. Линия может иметь любой цвет из перечисления KnownColor, включающего системные цвета Windows, а также принимать цвет, созданный пользователем. Свойство width

класса Pen позволяет изменить толщину линии.

Для задания вида линии используется свойство DashStyle. Оно может принимать любое значение из перечисления DashStyle пространства имен

System.Drawing.Drawing2D.

Оформление края линии осуществляется с помощью свойства EndCap, задающего вид завершения линии, и StartCap, оформляющего начало линии. Эти свойства принимают значения из перечисления LineCap пространства имен

System.Drawing.Drawing2D.

5. Прямая линия

Для создания прямых линий предназначен метод DrawLine класса Graphics.

Данный метод позволяет нарисовать отрезок по двум точкам и виду линии,

используя один из следующих синтаксисов:

Sub DrawLine(ByVal pen As Pen, ByVal ptl As Point, ByVal pt2 As Point)

Sub DrawLine(ByVal pen As Pen, ByVal x1 As Integer, _

ByVal y1 As Integer, ByVal x2 As Integer, ByVal y2 As Integer)

где:

pen — перо, используемое для рисовании линии. Определяет цвет, ширину и вид линии;

ptl, pt2 — начальная и конечная точки отрезка. Могут также являться структурами PointF;

xl, yl, x2, y2 — координаты начальной и конечной точек отрезка. Данные параметры могут иметь тип Single.

6. Ломаная линия

Для создания ломаных линий служит метод DrawLines. Построенная с помощью данного метода линия представляет собой последовательность соединенных на концах прямых линий.

Метод DrawLines имеет следующий синтаксис:

Sub DrawLines(ByVal pen As Pen, ByVal points() As Point)

где:

реn — перо, используемое для рисовании линии. Определяет цвет, ширину и вид линии;

points() — массив точек перегиба линии. Данный параметр может представлять собой массив структуры PointF.

7. Создание текста

Часто требуется не только нарисовать какой-либо объект, но и подписать его, или просто использовать текст в качестве заголовка. Интерфейс GDI+

позволяет размещать текст на форме и других элементах управления.

При выводе текста очень важным оказывается стиль, тип и размер шрифта.

Для задания этих параметров предназначен класс Font пространства имен System.Drawing. Для создания экземпляров этого класса используется огромное количество конструкторов. Рассмотрим один из них.

Sub New(ByVal family As String, ByVal emSize As Single, ByVal style As FontStyle)

где:

family — существующее семейство шрифтов, на основе которого создается новый шрифт. Данный параметр может задаваться как объект FontFamily или как строка типа String;

emSize — размер шрифта;

style — стиль шрифта. Может принимать любое значение из перечисления FontStyle. Параметр не является обязательным для заполнения. По умолчанию

задается обычный стиль шрифта.

Чтобы расположить текст на форме или другом элементе управления, необходимо воспользоваться методом DrawString класса Graphics пространства имен System.Drawing. Данный метод имеет следующий синтаксис:

Sub DrawString(ByVal s As String, ByVal font As Font, ByVal brush As Brush, _

ByVal x As Single, ByVal у As Single, ByVal format As StringFormat)

где:

s — располагаемый на форме текст;

font — объект Font, задающий стиль и размер шрифта;

brush — объект Brush, задающий цвет и текстуру текста;

point — точка, задающая расположение левого верхнего угла текста;

x, у — координаты точки, задающей расположение левого верхнего угла текста;

format — параметры текста, включающие расстояние между строчками,

выравнивание текста и многое другое. Данный параметр можно опустить.

8. Пример выполнения задания.

Требуется составить программу, которая будет выводить на экран график заданной функции. Также предусмотреть окно "О программе", где указать основные сведения. В примере использован вариант 30 данных заданий.

Интерфейс программы с результатом работы, а также окно со сведениями о программе, представлены на следующих рисунках.

Код решения поставленной задачи:

Option Strict On

' Импорт пространства имен графики и 2Д-графики

Imports System.Drawing

Imports System.Drawing.Drawing2D

Public Class frmLab7

Private Sub pnlПанельГрафика_Paint(ByVal sender As Object, ByVal e As _ System.Windows.Forms.PaintEventArgs) Handles pnlПанельГрафика.Paint

' Запускаем процедуры рисования сетки, графика и подписей

Setka(e)

PostroenieGrafica(e)

DrawText(e)

End Sub

'Процедура для создания красивой координатной сетки

'Мы выбрали размеры полотна (панели 1) равными 600х400

Public Sub Setka(ByVal e As PaintEventArgs)

'Создаем объект для рисования

Dim g As Graphics = e.Graphics

'Необходимые переменные смещения, шага сетки и колечество линий сетки по осям Х и У

Dim smeschX As Integer = 25 Dim shagX As Integer = 120 Dim ColX As Integer = 6

Dim smeschY As Integer = 25

Dim shagY As Integer = 100

Dim Coly As Integer = 5

'Перо для осей и окончание (стрелка)

Dim pnXY As New Pen(Color.Black, 5) pnXY.EndCap = LineCap.ArrowAnchor

'Рисуем вертикальные линии сетки

For i As Integer = 0 To colX - 1

If i = 2 Then

' Рисуем жирную ось У

e.Graphics.DrawLine(pnXY, smeschX + shagX * i, smeschY + smeschY + _

(Coly - 1) * shagY, smeschX + shagX * i, smeschY - smeschY)

Else

e.Graphics.DrawLine(Pens.Black, smeschX + shagX * i, smeschY, smeschX + _ shagX * i, smeschY + (Coly - 1) * shagY)

End If Next

' Рисуем горизонтальные линии сетки

For i As Integer = 0 To colY - 1

If i = 3 Then

' Рисуем жирную ось Х

e.Graphics.DrawLine(pnXY, smeschY - smeschX, smeschY + shagY * i, smeschY + _ (ColX - 1) * shagX + smeschX, smeschY + shagY * i)

Else

e.Graphics.DrawLine(Pens.Black, smeschY, smeschY + shagY * i, smeschY + _ (ColX - 1) * shagX, smeschY + shagY * i)

End If Next

End Sub

' Процедура рисования графика c помощью метода DrawLines

Public Sub PostroenieGrafica(ByVal e As PaintEventArgs) Dim g As Graphics = e.Graphics

' Смещение "начала" координат

Dim intОтступX As Integer = 120 * 2 + 25 Dim intОтступY As Integer = 100 * 3 + 25

'Масштабирование графика по Х и У

Dim koefX As Double = 120 Dim koefY As Double = 10

'Перо для графика

Dim pnXY As New Pen(Color.Red, 3)

' Объявляем структуру массива из двух точек и массив точек

Dim X(599) As Double

Dim Y(599) As Double Dim points(599) As Point

Dim k As Double = -2

' Табулируем функцию

For i As Integer = 0 To 599

X(i) = k

Y(i) = -(Math.Sin(X(i)) + Math.Exp(X(i))) * koefY + intОтступY

' Создаем новый объект точки

points(i) = New Point(CInt(X(i) * koefX) + intОтступX, CInt(Y(i))) k += 5 / 600

Next

g.DrawLines(pnXY, points)

End Sub

Private Sub btnВыход_Click(ByVal sender As System.Object, ByVal e _ As System.EventArgs) Handles btnВыход.Click

'Процедура завершення роботи з програмою 'Вихід з програми настає тільки після натискання 'користувачем кнопки Yes

Dim strПовідомлення As String = "Ви дійсно бажаєте закрити програму?"

Dim drРезультатДіалогу As DialogResult

drРезультатДіалогу = MessageBox.Show(strПовідомлення, "Вихід", MessageBoxButtons.YesNo _ , MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)

If drРезультатДіалогу = Windows.Forms.DialogResult.Yes Then Me.Close() End Sub

' Процедура создания надписей и подписей

Public Sub DrawText(ByVal e As PaintEventArgs) Dim g As Graphics = e.Graphics

' Создаем стили шрифтов (Фонты)

Dim fontНазвание As New Font("arial", 10, FontStyle.Bold) Dim fontОси As New Font("arial", 14, FontStyle.Italic)

Dim fontЗначения As New Font("arial", 12, FontStyle.Regular)

'Пишем текст, кот. начинается в начале координат, т.е. в левом верхнем угулу) g.DrawString("График функции у = exp(x) + sin(x)", fontНазвание, Brushes.Blue, 0, 0)

'Подписываем оси координат Х и У

g.DrawString("X", fontОси, Brushes.Brown, 275, 2) g.DrawString("Y", fontОси, Brushes.Brown, 630, 300)

' Создаем подписи к линиям сетки (можно вопользоваться и циклом) g.DrawString("-2", fontЗначения, Brushes.Black, 0, 340)

g.DrawString("-1", fontЗначения, Brushes.Black, 120, 340) g.DrawString("0", fontЗначения, Brushes.Black, 240, 340) g.DrawString("1", fontЗначения, Brushes.Black, 360, 340) g.DrawString("2", fontЗначения, Brushes.Black, 480, 340) g.DrawString("3", fontЗначения, Brushes.Black, 600, 340)

g.DrawString("10", fontЗначения, Brushes.Black, 235, 200) g.DrawString("20", fontЗначения, Brushes.Black, 235, 100)

End Sub

Private Sub btnО_Программе_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles btnО_Программе.Click

'Показ вікна повідомлень з інформацією про програму

Dim strТекстПовідомлення As String = "Програма ""Лабораторна робота №6""" & _ ControlChars.NewLine & "Прогрмування Іванов І.І., група 1ЕК." & _ ControlChars.NewLine & "Сьогодняшня дата і час: " & Date.Now.ToString

Dim strЗаголовокВікна As String = "Про програму ""Лабораторна робота №6"""

'Вивід вікна повідомлення

MessageBox.Show(strТекстПовідомлення, strЗаголовокВікна, MessageBoxButtons.OK, _ MessageBoxIcon.Information)

End Sub End Class

Необходимо сделать замечание относительно кода программы:

Для построения координатной сетки была создана процедура Setka.

Для создания самого графика использовалась процедура PostroenieGrafica.

Надписи наносились с помощою процедуры DrawText.

Рисование фигур осуществлялось не на форме, а на элементе управления

Panel с использованием события Paint этого элемента управления.

Данный пример представляет собой один из вариантов выполнения задания: можно на форму добавить текстовые поля для изменения масштаба просмотра графика и изменения начальных и конечных значений табуляции функции, можно создать главное меню в котором, среди прочих команд, могут быть команды изменения вида графика: цвета, размеры шрифтов, толщины линий и т.д. и т.п.