Выполняя операции требующие длительных временных затрат, приложение не реагирует на действия пользователя и не реагирует на события приложения, визуальные изменения на форме не отображаются, программа зависает на некоторое время. Подобные ситуации возможны в работе циклов, когда происходит обработка большого числа данных.
Для того чтобы исправить сложившееся положение необходимо использовать метод ProcessMessages. Этот метод принадлежит классу Application (данный класс автоматически создается при создании приложения). Данный метод обязывает приложение обработать поступившие и ожидающие своей очереди сообщения.
Расположим на форме компоненты Label и кнопку.
С помощью оператора цикла заставим перебирать числа от 1 до 10000. И если не будет строки Application.ProcessMessages; - то программа на время зависнет пока не выдаст окончательный результат. Поэтому обработчик нажатия кнопки должен быть таким:
procedure TForm1.Button1Click(Sender: TObject); var I : Integer; begin for I := 1 to 10000 do begin Label1.Caption := 'Значение равно ' +IntToStr(I); Application.ProcessMessages; end; end;
Итог: мы разобрались как с помощью метода ProcessMessages наши приложения не впадали в ступор при длительных вычислениях.