Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2010, 13:29   #1
HellkilleR
 
Регистрация: 28.03.2010
Сообщений: 7
По умолчанию Таймер обратного отсчёта

Я работаю над созданием теста, уже практически закончил, файл прикреплю (не ругайте , что очень много кода, только учусь). Мне осталось сделать таймер обратного отсчёта, время которого зависит от количества вопросов выбранного теста(например, вопросов в тесте 8, общее время на тест 8*30=240 сек) ,после истечения которого сразу выдаётся результаты теста, даже если не ответил на все вопросы. Пробема в том, что я не совсем понимаю как он делается, я и на этом сайте искал, и гуглил... несколько вариантов нашёл, но не знаю как их присобачить к тесту.
И ещё, нужно сделать так, что бы, когда проходишь тест, нельзя было закрыть окно с вопросами (что бы заного не начать). Как это делается?
Заранее спасибо.
Вложения
Тип файла: zip Тест.zip (29.1 Кб, 53 просмотров)
HellkilleR вне форума Ответить с цитированием
Старый 25.04.2010, 14:20   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

вот пример:
Код:
Dim MyTimer As Integer

Sub StartTimer()
  ShowBackTimer 15
End Sub

Sub ShowBackTimer(tm As Integer)
 MyTimer = tm
 Application.StatusBar = "Осталось    " & Format(MyTimer, "0#") & "    секунд"
 Application.OnTime Now + TimeValue("00:00:01"), "CloseMyMsgBox"
End Sub

Sub CloseMyMsgBox()
 MyTimer = MyTimer - 1
 Application.StatusBar = "Осталось    " & Format(MyTimer, "0#") & "    секунд"
 If MyTimer <= 0 Then
  Application.StatusBar = False
 Else
  Application.OnTime Now + TimeValue("00:00:01"), "CloseMyMsgBox"
 End If
End Sub
Копируйте все это в модуль, стартуйте StartTimer, обратите внимание на строку статуса - там малозаметный обратный отсчет.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 25.04.2010, 14:41   #3
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Раз з уж написал.то до кучи
Код:
Public stopp As Boolean

Sub Game_Over()
stopp = True
MsgBox "Game Over", vbCritical
'Код выполняемый после истечения указаного времени

End Sub

Sub RunTimer(time As Integer)
    If stopp Then NextRun = 0: Exit Sub
    NextRun = Now + TimeSerial(0, 0, time)
    Application.OnTime NextRun, "Game_Over"

End Sub
Код:
Private Sub CommandButton1_Click()
 stopp = False
  RunTimer (4) ' 4 -это время задержки срабатывания таймера
 ' Ваш код

End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 25.04.2010, 17:36   #4
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Поздно увидел тему. Но у меня все уже в файле.
Вложения
Тип файла: rar Тест.rar (31.4 Кб, 86 просмотров)
nilem вне форума Ответить с цитированием
Старый 27.04.2010, 19:05   #5
shepard
 
Регистрация: 27.04.2010
Сообщений: 4
По умолчанию

пытался прикрутить этот таймер, не получается никак. может посмотрит кто, а то уже голову сломал себе. выложенные выше варианты не работают, считают за раз по несколько секунд при неправильном ответе. и не могу сделать, чтобы отведенному время заново присваивалось значение при повторном прохождении.
Вложения
Тип файла: rar Тесты.rar (25.4 Кб, 26 просмотров)
shepard вне форума Ответить с цитированием
Старый 28.04.2010, 20:13   #6
shepard
 
Регистрация: 27.04.2010
Сообщений: 4
По умолчанию

таймер нормально заработал, но только если отвечающий не успевает отвечать на вопросы, тогда при следующем прохождении теста все работает хорошо. но если тест закончен раньше времени, у следующих отвечающих время идет в два, три и т.д. раза быстрее(вычитается по несколько секунд за раз) думаю, из-за того что таймер из модуля вызывается несколько раз. есть ли какая-нибудь команда, с помощью которой можно было бы выключить его в форме?
был бы очень признателен за помощь, нужно сделать к пятнице, боюсь не успеть
Вложения
Тип файла: rar test1.rar (25.9 Кб, 19 просмотров)

Последний раз редактировалось shepard; 28.04.2010 в 20:21.
shepard вне форума Ответить с цитированием
Старый 28.04.2010, 21:35   #7
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

исправленная
Вложения
Тип файла: rar test1_Update.rar (29.0 Кб, 59 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 28.04.2010, 21:48   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Если нормально все написать - то и работать будет. А вычитает быстро для следующего, потому что запущен второй экземпляр таймера и они работают параллельно и не зависимо друг от друга, каждый через свою секунду. Таймер надо выключать.
Смотрите справку по Application.OnTime, там последний пример - как выключить. Чтобы все получилось надо время запоминать, на которое запланирован следующий запуск, его подставлять для EarliestTime, два остальных параметра очевидны.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 28.04.2010, 23:05   #9
shepard
 
Регистрация: 27.04.2010
Сообщений: 4
По умолчанию

doober, не работает, к сожалению, но все равно спасибо
IgorGO, спасибо за совет, буду пытаться.
shepard вне форума Ответить с цитированием
Старый 29.04.2010, 15:08   #10
shepard
 
Регистрация: 27.04.2010
Сообщений: 4
По умолчанию

всем большое спасибо за советы.
все заработало. прикреплю файл на случай, если кому понадобится.
Вложения
Тип файла: rar test2.rar (26.6 Кб, 219 просмотров)
shepard вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер обратного отсчета работает не так как надо.. нужно найти ошибку в коде... Человек_Борща Общие вопросы Delphi 10 13.04.2010 20:06
Таймер обратного отсчета Bilargo Помощь студентам 6 30.09.2009 17:02
Функция обратного вызова и таймер на WinApi flug Win Api 4 17.09.2009 16:06
Содержание прямого или обратного набора Big-kit Общие вопросы Delphi 1 04.06.2009 17:02
Таймер обратного отсчета на С Raptor Помощь студентам 6 08.01.2008 01:11