我的新组件(TComponent)使用DsgnIntf,因为我使用自定义属性编辑器。问题是在自定义VCL应用程序中使用该组件时 - 找不到DSGNINTF.DCU!一种解决方案是将命令行开关添加到编译器(不记得它是什么),但我不喜欢这个解决方案。第二种解决方案是单位隔离。我发现了这个:
http://edn.embarcadero.com/article/27717
问题是 - 我不太了解这篇文章。我不知道在组件单元中我需要做什么才能将设计时与运行时代码分开。有人可以做出最简单的例子并解释一下吗?我只是想避免在人们使用我的组件时出现“dsgnintf.dcu not found”的问题。谢谢。
编辑: 我看了一下这篇文章,我意识到第二个单元注册了第一个单元。为了避免dsgnintf.dcu问题我假设第二个单元必须在它自己的.pas文件中?
答案 0 :(得分:8)
通常你创建一个单元来在IDE中注册你的包,类似的东西:
unit RegPackage;
interface
uses
Classes, MyUnit;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('MyPage', [TMyComponent]);
end;
end.
并将此单元包含在仅设计包中:
package MyPackD;
{$R *.res}
..
requires
rtl, MyPackR; // your runtime package
contains
RegPackage in 'RegPackage.pas';
end.
您链接的文章还包括属性编辑器。与IDE无关的所有包代码都应包含在只运行包中:
package MyPackR;
{$R *.res}
..
requires
rtl,
vcl;
contains
MyUnit in 'MyUnit.pas';
end.
答案 1 :(得分:3)
您必须将运行时代码和设计时代码分离到单独的包中。创建仅包含组件代码的仅运行时包。创建一个仅限设计时的包,它在DesignIDE
列表中指定了仅运行时包和IDE的requires
包,并且只包含您的属性编辑器和注册码。然后,您可以将仅限设计时的软件包安装到IDE中,并参考项目中仅运行时的软件包。 DesignIDE
包解析DsgnInf
引用,但 NOT 允许链接到运行时可执行文件!它仅供IDE使用。