FMX StringGrid向上滑动自动加载记录(二)
写完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)< then
begin
pq.NextPage;
end;
end;
由于OnViewportPositionChange事件没Published出来,还需要手工联接上面的方法。
procedure TMainForm.FormCreate(Sender: TObject);
begin {...}
StringGrid1.RowCount:=; StringGrid1.OnViewportPositionChange:=ViewportPositionChange; end;
编译成app,在Android上实测,达到目的。
环境:Delphi 10.2.3+kbmMW 5.05.11
FMX StringGrid向上滑动自动加载记录(二)的更多相关文章
- FMX StringGrid向上滑动自动加载记录(一)
有时候,做的app还是需要用StringGrid来显示数据,但如果用StringGrid的Livebinding绑定到一个数据集TDataset,当记录超过1000条时,效率非常低,甚至达不到实用状态 ...
- iScroll.js 向上滑动异步加载数据回弹问题
iScroll是一款用于移动设备web开发的一款插件.像缩放.下拉刷新.滑动切换等移动应用上常见的一些效果都可以轻松实现. 现在最新版本是5.X,官网这里:http://iscrolljs.com/ ...
- Web App 向上滑动动态加载数据 2015-06-11 09:36 20人阅读 评论(0) 收藏
好久没有写博客了 - - ,个人原因 个人原因.. 宣传一下...自己的.NET群:252713569 欢迎各位大神加入 嗯..最近在公司开发微信平台的东西..需要做一个WebAPP(PS:其实就是 ...
- Android RecyclerView使用 及 滑动时加载图片优化方案
1.控制线程数量 + 数据分页加载2.重写onScrollStateChanged方法 这个我们后面再谈,下面先来看看RecyclerView控件的使用及我们为什么选择使用它 RecyclerView ...
- PSR-4 自动加载器
div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,cod ...
- PHP7 学习笔记(四)PHP PSR-4 Autoloader 自动加载
参考文献: 1.PHP PSR-4 Autoloader 自动加载(中文版) 2.PHP编码规范(中文版)导读 3.PHP-PSR-[0-4]代码规范 基本步骤: (1)在vendor 下新建一个项目 ...
- js/jquery控制页面动态加载数据 滑动滚动条自动加载事件--转他人的
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件--转他人的 相信很多人都见过瀑布流图片布局,那些图片是动态加载出来的,效果很好,对服务器的压力相对来说也小了很多 有手机的相信都见过这样 ...
- [JS前端开发] js/jquery控制页面动态加载数据 滑动滚动条自动加载事件
页面滚动动态加载数据,页面下拉自动加载内容 相信很多人都见过瀑布流图片布局,那些图片是动态加载出来的,效果很好,对服务器的压力相对来说也小了很多 有手机的相信都见过这样的效果:进入qq空间,向下拉动空 ...
- Android打造(ListView、GridView等)通用的下拉刷新、上拉自动加载的组件
原文 http://blog.csdn.net/bboyfeiyu/article/details/39253051 前言 下 拉刷新组件在开发中使用率是非常高的,基本上联网的APP都会采 ...
随机推荐
- 51nod 1445 变色DNA(最短路变形)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1445 题意: 思路: 挺好的一道题目,如果$colormap[i][j] ...
- 关于PATH_INFO
nginx支持PATH_INFO? 想让nginx支持PATH_INFO,首先需要知道什么是pathinfo,为什么要用pathinfo? pathinfo不是nginx的功能,pathinfo是ph ...
- 安装labelImage的问题qt
不知为何需要些source ~/.bash_profile才 自己在 ~/.bash_profile 中配置环境变量, 可是每次重启终端后配置的不生效.需要重新执行 : $source ~/.bash ...
- BZOJ 1068 【SCOI2007】 压缩
题目链接:压缩 区间动归水题.稍微有一点细节. 令\(f_{l,r}\)表示区间\([l,r]\)最短压缩长度,默认\(l\)位置之前有个\(M\).然后就枚举一下放不放\(R\),\(M\)放哪个位 ...
- canvas 实现鼠标画出矩形
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name ...
- JVM内存管理的机制
Eclipse崩溃,错误提示:MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) sp ...
- Win7下怎么设置让远程桌面连接记住密码下次登录不需再输入
远程桌面连接功能想必大家都不会陌生吧,特别是使用VPS服务器的用户们经常会用到,为了服务器的安全每次都会把密码设置的很复制,但是这样也有一个麻烦,就是每次要桌面远程连接的时候都要输入这么复杂的密码,很 ...
- VS 2013 无法启动IIS Express Web 服务器
之前程序好好的没什么问题,可是今天一大早来到公司后打开VS2013运行Web程序,然后就弹出提示信息:无法启动IIS Express Web 服务器,思来想去昨天都好好的,今天怎么会出现如此问题呢? ...
- 雷林鹏分享:C# 运算符重载
C# 运算符重载 您可以重定义或重载 C# 中内置的运算符.因此,程序员也可以使用用户自定义类型的运算符.重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的.与其 ...
- 新概念 Lesson 4 Are you a teacher
打招呼用语: Good morning, Good afternoon,Good evening Nice to meet you. How do you do? She is French. 她是法 ...