2011-06-14 12 views
5

hh : mm : ss 타이머 (Timer1.Interval : = 1000)에 대한 짧고 효과적인 코드가 있습니까? 나는 하나를 만들 수 있지만 뭔가 효율적인 것을 원합니다.델파이 : 간단한 hh : mm : ss 타이머

감사합니다.

내 코드 :

Var MyTime:TTime; 

MyTime:=EncodeTime(0,0,0,0); 

procedure TForm1.Timer1Timer(Sender: TObject); 
begin 
MyTime:=incsecond(Mytime,1); 
form1.Label1.Caption:='Time: '+TimeToStr(MyTime); 
end; 
+1

질문에 주어진 정보를 전적으로 기반으로 무엇을 원하는지 알기가 불가능합니다. 정확히 무엇을 성취하고자하는지 알려줄 필요가 있습니다. 수 밀리 초를시, 분, 초로 변환하는 데 도움이 필요하십니까? 아니면 디지털 시계에 애니메이션 효과를 적용 하시겠습니까, 아니면 ...? –

+0

레이블에 시간 (hh : mm : ss)을 표시하기 만하면됩니다. "밀리 초 수를시, 분, 초"로 변환하거나 가능한 경우 변환하지 않습니다. – maxfax

+4

효율적인 정의? 최소 실행 시간? 최소한의 코드? 최소한의 StackOverflow 조회? – dthorpe

답변

8

는 타이머가 시작했을 때의 추적 할 수있는 바르를 추가합니다.

TForm1 = class(TForm) 
    private 
    timerStart: TDateTime; 
    public 
    proceure StartTimer; 
    end; 

절차

이 어떤 간격 촬영 정확한 시간을 표시한다 OnTimer 이벤트

Label1.caption := formatdatetime('hh:nn:ss', timerStart - now()); //nn is for minutes. 

에서 타이머

proceure TForm1.StartTimer; 
beign 
timerStart := now(); 
timer1.interval = 1000; 
timer1.enabled := true; 
end; 

를 시작합니다.
5000 매 5 초마다 표시되는 시간입니다.

참고 : 아웃 테스트를 수행하면 타이머를 24 시간 이상 실행하면 정확한 시차가 나타나지 않을 수 있습니다. 그 에 대한 그 datetime 형식 문자열을 dd hh:nn:ss 같은 일이되어야한다고 생각합니다

+0

+1 FormatDateTime을 사용하는 경우 -1이지만 태그에 double을 넣으려는 경우 -1입니다. = 0 – NGLN

+0

공정한 호출, 나는 때때로 TdateTime이 int가 아님을 잊어 버립니다. –

관련 문제