2

在 Delphi 10.4.2 32 位 Delphi VCL 应用程序中,我有一个TLabel集合在TCard

object lblColorTransparencyInfo: TLabel
  AlignWithMargins = True
  Left = 5
  Top = 37
  Width = 156
  Height = 20
  Margins.Left = 5
  Margins.Top = 5
  Margins.Right = 5
  Margins.Bottom = 5
  Align = alTop
  Caption = 
    'Pick a color in the image to make that color transparent in the ' +
    'whole image'
  Color = clInfoBk
  ParentColor = False
  Transparent = False
  WordWrap = True
  ExplicitTop = 0
end

Label.Color设置为clInfoBk,因此您可以直观地检查标签的大小。

然而,尽管Label.AutoSize设置为True,但标签的 HEIGHT 远高于其文本高度,尽管Label.AutoSize = True

在此处输入图像描述

这是一个错误TLabel.AutoSize吗?

如何将标签高度设置为正确的文本高度?(请注意,标签的宽度可以在运行时动态改变,这也会在运行时动态改变文本高度)。

4

1 回答 1

4

这取自该TCustomLabel.AutoSize属性的文档:

当 AutoSize 为 False 时,标签的大小是固定的。当 AutoSize 为 True 时,标签的大小会在文本更改时重新调整。当字体属性更改时,标签的大小也会重新调整 [原文如此]。

当 WordWrap 为 True 时,标签的宽度是固定的。如果 AutoSize 也为 True,则对文本的更改会导致标签的高度发生变化。当 AutoSize 为 True 且 WordWrap 为 False 时,字体决定标签的高度,而对文本的更改会导致标签的宽度发生变化。

它只承诺在更改文本或字体时更改大小——而不是在标签由于其父级被调整大小而被调整大小时。所以有人可能会争辩说这里没有错误:

alTop 标签因标题更改而调整大小的屏幕录像。

由于父级调整大小,alTop 标签无法调整大小的屏幕录制。

但无论如何,一个非常快速而肮脏的解决方案是告诉标签在调整大小时自动调整大小。使用插入器类,

type
  TLabel = class(Vcl.StdCtrls.TLabel)
  protected
    procedure Resize; override;
  end;

implementation

{ TLabel }

procedure TLabel.Resize;
begin
  inherited;
  AdjustBounds;
end;

我们可以让它工作(几乎):

调整父级大小时的 alTop 标签自动调整大小

当然,您可以TLabelEx使用此添加进行自己的控制,这样您就可以像使用标准标签一样轻松地使用它。

于 2021-03-31T21:44:42.580 回答