Если приложение выполняет какую-либо операцию, занимающую много времени (более нескольких секунд), например, очень большой цикл с медленными операциями, то, во-первых, необходимо периодически (хотя бы раз в секунду), вызывать Application.ProcessMessages, позволяющую Windows заниматься своими обычными делами и, во-вторых, периодически проверять значение поля Application.Terminated, чтобы узнать, не завершил ли пользователь ваше приложение, не дождавшись результатов его работы. Поле Terminated приобретает значение True в тех случаях, когда пользователь закрывает главное окно программы или из программы вызывается Application.Terminate.
Часто это применяется в циклах. Смотрите пример работы програмы с Application.ProcessMessages. Цель этой прогаммы увеличивать значения числа в Edit пока пользованель это не прикратит это.
Для этого создаём новую форму с двумя кнопками и Edit-ом.
После запуска по OK увеличиваться значения числа в Edit пока пользованель это не прикратит нажав на Abort.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
StdCtrls, Buttons;
type
TForm1 = class(TForm)
edint: TEdit;
BitBtn1: TBitBtn;
bbabort: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure bbabortClick(Sender: TObject);
private
d : double;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure
TForm1.BitBtn1Click(Sender: TObject);
begin
form1.edint.Text:='0';
Form1.bbabort.Enabled:=true;
Application.ProcessMessages;
While Form1.bbabort.Enabled do begin
d:=d+1;
form1.edint.Text:=floattostr(d);
Application.ProcessMessages;
if not Form1.bbabort.Enabled then break; {если нажал на Abort
то выход}
end;
end;
procedure TForm1.FormCreate(Sender:
TObject);
begin
form1.edint.Text:='0';
Form1.bbabort.Enabled:=false;
end;
procedure
TForm1.bbabortClick(Sender: TObject);
begin
d:=0;
Form1.bbabort.Enabled:=false;
end;
end.
Скачать исходники этого примера.