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, как и многие языки, позволяет программисту создавать собственные типы. Наша задача — создать тип, в котором переменная принимает ровно три значения: считает, пауза, в нуле — а затем объявить этим типом переменную Режим_работы_секундомера.