Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Создание пользовательских п ÒÉÌÏÖÅÎÉÊ ÓÒÅÄÓÔÁÍ...doc
Скачиваний:
6
Добавлен:
18.11.2019
Размер:
2.02 Mб
Скачать

Процедуры

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

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

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

две глобальные переменные up_down и p.

Процедура el_watch расположена в модуле Module1 и вызывает начальную форму.

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, 1) = RGB(255, 0, 0)

theColors.AddItem "yellow"

theColors.List(1, 1) = vbYellow

theColors.AddItem "blue"

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

theColors.AddItem "green"

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

theColors.AddItem "magenta"

theColors.List(4, 1) = vbMagenta

theColors.AddItem "cyan"

theColors.List(5, 1) = vbCyan

p = 0

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

End Sub

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

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

Метод AddItem устанавливает только значение первого столбца добавляемой строки. Значение второго столбца этой строки – цвет, устанавливается при помощи функции RGB (возможно использование констант vb).

Элемент управления Frame1 служит для объединения в группу двух переключателей Count_Up и Count_Down. Помещенные в рамку, они автоматически становятся взаимоисключающими, т. е. при выборе одного из них (Value=True) другой сразу же получает значение False и отключается.

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

Private Sub Cmd_exit_Click()

Unload el_watch_custom

End Sub

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

Private Sub Count_Down_Click()

up_down = Count_Up.Value

Count_Down.Value = False

Frame1.Caption = "Down"

ew.Show

End Sub

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

После выбора переключателя Count_Down переключатель Count_Up равен False и поэтому глобальная переменная up_down получает значение False.

Далее в процедуре переключатель Count_Down получает значение False, надпись на рамке Frame1 устанавливается в Down и загружается и высвечивается вторая форма ew.

Private Sub Count_Up_Click()

up_down = Count_Up.Value

Count_Up.Value = False

Frame1.Caption = "Up"

ew.Show

End Sub

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

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

Private Sub theColors_Click()

If theColors.ListIndex > -1 Then

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

Else

p = RGB(255, 255, 255)

End If

End Sub

Процедура theColors_Click выполняется при щелчке на список theColors.

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

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

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 вызывают общую процедуру e_watch, запускающую часы.

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. В обоих процедурах вызывается общая процедура e_watch, запускающая часы.

Рис. 7.16. Формы приложения 2 в режиме выполнения