![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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.