【问题标题】:Quick way to change a property on many forms in a Delphi project?在 Delphi 项目中更改多个表单的属性的快速方法?
【发布时间】:2009-01-13 22:18:28
【问题描述】:

我认为 GExperts 中有一些东西可以做到这一点,但如果有的话我看不到。

我必须在包含大约 100 个不同表单的项目中更改每个表单中的 SCALED 属性(从默认值 TRUE 到 FALSE)。因为 SCALED 的默认值为 TRUE,它实际上并没有在 .DFM 文件中显示为一行(当以文本形式查看时),所以我无法使用 GREP(等)“获取”任何内容。

谁能建议一种在所有这些形式中设置此属性的快速方法?表单是各种不同类的子类,我真的不想制作某种覆盖 SCALED 属性的中间 TForm 后代 - 部分原因是我尝试(简要地)这样做并发现将 SCALED 属性设置为 false after 继承的create 对表单没有影响,设置它before 继承的create 会导致异常。 :-)

有人有什么建议吗?如果我能帮上忙,我真的很想避免一一打开所有这些表格,如果只是因为我一定会错过一个!

【问题讨论】:

    标签: delphi delphi-2007


    【解决方案1】:

    我建议您将所有表单更改为从一个共同的祖先继承下来。然后在未来你可以改变基类,它会在任何地方修复它。

    一般来说,我更喜欢始终使用自定义后代类,而不是出于这个特定原因我将经常使用的股票类。

    【讨论】:

    • 这是对新项目的好建议,但在成熟项目中进行更改可能会过大。
    • 谢谢吉姆。从长远来看,这可能是正确的做法,但显然在短期内实际这样做会很痛苦! :-)
    • 您可以在成熟的项目中使用全局搜索和替换来完成。红利很大。
    【解决方案2】:

    如果你所有的 DFM 文件不是二进制文件,而是文本文件(这是个好主意,除非你需要与 Delphi 4 或更早版本兼容)你当然可以使用 grep / sed / awk。 DFM的格式不是固定的,而是用

      OldCreateOrder = False
      Scaled = False
    

    它也可以包含

      OldCreateOrder = False Scaled = False
    

    因此,您可以使用 grep 查找只有 TForm 具有的另一个属性,该属性在您的所有表单中设置为存储在 DFM 中的值(OldCreateOrder 将是一个候选值),并将这些行替换为另一行包含两个属性。

    下次您在 IDE 中保存该表单时,格式将被更正。

    编辑:

    如果你的表单是二进制的,那么使用 Delphi bin 目录下的 convert.exe 工具(使用完整路径,因为 Windows 中还有另一个 convert.exe)将 DFM 转换为文本,然后添加缺少的属性,然后 (可选)将 DFM 转换回二进制。如果您对奇怪的格式不满意 - 将 DFM 从文本转换为二进制再转换回文本,这将为您提供格式正确的文本 DFM 文件。所有这些都可以轻松编写脚本。

    【讨论】:

    • 谢谢mghie。表单是文本,这种方法是我试图做的。但是,因为 SCALED 属性默认为 true,所以它在 .DFM 文件中并不存在。这是一次将保留为默认值的属性存储在流中会很有帮助的时候!
    • 我才明白你的实际意思!即使该属性当前不存在,我也可以使用“两行”技巧将此分配添加到所有表单。我正在添加一行,而不是搜索/替换现有属性。杰出的!我现在就试试这个。
    • 我猜你不明白。我知道 Scaled 不存在,但是您可以以编程方式将“OldCreateOrder = False”替换为“OldCreateOrder = False Scaled = False”,然后它就在那里。可能是我说的不够清楚,我该如何改进我的答案?
    • 使用 GExperts 真是太棒了。谢谢mghie,你是明星!
    • 不需要改进你的答案mghie,我太厚了!再次感谢,您的建议非常有效。
    【解决方案3】:

    是的,GExpert 包括一个“设置组件属性”专家。它有一个“模拟”模式来看看它会做什么。此工具可用于在您编译应用程序之前停用数据集或数据库连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多