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的构造函数和析构函数为空.但是如果你在某个时候更改了继承,并使你的类派生自另一个类,那么你需要这样做.因此,在我看来,总是包含这些调用是一种好习惯. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |