有时候,做的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向上滑动自动加载记录(一)的更多相关文章

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

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

  2. iScroll.js 向上滑动异步加载数据回弹问题

    iScroll是一款用于移动设备web开发的一款插件.像缩放.下拉刷新.滑动切换等移动应用上常见的一些效果都可以轻松实现. 现在最新版本是5.X,官网这里:http://iscrolljs.com/ ...

  3. Web App 向上滑动动态加载数据 2015-06-11 09:36 20人阅读 评论(0) 收藏

    好久没有写博客了 - - ,个人原因 个人原因..  宣传一下...自己的.NET群:252713569 欢迎各位大神加入 嗯..最近在公司开发微信平台的东西..需要做一个WebAPP(PS:其实就是 ...

  4. Android RecyclerView使用 及 滑动时加载图片优化方案

    1.控制线程数量 + 数据分页加载2.重写onScrollStateChanged方法 这个我们后面再谈,下面先来看看RecyclerView控件的使用及我们为什么选择使用它 RecyclerView ...

  5. js/jquery控制页面动态加载数据 滑动滚动条自动加载事件--转他人的

    js/jquery控制页面动态加载数据 滑动滚动条自动加载事件--转他人的 相信很多人都见过瀑布流图片布局,那些图片是动态加载出来的,效果很好,对服务器的压力相对来说也小了很多 有手机的相信都见过这样 ...

  6. [JS前端开发] js/jquery控制页面动态加载数据 滑动滚动条自动加载事件

    页面滚动动态加载数据,页面下拉自动加载内容 相信很多人都见过瀑布流图片布局,那些图片是动态加载出来的,效果很好,对服务器的压力相对来说也小了很多 有手机的相信都见过这样的效果:进入qq空间,向下拉动空 ...

  7. Android打造(ListView、GridView等)通用的下拉刷新、上拉自动加载的组件

    原文 http://blog.csdn.net/bboyfeiyu/article/details/39253051       前言 下 拉刷新组件在开发中使用率是非常高的,基本上联网的APP都会采 ...

  8. listview下拉刷新 上拉(滑动分页)加载更多

    最 近做的类似于微博的项目中,有个Android功能要使用到listview的向下拉刷新来刷新最新消息,向上拉刷新(滑动分页)来加载更多.新浪微博就是使用这种方式的典型.当用户从网络上读取微博的时候, ...

  9. Composer概述及其自动加载探秘

    composer概述 一开始,最吸引我的当属 Composer 了,因为之前从没用过 Composer . Composer 是PHP中用来管理依赖关系的工具,你只需在自己的项目中声明所依赖的外部工具 ...

随机推荐

  1. 配置caffe中出现的问题汇总

    1,运行下面代码时: sudo apt-get install libopencv 出错: E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系 原因: 源(source ...

  2. 实现简单的ORM

    介绍 本篇将介绍实现简单的ORM,即:对数据表的通用操作:增.删.改.查 数据访问层 数据访问层类图 类说明: 1.DbProvider(供应):为数据操作提供基本对象,如:连接.操作对象.事务... ...

  3. python 获取命令行输出结果

    status, output = commands.getstatusoutput("sudo rm -rf a.txt") if(not status): print(" ...

  4. spring与shiro的集成

    web.xml中的配置: <!-- The filter-name matches name of a 'shiroFilter' bean inside applicationContext. ...

  5. MongoDB(课时9 范围运算)

    3.2.2.4 范围查询 只要是数据库,必须存在有“$in”(在范围之中).“$nin”(不在范围之中). 范例:查询姓名是“张三”,“李四”,“王五” db.students.find({" ...

  6. 代码中特殊的注释技术 -- TODO、FIXME和XXX的用处

    借鉴地址:https://www.cnblogs.com/pengyingh/articles/2445826.html 在阅读一些代码时,经常会遇到诸如:TODO.FIXME和XXX的单词,它们是有 ...

  7. java日期获取前一天和后一天

    import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import j ...

  8. 常用的vi/vim基本命令(持续更新)

    ★删除/复制/粘贴 全部删除:按esc后,然后dG  全部复制:按esc后,然后ggyG  全选高亮显示:按esc后,然后ggvG或者ggVG   按“+p“可将系统全局粘贴板里的内容粘贴进来   y ...

  9. URAL 1029 Ministry

    URAL 1029 思路: dp+记录路径 状态:dp[i][j]表示到(i,j)这个位置为止的最少花费 初始状态:dp[1][i]=a[1][i](1<=i<=m) 状态转移:dp[i] ...

  10. 我为什么放弃使用mybatis3的mapper注解了

    原文链接 最近在使用MyBatis3做项目.在使用注解实现Mapper的时候遇到了比较奇葩的问题:在实现数据的batch insert的时候总是报错.好不容易可以正常插入了,但是又不能返回自增的主键i ...