与 TComboBox.ItemHeight 更改相关的 git 历史记录中的噪音(Delphi)

问题描述 投票:0回答:1

一位拥有成功的 Delphi 7 应用程序的客户最近联系了一些更新。在从事该项目时,我再次注意到一些长期以来困扰我的事情。

通常,只需打开并查看 VCL 表单,就会在签入时显示 git 更改,如下所示:

-          ItemHeight = 25
+          ItemHeight = 0

在其他时候,情况可能恰恰相反:

-          ItemHeight = 0
+          ItemHeight = 19

通常

ItemHeight
字段没有变化。

这似乎只影响

TComboBox
控件。
Height
控件的
TComboBox
由其字体的
Height
和其他属性决定。据我所知,签入更改或恢复并不重要 - 在运行时显示完全相同的行为。恢复更改是我通常做的事情,但如果有数十个更改,这会很乏味。

对于是否会发生变化、在何处发生变化,以及变化将走向何方,没有明显的模式。通常,切换发生在区域中的

TComboBox
控件或从未查看过的
TTabSheet
页面上。

注意:IDE 中没有对表单进行任何实质性修改,除了奇怪的

TPageControl.ActivePage
属性或添加
TLabel
等微小更改。

我的问题相关:

  • 有没有办法阻止历史中这些“噪音”的变化?
  • 这是 Delphi 7 中的一个错误,但在更高版本的 Delphi 和 VCL 中已解决吗?
git delphi delphi-7
1个回答
0
投票

有没有办法阻止历史中这些“噪音”的变化?

据我所知。

这是 Delphi 7 中的一个错误,但在更高版本的 Delphi 和 VCL 中已解决吗?

不。这是因为当没有分配句柄时,通过消息检索

ItemHeight
,该消息返回 0。这在来源中有记录:

function TCustomComboBox.GetItemHt: Integer;
begin
  if FStyle in [csOwnerDrawFixed, csOwnerDrawVariable] then
    Result := FItemHeight
  else
    Result := Perform(CB_GETITEMHEIGHT, 0, 0); // returns 0 if Handle = 0
end;

如果控件在设计过程中不可见(即因为它位于非活动选项卡上),则句柄很可能为 0。

© www.soinside.com 2019 - 2024. All rights reserved.