If a TAction
is linked to an Object such as TToolButton
( Item of TToolBar
) or TActionClientItem
( Item of TActionToolBar
) and that Object is visible on runtime, then whenever you move the mouse in the form (anywhere but the Toolbars), there seems to be extra load being done on the CPU based on the number of visible TActions, that is in comparison to moving the mouse when none of the TAction linked Items are visible on either of the previous mentioned bars.
It's obvious that the noticeable % of extra load done is completely based on what kind of a rig you are running but what I have noticed is that the actual difference can be significant when you have an application with :
So the question is why do visible item linked TAction components affect the processing of mouse movement?
The design of actions is based on idle time updating of actions. As you move your mouse, the application receives lots of queued messages. Each time the queue is emptied, the application is deemed to be idle, and all the actions are updated. And this can lead to high CPU utilization.
This issue is well known and acknowledged in the VCL. For example, take a look at TApplication.ActionUpdateDelay.
From memory: because each mouse movement triggers OnUpdate events. At the very least each mouse movement triggers enumeration of all actions to see whether their OnUpdate events are assigned so that they can be triggered. When the linked controls are not visible, these events are not triggered.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With