如何在列表视图中为带有自动换行的可变多行长文本自动调整项目高度?
Posted
技术标签:
【中文标题】如何在列表视图中为带有自动换行的可变多行长文本自动调整项目高度?【英文标题】:How can i do autosize item height in listview for variable multirow long text with word wrap? 【发布时间】:2015-04-20 15:01:09 【问题描述】:(德尔福 Firemonkey 平台)
例如
和我的列表视图
可以通过带有 (word wrap/true) 和 (trimming/none) 选项的 listview/itemappearance/item/text 进行自动换行,但不能自动调整行高或适合高度。
【问题讨论】:
您的源代码可以帮助我们找到答案。可以发一下吗? 您好,没有代码,但例如s1378.photobucket.com/user/moorkerg/media/… 和我的列表视图s1378.photobucket.com/user/moorkerg/media/… 你找到解决办法了吗? 【参考方案1】:我使用 Delphi 10.3 并创建自己的 ListItems。 在 ListView1UpdatingObjects 上,当我使用 WardWrap:=True 创建 ListViewText 并用文本填充它然后执行此操作
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);
【讨论】:
以上是关于如何在列表视图中为带有自动换行的可变多行长文本自动调整项目高度?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 VB.NET 中为基于 Windows 的应用程序创建带有自动建议的文本框?