计算TLabel所需的大小

Tom*_*Tom 19 delphi

好的,这是问题所在.我在面板中有一个标签组件.标签对齐为alClient并启用了wordwrap.文本可以从一行到几行不等.我想重新调整面板(和标签)的高度以适应所有文本.

当我知道面板的文字和宽度时,如何获得标签所需的高度?

LeG*_*GEC 18

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

var
  lRect : TRect;
  lText : string;

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

  lText := myLabel.Caption;

  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;
Run Code Online (Sandbox Code Playgroud)

TCanvas.TextRectDrawTextEx从Windows API 包装对函数的调用.

tfCalcRecttfWordBreak标志的价值观德尔福包装DT_CALCRECTDT_WORDBREAK窗户的API.您可以DrawTextExmsdn文档中找到有关其效果的详细信息

  • 您应该在TextRect行之前添加myLabel.Canvas.Font:= myLabel.Font. (5认同)

Chr*_*ton 11

使用TextWidth和TextHeight.

请参阅此处的示例:http: //www.greatis.com/delphicb/tips/lib/fonts-widthheight.html

TextWidth将告诉您文本的宽度,然后您可以将其除以控件宽度以查看所需的行数.除法的其余部分应该是一个额外的行.


小智 7

您可以使用一行代码来实现此目的:

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

或者您可以在对象检查器中将标签的 autosize 属性设置为 true。

  • 他想重新调整高度 (2认同)