我现在编一个考试程序。但是不知道怎么进行倒计时。
  例如:考试时间为2小时,我觉得应该把它化成秒,也就是7200秒,然后在Timer事件里进行Dec,但是还应该在状态栏里显示出剩余时间。
  比如:状态栏里显示  距离交卷时间还有 ##时##分##秒   而且 如果现在只剩20分钟的时间了,那么 时 前面应该显示 00时##分##秒
  请问各位大哥大姐们 这个问题如何解决。

解决方案 »

  1.   

    hh:=your_time_second div 3600;//得到小时数
    mm:=(your_time_second-hh*3600) div 60;//得到分钟数
    ss:=(your_time_second-hh*3600-mm*60) div 60;//得到秒数
      

  2.   

    procedure TForm1.Timer1Timer(Sender: TObject);
    var A: TDateTime;
    begin
      A := StrToTime('00:00:00'); //指定目标时间
      Caption := TimeTostr(A - Time); //在窗体标题栏上显示剩余时间
    end;
      

  3.   

    juliens的方法可以么?
    年月日都显示出来了
    是我拷贝错了么?
      

  4.   

    juliens也是可行的,但是它有误差。
    如果我把开始时间设为02:00:00,那它在运行时的起始时间就是01:59:58
      

  5.   

    不管怎么来说 使用TIMER控件总是存在较大的时间误差
    两小时内根据运行机器的不同怎么也有个10分钟的误差
    还是使用WINDOWS API函数来的比较准确 特别是考试这种重要程度比较高的软件queryperformancecounter函数获得当前系统频率记数器的震荡次数
    queryperformancefrequency获得高性能频率记数器每毫秒的震荡次数要实现精确的时间控制,可以这样实现
    procedure test;
    var
      Lgtick1,Lgtick2,Lgtick:tlargeinteger;
    begin
      queryperformancefrequency(Lgtick);获得一秒钟的震荡次数
      queryperformancecounter(Lgtick1);获得当前次数
      
      repeat    queryperformancecounter(Lgtick2);获得当前次数 
      
      util (lgtick1-lgtick2)/lgtick=60*60*2   //两小时的秒数该过程可以精确到微秒级
      

  6.   

    sorry 上面的until少了一个n
      

  7.   

    其他要实现的时间显示你可以自己在repeat循环中加上
      

  8.   

    http://community.csdn.net/Expert/topic/3063/3063664.xml?temp=.538479
    http://community.csdn.net/Expert/topic/3232/3232306.xml?temp=.1919824