Использование массивов элементов управления при создании приложений типа «Экранный калькулятор»

Вид материалаДокументы

Содержание


Имя объекта
Shape), между операндами и результатом проведена жирная горизонтальная черта (Line
Подобный материал:

Работа № 5

Использование массивов элементов управления при создании приложений типа «Экранный калькулятор»

Цель работы: изучение возможности использования массивов элементов управления при создании приложений, в которых несколько элементов управления выполняют примерно одну и ту же функцию (например, кнопки с цифрами на панели «Экранного калькулятора»). Использование массивов в таких случаях позволяет существенно сократить объем программного кода, а именно: использовать только одну процедуру вместо множества процедур, например, процедуру Obj_Click(Index) вместо процедур Obj1_Click(), …, ObjN_Click().

Контрольные вопросы:
  1. Как следует изменить значения свойства (Name) у нескольких объектов одного класса, чтобы образовать массив объектов?
  2. Каков тип параметра Index любой процедуры-события для массива объектов Obj(Index)?
  3. Как в процессе работы приложения на экранной форме можно создать несколько элементов управления одного класса, например, несколько командных кнопок или несколько изображений для анимации?
  4. Как в процессе работы приложения можно удалить с экранной формы массив элементов управления?

Пример 5.1. Создать проект и скомпилировать файл exe приложения «Экранный калькулятор», на панели которого должны быть видны сразу 3 поля с числовыми значениями: 2 поля для операндов выбранной пользователем арифметической операции (сложения, вычитания, умножения и деления) и поле для результата. Значения операндов должны вводиться только с помощью щелчков мышью командных кнопок на панели калькулятора (без помощи клавиатуры), поэтому для указанных значений операндов и результата следует использовать не текстовые поля, а поля Метки (Label). Следует предусмотреть командные кнопки для:
  • ввода цифр (10 кнопок);
  • ввода десятичной точки;
  • удаления последнего неудачно введенного знака (Backspace);
  • очистки всех трех полей (операндов и результата);
  • выполнения одного из четырех арифметических действий.

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


Рис.5.1. Вид панели «Экранного калькулятора» после выполнения умножения


При создании проекта целесообразно ввести 4 массива элементов управления:
  • массив меток для операндов (2 элемента);
  • массив опциональных кнопок (Option Button) для фиксации ввода одного из двух чисел (2 элемента);
  • массив командных кнопок с цифрами (10 элементов);
  • массив командных кнопок с арифметическими действиями (4 элемента).

Напомним, что на первом этапе создания проекта следует разработать таблицу свойств. Для объектов «Экранного калькулятора» таблица имеет следующий вид:

Имя

объекта

Класс

объекта

Свойство

объекта

Значение свойства

Form1

Form

Caption

“Калькулятор”

MinButton

False

MaxButton

False

LabelZ

Label

Font (Size)

16

Numb(1)

Label

BackColor

&H00000000& (черный)

Numb(2)

ForeColor

&H0000FF00& (зеленый)

Result

Alignment

Right Justify

Op(1)

Option Button

Value

True

Op(2)

False

C(0)

Command-Button

Caption

“0”





C(9)

“9”

Command-Point

Command-Button

Caption

“.”

D(0)

Command-Button

Caption

“+”

D(1)

“-”

D(2)

“X”

D(3)

“/”

Command-Back

Command-Button

Caption

“”

Command-Clear

Command-Button

Caption

“Clear”

Shape1

Shape

Shape

Rectangle

Line1

Line

BorderWidth

2

Frame1

Frame

Caption

“Действие”

Примечания. Для большей выразительности все кнопки C(i) с цифрами обрамлены прямоугольником ( Shape), между операндами и результатом проведена жирная горизонтальная черта (Line), а кнопки D(i) заключены в рамку (Frame) с надписью «Действие».

На следующем этапе проектирования в окно программного кода записываются коды следующих процедур:

Dim N As Integer


Private Sub Form_Load()

CommandClear_Click

N = 1: Op(1).Value = True

End Sub


Private Sub Op_Click(Index As Integer)

N = Index

End Sub


Private Sub Numb_Click(Index As Integer)

N = Index: Op(Index).Value = True

End Sub


Private Sub C_Click(Index As Integer)

Numb(N).Caption = Numb(N).Caption & Index

End Sub


Private Sub CommandBack_Click()

If Len(Numb(N).Caption) > 0 Then

Numb(N).Caption = _

Left(Numb(N).Caption, Len(Numb(N).Caption) - 1)

End If

End Sub


Private Sub CommandClear_Click()

Numb(1).Caption = "": Numb(2).Caption = "": Result.Caption = ""

End Sub


Private Sub CommandPoint_Click()

Numb(N).Caption = Numb(N).Caption & "."

End Sub


Private Sub D_Click(Index As Integer)

n1# = Val(Numb(1).Caption): n2# = Val(Numb(2).Caption)

Select Case Index

Case 0

r# = n1 + n2

LabelZ.Caption = "+"

Case 1

r = n1 - n2

LabelZ.Caption = "-"

Case 2

r = n1 * n2

LabelZ.Caption = "X"

Case 3

If n2 = 0 Then

MsgBox "Деление на ноль", vbCritical

Else

r = n1 / n2

LabelZ.Caption = "/"

End If

End Select

Result.Caption = r

End Sub

В ходе выполнения 5-й работы студент должен выполнить 2 задания.

Задание 1. В процессе выполнения задания студенты фронтально (без вариантов) реализуют проект «Экранный калькулятор», представленный в примере 5.1, отлаживают этот проект и создают приложение (файл exe) с пиктограммой на рабочем столе компьютера.

Задание 2. В ходе выполнения задания студенты осваивают возможность создания в ходе выполнения программы произвольного числа N «клонов» (копий) элемента управления Obj, предварительно представленного в виде единственного элемента массива: Obj(0). «Клоны» создаются с помощью циклического применения оператора Load:

For i = 1 To N

Load Obj(i)

Next i

Каждый «клон» должен выполнять свою собственную функцию. В конце работы приложения «клоны» Obj(1) – Obj(N) должны быть уничтожены с помощью циклического применения оператора Unload.

Вариант 1. Создать приложение, на экранной форме которого, в левом верхнем углу, находится командная кнопка Com(0) (рис. 5.2). После щелчка этой кнопки, вместо нее должны появиться 12 ее «клонов»: Com(1), Com(2), …, Com(12) – 4 ряда по 3 кнопки (рис. 5.3).








Рис.5.2. Рис. 5.3. Рис. 5.4.

Щелчок каждой из новых кнопок должен вызывать появление окна сообщения с результатом возведения двойки в степень, равную индексу этой кнопки (которому соответствует надпись на кнопке), например, как показано на рис. 5.4. Кроме того, щелчок последней, 12-й кнопки должен восстановить на экране кнопку Com(0) и уничтожить все остальные элементы массива.

Вариант 2. Подготовить 8 графических файлов с изображением восьми «фаз Луны» (рис. 5.5) и создать приложение «Фазы Луны» с анимацией - циклическим чередованием указанных изображений.



Рис. 5.5. Восемь изображений «фаз Луны» для анимации

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


Рис. 5.6. Экранная форма приложения «Фазы Луны»


Указания. Графические файла с именами Фаза1.bmp, …, Фаза8.bmp необходимо поместить в текущую директорию проекта. На экранную форму поместить таймер, задающий интервал смены кадров анимации (например, 100), а также единственный элемент Pic(0) массива изображений – объект класса Picture Box. Во время загрузки экранной формы (сразу после запуска приложения) в одном и том же месте этой формы автоматически должны быть созданы еще 8 элементов этого массива: Pic(1), …, Pic(8) – с помощью оператора Load. Свойству Visible этих элементов массива необходимо присвоить значение True. Одновременно, с помощью функции LoadPicture в эти элементы необходимо загрузить указанные графические файлы, например, так:

F = App.Path & “\Фаза” & i & “.bmp”

Pic(i).Picture = LoadPicture(F)

Через равные интервалы времени (например, через 0,1 с) изображения фаз должны поочередно оказываться «наверху» в «пачке» объектов Pic(i) с помощью метода ZOrder:

Pic(i).ZOrder 0