读书人

如何样给小弟我的程序计算出时间并显示

发布时间: 2012-03-09 16:54:57 作者: rapoo

怎么样给我的程序计算出时间并显示出来?
怎么样给我的程序计算出时间并显示出来?
比如说一个过程需要多少秒可以执行完成,
我用timer控件,搞不出来,有会的给说一声,谢谢~
在线等待,解决给分!

[解决办法]
unit Unit1;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, ExtCtrls,mmSystem;



type

TForm1 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Button1: TButton;

Button2: TButton;

Timer1: TTimer;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;



var

Form1: TForm1;

actTime1,actTime2:Cardinal;

smmCount,sTimerCount,sPCount:Single;

hTimeID:Integer;

iTen:Integer;

proTimeCallBack:TFNTimeCallBack;



procedure TimeProc(uTimerID, uMessage: UINT;

dwUser, dw1, dw2: DWORD) stdcall;

procedure proEndCount;

implementation



{$R *.DFM}

//timeSetEvent的回调函数

procedure proEndCount;

begin

actTime2:=GetTickCount-actTime1;

Form1.Button2.Enabled :=False;

Form1.Button1.Enabled :=TRue;

Form1.Timer1.Enabled :=False;

smmCount:=60;

sTimerCount:=60;

spCount:=-1;



timeKillEvent(hTimeID);

end;



procedure TimeProc(uTimerID, uMessage: UINT;

dwUser, dw1, dw2: DWORD) stdcall;

begin

Form1.Edit2.Text:=FloatToStr(smmCount);

smmCount:=smmCount-0.01;

end;



procedure TForm1.FormCreate(Sender: TObject);

begin

Button1.Caption :=´开始倒计时´;

Button2.Caption :=´结束倒计时´;

Button2.Enabled :=False;

Button1.Enabled :=True;

Timer1.Enabled :=False;

smmCount:=60;

sTimerCount:=60;

sPCount:=60;

end;



procedure TForm1.Button1Click(Sender: TObject);

var

lgTick1,lgTick2,lgPer:TLargeInteger;

fTemp:Single;

begin

Button2.Enabled :=True;

Button1.Enabled :=False;

Timer1.Enabled :=True;

Timer1.Interval :=10;

proTimeCallback:=TimeProc;

hTimeID:=timeSetEvent(10,0,proTimeCallback,1,1);

actTime1:=GetTickCount;



//获得系统的高性能频率计数器在一毫秒内的震动次数

QueryPerformanceFrequency(lgPer);

fTemp:=lgPer/1000;

iTen:=Trunc(fTemp*10);

QueryPerformanceCounter(lgTick1);

lgTick2:=lgTick1;

sPCount:=60;

while sPCount> 0 do begin

QueryPerformanceCounter(lgTick2);

//如果时钟震动次数超过10毫秒的次数则刷新Edit3的显示

If lgTick2 - lgTick1 > iTen Then begin

lgTick1 := lgTick2;

sPCount := sPCount - 0.01;

Edit3.Text := FloatToStr(sPCount);

Application.ProcessMessages;



end;

end;

end;



procedure TForm1.Timer1Timer(Sender: TObject);

begin

Edit1.Text := FloatToStr(sTimerCount);

sTimerCount:=sTimerCount-0.01;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

proEndCount;

//显示从开始记数到记数实际经过的时间

ShowMessage(´实际经过时间´+IntToStr(actTime2)+´毫秒´);

end;

end.

[解决办法]
timer1.enable:=true;
application.ProcessMessages;
.....
timer1.enable:=false;
[解决办法]
在函数开始和结束的地方加上gettickcount
[解决办法]
让时间一秒一秒显示?
FormCreate事件
Label1 := FormatDateTime( 'yyyy-mm-dd hh:mm:nn ',now);//StartTime
Label2 := FormatDateTime( 'yyyy-mm-dd hh:mm:nn ',now);//NowTime
Label3 := FormatDateTime( 'hh:mm:ss ',StrToDateTime(Label2.Caption)-StrToDateTime(Label1.Caption);//interval

Timer事件
Label2 := FormatDateTime( 'yyyy-mm-dd hh:mm:nn ',now);//NowTime
Label3 := FormatDateTime( 'hh:mm:ss ',StrToDateTime(Label2.Caption)-StrToDateTime(Label1.Caption);//interval

读书人网 >.NET

热点推荐