Delphi定时器-不那么简单
我正在Windows10上使用Delphi2009 我有一个简单的计时器(Delphi定时器-不那么简单,delphi,delphi-2009,Delphi,Delphi 2009,我正在Windows10上使用Delphi2009 我有一个简单的计时器(JvTimer,但是TTimer也有同样的问题),它的间隔在对象检查器中设置为1000ms。它在标签中显示倒计时 我已经做过很多次了,但由于某种原因,这次不起作用了。它似乎随机跳过9、7、5等等 我已经更改了标签、计时器、间隔,但仍然是一样的-调试给出了正确的步骤,但只要我在调试器之外运行它,我就会发现问题 var timeout: integer; procedure TForm1.Timer1Timer(Send
JvTimer
,但是TTimer
也有同样的问题),它的间隔在对象检查器中设置为1000ms。它在标签中显示倒计时
我已经做过很多次了,但由于某种原因,这次不起作用了。它似乎随机跳过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;
var
超时:整数;
程序TForm1.Timer1Timer(发送方:TObject);
开始
如果超时1小于1,则
开始
jvTimer1.Enabled:=False;
如果WindowsState=wsNormal,则
WindowState:=wsp;
结束
其他的
开始
12月(超时1);
LabeledEdit5.Text:=IntToStr(timeout1);
结束;
结束;
计时器不是很精确。不要通过计算计时器事件的执行次数来计算时间
相反:启动计时器时,请记住变量中的当前TDateTime,然后在计时器事件中,通过将当前时间与记住的启动时间进行比较,计算启动计时器后经过的时间。谢谢Dave,
我对它进行了黑客攻击以提供MCVE,我发现了问题所在。
不知怎的,这个错误已经悄悄地出现了!!
我已经创建了两次主窗体。这一定是导致计时器出现问题的原因。
克里斯
我们不能使用MCVELabeled5。更新可能会对您有所帮助。听起来好像其他事情正在进行,没有时间重新绘制控件。谢谢-但我已经尝试过了,并且刷新了表单。没有区别。奇怪的是,如果我创建一个新项目,只需要一个计时器、按钮和标签,它就可以正常工作。当ttimer倒计时时,原始程序中没有导致任何事件的内容。此外,数字以更高的速率倒计时(大约500毫秒-即7-5-3以1秒的间隔进行),尽管数字以正确的速率变化。非常奇怪!!我在调试模式下测试它-如果我在除计时器事件之外的每个函数和过程中放置断点,它们都不会被触发,因此我假设如果我在没有调试的情况下运行,这与任何其他部分都不会有任何关系-仍然是同一个问题。一秒钟的计时器肯定不会导致问题!据我所知,应用程序中没有同时发生其他事件。@用户如果您不向我们显示代码,我们如何提供帮助。为什么我们不能有一个MCVE?是否需要帮助?还要将超时变量从全局变量更改为表单类的成员字段,以便表单的不同实例不使用相同的变量。
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.