1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
var
UserWantToQuit:Boolean;
//*** l'usager est impatient et veux quitter le traitement ***
procedure TForm1.Button1Click(Sender: TObject);
begin
UserWantToQuit:=TRUE;
end;
//*** ici, le traitement qui est très long... ***
procedure TForm1.Button2Click(Sender: TObject);
var
Diag:TForm;
i:integer;
begin
//Prepare la fenetre de confirmation...
Diag:=CreateMessageDialog( 'Est-ce qu''on arrête le traitement?',mtCustom,[mbYes,mbNo]);
//Met la fenetre tjrs en avant plan
SetWindowPos(Diag.Handle,HWND_TOPMOST,
0,0,0,0,SWP_NOSIZE+SWP_NOMOVE);
try
for i:=0 to 1000 do
begin
//*** do some job... ***
sleep(100);
//*** do some job... ***
sleep(100);
//*** do some job... ***
sleep(100);
//Show Confirmation if need?
if ( (UserWantToQuit=TRUE) and (Diag.Visible=FALSE) ) then
begin
Diag.Show();
UserWantToQuit:=FALSE;
Application.ProcessMessages;
end;
//CheckIf User click No
if Diag.ModalResult=ID_No then
begin
Diag.ModalResult:=0;
Diag.Hide;
Application.ProcessMessages;
end;
//CheckIf User Click Yes
if Diag.ModalResult=ID_YES then
begin
//sort de la boucle de traitement
break;
end;
Application.ProcessMessages;
end;
finally
Diag.Hide();
Diag.Release();
end;
end; |
Partager