Delphi计时器 - 不那么简单

时间:2017-02-26 17:42:29

标签: delphi delphi-2009

我在Windows 10上使用Delphi 2009。

我有一个简单的计时器(JvTimer,但与TTimer相同的问题),其Interval在对象检查器中设置为1000毫秒。它显示标签倒计时。

我已经多次这样做了,但由于某种原因,这次不能正常工作。它似乎随机跳过9,7,5等等。

我已经更改了标签,计时器,间隔但仍然相同 - 调试给出了正确的步骤,但是只要我在调试器外部运行它,我就会遇到问题。

var
  timeout: integer;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if timeout1 < 1 then
  begin
    jvTimer1.Enabled := False; 
    if WindowState = wsNormal then
      WindowState := wsMinimized;
  end
  else
  begin
    Dec(timeout1);
    LabeledEdit5.Text := IntToStr(timeout1);
  end;
end;

2 个答案:

答案 0 :(得分:1)

定时器不是很精确。不要通过计算执行计时器事件的次数来计算时间。

相反:在启动计时器时记住变量中的当前TDateTime,然后在计时器事件内,通过将当前时间与记忆的开始时间进行比较来计算自启动计时器以来所经过的时间。

答案 1 :(得分:-1)

谢谢戴夫, 我把它全部砍掉以提供MCVE,然后我发现了问题。 不知怎的,这个错误已经悄然而来!! 我创建了两次mainform。这必定会导致计时器问题。 克里斯

program mail2p;    
uses
  madExcept,
  madLinkDisAsm,
  madListHardware,
  madListProcesses,
  madListModules,
  Forms,
  mail2 in 'mail2.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
 // Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.