Выполнение длительных операций
 в приложениях на Delphi

Если приложение выполняет какую-либо операцию, занимающую много времени (более нескольких секунд), например, очень большой цикл с медленными операциями, то, во-первых, необходимо периодически (хотя бы раз в секунду), вызывать 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.

Скачать исходники этого примера.

Хостинг от uCoz