Используйте переменную типа TDateTime.
procedure TForm1.XXXXXXXClick(Sender: TObject); var StartTime, EndTime, ElapsedTime :TDateTime; begin StartTime := Now; {Здесь поместите свой код} EndTime := Now; ElapsedTime := EndTime - StartTime; Label1.Caption := TimeToStr(ElapsedTime); end; {теперь все это в памяти, но в нашем случае это хорошее место. } var before, after, elapsed : TDateTime; Ehour, Emin, Esec, Emsec : WORD; ... before := now; some_process(); after := now; elapsed := after - before; decodetime(elapsed, Ehour, Emin, Esec, Emsec); |
теперь Ehour:Emin:Esec.Emsec будет содержать истекшее время.
Это то, что я хотел. fStartWhen содержит дату/время начала процесса. (fStartWhen := NOW). OneSecond - константа, определенная как 1/24/3600. (Да, эта программа может выполняться для нескольких дней. Но даже самый быстрый P5 может не справиться с большим количеством данных!)
PROCEDURE TformDBLoad.UpdateTime; VAR Delta :TDateTime BEGIN fLastUpdate := NOW IF ABS( fStartWhen - fLastUpdate ) < OneSecond THEN EXIT Delta := fLastUpdate - fStartWhen doElapsedTime.Caption := FORMAT( '%1. дней из %s', [INT(Delta),FORMATDATETIME('hh:nn:ss', FRAC(Delta))] ) END; |
[001417]