gpt4 book ai didi

delphi - TTimer 对象可以是 Delphi 类的字段吗?

转载 作者:行者123 更新时间:2023-12-03 15:05:48 26 4
gpt4 key购买 nike

我两天前开始学习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 

确实如此,但我认为这不是问题。是否可以创建我想要的此类?

最佳答案

您尚未创建计时器。声明一个变量是不够的。您确实需要创建计时器。

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字段设置为私有(private)可见性。公开这样的类的内部结构是不好的。

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 的构造函数和析构函数为空。但是,如果您在某个时刻更改继承,并使您的类从不同的类派生,那么您将需要这样做。因此,在我看来,始终包含这些调用是一种很好的做法。

关于delphi - TTimer 对象可以是 Delphi 类的字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10413351/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com