如果 TAction 链接到一个对象,例如 TToolButton(TToolBar 的项目)或 TActionClientItem(TActionToolBar 的项目)并且该对象在运行时可见,那么每当您在表单中移动鼠标(除了工具栏之外的任何地方),似乎根据可见 TAction 的数量在 CPU 上完成额外负载,这与在前面提到的任何一个条上都没有 TAction 链接项可见时移动鼠标相比。

很明显,明显的额外负载百分比完全取决于您正在运行的设备类型,但我注意到,当您的应用程序具有以下功能时,实际差异可能会很大:

  • 很多可见的 TAction 链接项
  • 一个自定义组件,它已经为 onMouseOver 事件执行了少量计算,例如更改控件的外观
  • 自定义视觉样式

  • 那么问题来了,为什么可见item链接的TAction组件会影响鼠标移动的处理呢?

    最佳答案

    Action 的设计基于 Action 的空闲时间更新。当您移动鼠标时,应用程序会收到大量排队的消息。每次队列被清空时,应用程序被认为是空闲的,所有的 Action 都被更新。这会导致高 CPU 利用率。

    这个问题在 VCL 中广为人知并得到承认。例如,看看 TApplication.ActionUpdateDelay

    10-08 06:30