热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

FMXStringGrid自动加载记录,向上滑动实现(第二部分)

写完FMXStringGrid向上滑动自动加载记录(一)自己也觉得不理想,实现的别扭与复杂,现在找到更好的实现方法,原来,StringGrid从基类TCustomPresented

写完FMX StringGrid向上滑动自动加载记录(一)自己也觉得不理想,实现的别扭与复杂,现在找到更好的实现方法,原来,StringGrid从基类TCustomPresentedScrollBox继承了OnViewportPositionChange事件,只不过没有published出来,所以在设计器,StringGrid的事件列表中无法看到。

想了解OnViewportPositionChange,先得了解Viewport是什么概念,通俗的说,Viewport就是StringGrid的可见区域,或者说是ScrollBox的可见区域。当用户在StringGrid上滑动时,无论是上下还是左右,这个Viewport是变化的,这时候,会触发OnViewportPositionChange事件。

这正是需要的事件,在这个事件中,我们可以判断用户滑动的可见区域Viewport是否到了最底部,由此来加载分页查询回来的记录。

技术分享图片

 上图中,标记出来StringGrid的左上角坐标及左下角坐标,同时也标计出Viewport的左上角及左下角的坐标,初始显示状态,StringGrid内容区域的左上角坐标与Viewport的左上角坐标是相同的,都是从(0,0)开始。当在StringGrid上滑动,Viewport的左上角坐标会变化,这个变化,会反应在OnViewportPositionChange事件中的NewViewportPosition参数中。也就是说,我们可以通过NewViewportPosition参数,得到Viewport左上角的新的坐标。当Viewport滑动到StringGrid的底部时,Viewport左下角的坐标与StringGrid的内容区的左下角坐标相等,即(0,NewViewportPosition.y+StringGrid1.ViewportSize.Height)等于(0,StringGrid1.ContentBounds.Height),好了,原理就这样,依照这个原理,可以判断用户是否滑动到StringGrid底部了:

procedure TMainForm.ViewportPositionChange(Sender: TObject;
  const OldViewportPosition, NewViewportPosition: TPointF;
  const ContentSizeChanged: Boolean);
begin
  if (StringGrid1.ContentBounds.Height-NewViewportPosition.y-StringGrid1.ViewportSize.Height)<10 then
  begin
    pq.NextPage;
  end;
end;

由于OnViewportPositionChange事件没Published出来,还需要手工联接上面的方法。

procedure TMainForm.FormCreate(Sender: TObject);
begin

{...}
  StringGrid1.RowCount:=0;

  StringGrid1.OnViewportPositionChange:=ViewportPositionChange;

end;

编译成app,在Android上实测,达到目的。

环境:Delphi 10.2.3+kbmMW 5.05.11

FMX StringGrid向上滑动自动加载记录(二)


推荐阅读
  • 本文介绍了一个来自AIZU ONLINE JUDGE平台的问题,即清洁机器人2.0。该问题来源于某次编程竞赛,涉及复杂的算法逻辑与实现技巧。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • 本文探讨了一种常见的C++面试题目——实现自己的String类。通过此过程,不仅能够检验开发者对C++基础知识的掌握程度,还能加深对其高级特性的理解。文章详细介绍了如何实现基本的功能,如构造函数、析构函数、拷贝构造函数及赋值运算符重载等。 ... [详细]
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • Docker基础入门与环境配置指南
    本文介绍了Docker——一款用Go语言编写的开源应用程序容器引擎。通过Docker,用户能够将应用及其依赖打包进容器内,实现高效、轻量级的虚拟化。容器之间采用沙箱机制,确保彼此隔离且资源消耗低。 ... [详细]
  • 本文详细介绍了如何在PHP中使用Memcached进行数据缓存,包括服务器连接、数据操作、高级功能等。 ... [详细]
  • 本文由chszs撰写,详细介绍了Apache Mina框架的核心开发流程及自定义协议处理方法。文章涵盖从创建IoService实例到协议编解码的具体步骤,适合希望深入了解Mina框架应用的开发者。 ... [详细]
  • 本报告记录了嵌入式软件设计课程中的第二次实验,主要探讨了使用KEIL V5开发环境和ST固件库进行GPIO控制及按键响应编程的方法。通过实际操作,加深了对嵌入式系统硬件接口编程的理解。 ... [详细]
  • 本文详细对比了HashMap和HashTable在多线程环境下的安全性、对null值的支持、性能表现以及方法同步等方面的特点,帮助开发者根据具体需求选择合适的数据结构。 ... [详细]
  • 神策数据分析基础
    本文介绍了基于用户行为的数据分析方法,包括业务问题的提出与定义、具体行为的识别及统计分析流程。同时,详细阐述了如何利用事件模型(Event Model)来描述用户行为,以及在实际应用中的案例分析。 ... [详细]
  • 本文列举了构建和运行 Struts2 应用程序所需的核心 JAR 文件,包括文件上传、日志记录、模板引擎等关键组件。 ... [详细]
  • 题目描述:Balala Power! 时间限制:4000/2000 MS (Java/Other) 内存限制:131072/131072 K (Java/Other)。题目背景及问题描述详见正文。 ... [详细]
  • 在项目冲刺的最后一天,团队专注于软件用户界面的细节优化,包括调整控件布局和字体设置,以确保界面的简洁性和用户友好性。 ... [详细]
  • 高级缩放示例.就像谷歌地图一样.它仅缩放图块,但不缩放整个图像.因此,缩放的瓷砖占据了恒定的记忆,并且不会为大型缩放图像调整大小的图像.对于简化的缩放示例lookhere.在Win ... [详细]
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
author-avatar
能豆子2014
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有