进一步调查我发现以下内容
function TListViewBase.GetItemRect(const AItemIndex: Integer): TRectF;
如果你深入
function TListViewBase.GetItemRelRect(const Index: Integer; const LocRect: TRectF;
const SideSpace: Integer = 0): TRectF;
然后你会发现最后一项的顶部是
listview1.GetItemRect(listview1.ItemCount-1).top+listview1.ScrollViewPos-listview1.SideSpace-listview1.LocalRect.top
无论您的物品可变高度是什么。这代表了价值FHeightSums[Index]
这是一个列表,包含直到具有 Index 的项目的高度总和Index
现在解决问题: 你希望计算是完美的。你想要触地得分。
就是这样
procedure TForm5.ListView1ScrollViewChange(Sender: TObject);
var
Tmp_top : single;
begin
Tmp_top := listview1.GetItemRect(listview1.ItemCount-1).top+listview1.ScrollViewPos-listview1.SideSpace-listview1.LocalRect.top;
if Tmp_top+listview1.GetItemRect(listview1.ItemCount-1).height-listview1.Height=listview1.ScrollViewPos-2*listview1.SideSpace then
showmessage('touch down');
end;
Edit:如果您进一步简化这个公式,您将最终得到另一个答案,只需进行很少的升级
procedure TForm5.ListView1ScrollViewChange(Sender: TObject);
begin
if listview1.GetItemRect(listview1.ItemCount-1).bottom=listview1.Height-listview1.SideSpace then
showmessage('touch down');
end;
现在,这将涵盖填充、边距、侧边空间、搜索框可见性和搜索框大小更改的任何更改。