
11.04.2010, 23:30
|
Активный
|
|
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
|
|
Что-то вроде этого :
Код:
unit Cycle_Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, StdCtrls;
type
TForm1 = class(TForm)
btn_Start: TSpeedButton;
btn_Stop: TSpeedButton;
lbl_Cycle: TLabel;
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure btn_StartClick(Sender: TObject);
procedure btn_StopClick(Sender: TObject);
private
procedure WMQueryEndSession(var Msg: TWMQueryEndSession); message WM_QUERYENDSESSION;
procedure WMQuit(var Msg: TMsg); message WM_QUIT;
public
end;
var
Form1: TForm1;
fScanExit : boolean;
implementation
{$R *.dfm}
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
//выход из цикла при закрытии приложения
begin
CanClose := true;
fScanExit := true;
end;
procedure TForm1.WMQuit(var Msg: TMsg);
//страховка (выход из цикла при закрытии приложения)
begin
fScanExit:=true;
end;
procedure TForm1.WMQueryEndSession(var Msg: TWMQueryEndSession);
//выход из цикла при закрытии Windows
begin
fScanExit:=true;
Msg.Result := 1;
end;
procedure TForm1.btn_StopClick(Sender: TObject);
//выход из цикла по нажатию на кнопку
begin
fScanExit := true;
end;
procedure TForm1.btn_StartClick(Sender: TObject);
//Старт цикла
Const
CycleMax = 100000;
Var
i : integer;
begin
fScanExit := false;
i:=0;
lbl_Cycle.Caption:=IntTostr(i);
while not fScanExit do
begin
i:=i+1;
if Application.Terminated then begin
fScanExit:=true;
end
else begin
if i<=CycleMax then begin
//Действия в цикле
end
else begin
fScanExit:=true;
end;
end;
lbl_Cycle.Caption:=IntTostr(i);
Application.ProcessMessages;
end;
end;
end.
|