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

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

Timer


Sah ©   (2004-06-15 18:34:00) 

Уважаемые, Мастера!
Подскажите, как сделать отчсчет времени (через Timer)  в обратном порядке, причем минута или час задавался бы из SpinEditoв.
Зараннее спасибо!


Vit@ly   (2004-06-16 21:07:00) [1]

Привожу полный текст:
unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls, ExtCtrls, Spin, ComCtrls;
type
 TForm1 = class(TForm)
   Button1: TButton;
   Edit1: TEdit;
   Timer1: TTimer;
   HourSpin: TSpinEdit;
   SpinMin: TSpinEdit;
   SecSpin: TSpinEdit;
   procedure Button1Click(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
   procedure HourSpinChange(Sender: TObject);
   procedure SpinMinChange(Sender: TObject);
   procedure SecSpinChange(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;
var
 Form1: TForm1;
 LastTime: TDateTime;
 hour, min, sec: word;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
LastTime:= Now + EncodeTime(Hour, Min, Sec, 0);
Edit1.Visible:= True;
Edit1.Text:= TimeToStr(LastTime - Now);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Edit1.Text:= TimeToStr(LastTime - Now);
end;

procedure TForm1.HourSpinChange(Sender: TObject);
begin
Hour:= HourSpin.Value;
end;

procedure TForm1.SpinMinChange(Sender: TObject);
begin
min:= SpinMin.Value;
end;

procedure TForm1.SecSpinChange(Sender: TObject);
begin
Sec:= SecSpin.Value;
end;
end.


  (2004-06-16 20:19:00) [2]

Удалено модератором


Vit@ly   (2004-06-15 19:38:00) [3]

Сорри за
Edit1.Text:= TimeToStr:= LastTime - Time
следует читать
Edit1.Text:= TimeToStr(LastTime - Time)ж


Vit@ly   (2004-06-15 19:36:00) [4]

Задача много раз решалась (в том числе и мной). Свои функции выполняла, но на мой взляд (после того, как я увидел предложенное решение, мое решение показалось мне каким-то некрасивым). А очень красивое решение (и короткое - 2 строки) выложил арр, уже не помню как давно. Вот его примерная суть:
SetPeriod:= //и совсем не принципиально SpinEdit это или что-то иное
LastTime:= Time + SetPeriod
Edit1.Text:= TimeToStr:= LastTime - Time
Это висит на Timer

Или примерно так. На мой взляд все прозрачно.


Sah   (2004-06-15 19:33:00) [5]

А можно пример!
var
tim:tdatetime;
procedure TForm1.FormShow(Sender: TObject);
begin
tim:=time;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
a:string;
begin
a:=formatdatetime('nn:ss',(time-tim));
label1.Caption:=(a);
end;

end.
Это - отсчет вверх с 0:00,
А как сделать уменьшение со SpinEdit/
Как это написать?


Kair   (2004-06-15 18:42:00) [6]


> clickmaker ©   (15.06.04 18:39) [2]
>
> > в обратном порядке
>
> Бомбу делаешь?


:D


clickmaker   (2004-06-15 18:39:00) [7]


> в обратном порядке

Бомбу делаешь?


TUser   (2004-06-15 18:37:00) [8]

Читаешь из спина значение, потом его уменьшаешь по таймеру, пока не получишь >=0.


Наверх

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