如何检测FMX列表视图何时滚动到底部?

2023-12-03

我正在开发 FiremonkeyTListView显示搜索结果。此列表一次加载 25 个项目,但可能会显示数百个项目。

我需要检测用户何时向下滚动到底部,以便我可以获取接下来的 25 个项目以显示在列表中。但是,我找不到合适的属性来确定这一点。

有的是OnPullRefresh事件,但这适用于滚动到列表顶部并将其向下拉。我需要的是类似的,但是对于bottom的列表而不是top.

有的是OnScrollViewChange事件,这似乎是合适的。还有ScrollViewPos属性,这也很有用。但是,我无法弄清楚将该数字与什么进行比较 - 具体来说,是最大可能值ScrollViewPos。就像是ScrollViewMax是我所需要的。

但我找不到更多的东西来准确检测用户已滚动到底部。

如何检测用户何时滚动到 Firemonkey 的底部TListView这样我就可以加载更多搜索结果?

EDIT

如果由于某种原因无法做到这一点,则可以使用“加载更多...”按钮将虚拟项目添加到列表末尾。但我宁愿它是自动化的。

EDIT2

我忘了提及...我在此列表视图中显示了搜索框,并且项目可以具有可变的高度。如果基于项目内容计算这是唯一的方法,那么这样的计算需要perfect。我不想知道用户何时“接近”或“接近”底部,而是知道用户何时恰好到达列表的底部。


进一步调查我发现以下内容

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;

现在,这将涵盖填充、边距、侧边空间、搜索框可见性和搜索框大小更改的任何更改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检测FMX列表视图何时滚动到底部? 的相关文章

  • 创建后如何更新使用 AlertDialog.builder 构建的 AlertDialog 列表中的项目数组

    我使用 AlertDialog builder 创建了一个对话框 显示可以检查的多项选择列表 我设置了初始的项目名称集及其检查状态 builder setMultiChoiceItems saveTargets names saveTarg
  • 触摸滚动 Jquery 插件 - 如何为多个实例使用不同选项进行初始化?

    正如这里所发现的 https github com neave touch scroll https github com neave touch scroll function Define default scroll settings
  • 处理 TShellListView 后代中的文件放置

    我正在尝试创建 TShellListView 的后代 它接受从 Windows 资源管理器中删除的文件 我想在组件定义中处理拖 放操作 而不必在任何使用该组件的应用程序中实现它 我找到了接受从 Windows 资源管理器中拖放的文件的示例
  • TOpenDialog/NSOpenPanel 无法在沙盒 Delphi 应用程序中工作

    Firemonkey 应用程序中的 TOpenDialog 似乎存在问题 该应用程序已针对 Mac Appstore 进行沙箱处理 我使用XE3 但它也存在于XE2中 我其实在这里找到了一份QC报告 但仍然没有解决 http qc emba
  • 不断断点?如何去除它们?

    我下载了一个用Delphi 2009制作的项目 这也是我使用的 但是有一个断点我无法删除 如果我尝试删除它 它会在程序执行后再次执行 我在其他调试器中遇到了这样的事情 称为硬件断点 但这并不重要 如何删除断点 EDIT Article ht
  • Delphi 2009 IDE结构视图折叠功能

    现在有谁知道折叠 Delphi 2009 IDE 结构视图中的所有项目吗 我不知道折叠所有项目 这使我很难从视图中找到我的课程 Thanks 选择根节点 类 并按数字键盘上的 除号 那会让一切崩溃 然后按数字键盘上的 加号 键 第一级将展开
  • TObjectList.Contains 导致 Delphi 2009 中的访问冲突

    在 Delphi 2009 中 到目前为止 我在泛型方面没有遇到大问题 使用 Generics Collections 列表 没有特殊的泛型功能 现在我发现这段代码会在访问的行中导致AVMyList Contains 如果我声明 TMyLi
  • Delphi AES 库 (Rijndael) 使用 KAT Vectors 进行测试

    对于这两个库 Delphi 加密概要 v 5 2 http code google com p delphidec TurboPower 密码箱 v 2 07 http lockbox seanbdurkin id au tiki list
  • Delphi IDE导致CPU过热

    我正在使用 Delphi 7 但我已经尝试过 Delphi 2005 2010 版本 在所有这些新版本中 当 Delphi IDE 在屏幕上可见时 我的 CPU 利用率为 50 一个核心为 100 另一个核心为 宽松 当 IDE 最小化时
  • 如何在运行时(Delphi/Windows)程序中添加代码?

    我正在Windows XP Delphi 7上工作 我需要在正在运行的程序中添加一些过程 或函数 并且我不想在完成后再次重新编译它 我只有一个具有 5 个功能的主机应用程序来发送不同类型的警报 但是还有其他新的警报类型 所以我必须执行新的功
  • 在移动设备上滚动

    这个问题更多的是一个建议研究 我确实希望它对其他人有帮助 并且它不会关闭 因为我不太确定在哪里寻求有关此事的建议 在过去的 6 个月里 我一直在进行移动开发 我有机会处理各种设备上的各种情况和错误 最麻烦的是滚动问题 当涉及到在网站的多个区
  • ListView 滚动时隐藏和显示浮动按钮

    我正在我的应用程序中创建一个 listView 和一个浮动按钮 我希望根据滚动状态实现隐藏和返回的效果 当 的时候ListView滚动时按钮隐藏得很好 但是当滚动停止时按钮不会返回到其初始位置 有任何想法吗 My Code public c
  • 如何将纹理传递给 DirectX 9 像素着色器?

    我有像素着色器 fxc exe tiles fs T ps 3 0 Fotiles fsc Fctiles fsl struct PSInput float4 Pos TEXCOORD0 float3 Normal TEXCOORD1 fl
  • 命名管道性能问题

    我使用命名管道进行 C 和 Delphi 之间的过程间通信 C 使用System IO Pipes包 而 Delphi 使用Libby s pipes pas 不幸的是 通信几乎是高性能的 分析显示通信占用了整个运行时间的 72 其余的用于
  • 将 [字节数组] 分配给没有 Unicode 转换的 Variant

    考虑以下代码片段 在 Delphi XE2 中 function PrepData StrVal string Base64Val AnsiString OleVariant begin Result VarArrayCreate 0 1
  • 供所有 Win32 程序员在 Windows Aero Glass(DWM、GDI、GDI+)上绘图的文档和 API 示例

    我正在寻找良好的资源来学习使用 Win32 GDI API 或任何替代它的内容 以便使用 Win32 API 直接在玻璃窗体上进行绘制和绘制 当我使用 Delphi 时 我将其标记为 Delphi 或 Visual C 您能找到的任何代码示
  • Android WebView里面的ScrollView只滚动scrollview

    在我的应用程序中 我有一个 ScrollView 其中包含一些线性视图 一些文本视图和一个 Webview 然后是其他线性布局等 问题是 WebView 不滚动 Scroll 仅侦听 ScrollView 有什么建议么
  • 如何抑制窗口鼠标滚轮滚动...?

    我正在开发嵌入页面中的画布应用程序 我有它 因此您可以使用鼠标滚轮放大绘图 但不幸的是 这会滚动页面 因为它是文章的一部分 当我在 dom 元素上滚动鼠标滚轮时 是否可以阻止鼠标滚轮在窗口上滚动 附加鼠标滚轮 不是 Gecko DOMMou
  • 在比较 Delphi 表单文件的版本时,如何使 Beyond Compare 忽略某些差异

    我使用Beyond Compare 版本3 1 10 来比较不同版本的Delphi Form Files 但我不想看到有关ExplicitTop ExplicitLeft ExplicitHeight 和ExplicitWidth 的差异
  • Javascript/Jquery:确定用户是否使用鼠标滚轮、滚动条或键盘滚动

    我正在尝试让用户界面正常工作 如果他们使用鼠标滚轮 我需要让它以一种方式滚动 如果他们使用滚动条 我需要让它以另一种方式滚动 如果他们使用键盘 我需要让它以另一种方式滚动 我相信滚轮和滚动条都充当鼠标事件 但是当单击滚动条时我无法让 jav

随机推荐

  • 如何使用 Grunt.js (0.3.x) 连接和缩小多个 CSS 和 JavaScript 文件

    注意 这个问题仅与 Grunt 0 3 x 相关 仅供参考 有关最新 Grunt 1 x 版本的帮助 请参阅我在这个问题下面的评论 我目前正在尝试使用 Grunt js 设置自动构建过程 首先连接然后缩小 CSS 和 JavaScript
  • 如何设置 .pdf 中的字体设置,通过 MATLAB 和 LATEX 发布

    在尝试发布 m MATLAB 代码的 pdf 文件时 方程 用 Latex 编写 未以适当 平滑 的字体正确呈现 而是字体看起来分散 我确实尝试通过减小编辑器的字体大小来解决问题 但这没有用 例如 MATLAB代码为 a 从上图看 rho
  • 如何通过代码打开多个网址,我们有一个代码,但它只适用于一个网址

    我们有以下脚本 我们正在谷歌脚本编辑器中运行它 它工作正常 但它只打开一个网址 如果我们想打开多个网址 我们该怎么做 函数是 function myFunction var js var html HtmlService createHtm
  • 设置打印机首选项 - 页面方向为横向

    我想将页面方向设置为 LandScape 以便从我的 excel Vsto 项目打印 excel 工作表 手动设置页面方向打印机首选项从 打印 表单弹出的窗口 我需要一些自动化 每次用户发出打印命令时都会将方向设置为景观 我注意到如果我将方
  • 从数据存储区读取(跨组)实体时发生 TransactionFailedError(争用过多...)

    我再次调查意外发生的情况TransactionFailedError too much contention on these datastore entities 在某些情况下 代码仅读取因争用问题而被归咎的实体组 Setup GAE 标
  • C 中语句 z=++x||++y&&++z 的运算符优先级

    我正在研究运算符优先级 但我无法理解x became 2以及y and z is 1 x y z 1 z x y z 这评估为 x 2 y 1 z 1 优先级高于 因此分配的整个 RHS 归结为增量x以及对真值的评估 1 z x y z t
  • 正则表达式从字符串中获取日期

    我需要一个正则表达式来从以下字符串中获取日期 anything 2011 01 17 16 50 19 xml 这是正确的吗 0 9 0 9 xml 这里检查格式 YYYY MM DD HH MM SS d 4 d 2 2 d 2 d 2
  • Selenium/python - 无法找到部分链接文本

    在 Windows 10 上运行 Chrome 驱动程序 作为脚本和来自 python REPL 的带有 Python 2 7 的 Selenium 无法通过部分链接文本找到元素 我不确定为什么 当我查看相关网页的源代码时 只有一个实例WO
  • 我可以仅在周围没有文字时选择 吗?

    我想仅在锚标记完全独立时才选择它们 这样我可以使它们看起来像按钮 而不会使句子中的锚看起来像按钮 我不想添加额外的类 因为这是在 CMS 中进行的 我最初是在尝试这个 article p a first child last child b
  • POST请求神秘地变成了GET请求

    我有一个带有 unicorn 和 nginx 的 Rails 4 1 应用程序 但不知何故 神秘的是我的 POST 请求变成了 GET 请求 这是请求标头 Remote Address lt
  • 在 Swift 中将 JSON 字符串转换为对象的简单而干净的方法

    我花了几天时间寻找如何将一个相当简单的 JSON 字符串转换为 Swift 中的对象类型 但没有成功 以下是 Web 服务调用的代码 func GetAllBusiness Alamofire request GET http MyWebS
  • 如何将变量传递到bitbucket-pipelines中的credentials.json?

    我正在使用 bbrun 来模拟本地运行的管道 本质上 我需要的 不是问题 是在 GCP 上自动执行 terragrunt 基础设施部署 因此 每次使用标签推送时 它都会部署特定的环境 这是我的 bitbucket pipelines yml
  • Python 生成器和迭代器的区别

    迭代器和生成器有什么区别 一些关于何时使用每种情况的示例会很有帮助 iterator是一个更一般的概念 任何其类具有 next 方法 next在Python 2 和 iter 的方法return self 每个生成器都是一个迭代器 但反之则
  • “setInterval”内“for”的索引

    我有一个对象 我把它放在一个数组中 然后我用for对于数组中的每个对象 我设置了一个设置的间隔 用于使用参数调用对象的方法 但我不能 这是我的 班级 function ClassTest this test function word co
  • GWT 主题样式覆盖我的 css 样式

    我有一些带有自己的 css 的 html 文件 我想在 gwt 应用程序中使用它们 因此我复制了应用程序中的 html 和 css 文件 问题是当我打开 html 时它使用 gwt 主题样式 例如 在我的 css 中 html body 背
  • 确定程序集的框架 (CLR) 版本

    从命令行 或通过任何方式 我如何确定哪个CLR版本a NET组装需要 我需要确定程序集是否需要 2 0 或 4 0 CLR 版本 ildasm exe如果您双击 MANIFEST 并查找 元数据版本 将会显示它 默认情况下 它是编译映像所针
  • MySQL LIKE 与 json_extract

    我有一个 MySQL 查询 其中按 json 字段进行过滤 SELECT id username FROM SELECT id Json extract payload username AS username FROM table1 AS
  • 空手道:当在后台定义 json 时,动态场景大纲不起作用

    Feature Dynamic Scenario Outline Background def kittens name abc name def Scenario Outline cat name
  • 在 Java 中:如何从 byte[] 数组中压缩文件?

    我的应用程序通过 SMTP 服务器接收电子邮件 电子邮件中有一个或多个附件 电子邮件附件以 byte 形式返回 使用 sun javamail api 我试图即时压缩附件文件 而不先将它们写入磁盘 实现这一结果的可能方法是什么 您可以使用
  • 如何检测FMX列表视图何时滚动到底部?

    我正在开发 FiremonkeyTListView显示搜索结果 此列表一次加载 25 个项目 但可能会显示数百个项目 我需要检测用户何时向下滚动到底部 以便我可以获取接下来的 25 个项目以显示在列表中 但是 我找不到合适的属性来确定这一点