我想通过计时器,到某一时间就执行相应程序,但我将'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;
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;
If CompareText(TimeToStr(Shi),TimeToStr(Time))= 0 Then
begin
Edit1.Text := '成功';
Timer1.Enabled := False;
end;这样试试
目前你比对的时间都是精确到秒,但是取得的系统时间是精确到秒之后的单位。同样用Datetime比对,时间是11:00:00秒,但是系统时间后面还有一位,所以往往比对时间看似一致但就是不会相等。
果真按kfcoffe说的,我将INTERVAL改为500后正常。谢谢。
begin "
改为
if Shi >= Time Then
begin
...首先,你的计时器估计是1s一次的,所以有可能错过这个时间点。另外,Time得到的值不太可能精确等于你的给定值。这就好像你要穷举0~1之间的所有实数一样不可能。所以不要精确比较,用大小关系比较。