如何使用Delphi XE2 FireMonkey中的标准TListBox组件在列表上实现弹性滚动效果FireMonkey(用鼠标拖动滚动)?
发布于 2012-05-09 18:05:00
其中一个解决方案可能是使用TListBox.ChildrenCount-1并检查它的Position.Y是否小于TListBox.Parent.Height + TListBoxItem.height。此外,创建一个全局boolean变量,如"MouseIsDown“。
由于TListBox中的每一项实际上都是您可以直接处理和修改的子对象,所以简单地创建一个大的空TListBoxItem并确保它被设置为列表中的最后一个对象。
在OnMouseDown中,将MouseIsDown设置为True,在OnMouseUp中,将其设置为false。
将TFloatAnimation添加到TListBox中,并将插值属性设置为itElastic或itBounce。当MouseIsDown设置为false时,禁用此效果,当MouseIsDown设置为true时,启用该效果。您需要做一些工作来将列表的位置重置为最后一个有效对象。也许在动画本身的OnFinish事件中这样做。
更合适的方法是计算最后一个对象的位置,并将动画的StopValue设置为该值。
本质上,您需要检查列表中的最终有效对象(即不是大型空白对象)的协调是否与列表框的高度匹配。如果是这样的话,并且鼠标没有关闭,那么动画就会被启用,滚动框就会反弹。如果它们匹配,并且鼠标被关闭,那么动画就会被禁用,因此OnFinish甚至不会被触发,因此滚动框不会重置它的位置。
您可能需要执行一个迭代嵌套过程来检查每个值是否为真。
它不会像iOS实现那样顺利,但是它应该为您提供一些可以使用的东西。
https://stackoverflow.com/questions/9774206
复制相似问题