Delphi - 为什么ExplicitWidth和ExplicitHeight一直出现在.DFM文件中,它是什么?

Pau*_*auk 33 delphi dfm

我们注意到,在检查更新时,我们的.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
Run Code Online (Sandbox Code Playgroud)

And*_*dré 33

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

添加Explicit*property remover以使DFM文件与旧的Delphi版本兼容

  • +1.我不是出于兼容性原因而使用它,而是为了让我的DFM更小,并且源控件差别更小. (8认同)
  • 我喜欢这个,因为像Ulrich一样,它可以消除它在源代码更新上的烦恼.希望我可以在这个和JamesB的答案之间分开答案! (3认同)

Jam*_*ass 29

来自谷歌搜索....

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

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

未写入Explicit属性的唯一时间是将Align属性设置回其默认值alNone.

这是当控件实际使用Explicit属性将其边界重置为以前的边界时.

  • 这听起来似乎有道理,但事实并非如此:根据我的经验,每次将表单写入.dfm时,Delphi IDE在将Left/Right/Width/Height中的相同值存储为ExplicitXxx对应物之间切换.这同样适用于TComboBox的ItemHeight属性,该属性在0到13之间变化并且一直返回.当我的源代码控制想要在没有任何实际改变时始终将更改发布到.dfm时,会非常烦人. (11认同)
  • @dummzeuch许多Delphi版本展示了你提到的行为.它很烦人,因为它在版本控制历史中混乱了差异. (4认同)
  • 它们是你明确*给出的维度,而不是由于对齐或锚定而隐含*获得的维度.它们不一定是*原始*维度,您可能在创建控件的时间和设置对齐的时间之间进行了更改. (2认同)