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