//改写DefineProperties虚方法,用以实现控件属性值的持久化。procedure DefineProperties(Filer: TFiler); override;procedure TMyTimer.DefineProperties(Filer: TFiler);begininherited;filer.DefineProperty('MyProperty',LoadProperty,StoreProperty,true);//LoadProperty 和StoreProperty 是以函数为参数end;   // 在DefineProperties方法中需要一个写变量函数作为参数。procedure StoreProperty(Writer:TWriter);procedure TMyTimer.StoreProperty(Writer:TWriter);beginwriter.WriteInteger(FInterval);writer.WriteInteger(FResolution);writer.WriteBoolean(FEnabled);//持久化三个保护字段变量end;//在DefineProperties方法中需要一个读变量函数作为参数。    procedure LoadProperty(Reader:TReader);    procedure TMyTimer.LoadProperty(Reader:TReader);begin   FInterval:=reader.ReadInteger;  FResolution:=reader.ReadInteger;Fenabled:=reader.ReadBoolean;hirestimer1.Interval:=FInterval;hirestimer1.Resolution:=FResolution;hirestimer1.Enabled:=FEnabled;// 读取属性值end;// 当属性值改变时,修改HiResTimer1控件对应的属性值。function TMyTimer.Get_Enabled: WordBool;begin  Result := FEnabled;end;procedure TMyTimer.Set_Enabled(Value: WordBool);begin  FEnabled := Value;  hirestimer1.Enabled :=FEnabled;//设置hirestimer1.Enabled  决定定时器是否工作。 end;function TMyTimer.Get_Interval: Integer;begin  result:=Finterval;end;function TMyTimer.Get_Resolution: Integer;begin  result:=Fresolution;end; procedure TMyTimer.Set_Interval(Value: Integer);begin  Finterval:=value;  hirestimer1.Interval:=Finterval;  // hirestimer1.Interval的作用和VB自带的Timer定时器Interval属性功能一致。end;procedure TMyTimer.Set_Resolution(Value: Integer);begin  Fresolution:=value;  hirestimer1.Resolution:=Fresolution;  // hirestimer1.Resolution 属性保证定时器的精度。数值越小精度越高。end;添加完属性后,还要在IMyTimerEvents中加入Ontimer事件,首先在私有段中定义一个TimerEvent 函数。然后在程序Initialize段中让HiResTimer1.OnTimer = TimerEvent;而在TimerEvent 事件中又调用FEvents.OnTimer,这样就能在Ontimer事件中捕获到HiResTimer1.OnTimer事件。程序实现如下所示:procedure TMyTimer.Initialize;begin  inherited Initialize;   HiResTimer1.OnTimer:=TimerEvent;  end;procedure TMyTimer.TimerEvent(Sender: TObject);begin  if FEvents <> nil then FEvents.OnTimer;end;4.因为我们要编写的是一个非可视Activex 控件,所以控件在用于VB等开发环境时还应具有如下特征即:控件在designtime 时尺寸应固定且可见,而在 runtime时不可见。以下代码即可实现尺寸固定:constructor Create(AOwner: TComponent); override;constructor TMyTimer.Create(AOwner: TComponent);begin  self.AutoSize:=true;  inherited create(aowner);  self.width:=32;  self.height:=32;  self.Constraints.MaxHeight:=32;  self.Constraints.MaxWidth:=32;  self.Constraints.MinHeight:=32;  self.Constraints.MinWidth:=32; end;下面这行代码即可实现ActiveX控件在designtime 时可见而runtime时不可见的功能。            TActiveFormFactory.Create(    ComServer,    TActiveFormControl,    TMyTimer,    Class_MyTimer,    1,   `97B151A-9D6F-4DCC-BAA8-E4B51D2DD68B}`    OLEMISC_INVISIBLEATRUNTIME, //修改后    //OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL, 默认参数    tmApartment);