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

Волченков Проектирование WИНДОWС-приложениы на языке ВИСУАЛ БАСИЦ 2015

.pdf
Скачиваний:
5
Добавлен:
12.11.2022
Размер:
2.37 Mб
Скачать

Next f

gr.DrawLine(pen2, -2 * a, a, a, -2 * a)

Последняя строка – рисование асимптоты y = -x – 100. Печать числовых характеристик здесь не приводится.

Рис. 4.5. Форма приложения для рисования функций в полярных координатах при выборе «лепестка Декарта»

Задание 4.3. Создать и отладить проект Windows приложения «Построение изображений геометрических тел».

Рассмотрим особенности проектирования приложения «Рисование геометрических тел» на примере рисования прямых четырёхугольных призм (прямых параллелепипедов) с окрашенными гранями. Форма приложения показана на рис. 4.6.

51

Рис. 4.6. Форма приложения для изображений прямых прямоугольных призм

Комментарий. Сначала с помощью радиокнопки RadioButton1 во фрейме «Геометрическое тело» выбирается «Призма». При этом появляется диалоговое окно ColorDialog1 – выбора цвета. Этот цвет затем помещается в качестве фонового (BackColor) в окно TextBox1. (Остальные радиокнопки здесь не используются – они предназначены для рисования изображений цилиндров в задании 4.3). Затем заполняются текстовые поля с номерами 2 – 8 во фрейме «Параметры». Это необходимые размеры изображения призмы, смысл которых должен быть ясен по приведённому рисунку (они соответствуют призме, нарисованной справа). Напомним, что оси координат направлены из левого верхнего угла графического поля

– «по умолчанию». После установки всех значений щёлкается ко-

манда меню Изобразить.

Фрагмент программного кода, относящийся к рисованию призмы, процедуры Изобразить_Click следующий:

52

Код 4.3

h0 = Val(TextBox4.Text) w1 = Val(TextBox5.Text)

h1 = Val(TextBox6.Text) w2 = Val(TextBox7.Text)

h2 = Val(TextBox8.Text)

x = Val(TextBox2.Text) + w1

y = Val(TextBox3.Text) + h1 + h2 + h0 Dim Brc1 As New SolidBrush(c1)

Dim Brc2 As New SolidBrush(c2)

Dim Brc3 As New SolidBrush(c3)

' Построение изображения верхней стороны призмы: pathc1.AddLine(x, y - h0, _

x - w1, y - h0 - h1) pathc1.AddLine(x - w1, y - h0 - h1, _

x - w1 + w2, y - h0 - h1 - h2) pathc1.AddLine(x - w1 + w2, _

y - h0 - h1 - h2, x + w2, y - h0 - h2) pathc1.AddLine(x + w2, y - h0 - h2, x, y - h0) pathc1.CloseFigure()

gr.FillPath(Brc1, pathc1)

' Построение изображения левой стороны призмы: pathc2.AddLine(x, y, x - w1, y - h1) pathc2.AddLine(x - w1, y - h1, _

x - w1, y - h1 - h0)

pathc2.AddLine(x - w1, y - h1 - h0, x, y - h0) pathc2.AddLine(x, y - h0, x, y) pathc2.CloseFigure()

gr.FillPath(Brc3, pathc2)

' Построение изображения правой стороны призмы: pathc3.AddLine(x, y, x, y - h0) pathc3.AddLine(x, y - h0, x + w2, y - h0 - h2)

pathc3.AddLine(x + w2, y - h0 - h2, _ x + w2, y - h2)

pathc3.AddLine(x + w2, y - h2, x, y) pathc3.CloseFigure() gr.FillPath(Brc2, pathc3)

Комментарий. В данном проекте используется двумерная графика. Применяется метод «замкнутых фигур». Эти фигуры заполняются тем или иным цветом.Фигура строится последовательным добавлением отрезков и дуг в объект, который называется «маршрутом». Здесь используются три маршрута: pathc1, pathc2 и pathc3. Они определяются так:

53

Dim pathc1, pathc2, pathc3 As New

Drawing2D.GraphicsPath

Замкнутые фигуры заполняются цветом путём применения к указанным маршрутам метода CloseFigure.

В коде 4.3 для закрашивания указанных фигур - четырёхугольников призмы (одной верхней и двух боковых граней) - используются 3 цвета. Значения более тёмного цвета c2 и более светлого цвета c3 получаются программно из цвета c1, выбираемого пользователем с помощью окна диалога ColorDialog:

a = 200

 

 

 

 

 

' Прозрачность цвета.

r1

= c1.R : g1

= c1.G : b1

= c1.B

 

 

c1

= Color.FromArgb(a, r1, g1, b1)

 

' Создание

более тёмного тона данного цвета:

r2

= r1

- 50 : If

r2 <

0

Then r2

=

0

g2

= g1

- 50 : If

g2 <

0

Then g2

=

0

b2

= b1

- 50

: If

b2

<

0

Then b2

=

0

c2

= Color.FromArgb(a,

r2, g2, b2)

 

' Создание

более светлого тона

данного цвета:

r3

= r1

+ 50

: If r3

>

255

Then r3

= 255

g3

= g1

+ 50

: If g3

>

255

Then g3

= 255

b3

= b1

+ 50

: If b3

>

255

Then b3

= 255

c3

= Color.FromArgb(a,

r3,

g3, b3)

 

 

 

 

 

 

 

 

 

 

 

 

 

Разумеется, в начале программы необходимо определить переменные для самих цветов и для их составляющих:

Dim c1, c2, c3 As Color

Dim a, r1, g1, b1, r2, g2, b2, r3, g3, b3 As Integer

Варианты задания 4.3. В обоих вариантах создать проект приложения, назначение которого – рисование изображений «цветных полупрозрачных цилиндров». Взять за основу проект приложения, рассмотренного в примере выполнения задания 4.3.

Вариант 1. Создать проект приложения «Рисование изображения стоящих на своих основаниях (вертикальных) цилиндров с окрашенными сторонами» (рис. 4.7).

Вариант 2. Создать проект приложения «Рисование изображения лежащих на боковых сторонах (горизонтальных) цилиндров с окрашенными сторонами» (рис. 4.8).

54

а б

Рис. 4.7. Форма приложения для рисования вертикально расположенных цилиндров – вид сверху (а) и вид снизу (б)

а б

Рис. 4.8. Форма приложения для рисования горизонтально расположенных цилиндров – вид слева (а) и вид справа (б)

Рассмотрим, как устанавливаются значения параметров вертикально расположенных цилиндров (вариант 1). Аналогично эта задача решается и в варианте 2.

1. Как и при выполнении основного задания 4.3, здесь следует преобразовать значения, полученные из текстовых полей:

h0 = Val(TextBox4.Text)

w1 = Val(TextBox5.Text) / 2

h1 = Val(TextBox6.Text) / 2

w2 = Val(TextBox7.Text) / 2

h2 = Val(TextBox8.Text) / 2

x = Val(TextBox2.Text) + w1

y = Val(TextBox3.Text) + h1 + h0

55

2. Как и при выполнении основного задания 4.3, здесь необходимо использовать двумерную графику, в частности, метод «замкнутых фигур».

Здесь эти фигуры заполняются цветом не равномерно, а с помощью градиентной кисти. Эта кисть помогает изменять цвет фигуры – изображение боковой грани цилиндра – от светлого до тёмного:

'Построение изображения верхней стороны _

'(основания) цилиндра:

Dim Brc As New SolidBrush(c1) gr.FillEllipse(Brc, x - w1, y - h0 - h1, _

2 * w1, 2 * h1)

' Построение изображения боковой стороны цилиндра: pathc1.AddArc(x - w1, y - h0 - h1, _

2 * w1, 2 * h1, 0, 180) pathc1.AddLine(x - w1, y - h0, x - w1, y) pathc1.AddArc(x - w1, y - h1, _

2 * w1, 2 * h1, 0, 180) pathc1.AddLine(x + w1, y, x + w1, y - h0) pathc1.CloseFigure()

'Закрашивание изображения боковой стороны _

'цилиндра градиентной кистью:

p1.X = x - w1 - 1 : p2.X = x + w1 + 1 p1.Y = y + h0 / 2 : p2.Y = y + h0 / 2 Dim Brcg As New _

LinearGradientBrush(p1, p2, c3, c2) gr.FillPath(Brcg, pathc1)

Отчет о работе

Отчет заключается в демонстрации студентом на терминале работы трёх самостоятельно отлаженных проектов: «Построение графиков функций в декартовых координатах», «Построение графиков функций в полярных координатах» и «Построение изображений геометрических тел» (в соответствии с предложенным вариантом каждого из трех заданий).

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

56

Работа 5

Использование особенностей процедур-событий языка VB .NET (2005, 2010), применяемых к множествам элементов управления при создании приложений типа «Калькулятор» и «Шахматная доска»

Цель работы: изучение возможностей языка Visual Basic .NET (2005, 2010), позволяющих создавать компактные проекты приложений, которые содержат большие множества элементов, выполняющих примерно одну и ту же функцию (например, кнопки с цифрами и арифметическими действиями на панели «Калькулято-

ра»).

Подготовка к работе

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

1.Как выглядит заголовок процедуры-события для щелчка командной кнопки? Какая часть этого заголовка указывает на объект (конкретную кнопку), к которой применяется это действие? Можно ли установить несколько объектов (командных кнопок) для одной такой процедуры?

2.Каковы аргументы процедуры-события для щелчка командной кнопки? К каким классам они относятся?

3.Как в тексте процедуры-события (например, для процеду- ры-события Form1_MouseDown) можно обратиться к тому или

иному свойству конкретного объекта, указанного в заголовке, к которому применяется это действие? Например, к свойству Text или Tag объекта Form1? Какой аргумент процедуры надо использовать для этого?

4. Как в тексте процедуры-события (например, для процедурысобытия Form1_MouseDown) можно обратиться к тому или иному

свойству данного события? Например, к свойству X или Y – коор-

57

динатам указателя мыши? Какой аргумент процедуры надо использовать для этого?

5.Как объявить одномерный или двумерный массив объектов, если заранее не известно их число?

6.Можно ли применять действие процедуры-события к объектам, которые представлены массивом?

Задания

В ходе выполнения данной работы студенту необходимо вы-

полнить три задания.

5.1. Создать и отладить проект Windows приложения «Калькулятор, управляемый мышью». Данное задание выполняется фронтально – без вариантов.

5.2. Модернизировать проект Windows приложения «Калькулятор, управляемый мышью», заменив все кнопки на форме единственной кнопкой, нажатие которой вызывает появление кнопок при-

ложения, построенного в результате выполнения первого задания. 5.3. Создать и отладить проект Windows приложения «Рисова-

ние шахматной доски».

Проекты создаются в системе проектирования Visual Studio 2005 на языке Visual Basic 2005. Для каждого из проектов скомпи-

лировать исполняемый файл приложения.

Задание 5.1 выполняется фронтально (без вариантов); задания 5.2 и 5.3 – по вариантам.

Пример выполнения работы

Во всех примерах данной работы подчеркивается, что использование спецификации Handles в заголовках процедур-событий и массивов элементов управления позволяет существенно сократить объем программного кода, а именно: использовать только одну процедуру-событие вместо множества таких процедур.

Задание 5.1. Создать и отладить проект Windows приложения «Калькулятор, управляемый мышью».

58

Рассмотрим проект приложения «Калькулятор», на панели которого видны сразу три поля с числовыми значениями: два поля для операндов выбранной пользователем арифметической операции (сложения, вычитания, умножения и деления) и одно поле для результата. Особенность данного приложения – это запрет на использование клавиатуры для ввода знаков в текстовые поля. В силу этого ограничения приложение может быть названо так: «Калькулятор, управляемый мышью» или «Мышиный калькулятор».

Для имитации «светящихся ЖК экранов» цвет фона этих полей

желательно сделать чёрным, цвет символов – например, зелёным. Значение свойства TextAlign следует установить равным Right,

чтобы числа вводились так, как это принято в «карманных» калькуляторах.

Вид панели работающего «Калькулятора» показан на рис. 5.1.

Рис. 5.1. Вид панели «Калькулятора» после выполнения операции деления

Выбор пользователем одного из двух текстовых полей для ввода

удобно делать с помощью щелчка одной из двух радиокнопок с надписями N1 и N2.

Значения операндов должны вводиться только с помощью

щелчков мышью командных кнопок на панели калькулятора (без помощи клавиатуры), поэтому значение свойства ReadOnly всех

трёх текстовых полей должно быть установлено равным True (Истина). Это заблокирует пользователю возможность вводить символы с помощью клавиатуры.

59

Следует разместить на форме 20 командных кнопок:

для ввода цифр от 0 до 9 (10 кнопок);

для ввода знаков, необходимых для представления десятичных чисел: запятой «,», символа «Е», знаков «+» и «-» (4 кнопки);

кнопки Backspace – для удаления последнего неудачно введенного символа (1 кнопка);

кнопки Clear – для очистки всех трёх текстовых полей операндов и результата (1 кнопка);

для выполнения арифметических действий (4 кнопки).

Перечисленные кнопки и текстовые поля удобно разместить внутри объектов GroupBox (фреймов), которые являются контей-

нерами – их перемещение и удаление вызывает перемещение и удаление содержимого этих фреймов. Координаты расположения кнопок «по умолчанию» берутся относительно контейнеров, в которых они находятся. Это станет удобным, когда будет решаться задача создания и расположения кнопок автоматически. (Эта задача будет решаться в рамках данной работы.)

Разработку проекта данного приложения следует начинать с этапа «ручного» построения формы – размещения на ней всех необходимых элементов управления: трех фреймов (Group Boxes), 20- и командных кнопок, трех текстовых полей, двух радиокнопок и

одной метки «Результат». В последних версиях систем проектирования MS Visual Studio (2005, 2010) программисту предоставляют-

ся удобные средства для быстрого и качественного размещения на форме многочисленных однородных объектов, которые должны располагаться ровными «рядами и колоннами». Освоение этих средств – дело техники.

Особый интерес представляет этап разработки программного кода.

Для большей лаконичности сократим имена кнопок и текстовых полей – заменим значения их свойства (Name) на следующие:

b0, b1, …, b9 – кнопки с цифрами;

z1, …, z4 – кнопки со знаками «,», «Е», «+», «-»;

u1, u2 – кнопки управления;

d1, …, d4 – копки арифметических действий;

r1, r2 – радиокнопки;

t1, t2, t3 – текстовые поля.

60

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]