我有一个TListView
,我正在使用OnUpdateObjects
事件来确定TListViewItem
的高度,而不取决于数据集中文本字段的长度(我正在使用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包含(或至少应包含在数据集中的)文本的长度提出建议。
答案 0 :(得分:0)
我只能找到一个相当la脚的解决方案,将额外的记录添加到数据集,然后取消它。如果有人可以提供更好的解决方案,我将很高兴。