É comum utilizarmos componentes como o ProgressBar e o Gauge para manter o usuário da aplicação informado sobre o progresso de um determinado processo dentro de nossa aplicação. Porém, dependendo do processo a aplicação pode travar sendo definida como não respondendo para o sistema operacional.

Para atualizar as informações da tela durante a execução de um processo pesado e/ou demorado de nossa aplicação podemos utilizar o método ProcessMessages da variável Application. Veja o exemplo abaixo:


procedure TFrmPrincipal.btnExecutarClick(
   Sender: TObject);
 var
   i: Integer;
 begin
   ProgressBar1.Min := 0;
   ProgressBar1.Position := ProgressBar1.Min;
   ProgressBar1.Max := 100000;
   for i := 1 to 100000 do
   begin
     ProgressBar1.StepIt;
     Label1.Caption := IntToStr(i);
     Application.ProcessMessages;
   end;
 end;
Listagem 1. Usando ProcessMessages para não travar o sistema

No código da listagem anterior, fazemos um loop de 1 até 100000 atualizando a cada passagem do loop um ProgressBar e um Label. Caso não utilizarmos o método ProcessMessages o Label não será atualizado na tela em tempo real para o usuário da aplicação.