【发布时间】:2015-09-28 18:31:32
【问题描述】:
如果 TLabel 的文本太大而无法适应标签的范围,我正在尝试降低其字体大小。我没有看到我可以在标签上设置任何属性来实现这一点,所以我尝试编写自己的方法。我的方法是使用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?有没有更好的方法来计算字符串的宽度,或者重新调整TLabel 的字体大小,使其文本适合其尺寸?
编辑:
在这种情况下,我将传递给我的函数,即我的标签所在的TCanvas。我尝试使用TCanvas 和Label->Canvas。两者都给了我相同的文本宽度数字,并且都缺少显示整个字符串所需的以像素为单位的实际值。
【问题讨论】:
-
你传入的是什么画布,是 TLabel 还是别的什么?
-
我正在传递标签所在的框架。这是要使用的正确画布吗?
-
我猜它是表单的 TCanvas 对象,因为它的样式。见这个例子greatis.com/delphicb/tips/lib/fonts-widthheight.html
-
另外,请看这里的第一个答案stackoverflow.com/questions/13884089/…
-
金钱报价是“在firemonkey TLabel 属性Font.Family 和Font.Size 中设置样式。如果您想在代码中更改字体大小或系列,您需要禁用此属性的样式。要更改这个,正确设置属性 StyledSettings。"
标签: c++ firemonkey c++builder-xe8 tlabel