我是这样写的:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if now=datetimepicker1.Time then
     begin
       timer1.Enabled:=false;
       showmessage(timetostr(datetimepicker1.Time)+'到了!');
       timer1.Destroy;
     end;
end;为什么showmessage(timetostr(datetimepicker1.Time)+'到了!');始终无法执行?请问代码该如何写?

解决方案 »

  1.   

    为什么这样却可以呢?procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if timetostr(now)=timetostr(datetimepicker1.Time) then
         begin
           timer1.Enabled:=false;
           showmessage(timetostr(datetimepicker1.Time)+'到了!');
           timer1.Destroy;
         end;
    end;
      

  2.   

    Now 返回的结果包括了时间和日期,而datetimepicker1.Time取出的仅仅是时间,当然不可能相等。而用TimeToStr转换得到的字符串,都只包括了时间信息,可以用于判断是否一致。
      

  3.   

    uses
      DateUtils;function TimeOf(const AValue: TDateTime): TDateTime;
      

  4.   


    谢谢了,我试了不行啊。procedure TForm1.Timer1Timer(Sender: TObject); 
    begin 
      if TimeOf(now)=datetimepicker1.Time then 
        begin
          timer1.Enabled:=false;
          showmessage(timetostr(datetimepicker1.Time)+'到了!');
          timer1.Destroy;
        end; 
    end;
      

  5.   

    我刚才用断点跟了一下,TimeToStr(TimeOf(Now)) = TimeToStr(DateTimePicker1.Time)的时候,TimeOf(Now) <> DateTimePicker1.TimeTimeOf(Now) 的值是 0.43281767361,而 DateTimePicker1.Time 的值是 40231.432813我也不清楚怎么回事,但是用 TimeToStr 函数后,就可以个人建议:楼主还是转换成字符串在比较吧
      

  6.   

    //我觉得你可以分解时间来达到你的目的。
    //delphi 7procedure DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word);
    procedure DecodeDateTime(const AValue: TDateTime; out AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word);
    分别比较小时、分钟、秒,就可以了。
      

  7.   


    直接用frac(Now)取得的就是当前时间(相对的,用trunc(Now)取得的就是当前日期),但是这仍然不能用来比较,因为里面包含了毫秒等信息。所以有两种方法,一是就像你现在一样,格式化成字符串来比较,二就是像7楼一样,把时间信息拆开来,独立比较时、分、秒等你需要比较的部分。
      

  8.   

    procedure TForm1.Timer1Timer(Sender: TObject); 
    var
    Year, Month, Day: Word;
    Hour, Min, Sec, MSec: Word;
    s:string;
    begin
    DecodeDate(Date, Year, Month, Day);
    DecodeTime(Time, Hour, Min, Sec, MSec);
    s:=format('%.2d%.2d%.2d%.2d%.2d',[Year, Month, Day,Hour, Min]);//年,月,日,时,分
    if s='要比较的时间' then
    begin
    //处理事件
    end;
    end;
      

  9.   


    不用那么麻烦的,用formatdatetime函数来格式化就行了。