var
hdlEvent : THandle; //handle de l'évènement qui provoque les fermetures.
hdlThread : THandle; //handle du Thread qui attendra l'événement 'hdlEvent'.
procedure ToutFermer(HWnd: THandle); stdcall;
{Procedure du Thread qui attend l'évènement de fermeture.}
begin
WaitForSingleObject(hdlEvent,INFINITE);//attend le déclenchement de l'événement 'OnFerme'..
PostMessage(HWnd,WM_QUIT,0,0); //..et indique à l'application ce qu'elle doit faire.
end;
procedure TForm1.FormCreate(Sender: TObject);
var id : Cardinal;
begin
hdlEvent:= CreateEvent(nil,True,False,'OnFerme'); //On crée l'événement...
if hdlEvent<>0 then hdlThread:=CreateThread(nil,1,@ToutFermer,pointer(Handle),0,id); //...et mise en attente de l'événement ds un Thread.
end;
procedure TForm1.btnToutFermerClick(Sender: TObject);
{Ferme tous les process en cours.}
begin
PulseEvent(hdlEvent);//déclenche l'événement de fermeture et le désarme aussitôt.
end;
procedure TForm1.btnQuitterClick(Sender: TObject);
{Ne ferme que le process de cette application.}
begin
Application.Terminate;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if hdlEvent <> 0 then CloseHandle(hdlEvent);
if hdlThread <> 0 then CloseHandle(hdlThread);
end;