Delphi - 单元分离

标签 delphi components vcl

我的新组件 (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/

相关文章:

multithreading - 空的新 VCL 表单应用程序下正在运行哪 4 个线程?

delphi - 使用 Delphi 进行 Unicode 预组合和分解

javascript - 如何使用 Vue 命名插槽呈现静态内容列表?

javascript - React 和 React Router,使用不同的 prop 渲染相同的元素两次会导致两个元素具有相同的 prop?

delphi - 如何将 TEdgebrowser 弹出窗口重定向到我自己的表单?

delphi - 使用 'dcc32 -JL' 编译时从另一个包中的另一个单元访问 Delphi 方法指针

angular - 尝试使用具有不同模板的相同组件

forms - FormCreate和Hide之后不会触发FormShow事件;不隐藏任务栏上的图标

delphi - 如何在 freepascal/lazarus 的子进程中实现 cef3 渲染进程处理程序

delphi - 从集合中初始化无类型常量