You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 11 Firemonkey自定义Checkbox样式勾选标记不显示问题求助

问题成因
  • 动画触发源绑定错误:你将TColorAnimation放在TPath控件下,TPath自身没有IsChecked属性,该属性属于应用样式的宿主TCheckBox组件,动画找不到触发条件因此始终不会执行,导致勾选标记透明度不会随状态切换
  • 触发规则不规范:未指定触发源的情况下,FireMonkey只会在当前控件的属性里查找触发字段,自然无法响应复选框的勾选状态变化
  • 消失动画时长异常:0.000099秒的动画时长过短,可能被系统判定为无效动画直接跳过执行
修复方案

修改样式中两个TColorAnimation的配置,新增Source=Component指定触发源为应用样式的宿主复选框,同时调整过短的消失动画时长避免偶发渲染异常,修改后的TPath节点代码如下:

object TPath
  StyleName = 'checkmark'
  Align = Client
  Data.Path = {
    2A0000000000000000E0D8440000FF440100000000E0B5440000DC4401000000
    008093440060FE440200000000A0804400A00845020000000000614400601045
    0200000000C05F44006010450200000000405E44006010450200000000804C44
    00400C45020000000040384400200745010000000080134400E0FB4401000000
    004058440080D9440200000000007E4400A0C6440200000000808E4400A0B644
    0200000000808E4400E0B5440200000000808E440040B5440200000000C07D44
    0000A5440200000000C0574400009244010000000080124400C05E4401000000
    00803844008038440100000000405E44004012440100000000E0914400C05744
    020000000000A54400C07D44020000000040B54400808E440200000000E0B544
    00808E440200000000A0B64400808E440200000000A0C64400007E4402000000
    0080D944004058440100000000E0FB4400801344010000000020074500403844
    0200000000400C4500804C44020000000060104500405E440200000000601045
    00805F44020000000060104500C060440200000000A008450060804402000000
    0060FE44004093440100000000E0DB4400C0B544010000000000FF4400E0D844
    010000000000114500E0FB440100000000700745008007450100000000E0FB44
    000011450100000000E0D8440000FF440300000000E0D8440000FF44}
  Fill.Color = x00303030
  Margins.Left = 3.000000000000000000
  Margins.Top = 3.000000000000000000
  Margins.Right = 3.000000000000000000
  Margins.Bottom = 2.000000000000000000
  Size.Width = 10.000000000000000000
  Size.Height = 10.000000000000000000
  Size.PlatformDefault = False
  Stroke.Kind = None
  object TColorAnimation
    Duration = 0.100000001490116100
    PropertyName = 'Fill.Color'
    StartValue = x00303030
    StopValue = xFF303030
    Trigger = 'IsChecked=true'
    Source = Component // 指定触发源为宿主复选框
  end
  object TColorAnimation
    Duration = 0.1 // 调整为合理时长避免渲染异常
    PropertyName = 'Fill.Color'
    StartValue = xFF303030
    StopValue = x00303030
    Trigger = 'IsChecked=false'
    Source = Component // 指定触发源为宿主复选框
  end
end

你也可以替换为Trigger+TriggerReverse的配对写法简化配置,仅保留一个动画即可实现双向状态切换:

object TColorAnimation
  Duration = 0.1
  PropertyName = 'Fill.Color'
  StartValue = x00303030
  StopValue = xFF303030
  Trigger = 'IsChecked=true'
  TriggerReverse = 'IsChecked=false'
  Source = Component
end

内容的提问来源于stack exchange,提问作者Byte Player

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 14:36:01