首页 > 解决方案 > 如何让 IDE 了解使用我的包的项目中使用的单元?

问题描述

我正在为自定义组件编写一个包。此包允许用户/开发人员在他们的项目中包含大量预先编写的单元,这些单元明确设计用于使用此自定义控件,或者编写自己的单元以与现有的一个执行相同的操作。把它想象成一个“插件”,代码在它自己的单元中实现,它继承了一个特定的对象,并对该公共对象进行自定义实现。

每个“插件”单元initialization在底部都有一个子句,它将这个类注册到一个全局列表中。只要该单元在项目中的任何地方“使用”,它就会注册到全局列表中,该自定义控件利用该列表填充所有可能的“插件”单元的列表。

例如,这个自定义控件有一个属性:

property PluginIndex: Integer read FPluginIndex write SetPluginIndex;

在内部,该索引对应于initialization从其相应单元的部分内注册的“插件”之一。

这些“插件”是通过一个全局对象注册的,该对象在第一次使用时被实例化如下:

function Plugins: TMyPluginList;

implementation

var
  _Plugins: TMyPluginList;

function Plugins: TMyPluginList;
begin
  if _Plugins= nil then
    _Plugins:= TMyPluginList.Create;
  Result:= _Plugins;
end;

困难在于,由于控件是在一个包中实现的(并安装到 IDE 中),但“插件”单元是从另一个项目中“使用”的,所以包不会获取这些单元的存在,因此此自定义控件也无法访问全局列表,因为它处于完全不同的上下文中。

在设计时与表单上的此控件交互时,如果我PluginIndex在设计时设置它,它会失败,因为该控件没有任何“插件”在全局列表中注册自己。但是,在运行时,分配相同的属性就可以了。

我如何以使用此自定义控件(依赖于每个“插件”单元的客户端使用)的应用程序能够实际检测到使用的这些单元的方式执行此操作?


编辑

我正在做的最终目标是允许将这个单个自定义控件简单地拖放到表单上,然后在同一表单中“使用”特定单元,最后在这个单个自定义控件实例上,选择哪个索引在任何给定时间实际使用的那些“插件”。我正在尝试尽可能多地封装和自动化该过程,使开发人员更容易简单地删除这个自定义控件,而不必编写一堆其他代码来使其工作。


编辑

我意识到这可能被解释为这些“插件”单元是包的一部分。事实并非如此。尽管目前我别无选择,只能将这些“插件”单元添加到包中以使设计时正常工作,但我不希望它成为包的一部分,而是由使用此自定义的开发人员决定控制。他们可以添加预制“插件”单元以及定制单元的组合,只需在他们的应用程序中“使用”它们。

标签: delphipackagecomponentsdesign-timedelphi-units

解决方案


推荐阅读