GExpert的Replace Components Expert不替换表单文件中的文本(* .dfm)

时间:2011-12-29 17:30:02

标签: delphi delphi-2010

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

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

我添加了一个主表单和一个辅助表单。每个都有三个TEdits。

我使用Replace Components Expert将所有TEdits替换为TRzEdit。我检查替换项目所有形式的所有组件。

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

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

如果我在替换后尝试将表单视为文本,则会出现错误。

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

由于

2 个答案:

答案 0 :(得分:2)

我刚刚尝试使用Delphi XE和GExperts 1.35,即使在单个“Replace Selected”之后它确实崩溃了。 (过去它曾经很好用。)

似乎在Project | Clear Unit Cache之后使用隐藏式菜单Replace Components,然后执行完整版本,然后再尝试使用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

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

enter image description here

答案 1 :(得分:1)

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

详细说明:

  

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

     

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

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