Нельзя делать сразу весь проект одновременно. Т. е. было бы ошибкой сразу все нарисовать и пытаться все сразу запрограммировать. Когда Наполеон видел, что его армия слишком мала, чтобы сразу одолеть противника, он весь удар сосредотачивал на одной какой-то части вражеской армии и, разбив ее, нападал на следующую.
Последовательность действий определяем исходя из того, какая часть не зависит от других и что делается после чего.
Порядок проектирования будет такой:
Часы (время суток). Дата. День недели. Будильник. Секундомер.Делаем часы.
Берем элемент управления SHAPE и рисуем вокруг циферблата часов красивую рамочку. Если вы хотите сделать что-то более выдающееся, то – только после того, как ВСЕ заработает. Иначе можно потонуть в подробностях. Элементу управления SHAPE не даем никакого другого имени, т. к. мы не будем упоминать его в программе. Все свойства SHAPE мы установим в режиме проектирования. Внутрь рамки поместим текстовое поле для того, чтобы компьютер показывал в нем время. Для красоты- Свойством BORDERSTYLE убираем бордюрчик. Свойством ALIGNMENT выставляем текст внутри поля по центру. Настраиваем название, размер, стиль и цвет шрифта. Дадим текстовому полю имя Циферблат_часов. Еще раз предупреждаю: не надо сокращенных имен типа циф_час. Сэкономив сейчас копейку, потом проиграете рубль.
Процедура таймера:
Private Sub Таймер_часов_Timer()
Циферблат_часов. Text=Time
End Sub
Часы готовы.
Занимаемся датой
Размещаем на форме рамочку и текстовое поле для даты (имя Циферблат_даты). Чтобы в тектовом поле появилась дата, достаточно в процедуре таймера часов написать оператор
Циферблат_даты. text=date
Но в этом случае при работе нашего проекта двадцать четыре часа в сутки по 10 раз в секунду компьютер будет спрашивать у Windows, какое сегодня число и выводить это число в текстовом поле, хотя делать это надо только два раза – при запуске проекта и в полночь. Вспоминаем: при запуске проекта вырабатывается событие Form_load, а полночь – это когда показания часов равны нулю.
Показания часов должны быть переменной величиной, т. к. в Будильнике мы будем анализировать эти показания. Поэтому введем переменную типа Date Время_на_часах.
Как при запуске проекта, так и в полночь мы будем менять не только дату, но и день недели. Поэтому организуем процедуру с именем Смена_даты_и_дня_недели, в которой пока будет один оператор
Циферблат_даты. text=date
Переписываем программу:
Option explicid
Dim Время_на_часах as date
Private Sub Form_Load()
Смена_даты_и_дня_недели
End sub
Private Sub Таймер_часов_Timer()
Время_на_часах= Time
Циферблат_часов. Text= Время_на_часах
If Время_на_часах =0 then Смена_даты_и_дня_недели
End Sub
Private Sub Смена_даты_и_дня_недели()
Циферблат_даты. text=date
End Sub
Занимаемся днем недели
Рамку и текстовое поле для циферблата дня недели можно скопировать. При копировании VB про каждый объект задаст вопрос, на который отвечаем NO.
Текстовому полю дадим имя Циферблат_дня_недели. Добавим в процедуру Смена_даты_и_дня_недели выделенный оператор
Private Sub Смена_даты_и_дня_недели()
Циферблат_даты. text=date
Циферблат_дня_недели. text=WeekdayName(DatePart(“w”, Date, vbMonday))
End Sub
!!! Для защиты текстовых полей от несанкционированного доступа (в режиме работы проекта каждый может написать что угодно) установим свойство всех текстовых полей LOCKED.
Тип данных BOOLEAN
Это тип логических переменных. Логические переменные могут принимать всего два значения: True и False (истина и ложь). Объявление таких переменных:
Dim c as boolean
Делаем будильник
Поместим на форму все объекты, необходимые для будильника.
Дадим имена:
- Метка_будильника; Циферблат_будильника; Кнопка_включения_выключения_будильника; Кнопка_выключения_сигнала.
В циферблат в режиме проектирования занесем текст 12:00:00 (чтобы было).
Поместим на форму Microsoft Multimedia Control 6.0 и дадим ему имя Плеер.
Процедуры, которые изменятся:
Private Sub Form_Load()
Плеер. DeviceType=”Sequencer”
Плеер. FileName=”c:\Windows\Media\Canyon. mid”
Смена_даты_и_дня_недели
End Sub
Private Sub Таймер_часов_Timer()
Время_на_часах=Time
Циферблат_часов. text=Время_на_часах
If Время_на_часах=0 Then
Смена_даты_и_дня_недели
Elseif Время_на_часах=Циферблат_будильника. Text Then
Включить_сигнал_будильника
End if
End Sub
Private Sub Включить_сигнал_будильника()
Плеер. Conmmand= “Open”
Плеер. Conmmand= “Play”
End Sub
Здесь полужирным шрифтом выделены новые по сравнению с предыдущим вариантом строки проекта.
Запустите проект и установите время на циферблате будильника. Устанавливайте аккуратно, по одной цифре за раз. Не трогайте двоеточия. Почему – узнаете дальше. Дождитесь, пока будильник зазвонит. Завершите работу проекта, не дожидаясь конца мелодии.
В любой момент работы проекта компьютер должен знать, установлен будильник или нет, чтобы принимать решение, звонить ему или нет. Для этого введем переменную величину Будильник_установлен типа Boolean.
Теперь попробуем вообразить, что должно происходить при включении будильника:
- Сообщение компьютеру, что будильник установлен. Установка текста над циферблатом: «Будильник установлен на:». Установка текста на кнопке: «Выключить будильник».
В соответствии с этим пишем процедуру:
Private Sub Включить_будильник()
Будильник_установлен=True
Метка_будильника. Caption= “Будильник установлен на:»
Кнопка_включения_выключения_будильника. Caption= «Выключить будильник»
End Sub
Теперь попробуем вообразить, что должно происходить при выключении будильника:
- Сообщение компьютеру, что будильник не установлен. Установка текста над циферблатом: «Будильник отключен». Установка текста на кнопке: «Включить будильник»
В соответствии с этим пишем процедуру:
В начале программы не забудем описать
Dim Будильник_установлен as Boolean
Private Sub Выключить_будильник()
Будильник_установлен=False
Метка_будильника. Caption=”Будильник отключен»
Кнопка_включения_выключения_будильника. Caption= «Включить будильник»
End Sub
Теперь напишем процедуру щелчка по кнопке включения-выключения будильника:
Private Sub Кнопка_ включения_выключения будильника_Click()
If Будильник_установлен Then Выключить_будильник Else Включить_будильник
End sub
Процедура щелчка по кнопке выключения сигнала:
Private Sub Кнопка_выключения_сигнала_Click()
Плеер. Command= “Close”
End sub
Позаботимся о том, чтобы будильник звенел только тогда, когда включен. Для этого в процедуре Таймер_часов исправим строку с Elseif:
Elseif Будильник_установлен And Время_на_часах=Циферблат_будильника. Text Then
Включить_сигнал_будильника
Для удобства в процедуре загрузки формы выключим будильник, а в процедуре Form_Terminate закроем звуковой файл, если пользователь не удосужился закрыть его кнопкой. В ней мы обращаемся к процедуре обработки события Кнопка_выключения_сигнала_Click как к процедуре пользователя. Это вполне допустимо.
Напоминаю, что событие Form_Terminate наступает только тогда, когда мы завешаем работу проекта щелчком по кнопке «Закрыть» в правом углу формы, а не кнопкой End на панели инструментов.
Новый тип данных – перечислимый.
Если будильник в каждый момент времени может находиться в одном из двух состояний (установлен или не установлен), то секундомер – в трех: считает, стоит в паузе, стоит в нуле. Придумаем переменную, дадим ей имя Режим_работы_секундомера, создадим для этой переменной собственный тип, в котором эта переменная будет принимать три значения.
Напишем:
Private Enum типРежим_работы_секундомера
считает
пауза
в_нуле
End Enum
Эта запись будет в самом начале программы – перед определением переменных.
Это не процедура. Это определение типа. Слово Enum означает, что тип перечислимый. Это означает, что мы должны придумать и перечислить в этой конструкции имена всех возможных значений переменной этого типа, что мы и сделали. Т. к. каждый тип должен иметь свое имя (Integer, String,…), мы придумали имя для нового типа (типРежим_работы_секундомера) и указали его в заголовке.
Теперь, когда новый тип определен, можно любую переменную объявить этим типом:
Dim Режим_работы_секундомера as типРежим_работы_секундомера
Эта запись будет после создания переменной Режим_работы_секундомера (в самом начале).
! ! ! новички с трудом воспринимают смысл строк со стоящими рядом похожими именами. Профессиональные программисты специально обозначают близкие вещи похожими именами, им так больше нравится. Для того, чтобы отличить, например, кнопку от переменной с тем же именем, профессионалы начинают имена с префикса, которое говорит программисту, но не компьютеру, о том, кому принадлежит имя (кнопке префикс cmd, строковой переменной префикс str…). Со временем вы тоже поймете неизбежность такого подхода, а пока просто постараемся не путать близкие имена.
Делаем секундомер.
Поместим на форму рамку для секундомера, элементы управления и дадим им имена:
- Таймер_секундомера; Циферблат_секуномера; Кнопка_пкска_паузы_секундомера; Кнопка_обнуления_секундомера; Метка с надписью секундомер.
Будем использовать следующие переменные:
Dim Режим_работы_секундомера as типРежим_работы_секундомера
Dim Время_на_секундомере as Single
Dim Время_запуска_секундомера as Single
Dim Время_на_паузе_секундомера as Single
Dim Цифра_десятых as Long
Собственный таймер нужен секундомеру для того, чтобы не зависеть от часов. Поскольку нужно отслеживать десятые доли секунды, установим интервал 5 или 10- не играет роли. Когда секундомер работает, его таймер должен работать:
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 |


