Онлайн
библиотека книг
Книги онлайн » Разная литература » Интернет-журнал "Домашняя лаборатория", 2008 №7 - Журнал «Домашняя лаборатория»

Шрифт:

-
+

Закладка:

Сделать
1 ... 172 173 174 175 176 177 178 179 180 ... 192
Перейти на страницу:
class="p1">Private Sub Таймер_часов_Timer()

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

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

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

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

End Sub

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

Плеер. Command = "Open"

Плеер. Command = "Play"

End Sub

Запустите проект и установите время на циферблате будильника. Устанавливайте аккуратно, по одной цифре за раз. Не трогайте двоеточия. Почему — скажу чуть позже. Дождитесь, когда будильник зазвонит. Завершите работу проекта, не дожидаясь конца мелодии.

Пора заняться кнопками и меткой. Подумаем вот о чем. Во время работы проекта будильник в каждый момент времени может находиться в одном из двух состояний: установлен или не установлен. Компьютер должен в любой момент времени знать, в каком именно, чтобы принять решение — звонить или не звонить. В таких случаях, когда компьютер должен в любой момент что-то знать или помнить, программист всегда придумывает переменную величину, дает ей подходящее имя и тип и организует хранение в этой переменной нужной компьютеру информации. Так было у нас с переменной Время_на_часах, которая нужна была компьютеру для перестановки дат.

Придумаем переменную и дадим ей имя Будильник_установлен. Каким типом ее объявить? Для этого надо понять, а какие значения будет принимать эта переменная? По смыслу задачи значений два — "да" и "нет". Можно придать ей тип String, но хорошая практика программирования диктует тип Boolean. Вы скоро поймете, что он удобнее.

Теперь попробуем вообразить, что должно происходить при включении будильника. Нужно сообщить компьютеру, что будильник установлен.

Нужно, чтобы текст над циферблатом был такой: "Будильник установлен на: " Нужно, чтобы текст на кнопке был такой: "Выключить будильник".

В соответствии с этим пишем процедуру:

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

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

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

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

End Sub

Теперь попробуем вообразить, что должно происходить при выключении будильника:

Нужно сообщить компьютеру, что будильник не установлен

Нужно, чтобы текст над циферблатом был такой: "Будильник отключен"

Нужно, чтобы текст на кнопке был такой: "Включить будильник"

В соответствии с этим пишем процедуру:

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

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

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

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

End Sub

Теперь нам удивительно легко написать процедуру щелчка по кнопке включения-выключения будильника:

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

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

End Sub

Обратите внимание, что благодаря удачному выбору имен и структуры программы язык программы по своей понятности приближается к естественному, человеческо-

Поскольку переменная Будильник_установлен имеет логическое значение True или False, ее можно использовать подобно функции IsNumeric в качестве условия оператора If. Поэтому совсем необязательно было писать If Будильник_установлен = True Then…

Процедуру щелчка по кнопке выключения сигнала приведу без пояснений:

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

Плеер. Command = "Close"

End Sub

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

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

Будильник готов. Приведу полностью программу всего нашего проекта. Пока не обращайте внимания на строки, касающиеся секундомера.

Option Explicit

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

считает

пауза

в_нуле

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: WindowsMediaCanyon.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 на панели инструментов.

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

Чтобы грамотно

1 ... 172 173 174 175 176 177 178 179 180 ... 192
Перейти на страницу: