Таймер_секундомера. 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