为什么FireMonkey TListBox Animation会阻止Windows32平台上的项目取消选择



我是FireMonkey的新手(被它与Android一起工作的新能力所吸引)。 我正在尝试使用列表框的动画来动画选择项目以显示基础内容(一种常见的模式)。 但是,当我对列表框的消失进行动画处理时,我无法让列表框来管理以前选择的项目的取消选择。 奇怪的是,这似乎只发生在Windows平台上,而不是在Android或iPad设备(或iPad模拟器)上。

要重现该问题(在 RAD Studio XE5 中):

1) 创建一个新的 FireMonkey 移动应用程序,选择平板电脑主详细信息用作起始布局

2) 右键单击"目标平台",然后选择"32 位 Windows"以简化调试,然后选择它。

3) 添加新的 TListBox 对象,并将其放在窗口的左侧。

4) 使用结构浏览器将其移动到 LeftLayout,使其成为 LeftLayout 的父级。

5) 点击列表框1对象

6) 将对齐属性更改为 alClient,以填充左侧布局

7) 在对象检查器中,选择"位置"属性和"X 子属性",然后选择"新建动画"。 FloatAnimation 将被命名为 FloatAnimation1

8) 为 ListBox1 创建新的 OnItemClick 处理程序,并添加以下代码:

FloatAnimation1.StartFromCurrent := True;
FloatAnimation1.StopValue :=  0 - ((LeftLayout.Width) / 1);
FloatAnimation1.Start;

9)创建一个新按钮,并将其放在左侧窗口顶部的工具栏上

10) 为新按钮创建一个处理程序,并添加以下代码:

FloatAnimation1.StartFromCurrent := True;
FloatAnimation1.StopValue := 0;
FloatAnimation1.Start;

11) 双击列表框以打开项设计器,然后单击"添加项"按钮三次以添加三个 TListBoxItems

12) 运行应用程序。 单击列表框中的三个项之一。 列表框以动画形式向左显示,不在视图中。 单击我们添加的按钮将其取回。 单击其他项,最终,您将选中所有三个项,即使 ListBox1 的多重选择已关闭。

13) 停止应用程序。 通过将"1"更改为"2"来更改 OnItemClick 处理程序代码,以便列表框只会向左移动一半。 再次运行应用。 现在,当您单击 ListBox 时,将仅选择一个项目,并且将取消选择以前选择的项目(对于单选列表框,它应该是这样)。

同样,如果我在iPad,iPad模拟器或Android平板电脑上运行它,ListBox可以正常工作:在ListBox中单击某个项目时,将取消选择先前选择的项目。

我不能是第一个找到这个的人,因为这种动画在应用程序中非常普遍。 为什么 ListBox 行为不端,如果我只在屏幕之外的部分对其进行动画处理,为什么它在 Windows32 中会有所不同,为什么它在 Windows32 中与在 iPad 或 Android 平板电脑上不同?

我有同样的问题,带有XE32 Update2的Win5应用程序,列表框向左移出,然后返回,但蓝色选择底图的其余部分。

对我来说有效的(我知道很脏)是在启动动画后立即启动计时器。定时器间隔为100ms

定时器中的代码

if lb_liste.selected is TListBoxItem then
lb_liste.selected.isselected:= false;
/

/lb_liste 是我的列表框,一个问题可能是没有选择更多项目,但这对我来说很好。我之前在 TFloatAnimation 的 OnProcess 事件中有这部分,但奇怪的是,每当我以另一种形式与数据库交谈时,这会导致 AV,然后再滑回我的列表框。

对我来说,这显然是 FMX 中的一个错误,让我们等待 XE6,7,8

最新更新