Нельзя делать сразу весь проект одновременно. Т. е. было бы ошибкой сразу все нарисовать и пытаться все сразу запрограммировать. Когда Наполеон видел, что его армия слишком мала, чтобы сразу одолеть противника, он весь удар сосредотачивал на одной какой-то части вражеской армии и, разбив ее, нападал на следующую.

Последовательность действий определяем исходя из того, какая часть не зависит от других и что делается после чего.

Порядок проектирования будет такой:

Часы (время суток). Дата. День недели. Будильник. Секундомер.

Делаем часы.

Берем элемент управления SHAPE  и рисуем вокруг циферблата часов красивую рамочку. Если вы хотите сделать что-то более выдающееся, то – только после того, как ВСЕ заработает. Иначе можно потонуть в подробностях. Элементу управления SHAPE не даем никакого другого имени, т. к. мы не будем упоминать его в программе. Все свойства SHAPE мы установим в режиме проектирования. Внутрь рамки поместим текстовое поле для того, чтобы компьютер показывал в нем время. Для красоты
    Свойством  BORDERSTYLE убираем бордюрчик. Свойством ALIGNMENT выставляем текст внутри поля по центру. Настраиваем название, размер, стиль и цвет шрифта. Дадим текстовому полю имя Циферблат_часов. Еще раз предупреждаю: не надо сокращенных имен типа циф_час. Сэкономив сейчас копейку, потом проиграете рубль.
Чтобы часы показывали текущее время,  необходим таймер (для секундомера будет свой отдельный). Поместим таймер на форму и дадим ему имя Таймер_часов. Зададим INTERVAL таймера = 100. В этом случае процедура таймера будет выполняться около 10 раз в сек и не пропустит момента смены системного времени (если сделать интервал больше, смена времени будет реже, чем через 1 сек).

Процедура таймера:

НЕ нашли? Не то? Что вы ищете?

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