在上一篇中,我们简单的实现了一个对Delphi自身的TEdit编辑框控件的一个扩充!但是我们并不能像Delphi自己的TEdit一样,能够在设计状态下进行设计,而是非得要自己手动创建控件,然后才能使用。这个虽然说也是组件,但是却失去了组件的可设计的方便性,仅仅可作为一个类库来使用。现在我就来介绍一下,如何让这个组件注册到IDE上,然后让你能够在设计状态下可以设计使用。
在讲注册组件的时候,我们需要先明白Delphi中的包的概念,这里我就不做说明了,不清楚的,可以到Cnpack网站去了解这方面的知识。在注册组件时,就需要一个设计期间的包文件,然后将我们上次新建的Edit的那个单元文件添加到包中。首先,我们新建一个包文件,然后添加单元文件,具体参考如下:
从图上的操作可以看到,我先新建了一个名字叫做TestPackage的包,然后将Edit1.pas的单元文件添加到这个包里面了,之后编译,安装了之后,就将控件显示在Standard那个组件栏中了,里面有一个TEdit1的组件,那个就是我们从TEdit继承过来的新组件!然后再看属性编辑器中就多了Alignment这个属性,设置它,就能设置文字的对齐方式了。
好了,到此为止,这个简单组件就注册完成了,可能有人不了解,就建立一个包,编译安装,就能将组件注册到IDE的组件栏中去吗?实际上当然不是做个安装包编译一下就完了的。还记得,在上一篇中,我最开始用组件编写向导做了什么吗?我选择了将组件安装到Standard那个栏上。有心的人打开Eidt1.pas可能就会发现在Edit1.pas中有一个注册的过程为
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Standard', [TEdit1]);
end;
这个Register就是组件注册的过程,包会自动调用的,注册过程中调用了RegisterComponents这个过程
这个过程的第一个参数指定要注册到IDE的哪个组件面板(如果IDE组件面板中没有你给定的这个值,Delphi会自动添加一个新的组件面板),参数二指定的是要注册到IDE的组件对象类数组。
另外,这里要提出需要注意的一点就是,虽然Delphi本身是不区分大小写的,但是记得这个组件注册的过程的Register必须是这个样子,而不能变成小写register这样,否则,组件就注册不上去了哈,同时,注意,我在前面给TEdit1的新属性Alignment的声明是放在Published这个域中的,这是因为要想在IDE设计期环境能够看到这个属性,就必须放在Published域下面,该域声明的变量与属性以及函数等,能被所有的人看到,开放度最强,Public域的能被大多数看到,但是唯一不能被IDE设计期的属性编辑器看到,Protected仅仅能被从它往后继承的子类看到,Private仅仅能被当前类使用(不过在同一个单元的类中,Delphi默许各个类能相互访问本单元其他类的任何属性变量)
在IDE的组件面板上,可以发现TEdit和TEdit1两个组件的图标是一样的!其实也就是TEdit1同时也继承的TEdit显示的图标,这个图标是可以换成别的图标的!下面我们再给这个组件换一个我们自己的图标,这个可以用Delphi7版本的ImageEditor构建一个dcr文件,新建一个dcr文件,然后添加位图,然后添加一个图片资源,然后修改名称为你组件的名字,比如这里叫TEDIT1,将图片修改成这个名字,然后保存到和Edit1.pas相同的目录下保存名字为Edit1.dcr,然后再编译一下包文件,再去看组件面板上的信息,就发现图标变了!这里,因为我用的是Delphi2007,所以没有那个ImageEditor的资源编辑器了,这里我就直接用Brcc32这个资源编译工具来生成dcr。首先,我们新建立一个rc文件叫Edit1.rc,编辑书写内容为
TEDIT1 BITMAP TEDIT1.bmp
前面表示资源名称为TEDIT1 ,Bitmap表示是位图资源 TEDIT1.bmp指定的就是位图的文件了
rc文件建立好了之后,运行命令brcc32 文件路径\Edit1.rc
此时,就会在对应的文件夹下生成一个Edit1.res的资源文件,我们将后缀改为dcr,那就是我们需要的那个资源文件了,然后我们再修改Testpackage.dpk的那个包文件代码
最先打开的时候是
{$R *.res}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO ON}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$IMPLICITBUILD ON}
此时,我们在最开头添加一行{$R 'Edit1.dcr'},这个就表示包含进我们刚编辑完成的那个资源文件,然后再编译,就能看到为组件添加了新的图标,具体操作请看:
然后看看,如何修改包文件的
到此为止,组件的注册以及自定义组件的图标就全部讲解完成了! 下次再讲组件的卸载
文连接,否则保留追究法律责任的权利。