Comment interrompre un traitement avec un bouton Stop

thonyboy Messages postés 165 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 16 février 2011 - 16 juin 2004 à 09:31
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 - 2 août 2004 à 15:16
Bonjour,

J'ai une appli qui fait un trés long traitement !
J'aimerais donner la possibilité a l'utilisateur de stopper ce traitement. Pour cela j'ai mis sur mon appli un boutton Stop.

Le probleme c'est que je n'arrive pas a intercepter l'evenement onclick sur ce bouton pendant le traitement !

Imaginez une fiche avec 2 boutons START et STOP
Sur l'evenement on click du boutton start disons qu'il il y a une boucle de 1 a 1000000 dans la quelle je met mes instructions
Je voudrais que quand on clique sur le bouton stop, on sort du traitement precedent.

J'espere etre clair...
Si quelqu'un peut m'éclairer

3 réponses

jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
16 juin 2004 à 10:37
Hello,

Ouais je comprends bien ton probleme.

Alors deja tu dois declarer une variable StopBoucle en boolean et l'initialiser à false.
Ensuite quand tu cliques sur ton bouton tu l'as mets à true.
Puis dans ta boucle tu dois mettre ta variable StopBoucle en parametre par exemple :
while (I < 1000) and not(StopBoucle) do
begin
Application.ProcessMessages;
Inc(I);
end;
Et enfin comme tu le vois dans l'exemple précédent la commande qu'il te manquait c'est Application.ProcessMessages tiens un extrait de l'aide delphi :
"Appelez ProcessMessages pour permettre à l'application de traiter les messages actuellement dans la file d'attente des messages. ProcessMessages parcourt la boucle des messages Windows jusqu'à ce qu'elle soit vide, puis rend le contrôle à l'application."

En esperant t'avoir dépanner.

Bonne prog,
JMP.
0
thonyboy Messages postés 165 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 16 février 2011
17 juin 2004 à 10:29
Oui merci,

Ca semble fonctionner....

Cependant il semblerait que d'ajouter un timer qui fait le application.process n'est pas non plus la solution... Il faut vraiment que je mette dans ma boucle.
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
2 août 2004 à 15:16
salut,

oui evite au maximum les timers ! en debutant le delphi, on ne sais pas tres bientot ou se gere telle ou telle instruction et on s'perçoit en posant un timer : tout marche nikel :D oui mais le timer fait tourner en boucle une instruction alors kil est en fait possible de ne l'executer que une ou deux fois .... un exemple ? ok voici ce que je faisait au debut :

je pose un tedit, puis un tbouton. le bouton est disabled. pouis l'enabled, il faut que le contenu du tedit ne sois pas vide. que jais-je ? je pose un timer qui va verifier toutes les 10ms si le tedit est vide, dans le cas contraire, il enable le bouton ! pas bete :D
oui mais en reflechissant ... quand ma souris et mon clavier ne touchent pas je tedit ... pk le timer devrait verifier ! aucune raison... en fait il faut verifier le contenu du tedit ds son evenement "onkeypress" ! et donc l'instruction n'est executée que quand necessaire !

une autre petite info : dans ce timer j'ecrivais :
if Edit1.text<>'' then Button1.nabled := true else button1.enabled := false;

mais on resume ça en faisant :
button1.enabled := length(edit1.text)>0;
ou
button1.enabled := edit1.text<>'';

voila j'espere avoir aidé qqn, ou j'espere aider qqn ds le futur :D
eof
0