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都会采 ...
随机推荐
- YOLOv1-darknet 内容解析
目录 YOLOv1-darknet 内容解析 1. 核心思想 2. 特点 3. 缺点 4. 算法流程 5. 详细内容 6. 主要参考 YOLOv1-darknet 内容解析 1. 核心思想 目标检测分 ...
- PTA第一次作业
5-5 #include <cstdio> #include <iostream> #include <cstdlib> using namespace std; ...
- C# String.Join 与 StringBuilder 对比,谁更快
String.Join 文档 StringBuilder 文档 这两天刷 Leedcode 做到一道 String 的题时突然想到这俩对比的问题,于是查了一下资料并简单对比了一下. 首先对于 ...
- LR学习资料
http://ajita.iteye.com/blog/1728243/ 选择哪种方式录制,有以下参考原则: 1 基于浏览器的应用程序推荐使用HTML-based Script 2 不是基于浏览器的应 ...
- jekins 实现Django项目的自动部署(ubuntu16.04,python2.7,django1.11)
1.依赖的插件 如果插件下载失败 更换源 http://mirror.xmission.com/jenkins/updates/current/update-center.json 因为我们只需要构建 ...
- np.linspace
来自:有一种宿命叫无能为力 在指定的间隔内返回均匀间隔的数字.(返回num个样本数据,在[start, stop]). 函数形式: linspace(start, stop, num = 50, en ...
- [ios]object-c math.h里的数学计算公式介绍
参考:http://blog.csdn.net/yuhuangc/article/details/7639117 头文件:<math.h> 1. 三角函数 double sin (dou ...
- mac 下安装mongodb
转载自https://segmentfault.com/a/1190000002547229 概念 MongoDB 是一个跨平台的,面向文档的数据库,提供高性能,高可用性和可扩展性方便. MongoD ...
- 动态规划-Largest Sum of Averages
2018-07-12 23:21:53 问题描述: 问题求解: dp[i][j] : 以ai结尾的分j个部分得到的最大值 dp[i][j] = max{dp[k][j - 1] + (ak+1 + . ...
- shell中引号的妙用
#!/bin/bashfile=('leon 01.cap' leon-02.cap nicky-01.cap whoareu-01.cap 8dbb-01.cap)dict=(simple.txt ...