程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi毫秒級倒計時代碼

Delphi毫秒級倒計時代碼

編輯:Delphi

Delphi倒計時,毫秒級別,獲得系統的高性能頻率計數器在一毫秒內的震動次數,如果時鐘震動次數超過10毫秒的次數則刷新edit3的顯示,顯示從開始記數到記數實際經過的時間:

vIEw source print? 001 unit Unit1; 002 interface 003 uses 004   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 005   ExtCtrls, StdCtrls, mmsystem; 006 type 007   TForm1 = class(TForm) 008     Edit1: TEdit; 009     Edit2: TEdit; 010     Edit3: TEdit; 011     Button1: TButton; 012     Button2: TButton; 013     Timer1: TTimer; 014     Label1: TLabel; 015     Label2: TLabel; 016     Label3: TLabel; 017     procedure FormCreate(Sender: TObject); 018     procedure Button1Click(Sender: TObject); 019     procedure Timer1Timer(Sender: TObject); 020     procedure Button2Click(Sender: TObject); 021   private 022     { Private declarations } 023   public 024     { Public declarations } 025   end; 026 var 027   Form1: TForm1; 028   acttime1,acttime2:cardinal; 029   smmcount,stimercount,spcount:single; 030   htimeid:integer; 031   iten:integer; 032   protimecallback:tfntimecallback; 033   procedure timeproc(utimerid, umessage: uint; dwuser, dw1, dw2: dWord) stdcall; 034   procedure proendcount; 035 implementation 036 {$R *.DFM} 037 //timesetevent的回調函數 038 procedure proendcount; 039 begin 040   acttime2:=gettickcount-acttime1; 041   form1.button2.enabled :=false; 042   form1.button1.enabled :=true; 043   form1.timer1.enabled :=false; 044   smmcount:=60; 045   stimercount:=60; 046   spcount:=-1; 047   timekillevent(htimeid); 048 end; 049 procedure timeproc(utimerid, umessage: uint; dwuser, dw1, dw2: dWord) stdcall; 050 begin 051   form1.edit2.text:=floattostr(smmcount); 052   smmcount:=smmcount-0.01; 053 end; 054 procedure TForm1.FormCreate(Sender: TObject); 055 begin 056   button1.caption :='開始倒計時'; 057   button2.caption :='結束倒計時'; 058   button2.enabled :=false; 059   button1.enabled :=true; 060   timer1.enabled :=false; 061   smmcount:=60; 062   stimercount:=60; 063   spcount:=60; 064 end; 065 procedure TForm1.Button1Click(Sender: TObject); 066 var 067   lgtick1,lgtick2,lgper:tlargeinteger; 068   ftemp:single; 069 begin 070   button2.enabled :=true; 071   button1.enabled :=false; 072   timer1.enabled :=true; 073   timer1.interval :=10; 074   protimecallback:=timeproc; 075   htimeid:=timesetevent(10,0,protimecallback,1,1); 076   acttime1:=gettickcount; 077   //獲得系統的高性能頻率計數器在一毫秒內的震動次數 078   queryperformancefrequency(lgper); 079   ftemp:=lgper/1000; 080   iten:=trunc(ftemp*10); 081   queryperformancecounter(lgtick1); 082   lgtick2:=lgtick1; 083   spcount:=60; 084   while spcount>0 do 085   begin 086     queryperformancecounter(lgtick2); 087     //如果時鐘震動次數超過10毫秒的次數則刷新edit3的顯示 088     if lgtick2 - lgtick1 > iten then 089     begin 090       lgtick1 := lgtick2; 091       spcount := spcount - 0.01; 092       edit3.text := floattostr(spcount); 093       application.processmessages; 094     end; 095   end; 096 end; 097 procedure TForm1.Timer1Timer(Sender: TObject); 098 begin 099   edit1.text := floattostr(stimercount); 100   stimercount:=stimercount-0.01; 101 end; 102 procedure TForm1.Button2Click(Sender: TObject); 103 begin 104   proendcount; 105   //顯示從開始記數到記數實際經過的時間 106   showmessage('實際經過時間'+inttostr(acttime2)+'毫秒'); 107 end; 108 end.
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved