首页 Delphi编写高精度定时器ActiveX控件(电脑编程)

Delphi编写高精度定时器ActiveX控件(电脑编程)

举报
开通vip

Delphi编写高精度定时器ActiveX控件(电脑编程)Delphi编写高精度定时器ActiveX控件(电脑编程) DelphiActiveX 摘 要 本文通过一个编程实例介绍了Delphi 7下编写不可视ActiveX控件的 方法,并给出了源代码。为使用Delphi编写其他类型ActiveX控件的 读者提供参考和借鉴。 关键词 Delphi,ActiveX控件,定时器,VCL组件 一、前言 Delphi下有大量优秀的且提供源码的VCL组件,如果想在其他开发环境(如 VB 6.0,VC 6.0,VS.net等)中使用它们,就必须把这些VCL组件转换成Activ...

Delphi编写高精度定时器ActiveX控件(电脑编程)
Delphi编写高精度定时器ActiveX控件(电脑编程) DelphiActiveX 摘 要 本文通过一个编程实例介绍了Delphi 7下编写不可视ActiveX控件的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 ,并给出了源代码。为使用Delphi编写其他类型ActiveX控件的 读者提供参考和借鉴。 关键词 Delphi,ActiveX控件,定时器,VCL组件 一、前言 Delphi下有大量优秀的且提供源码的VCL组件,如果想在其他开发环境(如 VB 6.0,VC 6.0,VS.net等)中使用它们,就必须把这些VCL组件转换成ActiveX控件。目前,关于把可视化VCL组件转变为ActiveX控件的资料和例子非常多, 而把不可视VCL控件转换成ActiveX控件的资料却很少。笔者在网上找到了一 个优秀且开源的高精度定时器VCL组件,经过反复摸索终于成功将其转换成 一个ActiveX控件。该控件能够代替VB 6.0中自带的Timer控件,而且精度更高。在Delphi 7中,Actvieform是基于Delphi 窗体的ActiveX控件,可以像创建一个 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 的Delphi窗体一样创建ActiveForm,而不是把单个组件转换成 ActiveX控件。本文中,笔者将详细介绍如何利用Actvieform来建立一个高精度的定时器Activex控件。 二、实现 1.在Delphi 7中安装好要使用的VCL组件 本文中要转换的高精度定时器VCL组件的名称为THiResTimer,选择Delphi主菜单中component菜单下的install component子菜单,弹出安装控件 窗体。在Unit file name中浏览选择HIRESTIM.pas文件,并点击OK即可。安 装成功后,就会看到THiResTimer控件3个重要的属性Enabled、Interval、Resolution和一个重要的事件Ontimer。在使用Activeform建立ActiveX控件时,可以不必太多关心VCL组件源码实现方式,只注意要实现的组件属性和事件 即可。 2.创建一个Activeform (1)选择Delphi主菜单中File 菜单下的New,然后单击New菜单的子菜单other,弹出对象库窗体。 (2)在 ActiveX页中双击ActiveForm图标,出现Activeform Wizard(如图1所示)。 图1 Activeform Wizard 主界面 (3)如果想控制其他开发人员使用自己编写的ActiveX控件,选择Make control Licensed选项。Delphi会自动生成扩展名为.lic的许可文件和ActiveX控件一起发布使用。 (4)如果想显示有关ActiveX控件的任何其他信息,请选择 Include About Box选项。 (5)在 Project Name中输入项目名称,在 New ActiveX Name中输入控件名称,并点击OK。本文中,项目名称为mytimerprj,控件名称为mytimer。 (6)在Delphi工具栏中点击Save project图标。 本例中首先创建一个空白窗体,窗体名称为mytimer。可以在该窗体上添加 想要转换的任何非可视化VCL组件,在这里放置的是一个名为HiResTimer1的THiResTimer类型控件。 3.Activeform文件生成以后,接下来要做的就是编辑ActiveX控件的属性或事件。选择Delphi主菜单中View菜单下的type library子菜单,弹出如图2所示的Type Library editor 。可以直接在其上编辑属性或事件,先把系 统默认生成的属性和事件都删除,图2中IMyTimer的所有子项是属性, IMyTimerEvents的所有子项是事件。然后在IMyTimer后添加下列属性: 图2 Type Library 属性设置窗口 Enabled:VARIANT_BOOL Interval:long Resolution:long 当改变上面属性值时,HiResTimer1控件对应的属性相应改变。 程序代码如下: //在 保护字段声明三个变量 protected { Protected declarations } FInterval:integer; FResolution:integer; FEnabled:boolean; //改写DefineProperties虚方法,用以实现控件属性值的持久化。 procedure DefineProperties(Filer: TFiler); override; procedure TMyTimer.DefineProperties(Filer: TFiler); begin inherited; filer.DefineProperty('MyProperty',LoadProperty,StoreProperty,true); //LoadProperty 和StoreProperty 是以函数为参数 end; // 在DefineProperties方法中需要一个写变量函数作为参数。 procedure StoreProperty(Writer:TWriter); procedure TMyTimer.StoreProperty(Writer:TWriter); begin writer.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); 5.程序编好后,选择Delphi主菜单中 Run 菜单下的Register ActiveX Server,编译并注册 ActiveX控件。这样就可以在VB等其他开发环境中使用, 图3中就是用VB 6.0调用mytimer控件的例子。用户可以参考Delphi和VB源代码并实际运行。 图 3 调用mytimer控件 三、结语 通过编写不可视ActiveX控件基本的程序框架,便可以编写其他类型的非可视化ActiveX控件,如加密解密,数值计算,系统信息,通用对话框等。使 用Activeform编写ActvieX控件的优点之一是可以把那些不提供源代码的VCL组件也能转换成ActiveX控件,通过ActiveX控件使Delphi能够和其他可视化开发工具一起混合编程。
本文档为【Delphi编写高精度定时器ActiveX控件(电脑编程)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_792768
暂无简介~
格式:doc
大小:69KB
软件:Word
页数:8
分类:
上传时间:2018-03-10
浏览量:33