Application.OnIdle is exactly the same as providing your own message loop. There is absolutely no difference. Study the VCL source for TApplication to see why. Always remember to set the Done parameter to False so the OnIdle event is continuously triggered.