TLabel.AutoSize 在 Label.Align = alTop 时不工作
TLabel.AutoSize not working when Label.Align = alTop
在 Delphi 10.4.2 32 位 Delphi VCL 应用程序中,我在 TCard
之上设置了一个 TLabel
:
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 的大小。
然而,尽管 Label.AutoSize
设置为 True
,但标签的高度远高于其文本高度,尽管 Label.AutoSize = True
:
这是 TLabel.AutoSize
中的错误吗?
如何将标签高度设置为正确的文本高度? (请注意,标签的宽度可以在 运行 期间动态变化,这也会在 运行 时间内动态改变文本高度)。
这取自 TCustomLabel.AutoSize
属性 的文档:
When AutoSize is False, the label is fixed in size. When AutoSize is True, the size of the label readjusts whenever the text changes. The size of the label is also readjusts [sic] when the Font property changes.
When WordWrap is True, the width of the label is fixed. If AutoSize is also True, changes to the text cause the label to change in height. When AutoSize is True and WordWrap is False, the font determines the height of the label, and changes to the text cause the label to change in width.
它只承诺在更改文本或字体时更改大小——而不是在标签由于其父项大小调整而调整大小时。所以有人可能会争辩说这里没有错误:
但无论如何,一种非常快速且肮脏的解决方案是告诉标签在调整大小时自动调整大小。使用内插器 class,
type
TLabel = class(Vcl.StdCtrls.TLabel)
protected
procedure Resize; override;
end;
implementation
{ TLabel }
procedure TLabel.Resize;
begin
inherited;
AdjustBounds;
end;
我们可以让它工作(几乎):
当然,您可以通过此添加制作您自己的 TLabelEx
控件,这样您就可以像使用标准标签一样轻松地使用它。
在 Delphi 10.4.2 32 位 Delphi VCL 应用程序中,我在 TCard
之上设置了一个 TLabel
:
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 的大小。
然而,尽管 Label.AutoSize
设置为 True
,但标签的高度远高于其文本高度,尽管 Label.AutoSize = True
:
这是 TLabel.AutoSize
中的错误吗?
如何将标签高度设置为正确的文本高度? (请注意,标签的宽度可以在 运行 期间动态变化,这也会在 运行 时间内动态改变文本高度)。
这取自 TCustomLabel.AutoSize
属性 的文档:
When AutoSize is False, the label is fixed in size. When AutoSize is True, the size of the label readjusts whenever the text changes. The size of the label is also readjusts [sic] when the Font property changes.
When WordWrap is True, the width of the label is fixed. If AutoSize is also True, changes to the text cause the label to change in height. When AutoSize is True and WordWrap is False, the font determines the height of the label, and changes to the text cause the label to change in width.
它只承诺在更改文本或字体时更改大小——而不是在标签由于其父项大小调整而调整大小时。所以有人可能会争辩说这里没有错误:
但无论如何,一种非常快速且肮脏的解决方案是告诉标签在调整大小时自动调整大小。使用内插器 class,
type
TLabel = class(Vcl.StdCtrls.TLabel)
protected
procedure Resize; override;
end;
implementation
{ TLabel }
procedure TLabel.Resize;
begin
inherited;
AdjustBounds;
end;
我们可以让它工作(几乎):
当然,您可以通过此添加制作您自己的 TLabelEx
控件,这样您就可以像使用标准标签一样轻松地使用它。