Таймер_секундомера. Enabled = True
а когда он в паузе или в нуле, таймер должен стоять:
Таймер_секундомера. Enabled = False
Засечем в момент пуска секундомера значение функции Timer оператором
Время_запуска_секундомера = Timer
С учетом засеченного Время_на_паузе_секундомера число секунд, прошедших с начала запуска секудндомера будет равно
Время_на_секундомере = (Timer - Время_запуска_секундомера) +
Время_на_паузе_секундомера
Этот оператор поместим в процедуру таймера.
Теперь займемся внешним видом показаний секундомера. Время_на_ секундомере – это дробное число – количество секунд, например, 67,2. А нам нужен вид 00:01:07.2. Для этого нужно преобразовать число секунд в стандартный формат времени:
Циферблат_секундомера. Text = DateAdd(“s”, Время_на_секундомере, #12:00:00 AM#)
Время #12:00:00 AM# обозначает по-американски полночь.
Но функция DateAdd не учитывает десятые доли секунды. Чтобы выделить их из числа Время_на_секундомере нужно выполнить следующую цепочку операторов:
Целая_часть = Int(Время_на_секундомере)
Дробная_часть = Время_на_секундомере – Целая_часть
Цифра_десятых = Int(10*Дробная_часть)
Сведем эти три оператора в один:
Цифра_десятых = Int(10* (Время_на_секундомере – Int(Время_на_секундомере)))
И дополним оператор вывода времени на циферблат секундомера:
Циферблат_секундомера. Text = DateAdd(“s”, Время_на_секундомере, #12:00:00 AM#) & “.” & Цифра_десятых
Здесь знак & является удобным заменителем знака + для сцепления строк. Этот знак компьютер не спутает со сложением чисел. Знак & без проблем соединяет данные трех разных типов: функцию DateAdd, строку «.», и число Цифра_десятых.
Самые дотошные могут сказать, что можно было обойтись логической переменной Секундомер_считает. Верно, но неправильно. Потому что нужно оставлять простор для дальнейшего развития проекта. Например, мы захотим, чтобы во время паузы цифры на секундомере мигали.
Option Explicit
Private Enum типРежим_работы_секундомера
считает
пауза
в_нуле
End Enum
Dim Режим_работы_секундомера As типРежим_работы_секундомера
Dim Время_на_секундомере As Single
Dim Время_запуска_секундомера As Single
Dim Время_на_паузе_секундомера As Single
Dim Цифра_десятых As Long
Private Sub Form_Load()
Секундомер_обнулить
End Sub
Private Sub Кнопка_обнуления_секундомера_Click()
Секундомер_обнулить
End Sub
Private Sub Кнопка_пуска_паузы_секундомера_Click()
If Режим_работы_секундомера <> считает Then Секундомер_запустить Else Секундомер_остановить
End Sub
Private Sub Таймер_секундомера_Timer()
Время_на_секундомере = Timer - Время_запуска_секундомера + Время_на_паузе_секундомера
Цифра_десятых = Int(10 * (Время_на_секундомере - Int(Время_на_секундомере)))
Циферблат_секундомера. Text = DateAdd("s", Время_на_секундомере, #12:00:00 AM#) & "." & Цифра_десятых
End Sub
Private Sub Секундомер_запустить()
Время_запуска_секундомера = Timer
Режим_работы_секундомера = считает
Таймер_секундомера. Enabled = True
Кнопка_пуска_паузы_секундомера. Caption = "Пауза"
End Sub
Private Sub Секундомер_остановить()
Время_на_паузе_секундомера = Время_на_секундомере
Режим_работы_секундомера = пауза
Таймер_секундомера. Enabled = False
Кнопка_пуска_паузы_секундомера. Caption = "Пуск"
End Sub
Private Sub Секундомер_обнулить()
Время_на_паузе_секундомера = 0
Режим_работы_секундомера = в_нуле
Таймер_секундомера. Enabled = False
Циферблат_секундомера. Text = "0:00:00.0"
End Sub
Недостатки проекта
- В будильнике, если сигнал завершился сам, без нажатия кнопки Выключить_сигнал, в следующий раз он не прозвучит, т. к. файл не закрыт. Это можно исправить с помощью события Плеер_Done, которое возникает при завершении воспроизведения мелодии. А можно, как в «Калькуляторе»
Private Sub Включить_сигнал_будильника()
Плеер. Conmmand= “Open”
Плеер. Conmmand= “Sound”
Плеер. Conmmand= “Close ”
End Sub
Команда Sound отличается от команды Play тем, что задерживает выполнение остальных операторов проекта до тех пор, пока не закончится воспроизведение звук. файла.
- В будильнике можно менять время сигнала, не дождавшись конца мелодии, что может привести к необходимости нового запуска мелодии, пока она еще не отзвучала. Здесь поможет событие Циферблат_будильника_GotFocus, которое нужно поместить в процедуру Включить_сигнал_будильника(). Если вы во время установки времени будильника случайно хоть на мгновение сотрете двоеточие, или напишите вместо цифры букву, или как-нибудь по-другому нарушите правильный формат времени, то проект аварийно завершит работу, потому что оператор
Elseif Будильник_установлен And Время_на_часах = Циферблат_будильника. Text Then Включить_сигнал_будильника
Не сможет понять, чему равно время Циферблат_будильника. Text. здесь поможет функция IsDate, которая определяет, можно ли считать ее аргумент правильным временем или правильной датой, или это белиберда (If IsDate(Циферблат_будильника. Text)…).
- В течение той секунды, когда время на часах и будильнике одинаково, процедура таймера выполняется с десяток раз, а значит, и сигнал будильника запускается с десяток раз. Это нехорошо. В циферблате даты месяц хорошо бы показывать не числом, а текстом. Мы не проверили работу секундомера в полночь.
Таймер и моделирование
Таймер будильника, который, как сердце, несколько раз в секунду посылает импульсы, каждый из которых заставляет выполниться процедуру таймера, которая состоит из операторов, которые в свою очередь управляют работой вспомогательных процедур. За один импульс таймера механизм совершает весь цикл своего функционирования с начала до конца. На следующем импульсе все повторяется. И так беспрерывно.
Этот принцип применения таймера подойдет для компьютерного конструирования работы различных механизмов и аппаратов: холодильника, беспилотного космического аппарата и т. д. нужно только знать принцип их работы и вы сможете создать проект, «вживую» показывающий их деятельность на кухне или в космосе. Это называется моделированием.
Список литературы:
. Учимся программировать: Visual Basic 5. Москва: ДИАЛОГ-МИФИ, 1998г.
. BASIC. Разговор с компьютером. Москва – Смоленск. 1994 г.
. Основы информатики. Ростов-на-Дону. 1996г.
. Информатика. Москва: Академия, 2006г.
. Практикум по информатике. Москва: Академия, 2006г.
. Методика преподавания информатики. Москва: Академия, 2006.
Петербург, 2000г.
. Visual Basic. Москва: ДИАЛОГ-МИФИ, 2004г.
Сайлер, Споттс. Использоание Visual Basic 6. Москва: Издательский дом «Вильямс», 1999г.
. Информатика – это просто! Москва: ЭКОМ, 1999
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 |


