我想通过计时器,到某一时间就执行相应程序,但我将'22:03:00'字符串转换为时间格式后,当系统时间到22:03:00,也没执行相关程序,这是为什么,请高手赐教。
implementation
var
  Shi:TDateTime;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer1.Enabled := True;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
  If Shi = Time Then
  begin
    Edit1.Text := '成功';
    Timer1.Enabled := False;
  end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
  Shi := StrToDateTime('22:03:00');
end;

解决方案 »

  1.   


     If CompareText(TimeToStr(Shi),TimeToStr(Time))= 0  Then
      begin
        Edit1.Text := '成功';
        Timer1.Enabled := False;
      end;这样试试
      

  2.   

    只所以建议lz试试上面的方法是因为
    目前你比对的时间都是精确到秒,但是取得的系统时间是精确到秒之后的单位。同样用Datetime比对,时间是11:00:00秒,但是系统时间后面还有一位,所以往往比对时间看似一致但就是不会相等。 
      

  3.   

    时间这个东西是很精确的。TDatetime本身为1个double数值类型。即2个double在比较。你想1想。你怎么确定取得的系统时间就恰好是你指定那个时间。而double到TdateTime是经过换算了,你怎么知道换算的过程中没有舍掉数值。所以这里有很多的不确定。呵呵。道理是这样的,具体细节不是很清楚。建议lz看下TdateTime是如何换算的。
      

  4.   


    果真按kfcoffe说的,我将INTERVAL改为500后正常。谢谢。
      

  5.   

    " If Shi = Time Then 
      begin " 
    改为
    if Shi >= Time Then 
    begin
    ...首先,你的计时器估计是1s一次的,所以有可能错过这个时间点。另外,Time得到的值不太可能精确等于你的给定值。这就好像你要穷举0~1之间的所有实数一样不可能。所以不要精确比较,用大小关系比较。