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

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

最佳答案

您可以将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;


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

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

10-08 04:49