我两天前开始学习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;
Run Code Online (Sandbox Code Playgroud)
我的类似代码复制,但它无法正常工作.当我调用构造函数时,程序崩溃了(在行的访问冲突:clock.interval:= 1000;).我不知道是什么
Sender:TObject
Run Code Online (Sandbox Code Playgroud)
但我觉得这不是问题.是否有可能创建我想要的课程?
Dav*_*nan 12
您尚未创建计时器.声明变量是不够的.您需要创建计时器.
constructor Sth.Create()
begin
clock := TTimer.Create(nil);
clock.interval:=1000;
clock.OnTimer := clockTimer;
end;
Run Code Online (Sandbox Code Playgroud)
你也应该销毁它.在类中添加析构函数
destructor Destroy; override;
Run Code Online (Sandbox Code Playgroud)
并像这样实现它
destructor Sth.Destroy;
begin
clock.Free;
inherited;
end;
Run Code Online (Sandbox Code Playgroud)
我还建议你让你的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;
Run Code Online (Sandbox Code Playgroud)
请注意,我已经包含对继承的构造函数和析构函数的调用.这些在本类中不是必需的,因为它直接派生TObject而构造函数和析构函数为TObject空.但是如果你在某个时候更改了继承,并使你的类派生自另一个类,那么你需要这样做.因此,在我看来,总是包含这些调用是一种好习惯.