Delphi 德尔菲-单元分离
我的新组件(TComponent)使用DsgnIntf,因为我使用自定义属性编辑器。问题是在自定义VCL应用程序中使用组件时-未找到DSGNINTF.DCU!一种解决方案是在编译器中添加一个命令行开关(不再记得是什么了),但我不喜欢这种解决方案。第二种解决方案是单元分离。我发现: 问题是——我对这篇文章不太理解。。我不知道我需要在我的组件单元中做什么来将设计时和运行时代码分开。有人能举个最简单的例子解释一下吗?我只是想避免人们在使用我的组件时出现“dsgnintf.dcu未找到”的问题。多谢各位 编辑:Delphi 德尔菲-单元分离,delphi,components,vcl,Delphi,Components,Vcl,我的新组件(TComponent)使用DsgnIntf,因为我使用自定义属性编辑器。问题是在自定义VCL应用程序中使用组件时-未找到DSGNINTF.DCU!一种解决方案是在编译器中添加一个命令行开关(不再记得是什么了),但我不喜欢这种解决方案。第二种解决方案是单元分离。我发现: 问题是——我对这篇文章不太理解。。我不知道我需要在我的组件单元中做什么来将设计时和运行时代码分开。有人能举个最简单的例子解释一下吗?我只是想避免人们在使用我的组件时出现“dsgnintf.dcu未找到”的问题。多谢各
我看了这篇文章多一点,我意识到第二个单元注册了第一个单元。为了避免dsgnintf.dcu问题,我假定第二个单元必须在它自己的.pas文件中 通常创建一个单元来在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.
package MyPackR;
{$R *.res}
..
requires
rtl,
vcl;
contains
MyUnit in 'MyUnit.pas';
end.
您链接的文章还包括属性编辑器。所有与IDE无关的程序包代码应包含在仅运行的程序包中:
package MyPackD;
{$R *.res}
..
requires
rtl, MyPackR; // your runtime package
contains
RegPackage in 'RegPackage.pas';
end.
package MyPackR;
{$R *.res}
..
requires
rtl,
vcl;
contains
MyUnit in 'MyUnit.pas';
end.
必须将运行时代码和设计时代码分离到单独的包中。创建仅包含组件代码的运行时包。创建一个仅限设计时间的包,该包在其
requires
列表中指定仅限运行时的包和IDE的DesignIDE
包,并且只包含属性编辑器和注册代码。然后可以将designtime only包安装到IDE中,并在项目中引用runtime only包。DesignIDE
包解析DsgnInf
引用,但不允许将其链接到运行时可执行文件中!它仅供IDE使用。您所链接的文章就是您所需要的。我同意David Heffernan的观点。这里的例子,使用单独的MixedComponentReg
和MixedComponentReg
单元,应该已经很清楚了。(注意MixedComponentReg
如何不使用DesignIntf
?使用该组件的应用程序只包括MixedComponentReg
,而不包括MixedComponentReg
,因此它们不需要DesignIntf
)如果您有具体问题,你能编辑你的问题来澄清你不理解的部分吗?第二个单元通常在它自己的包(.dpk)文件中。谢谢。这解释了我需要的一点。+1,尽管我更愿意说“所有与IDE相关的包代码都应该包含在纯设计包中”。语义…@GolezTrol-重点是需要
和包含
子句的内容。设计包包含所有与IDE相关的代码,需要运行时包。