2015-01-11 56 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 для часы, минуты, секунды и милисекунды. Я пробовал множество вещей и кодов, которые я нашел в Интернете, но ничто из этого не помогло мне.Delphi Секундомера формат время

Когда я запустить секундомер, время идет, как этот 0:0:0:1, чем 0:0:0:10, 0:0:0:100, и после полного второго милисекунд перейти к 1 десятичным (1 вместо 001). То же самое в течение нескольких часов, минут и секунд, они будут показаны на 1 десятичным, пока они не достигнут 10 (9 вместо 09) ..

Я попытался:

  • Addleadingzeroes функционировать

    Использование:

    AddLeadingZeroes(2005, 10) ; 
    

    В результате получается строковое значение '0000002005'. только

  • Time - числовые значения с ведущими нулями

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

Если какие-либо из вас хороших парней может помочь, я бы очень признателен.

Cheers.

+1

А что [ 'System.Diagnostics.TStopWatch'] (Http: //docwiki.embarcadero .com/Библиотеки/xe5/о/System.Diagnostics.TStopwatch)? –

+2

labelSW.Text: = Формат ('% 2.2u:% 2.2u:% 2.2u:% 3.3u', [Hour, Min, Sec, MSec]); См. Http://docwiki.embarcadero.com/Libraries/en/System.SysUtils.Format –

+0

@SirRufo Прошу прощения, я не очень приспосабливаюсь к этому, нашел этот пример онлайн для реализации, я не знаю, как использовать Tstopwatch atm , havent попробовал 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]); 

Спецификатор точности делает левый отступы с нулями.


Использование RTL TStopwatch передовой запись в System.Diagnostics, становится немного легче:

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; 
Смежные вопросы