我正在将一个Lazarus项目搬到Delphi Seattle。
Lazarus项目取决于40多个单元(包括控件),并有多个应用程序。
在所有项目的uses子句中,他们使用了以下内容:
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, DBCtrls, {$I OurLibrary.inc};
其中包含40多个单位$I OurLibrary.inc
。
由于其中一些单位是控件,我在Delphi中注册了它们。
但是,如果我保存项目或构建/编译它,Delphi会再次添加使用部分中的单位。
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, DBCtrls, uOurEdit, {$I OurLibrary.inc};
在这种情况下,单位uOurEdit
即使在$I OurLibrary.inc
中也会再次添加。
如果我手动删除它并再次编译项目则运行。 一旦我切换回设计师模式并尝试运行它,同样的事情不断发生 - 它再次添加了uOurEdit。
一旦你移除了一个单位Lazarus没有再添加它。德尔福就是这么做的。
有没有办法告诉Delphi停止读取单位或者根本不再自动停止添加单位?
答案 0 :(得分:10)
IDE认为代码的某些部分受其控制。这包括大部分DPR文件,表单或数据模块声明的默认published
部分,以及单元uses
部分的interface
子句。最好不要在这方面与IDE对抗。你最终会失败。
我不建议在include
子句中使用uses
指令。正如您已经注意到的那样,IDE不会读取包含的文件来确定单元列表。表单设计器会自动添加它认为需要的单元,并且无法阻止它。
由于IDE会在使用时自动添加控件单元,因此您应该能够安全地从包含文件中删除它们。
您也可以考虑将单位列表移至uses
部分中的implementation
子句。 IDE不接触那个。
答案 1 :(得分:2)
我同意使用包含文件不是一个好主意,但实际上有一种方法可以阻止IDE自动添加这些单元。
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, DBCtrl,
{$IFDEF DUMMY}
// add those units here which you don't want to automatically add
// the IDE won't add them but they won't be part of the uses assuming
// DUMMY is undefined
uOurEdit,
{$ENDIF}
// Here comes the rest of the units
{$I OurLibrary.inc};
这可能不适合你,因为你必须手动添加uOurEdit
,所以也许最好遵循Rob的建议。但是,此技术可用于停止IDE自动添加单元。