| 接着在Register方法中调用RegisterComponentEditor(TMyTray,TTrayIconEditor);
第一个参数为组件类名,第二个为组件编辑器的类名。
而上面的方法必须引用DesignIntf,DesignEditors。
当我在我的组件单元这样做之后出现问题了,编译安装没有问题。我建立测试程序,并拉一个托盘组件,双击它,可以出现About对话框,右击菜单第一项也没有问题。可是当我运行测试程序时,却出现了这样的编译错误:
[Fatal Error] Unit1.pas(7): File not found: ''''DesignEditors.dcu''''
这让我痛苦了好几天,书上是这么说的,应该没有什么错误呀。后来经过摸索,才找到了解决之道。
解决的办法就是将组件编辑器类放在另一个单元中,并在这个单元引用我的托盘组件单元。
并安装之。这才可以正常运行,这个编辑器单元如下:
unit AboutTray;
interface
uses
SysUtils,Classes,DesignIntf,DesignEditors,Forms,
MyTray;
type
TTrayIconEditor = class (TComponentEditor)
function GetVerbCount: Integer; override;
function GetVerb(Index: Integer): string; override;
procedure ExecuteVerb(Index: Integer); override;
end;
procedure Register;
implementation
///////TTrayIconEditor////////////////////////
procedure TTrayIconEditor.ExecuteVerb(index:integer);
begin
case index of
0: application.MessageBox(''''你好,这是风做的托盘组件!!'''',''''关于'''');
end;
end;
function TTrayIconEditor.GetVerb(index:integer):String;
begin
case index of
0:Result:=''''About MyTray'''';
end;
end;
function TTrayIconEditor.GetVerbCount:integer;
begin
Result:=1;
end;
procedure Register;
begin
RegisterComponentEditor(TMyTray,TTrayIconEditor);
end;
end.
至此,托盘组件完毕,拉下它放在窗体设计器中,双击,弹出对话框
里面内容为:“你好,这是风做的托盘组件!!”。哈哈,你成功啦
做为组件制作的最后一个内容,我想用一个包来把我的所有组件单元包含起来,并放在我自己新建的一个面板中。
这样做之前,要把以前安装下去的组件删除。知道怎么样删除,如果不知道,请看我在第一篇中说的。
然后在打开所有的组件单元,把RegisterComponents(‘Samples'''', [TCoolMemo]);里面的
Samples改为Wind。然后保存
接着,在IDE中点File-》New-》Other…
弹出来的New Items对话框,选中New页面,并选中其中的Package,
这里弹出一个新建的包编辑器。
先在IDE中点File-》Save。将包编辑器保存。保存在组件的单元所在的文件夹中
我的所有组件单元都放在Delphi7\MyCom文件夹中。因此这个包当然也保存在这里。
然后,点包编辑器上边的Add,将所有的组件单元加进去,当然也保括上面说的组件编辑器单元啦。
加进去后,点包编辑器上边的Compile,编译完毕,再点Insall。
成功,看看面板。所有以前做过的组件全在Wind面板中了。
而这时候,我的任务也完毕了。
结语
这次的组件之旅终于走完了,也许有人会笑我浅薄,认为这么简单的东西,有必要拿出来么。也许是比较简单吧,但一定有人会需要的,相信我的文章会给他们帮助的。因为这些是我曾经学到的知道,遇到的问题并解决它。所以我个人觉得是很珍贵的。并且经过写这几篇,我把这些知识记得更牢了。这种利己利人的事,何乐而不为呀。
在此,谢谢大家的阅读,也许下次还有机会再见面,不过现在要说再见了。祝你们愉快。
上一页 [1] [2] [3] [4] [5] [6] [7] |