有时候,做的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. 用python + hadoop streaming 编写分布式程序(三) -- 自定义功能

    又是期末又是实训TA的事耽搁了好久……先把写好的放上博客吧 相关随笔: Hadoop-1.0.4集群搭建笔记 用python + hadoop streaming 编写分布式程序(一) -- 原理介绍 ...

  2. MVC ---- ckeditor 批量绑定 blur 事件

    在项目遇到个问题,就是把循环出来的ckeditor 批量添加 blur 事件,折腾了2天 终于搞定 @{ ].Rows) { <table class="ui-jqgrid-btabl ...

  3. os.environ() 说明

    我们想要用Python获得一些有关系统的各种信息的时候就不得不想到os的environ,那这里面都具体包含了那些内容呢? 一.简介 对于官方的解释,environ是一个字符串所对应环境的映像对象.这是 ...

  4. ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) D. The Door Problem 2-SAT

    题目链接:http://codeforces.com/contest/776/problem/D D. The Door Problem time limit per test 2 seconds m ...

  5. OpenVPN Windows 平台安装部署教程

    一.环境准备: 操作系统Windows 服务器IP:192.168.88.123  VPN:192.168.89.1 客户端IP:192.168.78.3 客户端服务端单网卡,路由器做好端口映射 安装 ...

  6. Goroutines和Channels(三)

    clock服务器每一个连接都会起一个goroutine.在本节中我们会创建一个echo服务器,这个服务在每个连接中会有多个goroutine.大多数echo服务仅仅会返回他们读取到的内容,就像下面这个 ...

  7. shell :

    示例一.(用作注释,占位)#!/bin/bash : this is single line comment : 'this is a multiline comment, second line e ...

  8. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。

    一.需要分析 1.输入为一个字符串和字节数,输出为按字节截取的字符串--->按照字节[byte]截取操作字符串,先将String转换成byte类型 2.汉字不可以截半--->汉字截半的话对 ...

  9. 装B必备之 快捷键配置

    作为一个程序员 所有程序都用快捷来这是装B必备的无形装B 最为致命.... 开始搞起 第一步配置环境变量 在系统D盘新建一个文件夹  D:\cache; 然后把这个路径 配置上 D:\cache; 最 ...

  10. Beta冲刺三——《WAP团队》

    β冲刺第三天  1. 今日完成任务情况以及遇到的问题. ①马麒.杜有海:管理员审核表的进一步完善 ②郝明宇:登录.注册界面的完善 ③马宏伟.周欣:继续完善前端数据借用与后台的连接 ④乌勒扎:登录与注册 ...