Yo no te recomiendo para nada que uses
Application.ProcessMessages. Suelen ocurrir este tipo de cosas "raras". Si lo que realmente queres es mostrar el progreso de actualizacion de algo, no hay otra solucion que una aplicacion multihilo. La Vcl es un framework que corre en un solo hilo (el main-thread). Este es el unico hilo que tiene (o mejor dicho, debe) que encargarse de manipular la interfaz grafica; es decir, practicamente cualquier llamado a metodo, cambiar una propiedad, requiere refrescar los controles, y esto debe ocurrir en el contexto del hilo principal
Asi que la solucion es mover el trabajo "pesado" a otro hilo (proceso en ejecucion) que vaya "informando" periodicamente su progreso al hilo principal, para que este realice las actualizaciones necesarias en la interfaz grafica. De esta manera, la aplicacion se mantiene "respondiendo" mientras esta "trabajando". En pocas palabras, el Application.ProcessMessages es un hack; no realiza el trabajo, no convierte tu aplicacion en multihilo. En el mundo de hoy, no queda otra que utilizar todos los recursos (procesadores) que tienen las computadoras, asi que hay que aprender programacion concurrente y a utilizar hilos.
Cada caso es particular, asi que dependiendo del mismo, y de la version de Delphi que tengas, es mas o menos dificil realizar este trabajo. Por el foro hay ejemplos de uso de hilos (threads). Aca presento
una solucion, (que esta lejos de ser optima)
Si queres usar la biblioteca System.Threading (que se conoce como
Parallel Programming Library, PPL)
Aca hay ejemplos del CodeRage XI en español:
Parallel Programming Library (PPL) con Delphi
Otro pero en ingles
Hay mas recursos si buscas en la web. Tambien podes optar por la biblioteca
OmniThreadLibrary que funciona desde Delphi 2007 en adelante
La web de Neftali tambien tiene
ejemplos de threads, incluso utilizando bases de datos