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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2010, 19:17   #1
Sergeo_89
Пользователь
 
Регистрация: 05.12.2008
Сообщений: 38
По умолчанию Таймер

Ребят, подскажите, пожалуйста, как поставить ограничение по времени на тест, равный 20 минутам?
Sergeo_89 вне форума Ответить с цитированием
Старый 20.01.2010, 19:26   #2
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию

Время от начала теста узнаём так:
Код:
var
  MyTimeVar : TDateTime; // Объявить переменную 
   //для хранения времени окончания теста
...
// Прибавить ко времени начала теста 20 минут
MyTimeVar := IncMinute(Now, 20); 
...
Теперь запускаем специально для этого созданный таймер, по которому переодически (раз в одну-две секунды) проверяем условие:
Код:
if Now() > MyTimeVar then begin //Текущее время больше заданного
// Здесь выполняем код остановки теста
end;
Greek9000 вне форума Ответить с цитированием
Старый 20.01.2010, 19:28   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Считаем количество секунд в 20-ти минутах, умножаем на тысячу и полученную величину подставляем в свойство таймера Interval.
Запускаем таймер в нужный момент.
А в его событии пусть он покажет сообщение вроде "Вы не уложились в 20 минут. Приходите завтра"
mihali4 вне форума Ответить с цитированием
Старый 20.01.2010, 19:31   #4
Sergeo_89
Пользователь
 
Регистрация: 05.12.2008
Сообщений: 38
По умолчанию

Ого Пасиба Большое, сейчас попробуем

19:47

Greek9000, То есть Код Будильника должен выглядеть Так?)

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var MyTimeVar: TDateTime;
begin
MyTimeVar := IncMinute(Now, 20);
if Now() > MyTimeVar then begin
form1.Close;
У нас принято пользоваться кнопочкой "Правка", дабы не плодить посты подряд, друг за другом.
Читаем правила. Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
Модератор


20:41

оОо Все, дошло, спасибо=)

А как вывести будильник на Экран?) и вообще это возможно?)

Последний раз редактировалось mihali4; 20.01.2010 в 20:45.
Sergeo_89 вне форума Ответить с цитированием
Старый 22.01.2010, 06:09   #5
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию

Что бы вывести оставшееся время на экран в том же таймере пишем:
Код:
Label1.Caption := FormatDateTime('nn:ss', MyTimeVar - Now());
Функция FormatDateTime преобразует TDateTime в строку.
Первый параметр - формат даты. Полностью дату можно отобразить так:
FormatDateTime('yyyy-mm-dd hh:nn:ss.zzz', Now);
То есть год-месяц-день час:мин:сек.мс
Greek9000 вне форума Ответить с цитированием
Старый 23.01.2010, 18:23   #6
Sergeo_89
Пользователь
 
Регистрация: 05.12.2008
Сообщений: 38
По умолчанию

Greek9000 на этот код ругается Что не так?


Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  MyTimeVar : TDateTime;
begin
MyTimeVar:=Incminute(Now, 30);
if Now() > MyTimeVar then begin
Label1.Caption := FormatDateTime('nn:ss', MyTimeVar - Now());
end;
Sergeo_89 вне форума Ответить с цитированием
Старый 23.01.2010, 19:35   #7
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию

Цитата:
Сообщение от Sergeo_89 Посмотреть сообщение
...
оОо Все, дошло, спасибо=)

А как вывести будильник на Экран?) и вообще это возможно?)
Я это прочитал и решил, что Вы разобрались, что к чему.
Но раз вопрос возник - поясню:
Переменную MyTimeVar надо объявить в секции private Вашей формы, что бы её было видно не только внутри обработчика OnTimer.
Предположим, что тест начинается по нажатию кнопки Button1, тогда в её обработчике должен присутствовать код

Код:
MyTimeVar := Now;
Ну и в обработчике таймера пишем код проверки на завершение теста.
А компилятор ругается, потому что не хватает закрывающего end; для условия if Now() ...
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  MyTimeVar : TDateTime;// Для правильной работы эту переменную надо объявить в private-секции
begin
   // Если каждый раз по таймеру это делать - рискуете никогда не дождаться окончания теста
   // Это присвоение делается перед началом теста
   MyTimeVar:=Incminute(Now, 30);
   //- - - - - - - - -- - - - - - - - - - -

   // Отобразить оставшееся время
   Label1.Caption := FormatDateTime('nn:ss', MyTimeVar - Now());

   if Now() > MyTimeVar then begin
     // А вот тут выполняем код завершения теста
   end;// Этого оператора не хватало
end;

Последний раз редактировалось Greek9000; 23.01.2010 в 19:46.
Greek9000 вне форума Ответить с цитированием
Старый 24.01.2010, 01:04   #8
Sergeo_89
Пользователь
 
Регистрация: 05.12.2008
Сообщений: 38
По умолчанию

Код:
MyTimeVar:=Incminute (Now, 30);
Вот здесь все равно ругается, говорит, что переменная не задана, попробовал
Код:
var
Incminute: integer;
  MyTimeVar : TDateTime;
не помогло

а пробую так
Код:

Код:
MyTimeVar:=Incminute(Now, 30);
Зпускает таймер, но работает он бесконечно в обратном отсчете от часа к нулю и по новой.

01:10

а пробую так
Код:
MyTimeVar:=Incminute(Now, 30);
Зпускает таймер, но работает он бесконечно в обратном отсчете от часа к нулю и по новой.

У нас принято пользоваться кнопочкой "Правка", дабы не плодить посты подряд, друг за другом.
Читаем правила. Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
Модератор

Последний раз редактировалось mihali4; 24.01.2010 в 01:36.
Sergeo_89 вне форума Ответить с цитированием
Старый 24.01.2010, 01:40   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
procedure TForm1.Timer1Timer(Sender: TObject);
var
MyTimeVar : TDateTime;// Для правильной работы эту переменную надо объявить в private-секции
Зачем ???
Просто как глобальную, вот и все. Зачем усложнять то, что не стоит выеденного яйца ?
И зачем ее вторично объявлять как локальную ???
Сегодня что - вспышка на солнце ? И так пагубно влияет на мозги ?
mihali4 вне форума Ответить с цитированием
Старый 24.01.2010, 14:33   #10
Sergeo_89
Пользователь
 
Регистрация: 05.12.2008
Сообщений: 38
По умолчанию

С Этим то все в порядке, он это
Код:
MyTimeVar:=Incminute(Now, 30);
не понимает!
Sergeo_89 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер graff Общие вопросы C/C++ 11 04.07.2009 01:36
Таймер Михаил Юрьевич Общие вопросы Delphi 1 16.07.2008 08:46
Таймер в С# kommunist Общие вопросы .NET 3 02.06.2008 12:11
ТАЙМЕР ratibor32 Общие вопросы C/C++ 1 26.12.2007 19:02
таймер darkcoder Общие вопросы Delphi 5 06.12.2007 06:14