Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VB_metodichka.pdf
Скачиваний:
11
Добавлен:
26.03.2015
Размер:
1.88 Mб
Скачать

3. Задать для заголовков командных кнопок массива Command1(i) значения, соответствующие их номеру i в массиве.

Label

CommandButton

CommandButton

 

 

Рис. А2.1. Примерный интерфейс приложения «Калькулятор»

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

5.Перейти к программному коду и объявить с помощью оператора Dim в разделе общих объявлений General используемые в программном коде переменные:

n1, n2 – для хранения вычисляемых в калькуляторе чисел, тип Double (вещественные числа, двойной точности);

ready – флаговая переменная–переключатель, принимающая только два значения 0 и 1 и служащая для очистки окна вывода результатов, тип – Integer (целые числа).

6.Дважды щелкнуть по командной кнопке Command1(1) или любой другой из элементов массива командных кнопок и набрать для тела ее процедуры, выполняющейся по щелчку мыши, ниже приведенныйтекст процедуры вместе с заголовком, где аргумент у имени процедуры не пустой, а включает переменную Index целого типа Integer, которая генерируется редактором VB по умолчанию для хранения в памяти номера элемента массива командных кнопок Command1(Index), причем значение этой переменной будет совпадать с номером командной кнопки):

131

Private Sub Command1_Click(Index As Integer) If ready > 0 Then

Label1.Caption = Label1.Caption + Str$(Index) ready = 1

Else

Label1.Caption = Str$(Index) ready = 1

End if End Sub

Здесь в процедуре выполняются следующие действия:

условный оператор If проверяет значение флаговой переменной ready и, если оно отлично от нуля, продолжает запись числа в окно вывода результатов Label1, иначе все содержимое окна Label1 стирается и набирается новая цифра;

строка ready = 1 устанавливает флаговую переменную не больше нуля (равной 1), чтобы можно было продолжить набор цифр в числе для многоразрядных чисел.

7. Запустить программу и проверить, что набор чисел при нажатии левой клавиши мыши на соответствующей кнопке выполняется. Выйти из программы.

8. Создать программный код процедуры для командной кнопки «.» (десятичная точка), для чего использовать текст программного кода, приведенный выше, скопировав его через буфер обмена и заменив

внем переменную i на символ точки.

9. Cоздать программный код процедуры для функциональной кнопки «+», щелкнув по ней дважды мышью на форме и перейдя, таким образом, в окно просмотра кода:

n1 = Val(Label1.Caption)

n1 = n2 + n1

n2 = n1

Label1.Caption = Str$(n1) ready = 0

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

присваивается значение переменной n1 как числа, преобразованного функцией Val из строки символов в окне вывода результатов;

132

n1 складывается с числом, хранящимся в памяти до этой операции в переменной n2 (т.е. первым числом);

в переменную n2 заносится полученный результат для хранения на случай выполнения следующей операции на калькуляторе (в результате первое число будет храниться в переменной n2, а новое – второе в ходе выполнения операции – число после его набора в окне Label1 попадает в переменную n1);

обновляется содержание окна вывода результатов;

флаговая переменная ready приравнивается 0 для готовности к вводу нового числа в окне Label1.

10. Запустить приложение и проверить работу операции сложения двух чисел. При этом необходимо учитывать, что калькулятор работает в режиме т.н. «польской» логики – для выполнения операции над двумя числами, необходимо:

а) набрать первое число и занести его в память, нажав функциональную клавишу «+»;

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

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

для кнопки вычитания на n1 = n2 – n1

для кнопки умножения на n1 = n2*n1

для кнопки деления на

If n1 <> 0 Then n1 = n2/n1 Else MsgBox «Деление на нуль»

11. Для командной кнопки «Сброс» в программном коде ее процедуры необходимо:

присвоить значению заголовка пустые кавычки, что эквивалентно очистке окна Label1;

обнулить значения используемых переменных n1, n2, ready. 12. Запустить приложение и проверить его работу для всех опе-

раций.

13. Отформатировать внешний вид калькулятора, задав для всех его объектов (включая и саму форму) подходящие значения для

133

свойств: Font (шрифт), BackColor (фоновый цвет), ForeColor (цвет переднего плана), Icon (значок для окна программы).

14. Сохранить проект приложения и его exe-файл в своем ката-

логе.

15. Запустить ехе-файл разработанного приложения из Проводника и проверить его работу.

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

1.Что является массивом элементов управления?

2.Как создать массив командных кнопок?

3.Как выбрать отдельный элемент из массива элементов управ-

ления?

4.Назначение аргумента в заголовке процедуры обработки события Click для массива командных кнопок

5.Как работает процедура по набору числа из отдельных цифр?

6.Как происходит переход к набору нового числа?

7.Какую роль выполняет в программном коде функция Str$ ?

8.Какую роль выполняет в программном коде функция Val?

9.Как вернуть “Калькулятор” в исходное состояние?

134

А3. Простые и комбинированные списки А3.1. Общие сведения

На языке VB существуют два элемента управления, предназначенных для хранения и обработки одномерных массивов некоторой информации – это два вида списков (см. рис.A3.1):

простые списки ListBox

комбинированные списки ComboBox

Строго говоря, списки нельзя полностью отождествить с массивами, определенными выше, т. к. в списке может содержаться разнородная информация (например, и текстовая, и числовая). Списки можно частично очищать от элементов и т.п. Массивы данных, хранящиеся в списках, не требуют специального объявления – достаточно создать на форме соответствующие элементы управления, после чего обращение к массиву производится через значение свойства Name для объекта на форме, соответствующего списку. Фактически списки являются объектами, в которых могут храниться динамические одномерные массивы числовых или текстовых данных, т.к. количество элементов в списке заранее не определяется, а, как правило, определяется в ходе выполнения программы.

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

0– раскрывающийся комбинированный список;

1– простой (нераскрывающийся) комбинированный список;

2– раскрывающийся список без поля ввода.

Основными свойствами для списков являются следующие (подробнее см. приложение А):

List(i) – i-й элемент в списке;

ListIndex – номер выбранного (активизированного щелчком мыши, подсвеченного) элемента в списке;

ListCount – количество элементов в списке.

Например, чтобы обратиться к 5-му элементу в списке List1, необходимо записать

135

List1.List(4)

(здесь учитывается, что нумерация элементов в списке начинается с 0), а определить номер выбранного элемента в списке List2 можно, записав

List2.ListIndex

Основными методами обработки списков являются следующие: AddItem – добавить элемент в список;

RemoveItem – удалить указанный элемент из списка; Clear – удалить весь массив из списка.

Например, чтобы добавить элемент Sin(5) в список List1, необходимо записать (и затем выполнить) строку кода

List1.AddItem sin(5)

чтобы очистить весь список, например List2, необходимо записать

List2.Clear

а чтобы удалить из комбинированного списка Combo1 3–й элемент, необходимо записать

Combo2.RemoveItem 2

По умолчанию данным, хранимым в списках, присваивается тип string, поэтому при обработке числовых данных из списков рекомендуется использовать функцию преобразования к числовому типу Val. Например, в арифметических операциях типа

y=Sin(5)*Val(List1.List(2))

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

Основными событиями для выполнения программного кода в процедурах для списков являются:

Click – щелчок мышью;

KeyPress – нажатие на соответствующую клавишу.

Событие KeyPress используется в основном в комбинированных списках для перевода информации из текстового поля в список. При этом процедура, обрабатываемая таким событием, всегда имеет аргумент, соответствующий скэн-коду (порядковому номеру на клавиатуре) обрабатываемой клавиши. Например, для того, чтобы в комбинирован-

136

ном списке combo1 после нажатия на клавишу ввода Enter (номер скэнкода равен 13) произошел перевод информации из текстового поля в список, необходимо записать строку кода

If n = 13 Then Combo1.AddItem.Combo1.Text

где n – аргумент процедуры обработки события нажатия на клавишу

KeyPress.

ComboBox

Label

Рис. A3.1. Примерный интерфейс приложения «Накладная»

А3.2. Задание для выполнения на компьютере

1. Создать на форме пользовательский интерфейс, соответствующий представленному на рис. A3.1, и ввести свое название фирмы, номер накладной и дату. Для комбинированных списков задать в свойстве Style значение Simple Combo (простой комбинированный список) и протяжкой мышью растянуть его на соответствующую длину.

137

2.Перейти в режим набора программного кода View Code и выбрать в списке объектов Object первый список Сombo1, а в списке событий обрабатываемых соответствующими процедурами Proc выбрать KeyPress – процедуру обработки нажатия клавиши.

3.Записать текст программного кода процедуры для первого комбинированного списка Сombo1 (ниже приводится текст программного кода вместе с заголовком процедуры, в котором в качестве аргумента имени процедуры определяется переменная KeyAscii целого типа, значения которой соответствуют скэн-коду нажимаемой клавиши):

Private Sub Combo1_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then

Combo1.AddItem.Combo1.Text

Combo1.Text = «»

KeyAscii = 0

Combo2.SetFocus

End If

End Sub

Здесь проверяется, если скэн-код клавиши соответствует клавише ввода Enter, т.е. равен 13, то последовательно выполняются следующие 4 операции:

в список добавляется новый элемент с содержанием, соответствующим содержанию поля ввода Combo1.Text;

содержание строки ввода в списке очищается;

переменой KeyAscii, хранящей значение кода нажимаемой клавиши, присваивается нулевое значение;

курсор перемещается в текстовое поле следующего списка.

4.Запустить приложение на выполнение из редактора VB и проверить, как заполняется первый список, установив мышью текстовый курсор в окне ввода комбинированного списка и вводя в него последовательно название.

5.Создать аналогичный текст для двух других списков Сombo2 и Сombo3, использовав процедуру копирования через буфер обмена и заменив затем в них название объекта Сombo1 на соответственно Сombo2

138

и Сombo3, а для строки c оператором SetFocus – на соответственно

Сombo3 и Сombo1.

6.Снова проверить работу уже трех списков, заполняя в них строки последовательно для каждого вида товара.

7.Написать для командной кнопки Command1 текст программного кода для процедуры вычисления суммы уплаты за товары (выбрать стандартное событие для обработки командной кнопки Click):

Dim i As Integer, sum As Single Do While i < Combo2.ListCount

sum = sum + Val(Combo2.List(i))*Val(Combo3.List(i)) i = i + 1

Loop

Label4.Caption = Str$(sum) + «руб.»

Здесь в первой строке объявляются локальные переменные i и sum, далее в цикле пока не будет достигнут конец второго списка, хранящемся в значении Combo2.ListCount, вычисляется сумма произведений цены товара за 1кг во втором списке на вес его в третьем списке и, наконец, значению переменной i добавляется 1 за один проход цикла. В последней строке в заголовок объекта Label4 выводится результат вычисления и к нему дописываются символы «руб.»

8.Запустить приложение, набрать несколько строк в накладной для выбранных товаров и проверить работу кнопки «Всего уплатить».

9.Создать для второй командной кнопки Command2 процедуру вычисления средней цены за 1 кг товара, используя текст предыдущей процедуры и внося в нее следующие изменения:

строку, где вычисляется сумма, заменить на вычисление общей цены за 1 кг товара в этом списке:

sum = sum + Val(Combo2.List(i))

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

Label5.Caption = Str$(sum/Combo2.ListCount) + «руб.»

где в скобках вычисляется среднее арифметическое значение цен за 1 кг. 10. Создать для третьей командной кнопки Command3 процедуру вычисления общего веса товара, также используя текст первой процеду-

ры со следующими изменениями:

139

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

sum = sum + Val(Combo3.List(i))

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

Label6.Caption = Str$(sum) + «кг»

11. Запустить программу на выполнение и проверить работу всего

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

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

Multilines = True Scrollbars = 1

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

13.Запустить приложение, заполните полностью накладную на 15 наименований товара и провести все предусмотренные в приложении вычисления.

14.Сохранить разработанное приложение в своем каталоге.

15.Создать откомпилированный вариант приложения «Накладная», запустить исполнимый exe–файл приложения из Проводника среды Windows и проверить его работу.

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

1.Какие типы списков используются в языке VB?

2.Чем отличаются списки от одномерных массивов?

3.Какие различные формы представления имеют комбиниро– ванные списки?

4.Как в программе добавить элемент в список и удалить его?

6.Какими основными событиями обрабатывается програмный код для списков?

7.Что называется скэн–кодом клавиши на клавиатуре?

8.Как подсчитать сумму числовых элементов в списке?

9.Как подсчитать среднее значение числовых элементов в списке?

140

А4. Построение графиков функций, диаграмм и гистограмм А4.1. Общие сведения

Для построения графиков функций обычно используется метод Pset – прорисовка точки. При этом одной из координат точки является значение аргумента функции, а второй – значение самой функции

Pset (x, f(x))

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

For x = –10 To 10 Step 0.01

Pset (x, f(x))

Next x

При этом необходимо позаботиться, чтобы объект, на котором должен появиться график функции, был правильно отмасштабирован методом Scale как по оси х, так и по оси у. Трудность здесь заключается в подборе правильного масштаба по оси ординат, вдоль которой откладываются значения функции, а предельные значения для сложной незнакомой функции, как правило, не известны заранее и масштаб по оси ординат приходится подбирать экспериментальным путем. Например, для прорисовки графика функции Sin(x) в окне Picture1 в пределах изменения ее аргумента от –10 до 10 радиан приемлемым будет следующий масштаб:

Picture1.Scale (–12, 2) – (12, –2)

График функции обычно сопровождается линиями осей координат, поэтому в целом программа прорисовки графика функции Sin(x) в графическом окне Picture1 может выглядеть следующим образом:

Dim x As Single

Picture1.Scale (–12,2) – (12, –2)

Picture1.Line (–12, 0) – (12, 0)

Picture1.Line (0, 2) – (0, –2)

For x = –10 To 10 Step 0.01

Picture1.Pset (x, Sin(x))

Next x

141

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

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

For i = -11 To -1

Picture1.Line (i, 0.05)-(i, -0.05)

Picture1.Print i

Next i

For i = 1 To 11

Picture1.Line (i, 0.05)-(i, -0.05)

Picture1.Print i

Next i

For j = 1.5 To -1.5 Step -0.5

Picture1.Line (-0.1, j)-(0.1, j)

Picture1.Print j

Next j

то мы получим в графическом окне на форме график функции Sin(x) в виде, представленном на рис. А4.1.

Рис. А4.1. График функции c масштабными делениями по осям координат

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

142

поэтому один из циклов – по горизонтальной оси – пришлось разбить на две части с исключением значения, равного нулю.

Для построения столбчатых гистограмм, отражающих в графическом виде числовые значения из таблиц, списков или массивов некоторых дискретных величин (зарплата сотрудников, экспериментальные данные и т.п.), обычно используется метод Line в режиме вычерчивания прямоугольника. При этом координаты левого верхнего угла прямоугольника задаются как (i, m(i)), где m(i) – значение i-го элемента некоторого массива, а противоположного по диагонали угла – как (i + d, 0), где d – ширина прямоугольника, основание которого лежит на оси абсцисс. Например, для некоторого массива m(i) из 10 чисел со значениями от 30 до 100 можно построить гистограмму, используя следующий программный код:

Scale (–2, 110)–(12, –10)

Line (0, 0)–(0, 100)

Line (0, 0)–(10, 0)

For i = 0 to 9

Line (i, m(i)) – (i + 0.5, 0), ,B

Next i

Здесь столбцы гистограммы будут представлять собой прямоугольники с высотой, соответствующей числовому значению элемента массива m(i) и шириной столбца, равной 0.5.

Пример А4.1. Программа для построения закрашенной столбчатой гистограммы по количеству товаров в их списке (рис. А4.2).

Picture1.Scale (-1, 100)-(Combo2.ListCount + 1, -10)

Picture1.Line (0, 0)-(Combo2.ListCount + 1, 0)

Picture1.Line (0, 0)-(0, 100)

For i = 1 To Combo2.ListCount

Picture1.Line (i, Val(Combo2.List(i - 1)))-(i + 0.5, 0), QBColor(i), BF

Picture1.PSet (i, -2), QBColor(15)

Picture1.Print Combo1.List(i - 1)

Next i

В программе выбирается соответствующий масштаб графического окна в соответствии с количеством записей в списке (см. раздел А3 в прил. А) и максимальным значением количества товаров (это значение можно определить по отдельной программе, тогда гистограмма будет подстраиваться под тот список, значения которого она

143

должна отображать графически). Затем прорисовываются оси координат. В цикле для установки графического курсора в нужное место при выводе подписи используется оператор Pset с белым цветом точки, что соответствует значению 15 индекса у функции определения цвета QBColor. Наконец, подписи под столбцами гистограммы выводятся из первого списка Combo1.

Рис. А4.2. Столбчатая гистограмма для количества товаров в списке

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

Перед построением диаграммы следует вычислить сумму sum всех элементов массива m(i) и затем представить дугу каждого сектора в диаграмме как долю дуги всей окружности 6.28 в радианах:

6.28*m(i)/sum.

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

Пример А4.2. Программа построения для числового массива m(i) из 10 вещественных чисел круговой незакрашенной диаграммы:

Dim m(10) As Single

Dim a As Single, b As Single, sum As Single, i As Integer For i = 0 to 9

m(i) = Val(InputBox(«Ввести m(i)»)) sum = sum + m(i)

next i

144

Scale (–10,10)–(10,–10) For i = 0 To 9

b = b + 6.28*m(i)/sum Circle (0,0),8, ,–a,–b a = b

Next i

Здесь использованы переменные a и b для хранения значений соответственно начального и конечного углов каждого из секторов круговой диаграммы.

Пример А4.3. Программа для построения круговой закрашенной соответствующим цветом диаграммы для количества товаров в их списке (рис. А4.3).

Dim a As Single, b As Single, s As Single, i As Integer Picture1.Scale (-10, 10)-(10, -10)

For i = 0 To Combo2.ListCount - 1 s = s + Val(Combo2.List(i))

Next i

a = 0.001 Picture1.FillStyle = 0

For i = 0 To Combo2.ListCount - 1

b = b + 6.28 * Val(Combo2.List(i)) / s

Picture1.FillColor = QBColor(i + 1) Picture1.Circle (0, 0), 8, QBColor(i), -a, -b a = b

Next i

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

145

Рис. А4.3. Круговая диаграмма по числовым значением в списке

А4.2. Задание для выполнения на компьютере

1.Создать на форме графическое окно и ниже три командные кнопки «График функции», «Гистограмма» и «Диаграмма» для вывода после события Click в графическое окно соответственно графиков функций, гистограмм и диаграмм.

2.Для кнопки «График функции» написать текст процедуры, выводящей в графическое окно график функции, соответствующий варианту из табл. А4 (если функция вычисляется по нескольким формулам, то выбрать одну). Предусмотреть в тексте процедуры предварительную очистку графического окна методом Cls.

3.Для кнопки «Гистограмма» написать текст процедуры, выводящей в графическое окно гистограмму значений элементов массива. Массив взять из табл. 5 в соответствии со своим вариантом.

4.Для кнопки «Диаграмма» написать текст процедуры, выводящей в графическое окно круговую диаграмму значений элементов массива из табл.5 в соответствии со своим вариантом.

5.Задать различные цвета для выводимых в графическое окно графиков, гистограмм и диаграмм.

6.Построить столбчатую гистограмму с непримыкающими друг

кдругу прямоугольниками.

7.Используя функции FillStyle, FillColor, DrawStyle и DrawWidth, задать различные закраски столбиков гистограммы и секторов диаграммы.

146

8. Сохранить разработанное приложение и проверить его работу как отдельной Windows-программы, выйдя из среды VB.

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

1.Какие графические методы можно использовать для построения графиков функций?

2.Как выбирается масштаб при построении графиков функций?

3.Как вычерчиваются оси координат при построении графика?

4.Как задаются координаты прямоугольников при построении гистограммы?

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

6.Как определяется длина дуги сектора при построении круговых диаграмм?

7.Как задать закраску для диаграмм и гистограмм?

147

А5. Списки и формы в приложениях Excel А5.1. Общие сведения

VBA, как и VB, предполагает использование стандартных элементов управления, служащих для хранения и обработки одномерных массивов некоторой информации – это два вида списков: простые списки ListBox и комбинированные списки ComboBox (см. раздел А3).

Пример А5.1. Пусть имеется список группы, в котором содержатся сведения об оценках, полученных студентами во время сессии (рис. А5.1). Требуется посчитать средний балл для конкретного студента, выбранного из списка.

Рис. А5.1. Рабочий лист Excel со списком группы

На рабочем листе с помощью панели Элементы управления создана кнопка с надписью «Средний балл». Надпись сделана в свойстве Caption, которое появляется на экране после нажатия кнопки Свойства

на панели Элементы управления.

Для выбора фамилии студента разработана форма, представленная на рис. А5.2. На этой форме с именем UserForm1 создан комбинированный список ComboBox1 с надписью «Раскройте список, выберите фамилию, нажмите кнопку» в элементе управления Label1. Командная кнопка с заголовком «Расчет среднего балла» запускает программу расчета. В поле TextBox1 выводится полученный результат, перед этим полем в метке Label2 сделана надпись «Средний балл».

148

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