Рассчитать необходимый размер для TLabel
Хорошо, вот проблема. У меня есть компонент ярлыка в панели. Метка выровнена как alClient и включена функция wordwrap. Текст может варьироваться от одной строки до нескольких строк. Я бы хотел изменить размер панели (и метки), чтобы она соответствовала всему тексту.
Как получить необходимую высоту метки, когда я знаю текст и ширину панели?
Ответы
Ответ 1
Вы можете использовать метод 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
завершает вызов функции DrawTextEx
из Windows API.
Флаги tfCalcRect
и tfWordBreak
являются оболочками delphi для значений DT_CALCRECT
и DT_WORDBREAK
API окон. Подробную информацию об их эффектах можно найти в документации DrawTextEx
на msdn
Ответ 2
Используйте TextWidth и TextHeight.
См. пример здесь:
http://www.greatis.com/delphicb/tips/lib/fonts-widthheight.html
TextWidth расскажет вам, насколько широким будет текст, а затем вы можете разделить его по ширине элемента управления, чтобы узнать, сколько строк вам нужно. Остальная часть деления должна быть дополнительной строкой.
Ответ 3
для этого можно использовать один код строки
label.width: = label.canvas.textwidth(label.caption);
или вы можете использовать свойство label autosize label для true в объекте инспектора.
Ответ 4
Если вы можете выровнять его alTop и сохранить AutoSize, тогда TLabel автоматически отрегулирует высоту после настройки заголовка.