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 区域编译器指令 - 向后兼容的单元文件?的主要内容,如果未能解决你的问题,请参考以下文章