请问哪里有“时间倒数”的控件下载 (50分)

  • 主题发起人 主题发起人 wind_huang
  • 开始时间 开始时间
W

wind_huang

Unregistered / Unconfirmed
GUEST, unregistred user!
请问哪里有“时间倒数”的控件下载 ?急用,倒数5分钟。谢了!
 
??直接用timer控制不就得了??
 
可是,用TIMER控件的精确度不高,我只需精确到毫秒就行,但我试用过,发现倒数时,时快时慢,希望有更好的办法?
 
应取系统流逝时间来作,用GetTickCount来取,这样就不会有精确度问题。
 
HunterTeam:
如何实现,可否说详细点?在主界面里显示05:00,然后依次是04:59,04:58。。。
最后是00:00。最好有代码。
 
我作了一个例子,先在窗体上分别放一个timer,edit和button,然后代码如下:

private
c,b:integer;

procedure TForm1.Timer1Timer(Sender: TObject);
var a:integer;
e:string;
begin
a:=GetTickCount div 1000;
if a>b then
begin
c:=c-(a-b);
b:=a;
end;
e:=inttostr(c mod 60);
if length(e)<2 then e:='0'+e;
Edit1.Text:='0'+inttostr(c div 60)+':'+e;
if c<=0 then timer1.enabled:=false;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
c:=300;
b:=GetTickCount div 1000;
timer1.enabled:=true;
end;

用button1控制倒计时的开始,倒计时结束时将Timer的enanbled设为false。
timer的interval应大致设为500毫秒,而不能设为1000,这样可以大致保证每一秒种的
计时都不会被忽略,因为timer的计时是不怎么精确的。
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, Buttons;

type
Twatch = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
RealTimeEdit: TEdit;
StartTimeEdit: TEdit;
EndTimeEdit: TEdit;
EllapseTimeEdit: TEdit;
StartButton: TBitBtn;
StopButton: TBitBtn;
Timer1: TTimer;
Timer2: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure StartButtonClick(Sender: TObject);
procedure StopButtonClick(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
watch: Twatch;
StartTime : TdateTime;
EllapseTime:TdateTime;

implementation

{$R *.DFM}

procedure Twatch.FormCreate(Sender: TObject);
begin
StopButton.Enabled := False;
//使停止按钮无效
RealTimeEdit.Text := TimeToStr(time);
//将组件的Text属性设置为当前时间
StartTimeEdit.Text := '00:00:00';
//将以下三个组件的Text属性设置为00:00:00
EndTimeEdit.Text := '00:00:00';
EllapseTimeEdit.text := '00:00:00';
Timer2.enabled:=false;
end;

procedure Twatch.Timer1Timer(Sender: TObject);
begin
RealTimeEdit.Text := TimeToStr(Time);
// 用当前时间刷新Text
end;

procedure Twatch.StartButtonClick(Sender: TObject);

begin
Timer2.Enabled := True;
StopButton.Enabled := true;
StartTime := Time;
StartTimeEdit.Text := TimeToStr(StartTime);
end;

procedure Twatch.StopButtonClick(Sender: TObject);
begin
Timer2.Enabled := False;
StopButton.Enabled := False;
end;

procedure Twatch.Timer2Timer(Sender: TObject);
Var
EndTime : TdateTime;
i,Hour,Minute,Second,MilliSec:Word;
HS,MS,SS,MSS : string[2];
begin
Endtime := Time; //取当前时间
EllapseTime := Time - StartTime; // 计算用去时间
EndTimeEdit.Text := TimeToStr(EndTime); // 设置结束时间文本
DecodeTime(EllapseTime,Hour,Minute,Second,MilliSec); //进行时间换算
Str(Hour:2,HS);
str(Minute:2,MS);
str(Second:2,SS);
for i := 1 to 2 do
begin
if hs = ' ' then hs := '0';
if ms = ' ' then ms := '0';
if ss = ' ' then ss := '0';
end;
Str((MilliSec div 100):1,MSS);
EllapseTimeEdit.Text := hs+':'+ms+':'+ss+'.'+mss; //显示用去时间
end;


end.
 
谢谢各位!
 
后退
顶部