如何使用Delphi XE2 FireMonkey中的标准TListBox
组件在列表上实现弹性滚动效果like this one(使用鼠标拖动滚动)?
答案 0 :(得分:0)
一个这样的解决方案可能是使用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实现那样顺利,但它应该为您提供一些工作。