码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-07-02 22:59:11      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:page   style   左右   row   nts   end   .com   初始   poi   

写完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)<10 then
  begin
    pq.NextPage;
  end;
end;

由于OnViewportPositionChange事件没Published出来,还需要手工联接上面的方法。

procedure TMainForm.FormCreate(Sender: TObject);
begin

{...}
  StringGrid1.RowCount:=0;

  StringGrid1.OnViewportPositionChange:=ViewportPositionChange;

end;

编译成app,在Android上实测,达到目的。

环境:Delphi 10.2.3+kbmMW 5.05.11

 

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

标签:page   style   左右   row   nts   end   .com   初始   poi   

原文地址:https://www.cnblogs.com/kinglandsoft/p/9256017.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!