TLabel
如果 a 的文本太大以适合标签的范围,我正在尝试降低它的字体大小。我没有看到我可以在标签上设置任何属性来实现这一点,所以我尝试编写自己的方法。我的方法是使用TCanvas.TextWidth来测量标签中文本的宽度,然后缩小字体,直到文本的宽度适合标签的宽度。
void __fastcall ShrinkFontToFitLabel( TCanvas * Canvas, TLabel * Label )
{
float NewFontSize = Label->Font->Size;
Canvas->Font->Family = Label->Font->Family;
Canvas->Font->Size = NewFontSize;
while( Canvas->TextWidth( Label->Text ) > Label->Width && NewFontSize > MinimumFontSize )
{
NewFontSize -= FontSizeDecrement;
Canvas->Font->Size = NewFontSize;
}
Label->Font->Size = NewFontSize;
}
这在某些时候有效,但在其他时候它不会将字体缩小得足够近。似乎我从调用Canvas->TextWidth
中获得的值很多次,远小于标签实际需要的像素宽度以适合文本。
我使用Canvas->TextWidth
不正确吗?有没有更好的方法来计算字符串的宽度,或者重新调整 a 的字体大小TLabel
以使其文本适合其尺寸?
编辑:
在这种情况下,我将传入我的函数,TCanvas
即我的标签所在的函数。我尝试过使用它TCanvas
以及Label->Canvas
. 两者都给了我相同的文本宽度数字,并且两者都缺少显示整个字符串所需的实际像素值。