标签: uses-clause

如何在Delphi 7的"使用条款"中识别和删除未使用的单元?

在我的一些非常大的项目中,这应该会减少可执行文件的大小.我相信还会有其他好处.

编辑:是否有一个实用程序可以扫描项目并自动删除多余的项目?我确实有100个项目,"自动删除"将是一等奖,但如果我必须,我会在识别实用程序的帮助下采用手动方式.

delphi uses-clause

14
推荐指数
2
解决办法
4565
查看次数

使用条款的差异

接口块中声明的单元与实现块中声明的单元之间有什么区别?

delphi uses-clause

10
推荐指数
1
解决办法
4130
查看次数

德尔福:在使用条款中列出未使用单位的缺点是什么?

我使用cnPack使用清洁剂,但一般来说这是无用单位的缺点?

我知道其中一些:

1)当然,如果整个项目中没有使用该单元,那么将会有无用的资源消耗

2)代码洞察力会产生无用的结果

3)代码洞察力会变慢

但想象一个简单的案例:

  • 我有一个包含2个表单的项目,我在其中一个表单中使用了StrUtils,但我在两个表单中都声明了StrUtils ......在这种情况下,是否存在内存消耗的缺点?

delphi uses-clause

9
推荐指数
3
解决办法
949
查看次数

将单元添加到项目中所有单元的uses子句中?

我发现某些类型的代码清理和重构由于难以在大型项目的uses-clause中添加单元而变得非常困难.

我想在单个项目中的所有delphi .pas单元的interface-uses-clause中添加一个单元,这意味着在500多个地方手动执行该操作.每当我重构一个巨大的单元并将其从一个单元拆分为两个单元时,我可以使用"notepad ++"之类的东西进行搜索和替换,将"MyOldUnit"更改为"MyOldUnit,MyNewUnit",但有时候,这样做是不安全的.它还错过了"MyOldUnit"是uses子句中的最后一个("使用MyOldUnit;")的情况.

无论如何,搜索和替换文件是危险的业务.如果不存在这样的工具,我正在考虑使用Castalia delphi解析器编写一个.我检查了GExperts,Castalia,ModelMakerCodeExplorer,但没有一种方法可以将单元批量插入到项目的所有使用子句中.我希望有一个工具可以做到这一点.

其次,在很多情况下,我将一个功能从一个不属于另一个单元的单元移动,但这意味着我需要将该单元添加到项目单元的30%,而不是其他70%已经已经添加.这意味着需要解析器方法,而不是正则表达式方法.

delphi gexperts uses-clause

6
推荐指数
1
解决办法
1486
查看次数

如何查看哪个单元使用另一个单元的层次结构?(DELPHI)

有一个大型项目,我需要查看每个文件在其USES子句中引用的单元的层次结构.

恩.

                                Project Source (program.dpk)

        HelperUnit                  Forms                ThirdPartyUnit

MyUtils MyConsts MyDownload                         TPShellShock  TPWhatever 
Run Code Online (Sandbox Code Playgroud)

我怎么能看到这种依赖树呢?我记得在一个较新的Delphi版本中有一些这样的功能,但我不记得它叫什么.它可能是一个插件.

关于如何做到这一点的任何提示都会很棒.我开始编写我自己的程序来做这件事,但我已经浪费了3个小时,我仍然在处理pas文件的解析器.

delphi hierarchy include uses-clause

3
推荐指数
1
解决办法
1164
查看次数

停止Delphi自动错误地添加单位

我正在将我们的项目从XE7更新到XE8.目前他们仍然需要使用XE7,因此需要一些条件.例如,ImageList已更改单位,因此Vcl.ImgList是XE8中的Syste.ImageList.为了使它适用于两个Delphi版本,uses子句看起来像这样:

uses
  System.SysUtils, System.Classes, Vcl.Controls
  {$IF CompilerVersion >= 29.0}
  ,System.ImageList
  {$else}
  ,Vcl.ImgList
  {$endif}

  ,cxGraphics;
Run Code Online (Sandbox Code Playgroud)

有时这很好.但是,Delphi通常会自动重新添加System.Imagelist单元,即使它已经存在,尽管是有条件的,例如

uses
  System.SysUtils, System.Classes, Vcl.Controls
  {$IF CompilerVersion >= 29.0}
  ,System.ImageList
  {$else}
  ,Vcl.ImgList
  {$endif}

  ,cxGraphics, System.ImageList;
Run Code Online (Sandbox Code Playgroud)

编译时,XE8会抱怨.

[dcc32 Error] dmImagesU.pas(13): E2004 Identifier redeclared: 'System.ImageList'
Run Code Online (Sandbox Code Playgroud)

a)为什么Delphi添加单元?b)有人知道解决方法吗?

delphi uses-clause delphi-xe7 delphi-xe8

2
推荐指数
1
解决办法
821
查看次数

用于单元文件中的单元文件路径

我有问题.我会试着解释一下.

我有一个单元,有一个类,可能会有新的功能.

D3BF4E849ACC45249B990F802EFB1F15\UnitFile1.pas 8DC8977E7A7B469AACFE3CC77CA7075E\UnitFile1.pas

它们都有相同的类:IClass_1 = class

我使用代码编号为这个文件的不同版本.

另一个单元文件(UnitFile2.pas)使用该单元文件(UnitFile1.pas).

此外,第二个单元文件(UnitFile2.pas)具有不同的版本.

F94C439C822E490DB228F2C16EF2C190\UnitFile2.pas 14CEEFAFF1D64DDD8CBDEDD334D4A3FF\UnitFile2.pas

它们都有相同的类:IClass_2 = class(IClass_1)

现在问题开始了;

"F94C439C822E490DB228F2C16EF2C190\UnitFile2.pas"需要"D3BF4E849ACC45249B990F802EFB1F15\UnitFile1.pas"

"14CEEFAFF1D64DDD8CBDEDD334D4A3FF\UnitFile2.pas"需要"8DC8977E7A7B469AACFE3CC77CA7075E\UnitFile1.pas"

但文件名是相同的(我需要一个像这样的系统.所以它们是相同的).在单元文件中,delphi不允许我这样写;

在文件F94C439C822E490DB228F2C16EF2C190\UnitFile2.pas; 在'D3BF4E849ACC45249B990F802EFB1F15\UnitFile1.pas'中使用UnitFile1;

我希望我能说出我的问题.如何告诉编译器我想要使用哪个单元文件的路径?(我使用的是Delphi-7)

delphi path delphi-7 uses-clause delphi-units

1
推荐指数
1
解决办法
6917
查看次数