2015-01-11 94 views
1
procedure TForm1.TimerSWTimer(Sender: TObject); 
var 
Hour, Min, Sec, MSec: word; 
begin 
ElapsedTime := Time - StartTime + Totaltime ; 
DecodeTime(elapsedtime, Hour, Min, Sec, MSec); 
LabelSW.Text := IntToStr(Hour) + ':'+ IntToStr(Min) + ':'+ IntToStr(Sec) + ':' + IntToStr(Msec); 
end; 

這是秒錶,我想落實到我的應用程序的代碼,主要的問題是,標籤上顯示的時間格式爲0:0:0:0,我想它是00:00:00:000爲小時,分鐘,秒和毫秒。我嘗試了很多我在網上找到的東西和代碼,但沒有一個能夠幫助我。德爾福秒錶時間格式

當我啓動秒錶,時間是這樣的0:0:0:1,比0:0:0:100:0:0:100,經過一整秒毫秒到1位小數(1改爲001)。小時,分鐘和秒同樣的事情,它們被示出在1位小數,直到它們達到10(9代替09)..

我曾嘗試:

  • Addleadingzeroes起作用

    用法:

    AddLeadingZeroes(2005, 10) ; 
    

    將導致'0000002005'字符串值。只有

  • 時間 - 與領先的零

    ShowMessage('hh:nn:ss.zzz = '+FormatDateTime('hh:nn:ss.zzz', myDate)); 
    

數值如果你任何好的傢伙能幫助,我將不勝感激。

乾杯。

+1

又是怎麼回事['System.Diagnostics.TStopWatch'(HTTP://docwiki.embarcadero .COM /庫/ XE5/EN/System.Diagnostics.TStopwatch)? –

+2

labelSW.Text:= Format('%2.2u:%2.2u:%2.2u:%3.3u',[Hour,Min,Sec,MSec]);見http://docwiki.embarcadero.com/Libraries/en/SystemUtils.Format –

+0

@SirRufo我很抱歉,我不是很適應這個,發現這個例子在線實現,我不知道如何使用Tstopwatch atm ,沒有試過tbh。 –

回答

7

http://docwiki.embarcadero.com/Libraries/en/System.SysUtils.Format

labelSW.Text := Format('%2.2u:%2.2u:%2.2u:%3.3u',[Hour,Min,Sec,MSec]); 

的精度說明,使左填充用零。


使用System.Diagnostics程序的RTL TStopwatch先進的記錄,它變得更容易一些:

uses 
    System.SysUtils, 
    System.Diagnostics; 

var 
    sw: TStopwatch; 
... 
sw := TStopwatch.StartNew; // Start measuring time 
... 
procedure TForm1.TimerSWTimer(Sender: TObject); 
begin 
    LabelSW.Text := 
    FormatDateTime('hh:nn:ss:zzz',sw.ElapsedMilliseconds/MSecsPerDay); 
end;