我正在使用Delphi 2010和GExperts稳定版1.35
我正在测试“替换组件”专家。
我添加了一个主表单和一个辅助表单。每个都有三个TEdits。
我使用Replace Components Expert将所有TEdits替换为TRzEdit。我检查替换项目所有形式的所有组件。
它有效,它取代了所有。但是,它对DFM文件没有任何作用。如何让它替换这些实例。
如果我保存,编译或重建,我会收到错误。
如果我在替换后尝试将表单视为文本,则会出现错误。
有人可以向我解释一下这项工作的步骤吗?
由于
答案 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.
<强>更新强>
我不得不在工作的主要项目中用TDBEdit替换几个TEdit,这个技巧奏效了
但是在一个包含3个表单的新项目中,它始终无法在最后一个表单(相同环境)上写入/提交/保存更改。
仅供参考,我尝试使用和不使用DDevExtensions 2.5和IDEFixPack 4.6.1
<强> UPDATE2:强>
按照Ulrich的建议,在GExperts论坛上挖掘,最后找到了可能的解释。当源被销毁(导致AV)时,新属性Touch
不喜欢从一个组件复制到另一个组件。
建议的解决方法是在“专家设置”中执行双向映射以禁用此属性的副本:
答案 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版本控制系统中进行了几周的测试。