Выполнение длительных операций в приложениях на Delphi
Если приложение выполняет какую-либо операцию, занимающую много времени (более нескольких секунд), например, очень большой цикл с медленными операциями, то, во-первых, необходимо периодически (хотя бы раз в секунду), вызывать Application.ProcessMessages, позволяющую Windows заниматься своими обычными делами и, во-вторых, периодически проверять значение поля Application.Terminated, чтобы узнать, не завершил ли пользователь ваше приложение, не дождавшись результатов его работы. Поле Terminated приобретает значение True в тех случаях, когда пользователь закрывает главное окно программы или из программы вызывается Application.Terminate. Кроме того, следует учитывать, что установившиеся де-факто стандарты на интерфейс требуют отображения текущих результатов работы (легче всего это сделать с помощью компонента TProgressBar), либо, если это по каким-либо причинам невозможно (например, при выполнении SQL-запроса), просто отображения движущегося изображения, в символической форме демонстрирующего суть происходящего процесса (компонент TAnimate).