function GetTextHeight(text: string; width: single; wordwrap: boolean; font: tfont;
HAlign, VAlign: TTextAlign; Trimming: TTextTrimming): single;
begin
if FTextLyout = nil then
FTextLyout := TTextLayoutManager.DefaultTextLayout.Create;
FTextLyout.BeginUpdate;
try
// Инициализируем текстовый слой для корректного вычисления
// размеров отображаемого текста
FTextLyout.Text := text;
FTextLyout.MaxSize := TPointF.Create(Width, 10000);
FTextLyout.WordWrap := WordWrap;
FTextLyout.Font := Font;
FTextLyout.Trimming:= Trimming;
FTextLyout.HorizontalAlign := HAlign;
FTextLyout.VerticalAlign := VAlign;
finally
FTextLyout.EndUpdate;
end;
Result:=FTextLyout.Height;
end;
procedure TMainForm.GroupLVUpdateObjects(const Sender: TObject;
const AItem: TListViewItem);
var
lvi: TListViewItem;
t: Single;
begin
lvi:= TListView(Sender).Items[AItem.Index];
t:= GetTextHeight(lvi.Text,
lvi.Objects.TextObject.Width,
lvi.Objects.TextObject.WordWrap,
lvi.Objects.TextObject.Font,
TTExtAlign(lvi.Objects.TextObject.Align),
TTExtAlign(lvi.Objects.TextObject.VertAlign)
);
lvi.Height:= Round(t) + 30;
end;
у меня работает.