Delphi软件开发技术 教学课件 ppt 作者 张世明 P2

上传人:E**** 文档编号:89355543 上传时间:2019-05-23 格式:PPT 页数:171 大小:224KB
返回 下载 相关 举报
Delphi软件开发技术 教学课件 ppt 作者  张世明 P2_第1页
第1页 / 共171页
Delphi软件开发技术 教学课件 ppt 作者  张世明 P2_第2页
第2页 / 共171页
Delphi软件开发技术 教学课件 ppt 作者  张世明 P2_第3页
第3页 / 共171页
Delphi软件开发技术 教学课件 ppt 作者  张世明 P2_第4页
第4页 / 共171页
Delphi软件开发技术 教学课件 ppt 作者  张世明 P2_第5页
第5页 / 共171页
点击查看更多>>
资源描述

《Delphi软件开发技术 教学课件 ppt 作者 张世明 P2》由会员分享,可在线阅读,更多相关《Delphi软件开发技术 教学课件 ppt 作者 张世明 P2(171页珍藏版)》请在金锄头文库上搜索。

1、第2章Delphi自定义组件的开发,Delphi不仅是一个优秀的可视化编程工具,而且还可以用来编写自定义的组件。,要创建一个组件,很简单。,首先,要选择一个祖先类;然后,用Delphi提供的组件专家生成组件的框架;,接着,加入自己的属性、方法和事件;最后,把组件安装在IDE中。,2.1 选择祖先类 2.2 建立组件框架 2.3 加入属性 2.4 加入方法 2.5 加入事件,2.1 选择祖先类,编写组件的首要工作就是选择一个合适的祖先类。,Delphi允许选择现有的组件作为祖先类,,不过,一定要精心选择其中最合适的组件作为祖先类,因为祖先类选择得好,可以使创建新组件的工作得到最大程度的简化。,反

2、之,如果选的祖先类不合适,不但给创建新组件造成困难,甚至无法实现。,2.1.1 公共祖先类,Delphi是一个真正面向对象的编程工具,它提供了一个符合工业标准的组件库(VCL)。,尽管VCL中的组件千差万别,但它们都是从几个共同的祖先类继承下来的,最顶层的是TObject,,接下来是TPersistent,再下面是TComponent。,TComponent是所有VCL组件的祖先类。,尽管所有组件都是从TComponent继承下来的,但直接继承的只有少数几个非可视的组件如TTimer、TDataSource等,,其他组件则是从TComponent的下级TControl继承下来的,从TContr

3、ol继承下来的组件是可视组件(也称为控件)。,TControl又有几个继承者,其中TWinControl是窗口控件的祖先类,TGraphicControl是非窗口控件的祖先类。,TCustomControl混合了TWinControl和TGraphicControl的优点,它既具有窗口控件的特征,又有Canvas属性和Paint方法。,因此,自定义的组件一般选择TCustomControl作为祖先类。,2.1.2 现有的组件,除了上述公共祖先类外,还可以选择组件选项板上现有的组件作为祖先类,选择现有的组件作为祖先类是创建组件的捷径。,一般来说,如果要创建一个全新的组件,就选择公共祖先类作为组件

4、的祖先类。,如果要创建的组件与某个现有的组件类似,只是少数地方需要重新定义,建议选择现有的组件作为祖先类。,一般来说,如果要在现有组件的基础上进行扩展,也就是说要增加功能,应当直接选择组件作为祖先类。,如果要在现有组件的基础上进行精简,也就是说要去掉某些功能,就不能直接选择组件作为祖先类,,因为祖先类的所有成员(私有的除外)理所当然地成为派生类的成员,这种情况下应当选择组件的抽象上级作为祖先类。,2.1.3 组件模板,有时候,仅仅是对组件的某些属性的默认值不满意,这时候不一定要创建一个新组件,可以创建一个组件模板。,要创建组件模板,先要把一个或几个组件放到Form上,修改它们的属性,,然后选择

5、这些组件,再使用“Component”菜单上的“Create Component Template”命令,,Delphi将自动把选择的组件及其属性值保存到一个组件模板文件中,,并且自动在组件选项板上增加一页(默认是“Templates”页),把新创建的组件模板加在这一页上。,以后就可以把组件模板当作一个复合的组件放到Form上,这个组件的属性具有自定义的默认值,从效果看,相当于创建了一个新组件。,Delphi会自动解决可能发生的组件名冲突的问题。,2.1.4 选择祖先类的建议,在创建组件之前,应当冷静而全面地考虑一下,究竟选择什么作为新组件的起点。,一般来说:,如果要创建一个非可视的组件,就选

6、择TComponent作为祖先类。,如果要创建一个全新的窗口控件,就选择TWinControl作为祖先类。,如果要创建一个全新的图像控件,就选择TGraphicControl作为祖先类。,如果要创建一个全新的同时兼具窗口控件和图像控件特征的组件,就选择TCustomControl作为祖先类。,如果要创建的组件与现有的组件类似,就选择现有的组件或该组件的直接上级作为祖先类。,如果只是想修改组件的某些属性的默认值,不必创建一个新组件,只需创建一个组件模板。,在创建组件之前,必须对Delphi面向对象的编程思想和语法有深刻的理解,最好还要对组件选项板上已有的组件比较熟悉,尽量从最终用户的角度考虑对组

7、件的要求。,2.2 建立组件框架,2.2.1 自动建立组件框架,确定了创建组件的起点后,下一步就要建立组件框架。,使用File菜单上New菜单项的Other子菜单打开“New Items”对话框,翻到“New”页,,双击“Component”图标将打开New Component对话框。,或者使用Component菜单上的New Component命令也能打开New Component对话框。,在“Ancestor type”框内选择一个合适的祖先类,在“Class Name”框内键入要创建的组件的类名,类名通常以T打头。,在“Palette Page”框内选择组件要加到组件选项板的哪一页上。,

8、从使用的角度讲,组件随便放在哪一页都没关系,不过,最好把组件放在一个合适的页上。,为此应当搞清楚组件选项板大致的分页原则。,在“Palette Page”框内也可以键入一个新的页名,组件选项板将自动增加一页。,“Unit file name”框用于输入组件的源文件名及其路径,“Search path”框用于给出组件的搜索路径。,单击OK按钮,Delphi将自动生成组件框架,实际上就是一个单元文件。,下列清单列出了一个组件的框架(假设组件的类名叫TMyEdit)。,2.2.2 手工建立组件框架,尽管使用组件向导建立组件框架非常方便,但为了对组件框架的代码更加了解,有必要介绍用手工的方式建立组件框

9、架。,第一步是建立一个新的单元。使用“File”菜单上的“New / Unit”命令,Delphi将创建一个新的单元并且在代码编辑器中打开这个单元。,第二步就是声明一个类。每个组件属于一个类,祖先类可以是TComponent,,也可以是TControl、TGraphicControl、TcustomControl,还可以是一个已有的组件。例如:,type TNewComponent=class(TComponent) end;,第三步就是注册组件。所谓注册,就是告诉Delphi组件的类名以及组件加到组件选项板的哪一页上。,要注册组件,可以参考下面的代码:,procedure Register;

10、 begin RegisterComponents(System,TSystem1,TSystem2); RegisterComponents(MyCustompage,TCustom1, TCustom2); end;,RegisterComponents()有两个参数:第一个参数是组件选项板的页名,第二个参数是 TComponentClass类型的数组,一般直接给出该数组的常量。,由此可见,即使一个单元中包含几个组件,只要这几个组件都是放在组件选项板的同一页上,调用一次RegisterComponents()就够了。,但如果这几个组件不是在同一页上,就必须声明几个不同的数组,再分别调用Re

11、gisterComponents()来注册。,2.3 加入属性,属性和方法都是组件的接口,程序员通过属性和方法来操纵组件。,属性的优势在于程序员可以借助于Object Inspector访问属性的值,而方法只能在运行期调用。,属性一般在类的published部分声明,而组件内部的数据字段通常在类的private部分声明。,在Delphi中,属性分为5种类型(不是指属性的数据类型),不同类型的属性其编辑方法是不同的。,这5种类型是:简单型、枚举型、集合型、对象型和数组型。,2.3.1 加入简单型的属性,简单型的属性是指那些数据单一的属性。,简单型的属性通常是数字、字符或字符串,对应的数据类型分别

12、是Integer、Char、String。,这些属性的编辑方法很简单,只要在Object Inspector中直接键入新的值就可以了。,对于简单型的属性来说,最好在声明属性时明确地给出默认值。,如果没有明确地给出默认值,对于Integer类型的属性来说默认值就是0,,对于Char类型的属性来说默认值就是null,对于String类型的属性来说默认值就是空字符串。,2.3.2 加入枚举型的属性,枚举型的属性对应于Object Pascal的枚举以及布尔类型,因为布尔类型也可以理解为只有两个元素的枚举类型。,要编辑枚举型的属性,通常是打开一个下拉列表,然后从列表中选择一个值。,也可以反复双击属性的

13、值栏,直到所希望的值出现为止。,要加入枚举型的属性,首先要声明一个枚举类型。,2.3.3 加入集合型的属性,集合型属性对应于Object Pascal的集合类型,一个典型的集合型属性是TOpenDialog组件的Options属性,,它有许多子属性,这些子属性实际上就是集合的元素。,要编辑集合型的属性,一种方法是直接在值栏的一对方括号内键入要包含到集合中的元素,彼此之间用逗号隔开。,另一种方法是双击属性左边的加号(+),然后把要包含到集合中的元素的值改为True,不包含到集合中的元素的值改为False。,在加入集合型属性之前,首先要声明一个集合类型。,注意:凡是在published声明的集合型

14、属性最多只能有32个元素,超过这个数将导致出错。,如果确实要超过32个元素,此属性只能是运行期属性(在public部分声明)。,2.3.4 加入对象型的属性,对象型属性本身就是类,类又有它自己的属性。要编辑对象型属性,得区分两种情况。,如果该类的属性也是公开的,一般是双击属性左边的加号(+),然后分别编辑该类的属性,一个典型的例子是Font属性。,另种情况是,类的属性并不是公开的,组件的使用者不能直接访问该类的属性,属性的值栏有一个省略号按钮(),,单击此按钮将打开一个特殊的编辑器。典型的例子是TListView组件的Items属性。,注意:对象型属性的类型必须以TPersistent或者TP

15、ersistent的派生类作为祖先类,也就是说不允许直接继承于TObject。,在加入对象型属性之前,首先要声明一个类。,TMyComponent的public部分声明了类的构造和析构。,为什么要专门声明构造和析构呢?因为ObjectProp是个对象属性,在创建TMyComponent实例的同时,应当创建TMyClass的实例。,当TMyComponent的实例被删除时,也应当同时删除TMyClass的实例。,类的构造一般这样定义:,constructor Create(AOwner : TComponent); begin inherited Create(AOwner); 先创建TMyCo

16、mponent的实例 FObjoct:=TMyClass.Create; 再创建TMyClass的实例 end;,类的析构一般这样定义:,destructor Destroy; begin FObject.Free; 先删除TMyClass的实例 inherited Destroy; 再删除TMyComponent的实例 end;,2.3.5 加入数组型的属性,可以像访问Object Pascal的数组一样来访问数组型属性,但数组型属性本身并不是数组。,对于一般的数组来说,只能用整数作为下标,而数组型属性还可以用字符串作为下标。,要编辑数组型属性,需要特殊的编辑器。,因此,数组型属性的值栏通常带一个省略号按钮。,典型的数组型属性是TMainMemu组件的Items属性。,2.3.6 公开继承的属性,类具有继承性。因此,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号