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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2011, 15:07   #1
nursak
Пользователь
 
Регистрация: 27.03.2011
Сообщений: 31
Сообщение Проблема с таймером обратного отсчета

Добрый день! Я пишу тест - в нём присутствует таймер обратного отсчета. По истечении 30 минут он выдаёт сообщение об окончании теста. Всё работает, но есть одно НО - таймер отсчитывает значения в секундах, а я хотел бы отобразить это в формате минута:секунды.
Вот код таймера:
Код:
//Глобальная переменная
var 
i:integer;

//Выбор теста из выпадающего списка
procedure TsTest.TestBoxCloseUp(Sender: TObject);
begin
  ball:=0;
  now:=0;
  button1.Enabled:=true;
  button1.Caption:='Следующий вопрос';
  LoadTest(TestBox.ItemIndex);
  Timer1.Enabled:=false; // на всякий случай включаю и выключаю,
  Timer1.Enabled:=true; // чтобы сбросить счетчик (по крайней мере мне кажется это приемлимым)
  i:=1801; //время в секундах
end;

procedure TsTest.Timer1Timer(Sender: TObject);
begin
i:=i-1;
Label1.Caption:='Осталось  '+inttostr(i)+' Секунд';
If i=-1 then
begin
showmessage('Время вышло, тест завершен'+#13+'Правильных ответов: '+inttostr(ball));
Button1.Enabled:=false;
Label1.Caption:='Время вышло';
Timer1.Enabled:=false;
end;
Как преобразовать формат "секунды" в "минута:секунды" ?
nursak вне форума Ответить с цитированием
Старый 05.06.2011, 15:11   #2
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Лучше написать так:

Код:
If i <=-1 then ..
я уже не помню, но вроде у меня таймер любил "проскакивать"... хотя фиг знает, может я чтото не так писал.

Про секунд, это элементарная математика, подумай.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 05.06.2011, 15:27   #3
nursak
Пользователь
 
Регистрация: 27.03.2011
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Valio Посмотреть сообщение
Про секунд, это элементарная математика, подумай.
Я прошу помочь в этом
nursak вне форума Ответить с цитированием
Старый 05.06.2011, 15:33   #4
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Цитата:
Сообщение от nursak Посмотреть сообщение
Я прошу помочь в этом
Максимум что я могу для вас сделать:

1. В минуте 60 секунд.
2. http://www.delphisources.ru/pages/fa...s/Div.php.html
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 05.06.2011, 16:12   #5
nursak
Пользователь
 
Регистрация: 27.03.2011
Сообщений: 31
По умолчанию

Valio Спасибо за ссылку, своими мозгами думать приятней)
Вот что у меня вышло:
Код:
//Глобальная переменная
Var
minutes:integer;

procedure TsTest.Timer1Timer(Sender: TObject);
begin
i:=i-1;
minutes:=i div 60;
Label1.Caption:='Осталось  '+inttostr(minutes)+':'+inttostr(i)+' секунд';
If i=-1 then
begin
showmessage('Время вышло, тест завершен.'+#13+'Правильных ответов: '+inttostr(ball));
Button1.Enabled:=false;
Label1.Caption:='Время вышло';
Timer1.Enabled:=false;
end;
Однако у меня возникла проблема: отсчет минут работает, но с секундами проблема. Пример: Осталось 28:1789 секунд.
nursak вне форума Ответить с цитированием
Старый 05.06.2011, 16:15   #6
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Вот ты нашёл сколько минут, а теперь умножь это кол-во минут на 60 и вычти из общего кол-ва сек. Остатком и будет кол-во секунд.

i - (i div 60)*60 - вот както так.

Или не заниматься идиотизмом и использовать mod http://www.delphisources.ru/pages/fa...s/Mod.php.html
Сливочное масло Valio - компиляция как по маслу

Последний раз редактировалось Valio; 05.06.2011 в 16:18.
Valio вне форума Ответить с цитированием
Старый 05.06.2011, 16:51   #7
nursak
Пользователь
 
Регистрация: 27.03.2011
Сообщений: 31
По умолчанию

Если я пишу:
Код:
i:=i-1;
i:=i-(i div 60)*60;
minutes:=i div 60;
То у меня идёт обратный отсчет с 00:59, затем таймер останавливается и срабатывает showmessage. Кажется я перестал понимать что делать дальше.

UPD:
Label1.Caption:='Осталось '+inttostr(minutes)+':'+inttostr(i div 30)+' секунд';
Показывает 29:59 - но отсчет не идёт, странно как то

Последний раз редактировалось nursak; 05.06.2011 в 17:41. Причина: я немного индюк-быдлокодер
nursak вне форума Ответить с цитированием
Старый 05.06.2011, 17:40   #8
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Надо было так:

Код:
minutes := i div 60;
seconds := i mod 60;
Label1.Caption:='Осталось  '+inttostr(minutes)+':'+inttostr(seconds)+' секунд';
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 05.06.2011, 17:42   #9
nursak
Пользователь
 
Регистрация: 27.03.2011
Сообщений: 31
По умолчанию

Код:
Label1.Caption:='Осталось  '+inttostr(minutes)+':'+inttostr(i mod 30)+' секунд';
Вот теперь заработало, вот же я...
nursak вне форума Ответить с цитированием
Старый 05.06.2011, 17:49   #10
nursak
Пользователь
 
Регистрация: 27.03.2011
Сообщений: 31
По умолчанию

Чёрт рано радоваться - он отсчитал до 1:00 потом начал отсчет с 1:29 потом когда отсчитал до 0 начал отсчитывать с 30 сек (2 раза подряд при том) и только потом отобразил showmessage.
Сейчас попробую сделать как ты написал
nursak вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Счетчик обратного отсчета! YuZi_2009 PHP 3 11.02.2011 14:50
Таймер обратного отсчета kpachbiu JavaScript, Ajax 4 09.01.2011 15:32
Таймер обратного отсчета работает не так как надо.. нужно найти ошибку в коде... Человек_Борща Общие вопросы Delphi 10 13.04.2010 20:06
Таймер обратного отсчета Bilargo Помощь студентам 6 30.09.2009 17:02
Таймер обратного отсчета на С Raptor Помощь студентам 6 08.01.2008 01:11