TListBox弹力滚动效果

时间:2012-03-19 16:44:20

标签: delphi listbox scroll delphi-xe2 firemonkey

如何使用Delphi XE2 FireMonkey中的标准TListBox组件在列表上实现弹性滚动效果like this one(使用鼠标拖动滚动)?

1 个答案:

答案 0 :(得分:0)

一个这样的解决方案可能是使用TListBox.ChildrenCount-1并检查Position.Y是否小于TListBox.Parent.Height + TListBoxItem.height。另外,创建一个全局boolean变量,例如“MouseIsDown”。

由于TListBox中的每个项目实际上都是您可以使用并直接修改的子对象,因此只需创建一个大的空TListBoxItem并确保将其设置为列表中的最后一个对象。

OnMouseDown中,将MouseIsDown设为True,在OnMouseUp中设置为false。

TFloatAnimation添加到TListBox,插值属性设置为itElasticitBounce。当MouseIsDown设置为false时,禁用此效果,当MouseIsDown设置为true时,启用效果。您需要做一些工作来将列表的位置重置为最后一个有效对象。也许在动画本身的OnFinish事件中这样做。

更合适的是计算最后一个对象的位置,并将动画的StopValue设置为该值。


基本上,您需要检查列表中最终有效对象(即不是大空白对象)的坐标是否与列表框的高度相匹配。如果他们这样做,并且鼠标未关闭,则启用动画并且滚动框反弹。如果它们匹配,并且鼠标已关闭,则动画将被禁用,因此OnFinish甚至不会被触发,因此滚动框不会重置它的位置。

您可能需要执行迭代嵌套过程来检查每个值是否为真。

它不会像iOS实现那样顺利,但它应该为您提供一些工作。