知识大全 通过实例看VCL组件开发全过程(二)

Posted 属性

篇首语:没有伞的孩子必须学会努力奔跑。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 通过实例看VCL组件开发全过程(二)相关的知识,希望对你有一定的参考价值。

通过实例看VCL组件开发全过程(二)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    三 添加组件图标 注册组件的属性类别

  在前面的文章中我们已经完成了组件的基本功能的开发 但是遗憾的是一但你安装了组件包 你会发现组件显示在delphi组件页中的图标并不能清楚的说明我们组件的功能(由于我们的组件继承自TcustomLabel 图标是一个默认的delphiVCL的图标 如果组件继承自其它已经出现在组件面板中的组件 图标还会和已有组件一样!) 显然一个好的组件特别是一个要发布的商业化组件需要一个有自己特色的目标 下面我们便来完成这一工作

  打开delphi自带的Image Editor(ToolsàImage Editor) 新建一个组件资源(fileànewàComponent Resource File ( dcr)) 在弹出的窗口中右键单击new新建一个bitmap位图资源调整好位图的大小(我们用 * )和色深后确定 双击建立好的位图名字还是做图(做图工具的使用基本和windows自带的画图程序差不多 这里略过) 完成后我们需要为位图文件另取一个名字(右键点击bitmap) 因为delphi强制要求这个位图的名字要和组件的名字一样 并且要全部大写 这里我们就取为 TCLOCK 最后保存这个资源文件到我们的组件包(dpk文件)目录 命名为ClockDcr dcr 最后在Clock的代码中的interface部分加入一个编译器开关 $R ClockDcr dcr然后重新编译更新组件(还记得怎么更新吗?) 这时的组件图标已经变成我们刚才做的位图了!

  接下来我们将为我们开发的组件的属性进行分类并介绍一个组件开发中重要的特性 属性类别

  为了让我们组件的一些和时钟有关的属性注册成一个新的类别把它们和label的属性分开开来 让组件用户能够更容易的发现组件的新特性 我们继承了属性类别的基类TpropertyCategory(在delphi 中这需要引用单元DsgnIntf 不过应该特别注意在delphi 中已经没有了这个基类 也没有这个单元文件 注册新的属性类别可以通过直接使用RegisterPropertyInCategory这种简单的办法完成 在下面的代码中会在相应的地方同时给出两种方法并说明他们的不同 )并覆蓋它的两个类方法 最后在Register过程中用RegisterPropertyInCategory(在delphi 中在DsgnIntf单元 在delphi 中在DesignIntf单元 注意 delphi的一些单元并没有被安装 包括我们这里指出的这两个单元和将要在后文中指出的单元 这些单元属于delphi的open tools api是用来方便我们 特别是组件开发者用来扩展delphi 如果你的delphi没有这些单元 请将delphi安装目录下的source文件夹里ToolsAPI文件夹中的pas文件拷贝到lib目录下 在你第一个需要用到这些单元的程序编译时delphi会自动编译这些单元)方法注册属性类别 我们把以下的部分代码补充进我们开发的组件的原代码中

uses

DesignIntf;//delphi //delphi 用DsgnIntf

//这部分代码如果是delphi 就不需要了

type

TClockGategory=class(TpropertyCategory)//建立一个新的属性类别

Class function Name:string;override;//属性类别的名称

Class function Description:string;override;//属性类别的描述

End;

……

Class function TClockGategory Name:string;

Begin

Result:= ClockPro ;

End;

Class function TClockGategory Description:string;

Begin

Result:= Our Component Clock Description ;

End;

//  接下来我们要做的就是修改register过程

procedure Register;

begin

RegisterComponents( ClockAndTime [TClock]);

//这是delphi 的代码

RegisterPropertyInCategory( ClockPro TClock State );

RegisterPropertyInCategory( ClockPro TClock Active );

RegisterPropertyInCategory( ClockPro TClock BeginTime );

RegisterPropertyInCategory( ClockPro TClock WakeTime );

RegisterPropertyInCategory( ClockPro TClock AllowWake );

RegisterPropertyInCategory( ClockPro TClock OnWakeUp );

RegisterPropertyInCategory( ClockPro TClock OnTimeUp );

//这是delphi 的代码

RegisterPropertyInCategory(TClockGategory TClock State );

RegisterPropertyInCategory(TClockGategory TClock Active );

RegisterPropertyInCategory(TClockGategory TClock BeginTime );

RegisterPropertyInCategory(TClockGategory TClock WakeTime );

RegisterPropertyInCategory(TClockGategory TClock AllowWake );RegisterPropertyInCategory(TClockGategory TClock OnWakeUp );

RegisterPropertyInCategory(TClockGategory TClock OnTimeUp );

//

end;

  重新编译后 做一个测试程序 这时只要组件使用者右键单击Object Inspector选择ArrangeàBy Category就可以看到属性已经被清楚的分类了 如下图

  然而 应该清楚的是属性类别绝对不能被滥用 因为过多的使用该技术会使组件使用者为了找到某一个属性变的更加麻烦和摸不著头脑

cha138/Article/program/Delphi/201311/24769

相关参考

知识大全 通过实例看VCL组件开发全过程

通过实例看VCL组件开发全过程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在这篇文章中我们将

知识大全 通过实例看VCL组件开发全过程(一)

通过实例看VCL组件开发全过程(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

知识大全 怎样在Java实例开发的过程中使用进度条

怎样在Java实例开发的过程中使用进度条  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在读取大

知识大全 基于Delphi的组件设计之简单实例

基于Delphi的组件设计之简单实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!这是一个可以计数

知识大全 Extjs单独定义各组件的实例代码

Extjs单独定义各组件的实例代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  网上看到的一个

知识大全 struts框架中使用tiles组件代码实例

   在你的struts配置文件strutsconfigxml中加入下面的配置      <plugin

知识大全 asp调用c#编制的com组件实例

 新建类库MyTestDLL  右击项目“MyTestDLL”》属性》生成》勾选“为互操作注册”  打开 AssemblyInfocs&nb

知识大全 laszlo的使用

  在laszlo应用开发过程中大部分编码过程集中在对系统组件的熟练应用比如取值传值刷新组件状态等等但是很多情况下尤其是项目的初始编码阶段需要定义一些满足项目特定要求的界面组件这就需要自定义组件了&n

知识大全 VB.NET中的组件开发

VB.NET中的组件开发  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!简介组件其实是一段可以重用的

知识大全 dotnet 下开发 COM+ 组件

dotnet下开发COM+组件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一问题的提出  最