Schubst du also eifrig die Maus..., wird es kaum zum Zug kommen.
Für den von freimatz beschriebenen Fall done=true ("OnIdle is called
only once, as the application transitions into an idle state."): Das Gegenteil ist der Fall. Windows sendet dann haufenweise WM_MOUSEMOVEs an deine App, was zu haufenweise zusätzlichen "OnIdles" führt.
Kann es sein, dass es an einem Timer liegt, der regelmäßig kommt?
Wenn du wissen willst nach welchen WM_xxx Meldungen dein Idle(.) ausgelöst wird, dann könntest du die WM_xxx zwischen zwei Idles ja abspeichern (zum Beispiel via TApplicationEvents OnMessage).
Du schreibst nicht, was du in deinem OnIdle Handler tust. Eventuell könntest du die Dinge woanders tun (?).