【问题标题】:GExpert's Replace Components Expert doesn't replace the text in the form file (*.dfm)GExpert 的替换组件专家不会替换表单文件 (*.dfm) 中的文本
【发布时间】:2011-12-29 17:30:02
【问题描述】:

我正在使用 Delphi 2010 和 GExperts 稳定版 1.35

我正在测试“替换组件”专家。

我添加了一个主窗体和一个辅助窗体。每个上面都有三个 TEdit。

我使用替换组件专家将所有 TEdit 替换为 TRzEdit。我在项目的所有形式上检查了替换所有组件。

它有效,它取代了它们。但是,它对 DFM 文件没有任何作用。我如何让它替换那些实例。

如果我保存、编译或重建,我会得到错误。

如果我在替换后尝试以文本形式查看表单,则会出现错误。

有人可以向我解释完成这项工作的步骤吗?

谢谢

【问题讨论】:

标签: delphi delphi-2010


【解决方案1】:

我刚刚使用 Delphi XE 和 GExperts 1.35 进行了尝试,即使在单个“替换选定项”之后它现在确实崩溃了。 (过去它可以正常工作)。

似乎在Replace Components 之后使用隐藏菜单Project | Clear Unit Cache 然后在尝试任何Save/Compile/View As Text... 之前进行完整构建 可以解决问题。

我认为这个菜单是用 cnPack 出现的。我没有,也无法保证,但您可以通过在您已安装的软件包之一中添加以下单元轻松自己完成:

unit FGEnableHiddenMenus;

interface

procedure Register;

implementation

uses
  Classes, Forms, Menus;

procedure Register;
var
  Comp: TComponent;
begin
  //Make a hidden menu item visible
  Comp := Application.MainForm.FindComponent('ProjectClearUnitCacheItem');
  if Comp is TMenuItem then
    TMenuItem(Comp).Visible := True;
end;

end.

来源:Brian Long's old goodies

更新: 我不得不在我们的主要项目中用 TDBEdit 替换几个 TEdit,这个技巧奏效了。
但是在一个具有 3 个表单的新项目中,它始终无法在最后一个表单上写入/提交/保存更改(相同的环境)。
仅供参考,我尝试使用和不使用 DDevExtensions 2.5 和 IDEFixPack 4.6.1

更新 2: 按照 Ulrich 的建议,在 GExperts 论坛中进行挖掘,最终找到了可能的解释。新属性 Touch 不喜欢在源被销毁时从一个组件复制到另一个组件(导致 AV)。
建议的解决方法是在专家设置中进行双向映射以禁用此属性的复制:

【讨论】:

  • 我跟着你的步骤。我现在在我的菜单中有清除单元缓存项。我按照您的步骤操作,但遇到了同样的错误。
  • 嗯。对,我刚刚在另一台机器上再次尝试了一个新项目,但它仍然崩溃。稍后我会再试一次不同的项目。当它抱怨访问 dfm 文件时,我认为这是一个缓存问题,但也许我很幸运,当我尝试使用另一个项目时,它解决了这个问题。
【解决方案2】:

在尝试将 Touch 属性从旧组件复制到新组件时,您可能会遇到此错误,但它有一个解决方法,您可以很容易地测试: http://tech.groups.yahoo.com/group/GExpertsDiscuss/message/3994

详情:

在 Delphi 2010 和 XE 中存在一个限制/错误,如果您分配一个 Component.Touch 属性从一个组件到另一个并销毁 新组件损坏的原始组件(它不是 像组件/接口引用,它们要么自动更正 自己或被引用计数)。

目前,您可以分配一个双向替换组件 从 TPanel.Touch 到 TGroupBox.Touch 的属性映射(在您的特定情况下使用被替换的两个组件),标记为 禁用的属性映射,这将解决这个问题。我们的下一个版本 将不再尝试分配该属性。

GExperts 1.36 现在也可用,其中包含解决此问题的方法。解决方法已在 GExperts 版本控制系统中,并且已经进行了数周的测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 2016-03-20
    • 1970-01-01
    • 2014-03-07
    • 2012-01-27
    • 1970-01-01
    相关资源
    最近更新 更多