Hola,
El conocido "Application.ProcessMessages()" situado en propio el bucle. O darle un respiro a la CPU (Sleep(1)). Lo que ocurre es que el bucle acapara el procesador y no deja a la aplicación respirar. Con "ProcessMessages" lo que haces es decir, "para un momento el bucle, anda, y procesa los mensajes en la cola". Con el "Sleep" lo que haces es, simplemente, dejar al procesador tiempo para otras cosas además del bucle. A grandes rasgos de esto se trata y una posible solución pasa por lo que digo, si no me equivoco, vamos.