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

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

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

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

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

【问题讨论】:

    标签: delphi compiler-construction region


    【解决方案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}
    

    【讨论】:

      猜你喜欢
      • 2010-10-26
      • 2012-01-06
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      相关资源
      最近更新 更多