如何。。给自己写的组件加上自己定义的组件图标阿?

lijinjie 2004-03-28 03:16:36
如何。。给自己写的组件加上自己定义的组件图标阿?

写了几个组件。。。但是。。这个组件的图标怎么搞定阿?。。。
...全文
69 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
postren 2004-03-28
  • 打赏
  • 举报
回复

小虫你的我没有弄过。。。。上面的那个大哥的。。我照着来成功了。呵呵。。
*.dcr是组件的资源文件。。
你给的是*.res估计可能会有问题。
--------------------------------
我都是用Res的, 肯定可以的, 我写过
lijinjie 2004-03-28
  • 打赏
  • 举报
回复
哈哈。。过几天发布组件包。。。。
lijinjie 2004-03-28
  • 打赏
  • 举报
回复
小虫你的我没有弄过。。。。上面的那个大哥的。。我照着来成功了。呵呵。。
*.dcr是组件的资源文件。。
你给的是*.res估计可能会有问题。
tanqth 2004-03-28
  • 打赏
  • 举报
回复
创建Unit1.RES文件
在Unit1.RES中添加位图
postren 2004-03-28
  • 打赏
  • 举报
回复
implementation

{$R Unit1.RES} //Unit1为你组件单元的名字

创建Unit1.RES文件
在Unit1.RES中添加位图
命名和你的组件类名相同的, 比如有一个TAAA的类要做成组件
则需要一个TAAA的位图名称, 好像必须大写名称
我是在VC中制作的RES文件, 把位图的ID命名要用""引起来
和你的Unit1.pas放到一起就可以了
试试看
cll007 2004-03-28
  • 打赏
  • 举报
回复
转贴
http://www.csdn.net/develop/read_article.asp?id=20262

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

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

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

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

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



uses

DesignIntf;//delphi7//delphi5用DsgnIntf



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

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]);

////////////这是delphi7的代码/////////////////////////////

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');

//////////////////////////////////////////////////////////

///////////////这是delphi5的代码/////////////////////////

{

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就可以看到属性已经被清楚的分类了,如下图:


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

在接下来的文章里,我们将继续研究两个很有用的组件特性。

(未完待续)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧