FMX StringGrid向上滑动自动加载记录(一)
有时候,做的app还是需要用StringGrid来显示数据,但如果用StringGrid的Livebinding绑定到一个数据集TDataset,当记录超过1000条时,效率非常低,甚至达不到实用状态,这是Livebinding的硬伤。那么只有自己把TDataSet记录填写到StringGrid了。
当一个查询结果记录非常多,那么我们要采用分页查询方法,每次查询一定数量的记录到客户端,然后追加填写到StringGrid中,问题来了:怎么判断用户查看到StringGrid显示的最后一条记录呢?查看StringGrid的事件,竟然很少,没有想用的事件。看来,FMX的可视控件,还需要进一步完善与发展,填加更多的功能,才能满足现在的需求。
向几位朋友求助,也说没有好办法,但提供了一些思路,如何判断用户查看到最后一条记录。其中,按竹子的想法,找到StringGrid的纵向ScrollBar,然后利用他的事件处理,经过实践,这个想法可行。
第一步,找到用户上下滑动触发的事件,见代码:
procedure TMainForm.StringGrid1DrawColumnHeader(Sender: TObject;
const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF);
begin
if Assigned(StringGrid1.VScrollBar) then
begin
StringGrid1.VScrollBar.OnPaint:=Self.ScrollBar1Paint;
//Text2.Text:='onpaint已经联接上!'
end;
end;
通过代码,可以看到,利用StringGrid.VsScrollBar找到纵向的ScrollBar对象,然后接管他的OnPaint事件。在什么时候做这个设置呢?随便找一个事件,如StringGrid1DrawColumnHeader,你可能会问,为什么不在Form.Create中处理,因为这时候取不到VScrollBar对象。
第二步,实现OnPaint事件,判断应该为用户加载下一页记录
procedure TMainForm.ScrollBar1Paint(Sender: TObject; Canvas: TCanvas;
const ARect: TRectF);
begin
// Text2.Text:=Format('TopRow=%d,BottomRow=%d,VisibleRows=%d,RowCount=%d',
// [StringGrid1.TopRow,StringGrid1.BottomRow,StringGrid1.VisibleRows,StringGrid1.RowCount]);
if StringGrid1.BottomRow+=StringGrid1.RowCount then
begin
pq.NextPage;
end;
end;
StringGrid有BottonRow,指当前显示的最后一条记录的行数,如果这个行数等于StringGrid的RowCount,那么就是显示到最后一条记录了,因为BottonRow从0开始,所以要加1,理解了这个,那么上面代码就容易明白了。
FMX StringGrid向上滑动自动加载记录(一)的更多相关文章
- FMX StringGrid向上滑动自动加载记录(二)
写完FMX StringGrid向上滑动自动加载记录(一)自己也觉得不理想,实现的别扭与复杂,现在找到更好的实现方法,原来,StringGrid从基类TCustomPresentedScrollBox ...
- 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 ...
- js/jquery控制页面动态加载数据 滑动滚动条自动加载事件--转他人的
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件--转他人的 相信很多人都见过瀑布流图片布局,那些图片是动态加载出来的,效果很好,对服务器的压力相对来说也小了很多 有手机的相信都见过这样 ...
- [JS前端开发] js/jquery控制页面动态加载数据 滑动滚动条自动加载事件
页面滚动动态加载数据,页面下拉自动加载内容 相信很多人都见过瀑布流图片布局,那些图片是动态加载出来的,效果很好,对服务器的压力相对来说也小了很多 有手机的相信都见过这样的效果:进入qq空间,向下拉动空 ...
- Android打造(ListView、GridView等)通用的下拉刷新、上拉自动加载的组件
原文 http://blog.csdn.net/bboyfeiyu/article/details/39253051 前言 下 拉刷新组件在开发中使用率是非常高的,基本上联网的APP都会采 ...
- listview下拉刷新 上拉(滑动分页)加载更多
最 近做的类似于微博的项目中,有个Android功能要使用到listview的向下拉刷新来刷新最新消息,向上拉刷新(滑动分页)来加载更多.新浪微博就是使用这种方式的典型.当用户从网络上读取微博的时候, ...
- Composer概述及其自动加载探秘
composer概述 一开始,最吸引我的当属 Composer 了,因为之前从没用过 Composer . Composer 是PHP中用来管理依赖关系的工具,你只需在自己的项目中声明所依赖的外部工具 ...
随机推荐
- java ShutdownHook介绍与使用
Java程序经常也会遇到进程挂掉的情况,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码.JAVA中的ShutdownHook提供了比较好的方案. JDK提供了Java ...
- python 日期输出附带毫秒
def get_time_stamp(ct): local_time = time.localtime(ct) data_head = time.strftime( time_stamp = &quo ...
- Jmeter 中多线程并发和循环控制器
今天遇到一个场景, 给一个手机号发送短信验证码,通过正确输入短信验证码即登录并获得token,进行其他操作. 短信验证码是4位,即9999个组合, 接口没有对验证次数做校验,所以可以一直一直尝试通过验 ...
- [原]设置vs的release版本调试
通过三步设置就可以实现realse下的调试啦: 1.设置“C/C++”------>“常规”------->“调试信息格式”设置成:“程序数据库(/Zi)” 2.设置“链接器”------ ...
- [ios]如何在ARC代码中混编非ARC代码
参考 :http://blog.sina.com.cn/s/blog_b595ce9e0101nvvn.html “ios中如果arc和非arc文件混编,可以在build parses中指定compi ...
- Beta冲刺二——《WAP团队》
β冲刺第二天 1. 今日完成任务情况以及遇到的问题. ①马麒.杜有海:管理员审核表的进一步完善 ②郝明宇:登录.注册界面的完善 ③马宏伟.周欣:继续完善前端数据借用与后台的连接 ④乌勒扎:登录与注册 ...
- react notes
jsx 在JSX中嵌入用户输入是安全的,默认情况下, 在渲染之前, React DOM 会格式化(escapes) JSX中的所有值. 从而保证用户无法注入任何应用之外的代码. 在被渲染之前,所有的数 ...
- 使用mothur进行OTU聚类
微生物16S的OTU聚类工具有很多,最常用的就是 usearch.cdhit-OTU.mothur. 这些工具大多都是针对二代测序平台的,usearch的64bit版本是收费的. 如果要跑PacBio ...
- arcgis for silverlight 地图放大到某个点或者几何对象
http://blog.csdn.net/xuan444150/article/details/7727866 分类: silverlight王国 GIS王国 2012-07-09 08:50 1 ...
- WPF中为窗体设置背景图片
在WPF应用程式中,我们往往想为一个窗体设置一个中意的背景图,而不是单独的为这个Background设置成某种颜色或渐变颜色的背景. 在WPF 利用Expression Blend工具如何达到这种效果 ...