Многии начинающие програмисты не знают о методе Application.ProcessMessage() и сталкиваются с проблемами, которых не могут объяснить. Например, мы хотим написать что-то на форме и через 5 секунд стереть. Нужно сделать так:

1: procedure TForm1.Button1Click(Sender: TObject);
2: begin
3:    Label1.Caption:='Started';
4:    Application.ProcessMessage;
5:    Sleep(5000);
6:    Label1.Caption:='Finished';
7: end;

Попробуйте убрать Application.ProcessMessage(), и вы никогда не увидете слова "Started". Это связано с тем, что Windows ждет, пока накопятся сообщения в очереди, а не обрабатывает их сразу. Application.ProcessMessage() заставляет обработать все сообщения, которые накопились в данный момент. Подробности можно найти в файлах справки.

Еще это можно применить так:

1: procedure TForm1.Button1Click(Sender: TObject);
2: var
3:    i:integer;
4: begin
5:    for i:=1 to 100000 do
6:    begin
7:      ProgressBar1.Position:=i;
8:      Application.ProcessMessage;
9:    end;
10: end;

Если убрать  Application.ProcessMessage(), то, пока выполняетсяцикл, мы не сможем сдвинуть, свернуть форму, вывести ProgressBar1.