自动向项目中添加一个单元

5

我正在使用 Delphi 7Delphi 2006 开发一个组件,需要使用一个单元,需要将该单元自动添加到包含该组件的项目的 .dpr 文件中。

就像 Eureka Log 自动向项目文件添加 'ExceptionLog' 单元一样:

enter image description here

请问是否有办法在将我的组件拖放到项目任何窗体上时,以编程方式将一个单元添加到项目文件中?


2
我认为在所有情况下源单位都会被自动添加。当它们已经被包含在Delphi路径中时,只有当它们是已知的时候才会这样做(这是必然的)。 - TLama
2
@Tlama,组件单元会自动添加到表单数据模块单元中。它们不会自动添加到项目中。这是Eureka Log为自己特别设计的功能。 - Rob Kennedy
@Rob,是下一个问题我没有读对。我得更加注意。谢谢! - TLama
@menjaraz 是的,当然可以。你知道怎么做吗? - PresleyDias
3个回答

7

您很可能需要使用Open Tools API。

此外,可能需要为组件编写TSelectionEditor以触发添加单元(我会尝试RequiresUnit方法)。

虽然有一种简单的方法只需将单元添加到活动项目中(下面的代码),但这仅适用于活动项目,而不一定是要向其中添加组件的窗体所属的项目。此外,它会在uses子句的末尾添加单元。

uses
  ToolsAPI;

var
  currentProject: IOTAProject;
begin
  currentProject := GetActiveProject();
  currentProject.AddFile('MyUnit.pas', True);

你可以查看GExperts源代码,因为它包含一个类(TUsesManager),可以解析单元并修改使用条款。

我期望 AddFile 会添加一个类似于 uses MyUnit in 'MyUnit.pas' 的项目,但这对于库组件来说并不合适。该组件应该只添加一个单元引用,而不是文件引用,如问题中的图片所示。 - Rob Kennedy
@Rob,你说得对。这只是一个示例,以显示OTA可能能够这样做。但我没有找到合适的方法。这就是为什么我提到了GExperts源代码的原因。 - Stefan Glienke
那个 IsUnitOrForm 参数不应该是 True 吗? - NGLN
根据ToolsAPI中的源代码注释,@NGLN - Stefan Glienke

0

奇怪。

我曾经将默认 dpr 设置为几乎什么都没有,结果我的工具箱非常空。因此,如果它在我的工具箱中,它就在 dpr 中 - 你遇到了什么问题 - 通常如果它在工具箱中,它已经在 dpr 中了。


我的组件需要在 dpr 中有一个 unit,我不能要求或依赖于用户将其放置在那里...所以我需要自动化这个过程。 - PresleyDias
如果没有我的 Delphi 副本,你当然可以在应该添加到 DPR 中的单元中设置一个条件,如果其他将添加到 .pas 文件中的单元中没有该条件,则会抛出编译错误,并显示“请将 X 单元添加到 DPR 文件中”。 - BugFinder

0

进入项目 > Eurekalog 选项,然后禁用 Eurekalog。


5
我认为你没有理解我的问题,我的意思是像Eureka日志一样将"ExceptionLog"添加到"dpr"中。如何实现相同的功能? - PresleyDias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接