虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > Delphi编程 > Delphi实现毫秒级别的倒计时实例代码

Delphi实现毫秒级别的倒计时实例代码
类别:Delphi编程   作者:码皇   来源:互联网   点击:

这篇文章主要介绍了Delphi实现毫秒级别的倒计时实例代码,需要的朋友可以参考下

本文以实例简述了Delphi实现毫秒级别倒计时的方法。一般来说可以获得系统的高性能频率计数器在一毫秒内的震动次数,如果时钟震动次数超过10毫秒的次数则刷新edit3的显示,显示从开始记数到记数实际经过的时间,具体实现代码如下:

    unit Unit1;
    interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, mmsystem;
    type TForm1 = class(TForm) Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button1: TButton;
    Button2: TButton;
    Timer1: TTimer;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    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.
相关热词搜索: Delphi 毫秒 倒计时