如何使用自动换行在listview中为变量多行长文本自动调整项目高度?

时间:2015-02-19 10:04:35

标签: delphi listview firemonkey delphi-xe6

如何使用自动换行在listview中为变量多行长文本自动调整项目高度? (德尔福Firemonkey平台)

例如

enter image description here

和我的listview

enter image description here

通过listview / itemappearance / item / text使用(自动换行/ true)和(修剪/无)选项进行自动换行,但自动调整行高或拟合高度是不行的。

1 个答案:

答案 0 :(得分:0)

我使用Delphi 10.3,并创建了自己的ListItems。 当我使用WardWrap创建ListViewText时,在ListView1UpdatingObjects上:= True并用文本填充它,然后执行此操作

function GetTextHeight(const D: TListItemText; const Width: single; const 
Text: string): Integer;
var
  Layout: TTextLayout;
begin
  Layout := TTextLayoutManager.DefaultTextLayout.Create;
  try
    Layout.BeginUpdate;
    try
      Layout.Font.Assign(D.Font);
      Layout.VerticalAlign := D.TextVertAlign;
      Layout.HorizontalAlign := D.TextAlign;
      Layout.WordWrap := D.WordWrap;
      Layout.Trimming := D.Trimming;
      Layout.MaxSize := TPointF.Create(Width, 
                      TTextLayout.MaxLayoutSize.Y);
      Layout.Text := Text;
    finally
      Layout.EndUpdate;
    end;
    Result := Round(Layout.Height);
    Layout.Text := 'm';
    Result := Result + Round(Layout.Height);
  finally
    Layout.Free;
  end;
end;

并这样称呼

LText.Height := GetTextHeight(LText, LText.Width, LText.Text);