基于Delphi的组件设计之概念

2016-01-29 14:26 18 1 收藏

基于Delphi的组件设计之概念,基于Delphi的组件设计之概念

【 tulaoshi.com - Delphi 】

  一、组件的简要层次结构

  一般情况下,VCL的组件可以从Tcomponent为开始。其最明显的特征就是它的属性可以在设计时通过对象察看器来操纵,另外,他还能拥有其他组件。

  从Tcomponent下,分出非可视组件和可视组件。

  非可视组件如TOPenDialog,TTimer,TTable等,这些组件因为继承自Tomponent,所以也就继承了在设计时可以被操纵的特性。

  可视化组件始自TControl,是它引入了可视化属性和方法,使继承自它的类都有了这些可视化特性。

  TControl又分出两类组件类型:从TWinControl(窗口控件)自下的控件,和从TGraphicControl(图形控件)自下的控件。继承自TWinControl的控件将windows控件进行封装,所以拥有windows控件的很多特性,比如可以得到焦点,有唯一的句柄,用户可以通过发送消息与这些控件进行交互等。而继承自TGraphicControl的控件,也是可见的,但没有句柄,可以称之为图形控件,比如TLabel,TBevel,都是Delphi画出来的,并不占用系统资源。

  二、属性

  先看一个简单的属性定义:

TsomeObj=class

Private

FCount:integer;

Protected

Procedure SetCount(value:Integer);

published

Property count:integer read FCount write SetCount default 0;//属性定义

End;
  该属性从私有成员FCount读出值,而靠SetCount方法设置值到私有成员FCount。

  属性的优势在于可以很直观进行读写,而又不同于私有成员。因为属性可以通过写访问方法来保护私有成员:

Procedure TsomeBoj.SetCount(value:Integer);

Begin

If FCount<>value then

FCount:=value;

End;
  其中属性定义中的Default 0并不是默认值(即对象察看器显示的值),默认值要在组件类的构造函数中设定。而Default有这样的作用,决定DFM文件中是否要保存该属性的值,比如上面为Default 0,即当该属性值为0时,则该属性不会被保存到DFM中,如果该属性值不为0,则该属性会被保存到DFM中。另外属性定义还有一个关键字为

  NoDefault,设置了这个关键字,比如

Property count:integer read FCount write SetCount NoDefault;  
  则无论它的值是什么,都会被写到DFM文件中。

  属性可以有如下几种类型,下面只给出简单介绍,而这些类型的属性,会在组件制作时详细的运用:

  简单类型属性:如上面定义的,加一个例子

Property text:string read Ftext write SetText;
  枚举类型属性:

TEnumtype=(Enum1,Enum2,Enum3);

FEnumtype:TEnumtype;

Property Enumtype:TEnumtype read FEnumtype write FEnumtype;
  在对象察看器中看来就是下拉列框选择值。

  集合类型属性:

Tset=(set1,set2,set3);

Tsets=set of Tset;

Fsets:Tsets;

Property sets:Tsets read Fsets write Fsets;
  在对象察看器中看来,就是列出几个选项分别设置真假。比如TForm的BorderIcons属性即是。

  对象类型属性:一个属性是一个对象,而这个对象必须派生自Tpersistent或者他之下的类,才能在对象察看器中可以展开它,并设置它里面的属性。

  数组类型属性:数组属性如果要在对象察看器中看见,需要有自己的属性编辑器(如果不想在对象察看器看当然就不用啦),是比较高级的组件,在后来的组件制作再来介绍,会更直观一些。这里只给出它的定义形式:

来源:http://www.tulaoshi.com/n/20160129/1493285.html

延伸阅读
标签: Delphi
  组件技术是新一代软件技术发展的标志,作为著名的RAD开发工具,Delphi可以轻松地实现组件的开发。本文将详细介绍Delphi中DCOM/CORBA的实现步骤。 ■创建应用服务器 要创建一个多层Client/Server应用程序,首先要创建应用服务器,然后注册或安装应用服务器,只有应用服务器已注册并且正在运行的情况下,才能创建...
标签: Delphi
分布式COM(以下简称DCOM)的出现给我们轻松的创建分布式应用提供了机会;我们可以完全不去理会低级别的Windows Sockets(DCOM通过MS-RPC让客户与对象进行通信,幸运的是要开发COM应用,开发者几乎可以不去理会MS-RPC)而开发出功能强大、偶合性低(功能模块相对独立,很好的发挥了OO的思想)、易于部署的分布式计算系统。 本文我们...
这将是最后一个组件了,目标定为非可视化,事实上非可视化组件要比可视化组件难做,因为是从TComponent继承而来,就没有了很多属性和事件。而这些都要我们从头来做过。 这个非可视化组件,我决定为托盘组件,其中用到的技术较多,我不如列一个表出来,然后再来讲解好一点。另外,可能篇幅会多一些,请耐心看。 用到的技术: ...
Struts 和 Tiles 辅助基于组件的开发(5) Struts 和 Tiles 更复杂的使用 篇幅所限,不答应我再深入讨论 Struts 和 Tiles 包其它一些实用的方面,但我真的想简要地谈一下,这样您可以对 Struts 和 Tiles 可以做些什么有所了解。假如有足够的需求,可能这些内容会是将来文章的主题。 您会在本文的两个示例中注重到,我编码了名...
Struts 和 Tiles 辅助基于组件的开发(4) 2.在 EX2_INSTALL/src/web/tiles-layouts/rootLayout.jsp 中,找到清单 3 中显示的代码,然后编辑它以添加 br 标记和代码来插入 panel4 ,如清单 4 所示: 清单 3. 原始 rootLayout.jsp 代码 td width="35%" !-- ================================================...

经验教程

515

收藏

8
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部