2

我的新组件 (TComponent) 使用 DsgnIntf​​,因为我使用自定义属性编辑器。问题是在自定义 VCL 应用程序中使用组件时 - 未找到 DSGNINTF.DCU!一种解决方案是将命令行开关添加到编译器(不记得它是什么了),但我不喜欢那个解决方案。第二种解决方案是单元隔离。我找到了这个:

http://edn.embarcadero.com/article/27717

问题是 - 我不太了解这篇文章。我不知道在我的组件单元中究竟需要做什么才能将设计时与运行时代码分开。有人可以举个最简单的例子并解释一下吗?当人们使用我的组件时,我只想避免出现“dsgnintf.dcu not found”的问题。谢谢你。

编辑:我看了这篇文章多一点,我意识到第二个单元注册了第一个。为了避免 dsgnintf.dcu 问题,我假设第二个单元必须在它自己的 .pas 文件中?

4

2 回答 2

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.
于 2012-10-12T10:26:16.853 回答
3

您必须将运行时代码和设计时代码分开到单独的包中。创建一个仅包含您的组件代码的运行时包。创建一个仅设计时包,DesignIDE在其requires列表中指定您的仅运行时包和 IDE 的包,并且仅包含您的属性编辑器和注册代码。然后,您可以将仅设计时包安装到 IDE 中,并在您的项目中引用仅运行时包。包DesignIDE解析DsgnInf引用,但不允许链接到运行时可执行文件!它仅供 IDE 使用。

于 2012-10-13T00:41:19.337 回答