39

我们注意到,在签入更新时,我们的.DFM文件已添加ExplicitWidthExplicitHeight属性 - 但我们不知道为什么。

我的问题是:

  • 这些属性有什么用?
  • 为什么 Delphi 会自动添加它们?

下面是一个显示添加ExplicitWidth属性的示例:

object Splitter2: TcxSplitter
    Left = 0
    Top = 292
    Width = 566
    Height = 8
    Cursor = crVSplit
    HotZoneClassName = 'TcxXPTaskBarStyle'
    AlignSplitter = salBottom
    Control = BottomPanel
    Color = clBtnFace
    ExplicitWidth = 8
end
4

4 回答 4

35

使用 DDevExtensions,您可以禁用将这些属性存储在 dfm 中:
http ://andy.jgknet.de/blog/?page_id=10

添加 Explicit* 属性移除器以保持 DFM 文件与旧 Delphi 版本兼容

于 2010-03-19T12:12:25.343 回答
29

从谷歌搜索......

原始文章可以在这里找到。

在 Align 或 Anchor 属性从其默认值更改之前,Explicit 属性会记住控件的先前边界。

唯一不写入 Explicit 属性的情况是 Align 属性设置回其默认值 alNone。

这是控件实际使用显式属性将其边界重置为以前的值的时候。

于 2010-03-19T12:06:28.857 回答
0

Delphi 仅在其值与默认值不同时才将已发布属性的值添加到 DFM 文件。

例如:

property ExplicitWidth: Integer read FExplicitWidth write FExplicitWidth default 1;

如果 ExplicitWidth 值不是 1,那么它将被写入 DFM。如果未定义“默认值”,则任何值都将写入 DFM。

TcxSplitter 不是标准的Delphi 组件,你最好向它的作者询问这些属性的用途。

于 2010-03-19T11:35:57.303 回答
0

我遇到了很多来自这些随机(不)出现的噪音:

ExplicitLeft = 0
ExplicitTop = 0
ExplicitWidth = 0
ExplicitHeight = 0

所以我写了一个工具,只从 DFM 文件中删除这些(所有 4 个都存在并且都是 0):

https://github.com/gonutz/dfm_clear_explicit_zeros

于 2021-11-12T09:23:51.977 回答