我的新组件 (TComponent) 使用 DsgnIntf,因为我使用自定义属性编辑器。问题是在自定义 VCL 应用程序中使用该组件时 - 找不到 DSGNINTF.DCU!一种解决方案是向编译器添加命令行开关(不记得它是什么了),但我不喜欢该解决方案。第二种解决方案是单位隔离。我发现了这个:
http://edn.embarcadero.com/article/27717
问题是——我不太理解这篇文章。我不知道在我的组件单元中我到底需要做什么来将设计时代码与运行时代码分开。有人可以举一个最简单的例子并解释一下吗?当人们使用我的组件时,我只是想避免出现“找不到 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.
您链接的文章还涵盖了属性编辑器。所有与 IDE 无关的包代码都应该包含在只运行包中:
package MyPackR;
{$R *.res}
..
requires
rtl,
vcl;
contains
MyUnit in 'MyUnit.pas';
end.
关于Delphi - 单元分离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12856559/