好的,这就是问题所在。我在面板中有一个标签组件。标签对齐为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
函数的调用。tfCalcRect
和tfWordBreak
标志是Windows API值DT_CALCRECT
和DT_WORDBREAK
的delphi包装。您可以在msdn的DrawTextEx
文档中找到有关其影响的详细信息。