У нас были те же проблемы, но нам удалось их решить с помощью компонента THTMLStaticText и этой функции, которая вычисляет высоту при динамическом изменении (высоте):
function CalculateDynamicHeight( aLabel: TLabel; htmlStaticText: THTMLStaticText): Integer;
var
lRect : TRect;
lText : string;
begin
lRect := Rect( 0, 0, htmlStaticText.Width, 0);
lText := htmlStaticText.Text;
aLabel.Caption := htmlStaticText.Text;
aLabel.Font := htmlStaticText.Font;
aLabel.Canvas.Font := htmlStaticText.Font;
aLabel.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
aLabel.Height := lRect.Bottom;
Result := lRect.Bottom;
end;
Для этой функции требуется компонент TLabel, используемый исключительно для целей расчета (вы можете установить видимость на false). Компонент htmlStaticText должен иметь значение AutoSize, равное true (в нашем случае AutoSizeType равно asVertical), и htmlStaticText.Text должен присутствовать при вызове функции.