正如问题主题所说.我在Delphi中有一个控制台应用程序,它包含一个TTimer变量.我想要做的是为事件分配一个事件处理程序TTimer.OnTimer.我是Delphi的新手,我以前使用C#并且事件处理程序添加到事件是完全不同的.我发现一个人并不是简单地将一个过程作为一个处理程序分配给事件,你必须创建一个带有一个方法的虚拟类,该方法将成为处理程序,然后将此方法分配给该事件.这是我目前的代码:
program TimerTest;
{$APPTYPE CONSOLE}
uses
SysUtils,
extctrls;
type
TEventHandlers = class
procedure OnTimerTick(Sender : TObject);
end;
var
Timer : TTimer;
EventHandlers : TEventHandlers;
procedure TEventHandlers.OnTimerTick(Sender : TObject);
begin
writeln('Hello from TimerTick event');
end;
var
dummy:string;
begin
EventHandlers := TEventHandlers.Create();
Timer := TTimer.Create(nil);
Timer.Enabled := false;
Timer.Interval := 1000;
Timer.OnTimer := EventHandlers.OnTimerTick;
Timer.Enabled := true;
readln(dummy);
end.
Run Code Online (Sandbox Code Playgroud)
这似乎对我来说是正确的,但由于某种原因它不起作用.
编辑
看起来该TTimer组件将无法工作,因为控制台应用程序没有消息循环.有没有办法在我的应用程序中创建计时器?
我有一个delphi控制台应用程序,我需要在用户按任意键时终止,问题是我不知道如何实现一个功能来检测按键何时,我想这样做.
{$APPTYPE CONSOLE}
begin
MyTask:=MyTask.Create;
try
MyTask.RunIt;
while MyTask.Running and not IsKeyPressed do //how i can implement a IsKeyPressed function?
MyTask.SendSignal($56100AA);
finally
MyTask.Stop;
MyTask.Free;
end;
Run Code Online (Sandbox Code Playgroud)
结束.