Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.08.2012, 09:22
bmed bmed вне форума
Прохожий
 
Регистрация: 28.06.2012
Сообщения: 7
Репутация: 10
По умолчанию Таймер с обратным отсчетом - проблема в работе!

Господа программисты, помогите, плиз!
Ситуация такая: пишу программу для спортивных соревнований, соответственно, есть табло, на котором идет обратный отсчет времени (начальное значение таймера задается пользователем - 05:00, 04:00, 03:00, 02:00). Для таймера написала процедуру:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var H, M, S: Integer;
begin
   if i>0 then i:=i-1;
   H := I div 360; // часы
   M := (I - H) div 60; // минуты
   S := (I - H*360 - M*60); // секунды
   if s<10 then Label1.Caption:=IntToStr(M)+' : 0'+IntToStr(S)
   else Label1.Caption:=IntToStr(M)+' : '+IntToStr(S);
    if i=0 then
    begin
      Timer1.Enabled:=false;
      sndPlaySound('timer.wav', SND_ASYNC);
    end;
end;
таймер запускается-останавливается щелчком по Label1:
Код:
procedure TForm1.Label1Click(Sender: TObject);
begin
     if timer1.Enabled=false then
      begin
       timer1.Enabled:=true;
       Label1.Font.Color:=clGreen;
      end
       else
      begin
       timer1.Enabled:=false;
       Label1.Font.Color:=clRed;
      end;
end;
Админ: Пользуемся тегами для оформления кода!

после того, как таймер остановился, передаем его значение в программу.

И вот проблема в следующем:
если таймер остановлен, например, на значении 04:36, то программа работает корректно. При значении от 03:50 до 03:59 программа вылетает по ошибке. от 03:49 и меньше - опять все хорошо. Есть еще несколько интервалов, на которых выдается системная ошибка. При других значениях таймера при прочих равных условиях (тестирую на одних и тех же данных) программа работает корректно.

Может быть, кто-нибудь с подобным сталкивался - где искать ошибку? у меня уже мозги дыбом стоят, если честно

Последний раз редактировалось Admin, 09.08.2012 в 21:32.
Ответить с цитированием
  #2  
Старый 09.08.2012, 09:41
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Используй тип TTime. И просто вычитай его.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 09.08.2012 в 10:05.
Ответить с цитированием
  #3  
Старый 09.08.2012, 09:43
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от bmed
И вот проблема в следующем:
если таймер остановлен, например, на значении 04:36, то программа работает корректно. При значении от 03:50 до 03:59 программа вылетает по ошибке. от 03:49 и меньше - опять все хорошо. Есть еще несколько интервалов, на которых выдается системная ошибка. При других значениях таймера при прочих равных условиях (тестирую на одних и тех же данных) программа работает корректно.

Может быть, кто-нибудь с подобным сталкивался - где искать ошибку? у меня уже мозги дыбом стоят, если честно
У меня при этих значениях никаких ошибок не вылетает - значит ошибка в другом месте.
А какая хоть ошибка то?
Ответить с цитированием
  #4  
Старый 09.08.2012, 12:38
bmed bmed вне форума
Прохожий
 
Регистрация: 28.06.2012
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
А какая хоть ошибка то?
обращение к ячейке памяти адрес такой-то read only
Ответить с цитированием
  #5  
Старый 09.08.2012, 12:39
bmed bmed вне форума
Прохожий
 
Регистрация: 28.06.2012
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Используй тип TTime. И просто вычитай его.

ой, а можно подробнее - где TTime использовать?
Ответить с цитированием
  #6  
Старый 09.08.2012, 12:43
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

ну устанавливаешь ему время 00:01:55 ну и вычитаешь.
описание типа и как с ним работать - см. справку дельфи.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #7  
Старый 09.08.2012, 13:27
bmed bmed вне форума
Прохожий
 
Регистрация: 28.06.2012
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
ну устанавливаешь ему время 00:01:55 ну и вычитаешь.
описание типа и как с ним работать - см. справку дельфи.

ага, спасибо! попробую
Ответить с цитированием
  #8  
Старый 09.08.2012, 13:42
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Вывод в лайбу TimeToStr()
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #9  
Старый 09.08.2012, 14:19
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Радость

// declare
FTime: TTime;
// initialization 1 min 5 sec
FTime:=StrToTime('00:01:05');
// decrement 1 sec
FTime:=IncSecond(FTime, -1);
// out
Label1.Caption:=TimeToStr(FTime);
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:40.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter