Delphi 区域编译器指令 - 向后兼容的单元文件?

Posted

技术标签:

【中文标题】Delphi 区域编译器指令 - 向后兼容的单元文件?【英文标题】:Delphi Region compiler directive - backwards compatible unit files? 【发布时间】:2009-04-18 23:34:48 【问题描述】:

考虑到在单元文件中使用有用的 Region 编译器指令的愿望,允许这些相同单元在以前版本的 Delphi 中使用的最佳方法是什么?似乎没有“体面”的方法。 (所需的 IDE 版本是 Delphi 7)

我喜欢在方法定义上方设置区域来隐藏/显示方法定义帮助和版本历史 cmets,但我必须用其他编译器指令围绕区域指令,这有点破坏区域编译器指令的“清洁度”。

如果使用不支持区域的 Delphi 版本,我想可以编写一个预处理器来注释掉所有 Region/EndRegion 指令。然后添加回来以供以后的版本使用?

我不是 100% 切换到 Delphi 2009 并且需要支持多个 IDE 版本。

【问题讨论】:

【参考方案1】:

我假设 D7 不想复制 $REGION 或 $ENDREGION?我只安装了 D2007/9,无法检查。

试试这个:

$IFDEF undef$REGION 'bla'$ENDIF
//some code
$IFDEF undef$ENDREGION$ENDIF

D2009 编辑器按预期创建区域。如果未定义“undef”,D7 应忽略 $REGION/$ENDREGION。

【讨论】:

+1。放在一行上,并使用代码或实时模板创建,这既不会破坏清洁度,也不会更费力地编写。 这有效......并将标记为答案,如原始问题中所述。我真正的答案是暂时删除地区,并在时间允许的情况下将所有内容切换到 2009 年。【参考方案2】:

有一些 Delphi(7) 编辑器增强组件可以提供类似的功能。我认为GExperts 可以。

如果您对代码的影响感到满意,您可以考虑使用 $I 拆分大文件。

【讨论】:

... 或者只是将单元拆分为多个单元!关于 $INCLUDE 指令的使用,从我的实验来看,$I 在 Delphi IDE 中效果不佳。例如,代码导航器在浏览包含文件中的代码时遇到问题。编译器没有问题,但使用Delphi IDE。相反,Lazarus 在使用多个 $INCLUDEd 文件时没有问题,并像处理常规 .pas 文件一样处理它们。【参考方案3】:

您可以使用以下代码:

$IF CompilerVersion >= 17 // The $REGION directive is available since Delphi 2005
$REGION 'RegionName'
$ENDIF 

// codeblock

$IF CompilerVersion >= 17 
$ENDREGION 'RegionName'
$ENDIF

【讨论】:

以上是关于Delphi 区域编译器指令 - 向后兼容的单元文件?的主要内容,如果未能解决你的问题,请参考以下文章

delphi 程序是否为控制台编译选项

使用更新的 CPU 指令支持构建向后兼容的二进制文件

delphi中如何把有规律的文本文字放入STRINGGRID中的每个单元格中

[Delphi]编译条件

升级 gcc 编译器/其他修复以实现向后兼容

[转]Delphi预编译指令总结