加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 09:46:26 所属栏目:大数据 来源:网络整理
导读:我两天前开始学习Delphi但是我遇到了困难.我崩溃了,因为没有什么事情发生,所以我决定写在这里.我想创建一个具有自己的TTimer对象的字段的类,它将在某个时间间隔执行某些操作.它甚至可能吗?假设我们有这样的代码: Sth = classprivatepublic clock:TTimer; p
我两天前开始学习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;

我还建议你让你的时钟字段具有私人可见性.暴露这样一个类的内部结构并不好.

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的构造函数和析构函数为空.但是如果你在某个时候更改了继承,并使你的类派生自另一个类,那么你需要这样做.因此,在我看来,总是包含这些调用是一种好习惯.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读