Mik*_*ail 7 delphi timer delphi-7
我需要一个'无形'Delphi单元中的Timer(还有一个带有表单的主单元),所以我这样做:
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);
Run Code Online (Sandbox Code Playgroud)
问题是OnMyTimer过程永远不会运行.我真的很感激为什么:-)
为了使计时器工作,您的程序必须处理消息.在GUI程序中,该部分是自动的; 该TApplication课程为您提供.但是你说你有一个"没有形式"的程序,所以我想你可能没有调用Application.Run你的DPR文件.
要使用计时器,您需要处理消息.消息泵的典型起点是这样的代码:
while Integer(GetMessage(Msg, 0, 0, 0)) > 0 do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
Run Code Online (Sandbox Code Playgroud)
当计时器的周期结束时,操作系统会有效地wm_Timer在程序的消息队列中放置一条消息.该GetMessage调用从队列中获取消息,并DispatchMessage调用目标窗口的窗口过程.TTimer为自己创建一个隐藏窗口,作为这些消息的目标,并DispatchMessage确保它们到达那里.
除了你创建MyTimer并释放a之外MouseTimer,我没有看到你的代码有什么问题(我假设你在GUI应用程序中使用你的代码或者至少有一个消息循环)
此代码示例适用于Delphi 5.Hello World每秒都会将get写入事件日志.
unit Unit2;
interface
uses
extctrls;
type
TMyTimer = Class(TTimer)
public
procedure OnMyTimer(Sender: TObject);
end;
var
MyTimer: TMyTimer;
implementation
uses
windows, sysutils, classes;
procedure TMyTimer.OnMyTimer(Sender: TObject);
begin
OutputDebugString(PChar('Hello World'));
end;
initialization
MyTimer := TMyTimer.Create(nil);
with MyTimer do
begin
Interval := 1000;
Enabled := True;
OnTimer := OnMyTimer;
end;
finalization
FreeAndNil(MyTimer);
end.
Run Code Online (Sandbox Code Playgroud)