Выбрать главу

End Enum

Dim Режим_работы_секундомера As типРежим_работы_секундомера

Dim Время_на_часах As Date

Dim Будильник_установлен As Boolean

Dim Время_на_секундомере As Single

Dim Время_запуска_секундомера As Single

Dim Время_на_паузе_секундомера As Single

Dim Цифра_десятых As Long

'НАЧАЛЬНАЯ УСТАНОВКА МЕХАНИЗМА

Private Sub Form_Load()

Плеер. DeviceType = "Sequencer"

Плеер. FileName = "c: \Windows\Media\Canyon.mid"

Смена_даты_и_дня_недели

Выключить_будильник

Секундомер_обнулить

End Sub

'ПРОЦЕДУРЫ РАБОТЫ ЧАСОВ

Private Sub Таймер_часов_Timer()

Время_на_часах = Time

Циферблат_часов.Text = Время_на_часах

If Время_на_часах = 0 Then Смена_даты_и_дня_недели

If Будильник_установлен And Время_на_часах = Циферблат_будильника.Text Then Вкточить_сигнал_будильника

End Sub

Private Sub Смена_даты_и_дня_недели()

Циферблат_даты.Text = Date

Циферблат_дня_недели.Text = WeekdayName(DatePart("w", Date, vbMonday))

End Sub

'ПРОЦЕДУРЫ РАБОТЫ БУДИЛЬНИКА

Private Sub Кнопка_включения_выключения_будильника_Click()

If Будильник_установлен Then Выключить_будильник Else Включить_будильник

End Sub

Private Sub Включить_будильник()

Будильник_установлен = True

Метка_будильника. Caption = "Будильник установлен на:"

Кнопка_включения_выключения_будильника. Caption = "Выключить будильник"

End Sub

Private Sub Выключить_будильник()

Будильник_установлен = False

Метка_будильника. Caption = "Будильник отключен"

Кнопка включения выключения будильника. Caption = "Включить будильник"

End Sub

Private Sub Включить_сигнал_будильника()

Плеер. Command = "Open"

Плеер. Command = "Play"

End Sub

Private Sub Кнопка_выключения_сигнала_Сlick()

Плеер. Command = "Close"

End Sub

Private Sub Form_Terminate()

Кнопка_выключения_сигнала_Сlick

End Sub

'ПРОЦЕДУРЫ РАБОТЫ СЕКУНДОМЕРА

Private Sub Таймер_секундомера_Timer()

Время_на_секундомере = Timer — Время_запуска_секундомера + Время_на_паузе_секундомера

Цифра_десятых = Int(10 * (Время_на_секундомере Int(Время_на_секундомере)))

Циферблат_секундомера.Text = DateAdd("s", Время_на_секундомере, #12:00:00

AM#) & & Цифра_десятых

End Sub

Private Sub Кнопка_пуска_паузы_секундомера_С1ick()

If Режим_работы_секундомера О считает Then Секундомер_запустить Else Ceкундомер_остановить

End Sub

Private Sub Кнопка_обнуления_секундомера_Сlick()

Секундомер_обнулить

End Sub

Private Sub Секундомер_запустить()

Время_запуска_секундомера = Timer

Режим_работы_секундомера = считает

Таймер_секундомера. Enabled = True

Кнопка_пуска_паузы_секундомера. Caption = "ПАУЗА"

End Sub

Private Sub Секундомер_остановить()

Время_на_паузе_секундомера = Время_на_секундомере

Режим_работы_секундомера = пауза

Таймер_секундомера. Enabled = False

Кнопка_пуска_паузы_секундомера. Caption = "ПУСК"

End Sub

Private Sub Секундомер_обнулить()

Время_на_паузе_секундомера = 0

Режим_работы_секундомера = в_нуле

Таймер секундомера. Enabled = False

Кнопка_пуска_паузы_секундомера. Caption = "ПУСК"

Циферблат_секундомера.Text = "0:00:00.0"

End Sub

Обратите внимание, что при запуске проекта я в процедуре Form_Load выключаю для удобства будильник, а в процедуре Form_Terminate закрывается звуковой файл, если пользователь не удосужился закрыть его кнопкой. В ней мы обращаемся к процедуре обработки события Кнопка_выключения_сигнала_Click, как к процедуре пользователя. Это вполне допустимо.

Напоминаю, что событие Form_Terminate наступает только тогда, когда мы завершаем работу проекта, щелкнув по кнопке Close (крестику в правом верхнем углу формы), а не кнопкой End на панели инструментов.

Знакомимся с перечислимым типом данных

Чтобы грамотно запрограммировать секундомер, нам нужно познакомиться с новым типом переменных величин. Необходимость в нем в нашем проекте вытекает вот откуда. Если будильник в каждый момент времени может находиться в одном из двух состояний (установлен или не установлен), то секундомер — в трех: считает, стоит в паузе, стоит в нуле. Придумаем переменную и дадим ей имя Режим_работы_секундомера. Объявить ее типом Boolean явно недостаточно, ведь в типе Boolean всего два возможных значения, а нам нужно три. Можно придать ей тип String, но хорошая практика программирования диктует другое.

В Visual Basic нет типа данных, в котором переменная имела бы ровно три значения, зато Visual Basic, как и многие языки, позволяет программисту создавать собственные типы. Наша задача — создать тип, в котором переменная принимает ровно три значения: считает, пауза, в нуле — а затем объявить этим типом переменную Режим_работы_секундомера.