Delphi 如何对复选框使用TrecAnimation

Delphi 如何对复选框使用TrecAnimation,delphi,user-interface,firemonkey,delphi-xe3,Delphi,User Interface,Firemonkey,Delphi Xe3,我试图修改复选框动画,因为我正在使用自定义样式的复选标记。众所周知,正常复选框默认有4个关联的TrecAnimation,以满足IsMouseOver和IsChecked触发器的所有组合。我试过了,但没用 因此,为了理解动画是如何工作的,我将动画简化为只在IsChecked触发器及其逆触发器上工作的动画。将在样式设计器中为动画设置以下非默认设置:- Duration := 1 Enabled := True PropertyName := SourceRect S

我试图修改复选框动画,因为我正在使用自定义样式的复选标记。众所周知,正常复选框默认有4个关联的TrecAnimation,以满足IsMouseOver和IsChecked触发器的所有组合。我试过了,但没用

因此,为了理解动画是如何工作的,我将动画简化为只在IsChecked触发器及其逆触发器上工作的动画。将在样式设计器中为动画设置以下非默认设置:-

Duration       := 1
Enabled        := True
PropertyName   := SourceRect

Start          
Bottom         := 0
Left           := 0
Right          := 0
Top            := 0

Stop          
Bottom         := 46
Left           := 0
Right          := 46
Top            := 0

Trigger        := IsChecked=true
TriggerInverse := IsChecked=false
我现在面临以下奇怪的情况:-

  • 当我在object inspector中手动操作复选框的IsChecked字段时,复选标记会正确显示和消失,但当应用程序运行时,复选标记会保留在那里,并且在重复单击时不会发生任何活动(不过会触发事件)

  • 如果我尝试手动将TSubIImage的SourceRect字段设置为0,它将永远不会保存并恢复为以前的值

  • 动画的“持续时间”字段的行为也是如此。每次都会恢复到1E-5

请帮助我正确地执行此操作,我只希望当复选框的IsChecked字段更改时,标记将显示/消失

编辑1-新发现
  • 结果表明,SourceRect字段重置是由越界值引起的。它没有给出一个错误

  • “持续时间”字段具有相同的错误,但有时设置为0.2时不会重置

  • 动画从控件继承触发器,但它们仅在最新父布局/面板覆盖的区域中捕获。它们也不会在对象后面捕捉,动画是对象的子对象。通过将触发器更改为IsMouseOver并观察样式设计器中的反应来检查它


坐标属性应为StartValue和StopValue,当我测试时,每个值都列在单独的一行上。你确定你的StopValue没有显示(46,0),(46,0)?另外,我建议挂接动画的OnFinish事件,看看是动画没有运行还是选择了错误的区域。是的,它们在单独的行中。正如我所提到的,我在IDE的样式设计器中工作,而不是在代码编辑器中,因此我无法将事件分配给任何对象。如果对象具有有意义的样式名集,则可以在控件的ApplyStyle或OnApplyStyleLookup中分配事件。即使我正确命名并分配事件,单击“应用样式”后,“名称”字段将立即清除。尽管事件以某种方式保留,并显示动画未触发。我也尝试了默认的复选框动画,它打破了复选框的功能,而不是。。。