21 / 21 / 4
Регистрация: 10.11.2015
Сообщений: 123
1

Таймер на форме. Запуск по нажатию кнопки

28.01.2016, 17:23. Показов 3576. Ответов 8
Метки нет (Все метки)

Добрый вечер форумчане, подскажите или поделитесь ссылкой на готовый вариант.

Хочу сделать на форме поле-таймер. Запускаемый по кнопке.
Идея-форма для прохождения теста. Человек заходит на форму, читает правила, нажимает кнопку-запускается тест. И только тогда появляется таймер.

Реализовал следующим образом.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Option Compare Database
Option Explicit
 
Private Начало, Интервал As Date
 
Private Sub Form_Timer()
   Me.Таймер = Интервал - (Now() - Начало)
End Sub
 
Private Sub Старт_Click()
Интервал = Me.Поле3.Value
Начало = Now()
Me.Таймер = Интервал - (Now() - Начало)
End Sub
Но мне не очень нравится, подскажите как реализовать следующее:
1 Поле в котором задается время отсчета, моно было бы просто ввести 30 и он понял, что это 30 мин. А не вводить в формате 0:30:00
2 Пока кнопка не была нажата, в поле таймер. Не выводилось бы вообще ничего. А то он начинает считать по загрузке формы от системного времени (можно конечно, скрыть это поля до нажатия кнопки, но может есть более красивый вариант решения)

Спасибо за любую помощь
Вложения
Тип файла: 7z Timer.7z (13.9 Кб, 23 просмотров)
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.01.2016, 17:23
Ответы с готовыми решениями:

Запуск Exel файла из вложения в базе по нажатию кнопки в форме
Добрый день! Подскажите, возможно ли реализовать запуск exel файла, который будет хранится в...

Запуск таймера на второй форме по нажатию кнопки на первой
Добрый день, столкнулся с проблемой, имеются 2 формы, нужно что бы таймер запускался во второй...

Нарисовать домик по нажатию кнопки, и звезду по нажатию на форме
Нарисовать домик по нажатию кнопки и звезду по нажатию на форме

Таймер по нажатию кнопки
Такой вопрос! Как сделать так чтобы нажав на кнопку начался таймер то есть обратный отчет времени...

8
Эксперт MS Access
26772 / 14451 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
28.01.2016, 17:31 2
Только сегодня сделал примерчик для кухонных нужд
По умолчанию там 20 минут, но введите 0.1 и понаблюдайте как через 6 секунд форма возбудится. Десятичный разделитель ставить конечно Ваш. У меня точка. У Вас может быть запятая.
Вложения
Тип файла: rar Будильник.rar (13.3 Кб, 84 просмотров)
2
895 / 285 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
28.01.2016, 17:32 3
Цитата Сообщение от mobile Посмотреть сообщение
как через 6 секунд форма возбудится
Ого))) Такое реально интересно было бы понаблюдать))) Вы сегодня прямо в ударе, то стихи про армию, то возбуждающиеся формы)) Браво))
1
21 / 21 / 4
Регистрация: 10.11.2015
Сообщений: 123
29.01.2016, 08:48  [ТС] 4
Цитата Сообщение от mobile Посмотреть сообщение
По умолчанию там 20 минут, но введите 0.1 и понаблюдайте как через 6 секунд форма возбудится.
Блин, запустил Ваш пример посмотреть на работе с утра. Поставил 1 минуту. Вообщем коллеги и начальство не оценило пищащий на весь офис и мигающий красным мой ноут

Добавлено через 1 минуту
Надо было бы еще блокировку формы по истечению таймера поставить, что бы быстро не отключить
0
95 / 91 / 16
Регистрация: 13.04.2015
Сообщений: 545
29.01.2016, 11:31 5
Samual_J_Colt, могу предложить такой вариант по кнопке
Вложения
Тип файла: rar Таймер.rar (27.3 Кб, 62 просмотров)
0
21 / 21 / 4
Регистрация: 10.11.2015
Сообщений: 123
29.01.2016, 13:52  [ТС] 6
Попытался реализовать несколько вариантов отображения таймера.
Особенно было интересно реализовать с помощью текста на форме.

Посмотрите и поделитесь мнением, по поводу такой реализации.
В частности еще интересно, почему в аксесе
Visual Basic
1
OutStr = CStr(Интервал)
и
Visual Basic
1
OutStr = CStr( Now())
отображает нормально для .caption, но отказывается
Visual Basic
1
OutStr = CStr(Интервал - Now())
При этом прекрасно справляется с подобным для поля
Visual Basic
1
Me.Таймер = Интервал - Now()
В чем его проблема?
А функция datediff мне не нравится так, как возвращает результат в интервалах.
Вложения
Тип файла: 7z Timer.7z (15.1 Кб, 13 просмотров)
0
Эксперт MS Access
26772 / 14451 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
29.01.2016, 14:07 7
Надо пользоваться форматом
Visual Basic
1
2
3
   Me.Надпись8.Caption = Format(OutStr, "hh:nn:ss")
   Me.Надпись5.Caption = Format(Outstr3, "hh:nn:ss")
   Me.Надпись6.Caption = Format(OutStr1 & ":" & Outstr2, "hh:nn:ss")
Вложения
Тип файла: rar Timer11.rar (16.9 Кб, 54 просмотров)
0
21 / 21 / 4
Регистрация: 10.11.2015
Сообщений: 123
29.01.2016, 14:30  [ТС] 8
Цитата Сообщение от Aleks777 Посмотреть сообщение
Samual_J_Colt, могу предложить такой вариант по кнопке
Вложения
Тип файла: rar Таймер.rar (27.3 Кб, 1 просмотров)
Спасибо идея интересная.
Так же мне хотелось бы отображение таймера в виде 00:00 (минуты секунды, можно добавочно часы) В вашем коде это можно сделать изменив
Visual Basic
1
Me.Поле2 = Fix(bytCounter / 60) & ":" & (bytCounter - Fix(bytCounter / 60) * 60)
,но в варианте переменной byte ограничения 255сек. Мне желателен интервал от 5 минут и до часа. Делается, как таймер для сдачи теста. (в зависимости от сложности и кол-во вопросов) его длительность будет от 5 минут до часу, думаю.

Как вариант можно ввести вторую переменную для минут. Уменьшать ее на 1, на 60 шаге секундного счетчика.
А сообщение выводить при достижении обоих переменных 0.

Спасибо за идею, буду выбирать из всех вариантов наиболее удобный.

Добавлено через 14 минут
Цитата Сообщение от mobile Посмотреть сообщение
Надо пользоваться форматом
Спасибо. Думал об этом.
Но могли бы объяснить почему, аксесс может преобразовать в текст значения Now() а разницу нет? Ведь он показывает некое значение разницы,(как я понимаю в формате числа двойной точности с плавающей запятой), почему же он не может его преобразовать? Связанно ли это с ограничением даты (Дата может принимать значения от -657 434 (1 января 100 г. н.э.) до 2 958 465 (31 декабря 9999 г. н.э.).), тогда какое же значение он пытается вывести?

Добавлено через 1 минуту
Mobile, надеюсь не сильно Вас загрузил. Просто с детства был любопытен и пытался все понять, а не принять на веру ))
0
Эксперт MS Access
26772 / 14451 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
29.01.2016, 15:07 9
Дело в типизации. Строка или вариант не могут знать, что заданная им разность двух даблов это время. Они выпечатывают то, что им дано. А даны им числа с плавающей запятой, а не даты. Типизируйте переменные и будете получать ответ в сразу в соответствующем формате без дополнительных преобразований.

Но здесь надо сразу отметить, что типизированные переменные не воспринимают NULL, нулл принимает только тип Variant. Поэтому если входные данные могут содержать нуллы, то приходится работать только с вариантами.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2016, 15:07
Помогаю со студенческими работами здесь

Как остановить таймер по нажатию кнопки?
Сделал эффект вращение детали на нажатие Button5. Как сделать чтобы при повторном нажатии Button5...

Включить таймер, выполняющий необходимые действия, по нажатию кнопки
как сделать так что бы включался таймер по нажатию кнопки и выполнял необходимые действия???...

Запуск другой программы по нажатию кнопки
Добрый вечер! Допустим, что у меня есть программа "Programma" и мой проект "Form". Каким...

Запуск таймера по нажатию кнопки в GUI
Доброго времени уважаемое сообщество! Прошу помочь с таймером, который должен запускаться по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru