当前位置:七道奇文章资讯编程技术Delphi编程
日期:2011-03-20 17:55:00  来源:本站整理

第十九章 Delphi自定义部件开辟(二)[Delphi编程]

赞助商链接



  本文“第十九章 Delphi自定义部件开辟(二)[Delphi编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

19.2.2 Delphi部件编程 

19.2.2.1 成立属性 

 属性(Property)是部件中最特别的部份,主要因为部件用户在计划时可以瞥见和操作它们,并且在交互历程中能当即得到返回后果.属性也很重要,因为假如将它们计划好后,将利用户更简单地利用,自己保护起来也很简单.

  为了使你在部件中更好地利用属性,本部份将介绍下列内容:

 ● 为什么要成立属性

  ● 属性的种类

 ● 公布(publishing)担当的属性

  ● 定义部件属性

  ● 编写属性编辑器

 

  1. 为什么要成立属性

  属性供应非常重要的好处,最明显的好处是属性在计划时能呈目前Object Inspector窗口中,这将简化编程工作,因为你只需读用户所赋的值,而不要处理构造对象的参数.

  从部件利用者的概念看,属性象变量.用户可以给属性赋值或读值,就好象属性是对象的域.

  从部件编写者的概念看属性比对象的域有更强的功效;

  ⑴ 用户可以在计划时设置属性

  这是非常重要的,因为不象办法,只能在运行时拜候.属性利用户在运路程序之前就可以定制部件,普通你的部件不该包含很多的办法,它们的功效可以通过属性来实现.

  ⑵ 属性能躲藏具体的实现细节

  ⑶ 属性能惹起简单地赋值之外的呼应,如触发事件

  ⑷ 用于属性的实现办法可以是虚拟办法,这样看似简单的属性在差别的部件中,将实现差别的功效.

 

 2. 属性的范例

  属性可以是函数能返回的任何范例,因为属性的实现可以利用函数.全部的Pascal范例,兼容性法则都实用属性.为属性挑选范例的最重要的方面是差别的范例呈目前Object Inspector窗口中的方法差别.Object Inspector将按差别的范例决意其呈现的方法.

你也能在注册部件时描写差别的属性编辑器.

  下表列出属性呈目前Object Inspector窗口中的方法

 

表19.3 属性呈目前Object Inspector窗口中的方法

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

属性范例       处 理 方 式

───────────────────────────────────────

简单范例   Numeric、Character和 String属性呈目前Object Inspector中,用户可

以直接编辑

列举范例 列举范例的属性显示值的方法定义在代码中.挑选时将呈现下拉  

式列表框,显示全部的大概取值.

调集范例 调集范例呈目前Object Inspector窗口中时正如一个调集,展开后,用         

户通过将调集元素设为True或False来挑选.

对象范例 作为对象的属性本身有属性编辑器,假如对象有自己的published属

性,用户在Object Inspector中通过展开对象属性列,可以独立编辑它们,

对象范例的属性必须从TPersistent担当.

数组范例 数组属性必须有它们自己的属性编辑器,Object Inspector没有内嵌对数

组属性编辑的支持.  

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

 

3. 公布担当的属性

  全部部件都从祖先范例担当属性.当你从已有部件担当时,新部件将担当祖先范例的全部属性.假如你担当的是抽象类,则担当的属性是protected或public,但不是published.如想利用户拜候protected或public属性,可以将该属性重定义为published.假如你利用TWinControl担当,它担当了Ctl3D属性,但是protected的,因此用户在计划和运行时不能拜候Ctl3D,通过在新部件中将Ctl3D重声明为published,就改变了Ctl3D的拜候级别.下面的代码演示若何将Ctl3D声明为published,使之在计划时可被拜候.

 

  type

TSampleComponent=class(TWinControl)

published

property Ctl3D;

end;

 

4. 定义部件属性

  ⑴ 属性的声明

  声明部件的属性,你要描写:

 ● 属性名

  ● 属性的范例

  ● 读和设置属性值的办法

 

  至少,部件属性该当定义在部件对象声明的public部份,这样可以在运行时很便利地从外部拜候;为了能在计划时编辑属性,该当将属性在published部份声明,这样属性能自动显示在Object Inspector窗口中.下面是典型的属性声明:

 

  type

TYourComponent=class(TComponent)

private

FCount: Integer { 内部存储域 }

function GetCount: Integer; { 读办法 }

procedure SetCount(ACount: Integer); { 写办法 }

pubilic

property Count: Integer read GetCount write SetCount;

end;

 

  ⑵ 内部数据存储

  关于若何存储属性的数据值,Delphi没有分外的规定,普通Delphi部件遵守下列规定:

 ● 属性数据存储在对象的数据域处

  ● 属性对象域的标识符以F开首,比方定义在TControl中的属性FWidth

  ● 属性数据的对象域应声明在private部份

 

  后代部件只应利用担当的属性自身,而不能直接拜候内部的数据存储.

  ⑶ 直接拜候

  使属性数据可用的最简单的办法是直接拜候.属性声明的read 和write部份描写了怎样不通过调用拜候办法来给内部数据域赋值.但普通都用read举行直接拜候,而用write举行办法拜候,以改变部件的状况.

  下面的部件声明演示了怎样在属性定义的read 和write部份都采取直接拜候:

 

  type

TYourComponent=class(TComponent)

private { 内部存储是私有 }

FReadOnly: Boolean; { 声明保存属性值的域 }

published { 使属性在计划时可用 }

property ReadOnly: Boolean read FReadOnly write FReadOnly;

end;

 

  ⑷ 拜候办法

  属性的声明语法答应属性声明的read和write部份用拜候办法代替对象私有数据域.不管属性是若何实现它的read 和write部份,办法实现该当是private,后代部件只能利用担当的属性拜候.

  ① 读办法

属性的读办法是不带参数的函数,并且返回同属性相同范例的值.普通读函数的名字是"Get"后加属性名,比方,属性Count的读办法是GetCount.不带参数的唯一例外是数组属性.假如你不定义read办法,则属性是只写的.

  ② 写办法

  属性的写办法老是只带一个参数的历程.参数可以是引用或值.普通历程名是"Set"加属性名.比方,属性Count的写办法名是SetCount.参数的值采取设置属性的新值,因此,写办法需求履行在内部存储数据中写的操作.

  假如没有声明写办法,那么属性是只读的.

  普通在设置新值前要检测新值能否与当前值差别.

  下面是一个简单的整数属性Count的写办法:

 

  procedure TMyComponent.SetCount( value: Integer);

begin

if value <>FCount then

begin

FCount := Value;

update;

end;

end;

 


  以上是“第十九章 Delphi自定义部件开辟(二)[Delphi编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>第十九章 Delphi自定义部件开辟(四)</b>
  • 第十九章 Delphi自定义部件开辟(三)
  • 第十九章 Delphi自定义部件开辟(二)
  • <b>第十九章 Delphi自定义部件开辟(一)</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .