Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Таймер. [D7, Win95/98, WinME, NT4, Win2k, WinXP]


niko4543 ©   (2004-06-25 14:15:00) 

Здравствуйте.
Помогите пожайлуста, мне нужен код такого рода.
Нужно с помощью таймера засечь на, ну скажем примерно 15 или 30 минут, и что бы пока течёт это время через каждые 30 сикунд делать какоето джействие.
Помогите пожайлуста срочно надо. Вроде просто а  у меня работает очень глючно.

Заранее спасибо.


KilkennyCat   (2004-06-26 11:19:00) [1]

что касается точности - этот таймер сам по себе неточен


KilkennyCat   (2004-06-26 11:08:00) [2]

и кстати, почему
Gauge1.MaxValue:=Time*600?
может быть так вернее
Gauge1.MaxValue:=Time*60?

тогда все проще:

begin
 Gauge1.Progress := Gauge1.Progress + 1;
 Label1.Caption:=IntToStr(trunc(Gauge1.Progress/60)+':'+IntToStr(Gauge1.Progress - (trunc(Gauge1.Progress/60))*60);
 If Gauge1.Progress = Gauge1.Max Then begin
   ShowMessage('Отведённое время вышло');
   Timer1.Enabled:=False;
 end;
end;


KilkennyCat   (2004-06-26 10:49:00) [3]

Правильно кажется...
Зачем это -
var
k:integer;
k1:real;
?

можно ведь так:

Gauge1.Progress:=round(((((minuta*60)+secunda))*100)/Time);

зачем внутри таймера это -
Label2.Caption:=inttostr(time);
Gauge1.MaxValue:=Time*600;
, если Time не меняется? вынести за пределы обработчика таймера...

Получаем пока такое :

begin
secunda:=secunda+1;
Gauge1.Progress:=round(((((minuta*60)+secunda))*100)/Time);
If secunda=60 Then begin
 secunda:=0;
 minuta:=minuta+1;
end;
Label1.Caption:=IntToStr(minuta)+':'+IntToStr(secunda);
If Time<=minuta Then begin
 ShowMessage('Отведённое время вышло');
 Timer1.Enabled:=False;
end;
end;


niko4543   (2004-06-26 06:56:00) [4]

Я делаю так.
var
 k:integer;
 k1:real;
begin
 Label2.Caption:=inttostr(time);
 secunda:=secunda+1;
 k1:=((((minuta*60)+secunda))*100)/Time;
 k:=round(k1);
 Gauge1.MaxValue:=Time*600;
 Gauge1.Progress:=k;
 If secunda=60 Then
   begin
     secunda:=0;
     minuta:=minuta+1;
   end;
 Label1.Caption:=IntToStr(minuta)+':'+IntToStr(secunda);
 If Time<=minuta Then
   begin
     ShowMessage('Отведённое время вышло');
     Timer1.Enabled:=False;
   end;
end;


Мне кажется это такя полная лажа, и работает неочень точно. Подскажите правельную реализацию этого вопроса.


nejest   (2004-06-25 16:22:00) [5]

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if(i=30)then
 begin
  label1.Caption:='Время закончилось';
  Timer1.Enabled:=False;
 end
else
 begin
  label1.Caption:='Прошло '+IntToStr(i*30)+' секунд';
  i:=i+1;
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
i:=0;
end;
У меня всё работает.


Anatoly Podgoretsky   (2004-06-25 15:25:00) [6]

GuAV ©   (25.06.04 15:20) [9]
Флудить и флеймить не надо, просто пока ждем можно и поговорить.


GuAV   (2004-06-25 15:20:00) [7]


> Ой, немного поторопился ;)

Опять торопишься. "Не суетись под клиентом" (с)
И вообще: Нефиг отвечать. Пока авторской версии не будет можно только флудить и флеймить :)


Delphin   (2004-06-25 15:08:00) [8]

Ой, немного поторопился ;)

procedure TForm1.Timer1Timer(Sender: TObject);
begin
IF Timer2.Enabled Then
ShowMessage('30 Seconds left');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Interval:=30000;  // 30 Sec.
Timer2.Interval:=1000*30*60 //30 Min.

end;

end.


GuAV   (2004-06-25 15:05:00) [9]

Delphin ©   (25.06.04 15:02) [6]
Оффтоп. См. внимательно сабж. См. также [4]-[5].


Delphin   (2004-06-25 15:02:00) [10]

procedure TForm1.Timer1Timer(Sender: TObject);
begin
ShowMessage('30 Seconds left');
Timer1.Enabled:=False;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Interval:=30000;
end;

Что-нить вроде этого ?


Anatoly Podgoretsky   (2004-06-25 14:32:00) [11]

Может и похуже, например на ЛМД


Тимохов   (2004-06-25 14:22:00) [12]

или на обвинения в плагиате нарвемся


Anatoly Podgoretsky   (2004-06-25 14:21:00) [13]

Нет сначала твой код, а то вдруг сдублируем, будем виноваты не заслуженно.


lion   (2004-06-25 14:20:00) [14]

сделай два таймера: один будет вырубать второй через 30 минут.
а первый через каждые 30 секунд будет делать то что надо


Тимохов   (2004-06-25 14:16:00) [15]


> Вроде просто а  у меня работает очень глючно.

что то уже есть?
выкладывай


Наверх

Титульная страница Поиск, карта сайта Написать письмо