我有一个TListView
,我使用OnUpdateObjects
事件来调整TListViewItem
的高度,而不取决于文本字段在DataSet中的长度(我使用的是LiveBindings)。除了我添加新记录时,这一功能非常好。高度最初是TListViewItem
的设计时高度。(大小不正确),旧记录的大小将正确调整(依此类推,以添加其他记录)。
我的代码基于ListViewVariableHeightItems示例项目。
procedure TForm8.lvLogUpdateObjects(const Sender: TObject;
const AItem: TListViewItem);
var
itemDetail: TListItemText;
Text: string;
AvailableWidth: Single;
TextHeight : integer;
begin
AvailableWidth := TListView(Sender).Width - TListView(Sender).ItemSpaces.Left
- TListView(Sender).ItemSpaces.Right;
// Find the text drawable which is used to calcualte item size.
itemDetail := TListItemText(AItem.View.FindDrawable('txtDetail'));
Text := itemDetail.Text;
// Calculate item height based on text in the drawable
TextHeight := GetTextHeight(itemDetail, AvailableWidth, Text);
AItem.Height := round(itemDetail.PlaceOffset.Y + TextHeight);
itemDetail.Height := TextHeight;
itemDetail.Width := AvailableWidth;
end;
GetTextHeight
函数直接来自ListViewVariableHeightItems项目,看起来工作正常。
我正在寻找关于如何获得TListViewItem
的初始大小以反映txtDetail
Drawable包含的文本长度(或者至少应该包含来自数据集的文本)的建议。
1条答案
按热度按时间xkrw2x1b1#
我只能找到一个相当蹩脚的解决方案,向数据集追加一个额外的记录,然后取消它。如果有人能提供一个更好的解决方案,我很乐意接受。