9

经过多年的 Delphi 开发,我现在在我们的应用程序中共享了数百个表单。编译范围从 Delphi 7 到 XE,因此可以在任何 IDE 中打开一个表单。Delphi 7 之后著名的 Explicitxxx 属性添加具有避免表单意外获取早期编译器无法处理的属性的解决方案(例如Andreas 的 DDevExtensions),但我想要一个更积极的“开关”,阻止 Delphi 制作或保存任何形式修改。时期。

当然,您可以使用只读标志,并且版本控制系统提供了额外的手段,特别是看到这种修改已经发生。不过,我真正想要的是可以放入表单单元的 {$LockDFM} 开关,或者查看表单布局时的上下文菜单选项。

谁能想到一个巧妙的方法来实现这一目标?

谢谢

4

4 回答 4

8

我唯一能想到的(除了你提到的只读/VCS 选项)是编辑菜单的Lock Controls选项。这会设置一个标志,防止控件被移动。我不确定它实际上会有多大的好处,因为我从未尝试过。我只知道它在那里。

于 2011-03-30T13:32:37.557 回答
3

直升机

我很确定德尔福没有这样的东西。我也一直在寻找解决这个问题的方法。

但是,您可以做一件事:您可以使用 OTA(开放工具 API)编写自己的 Delphi 插件。我知道有一些类可以在即将保存某些内容时通知您。您可以拦截此事件并决定是否要保存它(在您的情况下,如果它是 DFM)。

顺便说一句,如果你有计划做这样的组件,告诉我。:)

编辑:

我找到了一段可以帮助你的代码。摘自http://www.gexperts.org/otafaq.html

  TMyFormNotifier = class(TNotifierObject, IOTANotifier, IOTAFormNotifier)
  protected
     procedure FormActivated;
     procedure FormSaving;
     procedure ComponentRenamed(ComponentHandle: TOTAHandle; const OldName, NewName: string);
  end;
于 2011-03-31T03:02:39.103 回答
1

在设计时有 Edit->Lock Control。

LE:这仅用于调整窗体上的控件的大小/重新定位。关于 ObjectInspector,我不知道是否有任何东西可以“锁定”那里设置的值(因此开发人员无法更改它们)。

于 2011-03-30T13:37:52.303 回答
1

基本上,没有。除了 IMO 永远不应该在 .dfm 中的 f'ing(请原谅我的法语)显式大小和位置属性之外,还有一些第三方组件会在您查看表单时更改内容。Fx TMS 组件将更新版本号,即使自其组件的先前版本以来您没有更改任何内容。

于 2014-11-30T12:59:31.907 回答