好了,问题来了。我在面板中有一个label组件。标签与alClient对齐,并启用了自动换行功能。文本可以从一行到几行不等。我想重新调整面板(和标签)的高度,以适应所有的文本。
当我知道文本和面板的宽度时,如何获得标签的必要高度?
发布于 2010-04-27 22:33:39
您可以使用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.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函数的调用。
tfCalcRect和tfWordBreak标志是windows API的DT_CALCRECT和DT_WORDBREAK值的delphi包装器。您可以在msdn上的DrawTextEx文档中找到有关其影响的详细信息
发布于 2010-04-27 21:17:03
使用TextWidth和TextHeight。
请看这里的示例:http://www.greatis.com/delphicb/tips/lib/fonts-widthheight.html
TextWidth会告诉你文本的宽度,然后你可以除以控件的宽度,看看你需要多少行。除法的其余部分应该是附加行。
发布于 2010-04-28 07:02:18
您可以使用一行代码来完成以下操作:
label.width := label.canvas.textwidth(label.caption);
或者,可以在对象检查器中将标签的自动调整大小属性设置为true。
https://stackoverflow.com/questions/2721397
复制相似问题