delphi xe7 判断listbox滚动条是否到达底部,并加载数据
或者说成,listbox下拉加载数据
方法1:当listbox滚动条完全到达底部;
var Form2: TForm2; i: Single = -1; implementation {$R *.fmx} procedure TForm2.lst1Gesture(Sender: TObject; const EventInfo: TGestureEventInfo; var Handled: Boolean); begin case EventInfo.GestureID of sgiLeft: ShowMessage('sgiLeft'); sgiRight: ShowMessage('sgiRight'); sgiDown: ShowMessage('sgiDown'); sgiUp: begin if i = lst1.ViewportPosition.Y then begin ShowMessage(FloatToStr(i)); end else begin i := lst1.ViewportPosition.Y; ShowMessage(FloatToStr(i)); end; { 设置类型为Single全局变量i,初始值为了-1; 目的是记录滚动条每次的位置变化; 如果滚动条两次的位置是相同,表示滚动条已经到达底部,可以加载数据了。 } //另一个问题又来了,就是怎么判断滚动条接近底部,但是还没有到达底部的时候加载数据呢? end; end; end;
方法2:listbox滚动条快要到达底部,离底部仍有段距离,就要加载数据;
procedure TForm2.lst1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); //这个是listbox鼠标经过事件 var items:TListBoxItem; i:Integer; begin i := lst1.Count - 3; //获取listbox控件的总行数;减3的目的是获取倒数第N行。 items := lst1.ItemByPoint(X,Y); //通过坐标获取子项; // items := lst1.ItemByIndex(2); //通过素引值获取子项; // items := Sender as TListBoxItem; //强制转化为 TListBoxItem 类型,同样获取子顶; // lst1.Items[2]; //以上3种方法可以灵活设置子项的属性,例如,图标,高度,文本等;而这一项只能简单地通过素引值获取指定的子项的文本;但是,被注释的这3种方法在本例中暂不适用。 btn2.Text := items.Text; if items.Index = i then begin btn1.Text := '加载数据'; end; //本例最终目的就是,每当手势或鼠标滑过子项的时候,进行判断是不是倒数第N行, //如果是的话,说明1.滚动条快要到达底部了,2.旧数据将会全部被显示出来,这个时候就可以实现动态加载更多的新数据了。 end;
参考资料:
Delphi-XE5-手势操作-Gestures-使用方法
http://blog.csdn.net/gzxiaorou/article/details/44537917
Windows phone应用开发[18]-下拉刷新
http://www.cnblogs.com/chenkai/p/3347636.html
每日程炼-触摸屏编程OnGesture
http://blog.csdn.net/godyad/article/details/6437625
好的代码像粥一样,都是用时间熬出来的
分类:
Delphi
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
2019-12-12 Delphi连接Oracle控件ODAC的安装及使用