好的,这是问题所在.我在面板中有一个标签组件.标签对齐为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.TextRect
DrawTextEx
从Windows API 包装对函数的调用.
在tfCalcRect
和tfWordBreak
标志的价值观德尔福包装DT_CALCRECT
和DT_WORDBREAK
窗户的API.您可以DrawTextEx
在msdn文档中找到有关其效果的详细信息
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。