What widgetset under linux ? I'm using qt/qt5 and haven't spotted such problem.
That being a massively-important omission from the OP.
Calling Application.ProcessMessages is unavoidable if one wants the UI to be immediately-responsive to minor changes.
Screen.BeginWaitCursor;
sleep(2000); // SUSPENDS ENTIRE PROGRAM: DOES NOT CALL APM
Screen.EndWaitCursor;
In any event, one has to be careful overusing APM: if it's in code that's called- even indirectly- via Synchronize() then it can go recursive.
MarkMLl