没有窗口也可以试着这样能不能放上TIMER。
1. 可以使用非可视控件,只要 uses 相应的 Unit 即可。
关于在 Console Application 里面使用 TTimer 控件,需要说明几点:
(1) Console Application 没有消息处理能力,所以我们要自行处理;
(2) TTimer 的 OnTimer 事件必须为某个类的成员函数,因此要动态的给 OnTimer 时间赋值就需要把 OnTimer 事件的处理函数包装在某个类中(详见代码)
(3) 相较而言,使用 SetTimer/KillTimer API 来做定时器更为简单(因为可以直接设置回调函数)
下面是一个简单的例子:
//-- ConsoleTimerDemo by Plzw ----------------------------------------------------------------------
program ConsoleTimerDemo;
{$APPTYPE CONSOLE}
uses
SysUtils, ExtCtrls, Windows;
type
TMyTimer = class
private
FTimer: TTimer;
procedure TimerProc(Sender: TObject);
public
constructor Create;
destructor Destroy; override;
end;
constructor TMyTimer.Create;
begin
FTimer := TTimer.Create(nil);
FTimer.Interval := 1000;
FTimer.OnTimer := TimerProc;
end;
destructor TMyTimer.Destroy;
begin
FTimer.Free;
inherited;
end;
procedure TMyTimer.TimerProc(Sender: TObject);
begin
WriteLn('Timer Trigger!');
end;
var
Msg: TMsg;
Timer: TMyTimer;
begin
Timer := TMyTimer.Create;
try
while Windows.GetMessage(Msg, 0, 0, 0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
finally
Timer.Free;
end;
end.