发信人: 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语句。
 
   你应该立刻保存库单元,并给予其有意义的名字。
 
  
 
 
  ---- 小马哥
  
 美丽的梦和美丽的诗一样,都是可遇而不可求的,
 常常在最没能料到的时候里出现
       | 
 
 
 |