Admin Fondateur
Nombre de messages : 197 Age : 40 Localisation : Tlemcen ( Algérie ) Date d'inscription : 04/12/2006
| Sujet: Comment ne pas bloquer une application pendant un traitement Ven 12 Jan - 6:05 | |
| C'est un problème courant dans de grand traitements en boucle, les fenêtres des applications ne peuvent être rafraîchies par Windows tant que le traitement est en cours. La solution est d'appeler la méthode Application.ProcessMessages régulièrement afin que les messages de mise à jour de Windows puissent être traités. Ceci permet aussi de programmer un bouton "Stop" sur le traitement sans en venir au Alt-Ctrl-Sup.
Dans le code ci-dessous, la variable Stop indique que le bouton "Stop" à été appuyé et que la procédure doit être stoppée. L'appel de Application.ProcessMessages permet de mettre à jour normalement la fenêtre pendant l'exécution de la boucle. - Code:
-
[/center] type TForm1 = class(TForm) ... private { Déclarations privées } Stop : Boolean; ... end; ...
procedure TForm1.BoutonMarcheClick(Sender: TObject); Var i:Integer; begin { Mise à faux de l'arrêt } Stop := False; I := 0; { Traitement long } Repeat Inc(i); Label1.Caption := IntToStr(i); { Mise à jour des évènements en attente } Application.ProcessMessages; Until (i>=100000000)Or Stop; end;
procedure TForm1.BoutonStopClick(Sender: TObject); begin { Demande d'arrêt de la boucle } Stop:=True; end;[center] | |
|