禁用DelphiXE中的表单设计器

6
在DelphiXE中,是否有可能“按需/有选择性地”禁用表单设计器,并仅在需要时使用表单/类的代码,以防控件未安装在IDE中?

3
@David,错过了问题中“如果在IDE中没有安装控件”的部分... - Cosmin Prund
@David:据我所知,OP想要避免IDE在编辑非组件相关代码时删除未知的组件和属性。只要组件的代码或DCU可访问,这对于代码编辑器(包括错误提示等)不应该构成问题。 - Uli Gerhardt
你正在与 Delphi 进行斗争。如果你不停止抵抗,你会开始憎恨它。最好不要和它斗争。你可以考虑在每个项目中拥有多个注册表项,每个都安装所需的组件,然后只需使用 -RBDS_OPTX 参数启动所需的 IDE 即可进入替代的 BDS_OPTX 注册表区域。 - Warren P
有一些正在使用/正在建设的组件会发生变化,这会导致IDE中出现异常。此外,不想一直被绑定在表单设计器上,并且在Delphi中加载了大量组件(环境运行时使用内存并导致内存泄漏)。标准的Delphi IDE行为对于“拖放、排列和事件映射”是可以的,但很多代码都是在此之后发生的。Qt已经找到了一个良好的平衡点-MSVS与C#表单也是如此。 - MX4399
请看我在回答中的注释。即使在这种情况下,你仍然做错了。 - Warren P
3个回答

2

我认为答案是否定的,但我使用的解决方法是编辑DFM文件,剪切掉不存在的组件,并将其粘贴到FormCreate事件中进行实例化。DFM中的所有属性都在那里,所以稍微编辑一下就可以很好地解决问题。


如果从dfm中删除组件不会破坏整个表单的布局,那就没问题。但是当面对一个非常复杂的控件时,说起来容易做起来难。将组件转换为代码适用于具有30个或更少属性的单个组件,但是如果它是具有子组件和属性列表的组件,需要可查看和可编辑,这种方式会丧失很多功能。 - Warren P
@Warren 如果这个组件很重要的话,那么你应该重新安装它。但是对于布局,我过去曾经使用 TPanel 来显示位置,然后将其作为父级使用。这样你仍然可以围绕它进行设计。 - mj2008
Mj2008: 同意。面板是解决这个问题的好方法!当我感到保持其工作太麻烦时,我已经将一些组件从设计时中移除了。有时会出现问题,因为设计时问题导致您的OnImportantEvent处理程序断开连接,这会导致没有编译器消息,并且在运行时是一个无声但致命的失败。 - Warren P

1

不,你不能有选择性地禁用它。我通常的做法(因为我在大多数IDE中几乎没有安装控件)是打开表单,告诉Delphi在加载dfm时忽略所有错误,编辑源代码并确保我不将dfm检入我的源代码控制系统。

你可以尝试将dfm设置为只读,以避免误检入已删除控件的dfm,但这也有一个缺点:每次尝试保存源文件时,IDE都会出现关于文件只读的错误。如果你像我一样经常按Ctrl-S或Shft-Ctrl-S,那么很快就会变得非常烦人。

当我必须更改dfm时,我会在文本模式下进行操作,或者安装控件,进行dfm更改并提交。之后,我又可以自由地卸载控件,只需处理pas文件,忽略/还原对dfm的任何更改。


3
通常我会在“读取错误表单”对话框中选择“取消”,然后选择“确定”以关闭随后出现的“创建表单错误:...”对话框。只需要两次点击或按下两次 Escape 键即可完成。这样就不会创建表单设计器,而且我仍然可以编辑和保存 .pas 文件,而不用触及 .dfm 文件。 - Ondrej Kelle
1
@TOndrej:啊哈,听起来不错。下次我会试试取消。 - Marjan Venema
如果您遇到不一致的事件头(例如,当从旧的VirtualTreeView组件迁移时,事件中有不同的参数),并且只需要修改源代码并保存,则可以使用类似的方法。当您按下“保存”按钮时,您将收到消息:“方法XXX的参数与其声明不相符。您要删除它吗?”如果您选择“取消”或按下“ESC”,则不会删除任何内容,并且您的文件将成功保存。 - user532231
@TOndrej:有点帮助——从来没有点击过那个按钮,不知道为什么。 - MX4399

1

目前还没有合理的解决方法。

我曾经要求 Delphi 在未来的某个时候加入这个功能:DFM 不应该在打开它们时被销毁,也不应该在打开一个没有安装控件的窗体时默认弹出多个模态对话框询问是否要销毁你的 DFM。

最终只有一个实际的解决方案;安装所有的控件。其他任何方法都只会让你发疯。


我不会假设任何人考虑过这个问题。实际上,这些问题并不影响您演示一个微不足道的Delphi RAD工作流程的能力,但是当Delphi应用程序达到一定规模时,这些问题会变得非常严重,尤其是当您是使用相互排斥的组件集在多个项目中工作的开发人员时。为每个项目管理这些组件集是一个非常棘手的Delphi问题。 - Warren P
是的,就像项目经理可能从未与其中有51个大大小小的项目的项目组一起使用过一样... 它经常在构建所有内容时崩溃,有时甚至在您还没有做任何其他事情时。或者具有许多条件定义的单元,不仅在代码中,而且在uses子句中也是如此。它会使代码洞察力进入循环... - Marjan Venema
@WarrenP - 安装它们并不实际 - 请参见我在问题评论中的回复。 - MX4399
1
如果您正在使用和构建组件,您应该使用多个注册表HIVES来保持稳定和不稳定的环境(运行bds.exe -RBDS_ALT)。这样就不会有这个问题了。如果您愿意,可以提出关于组件开发设置的另一个问题。这些组件开发场景有比不安装组件更好的解决方案和工作流程。 - Warren P
如果BDS没有启动,甚至没有出现闪屏界面,你是从包含BDS.exe的文件夹运行程序,还是将BDS.exe添加到了环境变量中?尝试通过快捷方式运行完整路径:"C:\Program Files\Embarcadero\RAD Studio\8.0\bin\bds.exe -RBDS_ALT"。 - Warren P
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接