Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
формы.doc
Скачиваний:
6
Добавлен:
02.06.2015
Размер:
532.48 Кб
Скачать

Процедуры

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

Public up_down As Boolean 'порядок отсчета

Public p As Long 'номер цвета

объявим две глобальные переменные

Public Sub el_watch()

el_watch_custom.Show

End Sub

и запишем процедуру вызова основной формы.

На процедурном листе основной формы el_watch_custom разместим процедуры.

Private Sub UserForm_Initialize()

theColors.ColumnCount = 2

theColors.AddItem "red"

theColors.List(0, 2) = RGB(255, 0, 0)

theColors.AddItem "yellow"

theColors.List(1, 2) = vbYellow

theColors.AddItem "blue"

theColors.List(2, 2) = RGB(0, 0, 255)

theColors.AddItem "green"

theColors.List(3, 2) = RGB(0, 255, 0)

theColors.AddItem "magenta"

theColors.List(4, 2) = vbMagenta

theColors.AddItem "cyan"

theColors.List(5, 2) = vbCyan

p = 0

Frame1.ControlTipText = "Вперед или назад"

End Sub

Процедура выполняется при инициализации формы.

Список цветов theColorsформируется методомAddItem. Список состоит из двух столбцов: первый столбец – название цвета, второй –число, определяющее цвет. При использовании методаAddItemзаполняется всегда только первый столбец добавляемой строки.

Второй столбец этой строки списка заполняется при помощи установки значения элемента массива списка. Номер строки элемента – номер строки списка, номер столбца элемента в нашем случае всегда 2. Нумерация строк списка начинается с нуля, а нумерация столбцов списка начинается с единицы. Цвета устанавливаются при помощи функцииRGBили при помощи константVBA.

Заголовок на верхней границе рамки Frame1задается свойствомCaption. Установленное свойствоControlTipText для рамкиFrame1 вызывает появление краткой подсказки"Вперед или назад" при наведении курсора на рамку.

Private Sub Cmd_exit_Click()

Unload el_watch_custom

End Sub

Процедура выполняется при нажатии на кнопку Exit. Активная форма выгружается и программа завершается.

Private Sub Count_Down_Click()

up_down = Count_Up.Value

Count_Up.Value = False

Count_Down.Value = False

Frame1.Caption = "Down"

ew.Show

End Sub

Процедура выполняется при нажатии на переключатель Count_Down.

Элемент управления Frame1 служит для объединения в группу двух переключателей Count_Up и Count_Down.

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

Глобальная переменная up_down получает значение False, т.к. переключатель Count_Up=False при нажатии на переключатель Count_Down.

Далее оба переключателя получают значение False, надпись на рамкеFrame1устанавливается вDown.

Private Sub Count_Up_Click()

up_down = Count_Up.Value

Count_Up.Value = False

Count_Down.Value = False

Frame1.Caption = "Up"

ew.Show

End Sub

Процедура выполняется при нажатии на переключатель Count_Up_Click

Глобальная переменная up_downполучает значениеTrue, надпись на рамкеFrame1устанавливается вUp.Далее оба переключателя получают значение False и загружается и высвечивается вторая форма ew.

Private Sub theColors_Click()

If theColors.ListIndex > -1 Then

p = theColors.List(theColors.ListIndex, 2)

Else

p = RGB(255, 255, 255)

End If

End Sub

Выполняется при щелчке на список theColors.

Если выбрана некоторая строка из списка цветов, то переменная p устанавливается в число, соответствующее выбранному из списка цвету (второй столбец выбранной строки списка). В противном случае переменная обнуляется (черный цвет).

На процедурном листе формы ew разместим процедуры.

Public Sub e_watch()

Dim n As Integer

Dim startTime As Date, stopTime As Date

cmd_Go.Visible = False

watch.Visible = True

watch.BackColor = p

left_but.Visible = True

right_but.Visible = True

startTime = Time

stopTime = TimeSerial(Hour(startTime), Minute(startTime), Second(startTime) + sec.Value + 1)

n = 1

Do

If up_down Then

watch.Caption = TimeSerial(Hour(startTime), Minute(startTime), Second(startTime) + n)

Else

watch.Caption = TimeSerial(Hour(stopTime), Minute(stopTime), Second(stopTime) - n)

End If

ew.Repaint

Application.Wait TimeSerial(Hour(Time), Minute(Time), Second(Time) + 1)

n = n + 1

Loop While Time < stopTime

cmd_Go.Visible = True

watch.Visible = False

End Sub

Процедура e_watch – общая процедура. Она может вызываться при выполнении событийных процедур нажатия на кнопку Start или нажатия на свободное пространство формы ew.

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

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

Private Sub UserForm_Initialize()

left_but.Visible = False

right_but.Visible = False

watch.Visible = False

cmd_Go.SetFocus

sec = 5

ew.Top = 250

ew.Left = 250

End Sub

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

Свойства Top и Left устанавливают смещение диалогового окна таким образом, чтобы при работе были видны обе загруженные формы. Устанавливается 5 секунд по умолчанию для хода часов.

Private Sub cmd_new_select_Click()

'Me.Hide

ew.Hide

End Sub

Процедура cmd_new_select скрывает форму ew на время установки новых настроек пользователя.

Private Sub cmd_GO_Click()

e_watch

End Sub

Private Sub UserForm_Click()

e_watch

End Sub

Процедуры cmd_GO_Click и UserForm_Click вызывают общую процедуру, запускающую часы.

Private Sub left_but_Click()

up_down = False

e_watch

End Sub

Private Sub right_but_Click()

up_down = True

e_watch

End Sub

Процедуры left_but_Clickиright_but_Clickобрабатывают события нажатия на выключатели.

Кнопка выключатель ToggleButton показывает включен он или нет через положение кнопки: "нажата"/"отжата".

В форме оба выключателя снабжены стрелками, обозначающими отсчет назад (стрелка влево) или отсчет вперед (стрелка вправо).

При нажатии стрелки влево выполняется процедура left_but_Click, в которой глобальная переменная up_down устанавливается в False, а при нажатии стрелки вправо выполняется процедура right _but_Click, в которой глобальная переменная up_down устанавливается в True. Затем вызывается общая процедура, запускающая часы.

Рис.7.14.Обе формы в режиме выполнения