两天前我开始学习Delphi但是我遇到了困难。我崩溃了,因为没有什么事情发生,所以我决定写在这里。我想创建一个具有自己的TTimer对象的字段的类,它将在某个时间间隔执行某些操作。它甚至可能吗?假设我们有这样的代码:
Sth = class
private
public
clock:TTimer;
procedure clockTimer(Sender: TObject);
constructor Create();
end;
constructor Sth.Create()
begin
clock.interval:=1000;
clock.OnTimer := clockTimer;
end;
procedure Sth.clockTimer(Sender: TObject);
begin
//some action on this Sth object at clock.interval time...
end;
我的类似代码复制,但它无法正常工作。当我调用构造函数时,程序崩溃了(在行的访问冲突:clock.interval:= 1000;)。我不知道是什么
Sender:TObject
但我认为这不是问题。是否有可能创建我想要的课程?
答案 0 :(得分:12)
您尚未创建计时器。声明变量是不够的。您需要创建计时器。
constructor Sth.Create()
begin
clock := TTimer.Create(nil);
clock.interval:=1000;
clock.OnTimer := clockTimer;
end;
你也应该销毁它。在类
中添加析构函数destructor Destroy; override;
并像这样实现它
destructor Sth.Destroy;
begin
clock.Free;
inherited;
end;
我还建议您让clock
字段具有隐私可见性。公开这样的类的内部结构并不好。
TMyClass = class
private
FClock: TTimer;
procedure ClockTimer(Sender: TObject);
public
constructor Create;
destructor Destroy; override;
end;
....
constructor TMyClass.Create
begin
inherited;
FTimer := TTimer.Create(nil);
FTimer.Interval := 1000;
FTimer.OnTimer := ClockTimer;
end;
destructor TMyClass.Destroy;
begin
FTimer.Free;
inherited;
end;
请注意,我已经包含了对继承的构造函数和析构函数的调用。这些在本类中不是必需的,因为它直接从TObject
派生,TObject
的构造函数和析构函数为空。但是如果你在某个时候更改了继承,并使你的类派生自另一个类,那么你需要这样做。因此,在我看来,最好始终包含这些调用。