精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Delphi>>控件开发和使用>>Delphi自定义部件开发(2)

主题:Delphi自定义部件开发(2)
发信人: mark7312(小马哥)
整理人: soaringbird(2001-09-27 09:13:55), 站内信件
19.2.1.3 建立新部件的方法

 

  建立新部件的方法有两种:

  ● 手工建立部件

 ● 使用Component Expert

 

 一旦完成建立后,就得到所需的最小功能单位的部件,并可以安装在Component Palette上。安装完后,你就能将新部件放置在窗体窗口,并可在设计阶段和运行阶段进行测试。你还能为部件增加新的特征、更新选择板、重新测试。

  1. 手工创建部件

显然创建部件最容易的方法是使用Component Expert。然而,你也能通过手工来完成相同步骤。

  手工创建部件需要下列三步:

  ● 创建新的库单元

  ● 继承一个部件对象

 ● 注册部件

 

  ⑴ 创建新的库单元

  库单元是Object Pascal代码的独立编译单位。每一个窗体有自己的库单元。大多数部件(在逻辑上是一组)也有自己的库单元。

  当你建立部件时,你可以为部件创建一个库单元,也可将新的部件加在已有的库单元中。

 ① 为部件创建库单元,可选择File/New... ,在New Items对话框中选择Unit,Delphi将创建一个新文件,并在代码编辑器中打开它

 ② 在已有库单元中增加部件,只须选择File/OPen为已有库单元选择源代码。在该库单元中只能包含部件代码,如果该库单元中有一个窗体,将产生错误

 

  ⑵ 继承一个部件对象

  每个部件都是TComponent的后代对象。也可从TControl、TGraphicControl等继承。

  为继承一个部件对象,要将对象类型声明加在库单元的interface部分。

  例如,建立一个最简单的从TComponent直接继承非可视的部件,将下列的类型定义加在部件单元的interface部分。

 

  type

TNewComponent=class(TComponent)

……

end;

 

 现在你能注册TNewComponent。但是新部件与TComponent没什么不同,你只创建了自己部件的框架。

  ⑶ 注册部件

  注册部件是为了告诉Delphi什么部件被加入部件库和加入Component Palette的哪一页。

  为了注册一个部件:

  ① 在部件单元的interface部分增加一个Register过程。Register不带任何参数,因此声明很简单:

 

procedure Register;

 

如果你在已有部件的库单元中增加部件,因为已有Register 过程,因此不须要修改声明。

  ② 在库单位的implementation部件编写Register过程为每一个你想注册的部件调用过程RegisterComponents,过程RegisterComponents带两个参数:Component Palette的页名和部件类型集。例如,注册名为TNewComponent的部件,并将其置于Component Palette的Samples页,在程序中使用下列过程:

 

procedure Register;

begin

RegisterComponents(´Samples´, [TNewComponent]);

end; 

 

 一旦注册完毕,Delphi自动将部件图标显示在Component Palette上。

  2. 使用Component Expert(部件专家)

  你能使用Component Expert创建新部件。使用Component Expert简化了创建新部件最初阶段的工作,因为你只需描述三件事:

  ● 新部件的名字

  ● 祖先类型

  ● 新部件要加入的Component Palette页名

 

  Component Expert执行了手工方式的相同工作:

  ● 建立新的库单元

 ● 继承得到新部件对象

  ● 注册部件

 

  但Component Expert不能在已有单元中增加部件。

可选择File/New... ,在New Items对话框中选择Component,就打开Component Expert对话框。 

  填完Component Expert对话框的每一个域后,选择OK。Delphi建立包括新部件和Register过程的库单元,并自动增加uses语句。

  你应该立刻保存库单元,并给予其有意义的名字。

 



----
小马哥

美丽的梦和美丽的诗一样,都是可遇而不可求的,
常常在最没能料到的时候里出现
     

[关闭][返回]