首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算TLabel所需的大小

计算TLabel所需的大小
EN

Stack Overflow用户
提问于 2010-04-27 21:06:34
回答 7查看 16.4K关注 0票数 21

好了,问题来了。我在面板中有一个label组件。标签与alClient对齐,并启用了自动换行功能。文本可以从一行到几行不等。我想重新调整面板(和标签)的高度,以适应所有的文本。

当我知道文本和面板的宽度时,如何获得标签的必要高度?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-04-27 22:33:39

您可以使用TCanvas.TextRect方法以及tfCalcRect和tfWordBreak标志:

代码语言:javascript
复制
var
  lRect : TRect;
  lText : string;

begin
  lRect.Left := 0;
  lRect.Right := myWidth;
  lRect.Top := 0;
  lRect.Bottom := 0;
  
  lText := myLabel.Caption;

  myLabel.Canvas.Font := myLabel.Font;
  myLabel.Canvas.TextRect( 
            {var} lRect, //will be modified to fit the text dimensions
            {var} lText, //not modified, unless you use the "tfModifyingString" flag
            [tfCalcRect, tfWordBreak] //flags to say "compute text dimensions with line breaks"
          );
  ASSERT( lRect.Top = 0 ); //this shouldn't have moved
  myLabel.Height := lRect.Bottom;
end;

TCanvas.TextRect包装了从Windows API对DrawTextEx函数的调用。

tfCalcRecttfWordBreak标志是windows API的DT_CALCRECTDT_WORDBREAK值的delphi包装器。您可以在msdn上的DrawTextEx文档中找到有关其影响的详细信息

票数 19
EN

Stack Overflow用户

发布于 2010-04-27 21:17:03

使用TextWidth和TextHeight。

请看这里的示例:http://www.greatis.com/delphicb/tips/lib/fonts-widthheight.html

TextWidth会告诉你文本的宽度,然后你可以除以控件的宽度,看看你需要多少行。除法的其余部分应该是附加行。

票数 11
EN

Stack Overflow用户

发布于 2010-04-28 07:02:18

您可以使用一行代码来完成以下操作:

label.width := label.canvas.textwidth(label.caption);

或者,可以在对象检查器中将标签的自动调整大小属性设置为true。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2721397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档