Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отоброжение оставшигося времени в Label, из Timer1 
:(
    Опции темы
andrey_post
  Дата 26.1.2004, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 23.12.2003
Где: Екатеринбург

Репутация: нет
Всего: нет



Ребята, мне необходимо в Label указать сколько в секунах осталось времени до выполения команды OnTimer в Timer1. Как сие воплотить в жизнь?

Timer1.Interval:=30000; //интервал 30 секунд
--------------------
И что бы там не происходило, не стоит воспринимать жизнь слишком всерьёз, всё равно нам из неё живыми не выбраться!!!
PM MAIL WWW ICQ   Вверх
term
Дата 26.1.2004, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 22.1.2004

Репутация: нет
Всего: нет



Отображение оставшегося времени.
Сделай Interval := 1000; // 1 секунда
Введи переменную = 30.
В событии OnTimer уменьшай переменную на Round(Timer1.Interval/1000).
Когда она станет <= 0, то переменная = 30, плюс необходимые команды.
В конце OnTimer строка, например Label1.Caption := 'Осталось: ' + IntToStr(переменная) + 'c.';
PM MAIL   Вверх
Paradox
Дата 26.1.2004, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1135
Регистрация: 18.11.2002
Где: Россия

Репутация: нет
Всего: 1



Можно просто завести таймер с интревалом 1 секунда и в его он таймер уменьшать эту переменную и отображать в лейбл, в он таймер первого таймера делать то что тебе надо


--------------------
---
PM MAIL WWW   Вверх
andrey_post
Дата 26.1.2004, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 23.12.2003
Где: Екатеринбург

Репутация: нет
Всего: нет



Так что ли? не канает...
Код

begin
Timer1.Interval:=30000;
for i:=0 to 30 do
   begin
    Timer1.Interval:=Round(Timer1.Interval/1000);
    Label1.Caption:=IntToStr(i);
   end;
end;

--------------------
И что бы там не происходило, не стоит воспринимать жизнь слишком всерьёз, всё равно нам из неё живыми не выбраться!!!
PM MAIL WWW ICQ   Вверх
<Spawn>
Дата 26.1.2004, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



При создании другого таймера со временем будет довольно-таки большая погрешность, можно как вариант создать отдельный поток в цикле выводить каждую секунду нужную информацию, примерно так:

Код
procedure TMyThread.Execute();
var
 i: integer;
begin
 while not Terminated do
 begin
   //главный код
   for i := 0 to 29 do
   begin
     Sleep(1000);
     //Выводим оставшеся время
   end;
 end;
end;


Это сообщение отредактировал(а) <Spawn> - 26.1.2004, 14:37


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
<Spawn>
Дата 26.1.2004, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Можно сделать и такой вариант: Создаешь таймер с интервалом 1000 и заводишь глобальную переменную(равную, например, 0), когда ее значение достигнет 29, то выполняешь нужный код и обнуляешь ее.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Paradox
Дата 26.1.2004, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1135
Регистрация: 18.11.2002
Где: Россия

Репутация: нет
Всего: 1



Цитата
со временем будет довольно-таки большая погрешность
ИМХО если важны секунды а не тысячные все должно быть ок
два таймера в приложении не редкость и работать должно нормалдьно


--------------------
---
PM MAIL WWW   Вверх
Maverick
Дата 26.1.2004, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1307
Регистрация: 22.9.2003
Где: Odessa, Ukraine

Репутация: 2
Всего: 10



Есть такие функции замечательные MilliSecondsBetween, SecondsBetween и тому подобное DateUtils... Очень удобно... Запоминаешь в переменной момент OnTimer... И дальше Label1.Caption := IntToStr(MilliSecondsBetween(Time(), запомненное время)).... - сколько времени прошло с момента последнего срабатывания в милисекундах... ну скомбинируешь чего-нибудь...


--------------------
smile
PM ICQ GTalk   Вверх
maxkazar
Дата 26.1.2004, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 26.1.2004
Где: Таганрог

Репутация: нет
Всего: нет



А можно в принципе вообще сделать следующим образом,
привязаться к системному таймеру, функция GetSystemTime.

В обработчике таймера OnTime засекать текущее время системного таймера функцией GetSystemTime
а затем в обработчике события OnIdle проверять текущее состояние относительно того времени которого засекли и выводит разницу.
PM MAIL ICQ   Вверх
andrey_post
Дата 26.1.2004, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 23.12.2003
Где: Екатеринбург

Репутация: нет
Всего: нет



Я тут весь день карячусь с этим делом, выходит дрянь какая-то...
вот еще одна из задумок:
Код

var
begTime: TDateTime;

procedure TForm1.Timer1Timer(Sender: TObject);
var
h, m, s, ms: Word;
const
MaxTick = 1;
begin
begTime:= 1;
decodetime((time-begtime)/maxtick, h, m, s, ms);
Label1.Caption:=IntToStr(h)+'h'+Inttostr(m)+'m'+IntToStr(s)+'s'+Inttostr(Ms)+'ms';
end;



--------------------
И что бы там не происходило, не стоит воспринимать жизнь слишком всерьёз, всё равно нам из неё живыми не выбраться!!!
PM MAIL WWW ICQ   Вверх
Kesh
Дата 26.1.2004, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 4
Всего: 54



Код
procedure TForm1.FormCreate(Sender: TObject);
begin
 FirstTime := Time;
 Timer1.Enabled := true;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
 Label1.Caption := TimeToStr(EncodeTime(0,0,Timer1.Interval div 1000, Timer1.Interval mod 1000)-(Time-FirstTime))
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 FirstTime := Time;
end;



--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
andrey_post
Дата 26.1.2004, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 23.12.2003
Где: Екатеринбург

Репутация: нет
Всего: нет



kesh, Спасибо большое!!!
--------------------
И что бы там не происходило, не стоит воспринимать жизнь слишком всерьёз, всё равно нам из неё живыми не выбраться!!!
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0939 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.