我需要一个Timer在“无表单”Delphi 单元中(仍然有一个带有表单的主单元),所以我这样做:
unit ...
interface
type
TMyTimer = Class(TTimer)
public
procedure OnMyTimer(Sender: TObject);
end;
var
MyTimer: TMyTimer;
implementation
procedure TMyTimer.OnMyTimer(Sender: TObject);
begin
...
end;
initialization
MyTimer := TMyTimer.Create(nil);
with MyTimer do
begin
Interval := 1000;
Enabled := True;
OnTimer := OnMyTimer;
end;
finalization
FreeAndNil(MyTimer);
问题是我的定时器程序永远不会运行。我真的很感激任何关于原因的想法:-)
为了让定时器工作,你的程序必须处理消息。在 GUI 程序中,该部分是自动的;这TApplication
类为你提供了这些。但你说你有一个“无形式”程序,所以我想你可能不会打电话Application.Run
在您的 DPR 文件中。
要使用计时器,您需要处理消息。消息泵的典型起点是这样的代码:
while Integer(GetMessage(Msg, 0, 0, 0)) > 0 do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
当定时器的周期结束后,操作系统会有效地放置一个wm_Timer
程序消息队列中的消息。这GetMessage
调用从队列中获取消息,并且DispatchMessage
调用目标窗口的窗口过程。TTimer
为自己创建一个隐藏窗口作为这些消息的目标,并且DispatchMessage
确保他们到达那里。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)