Arret d'une boucle en delphi ...

Arret d'une boucle en delphi ... - Programmation

Marsh Posté le 27-05-2001 à 14:37:45    

Oui donc voilà j'ai un programme qui lance une acquisition (nombre d'acquisition choisi par l'utilisateur jusqu'à 1000) mais voilà disont qu'il ne veut plus en faire 1000 trop long et il veut arreter maintenant comment on fait pour faire ça donc arreter une boucle ?
 
Cela doit ce faire lorsqu'on clique avec la souris sur form1 (donc partout) .

Reply

Marsh Posté le 27-05-2001 à 14:37:45   

Reply

Marsh Posté le 27-05-2001 à 15:01:15    

c'est quoi que tu appelles une acquisition ? car si ton application n'a pas la main pendant qu'elle travaille (utilisation d'un thread) l'evenement de la souris sera ignoré).

Reply

Marsh Posté le 27-05-2001 à 16:02:49    

Et ben il va chercher des données sur le port centros et les affiches dans une listbox et il fait l'acquisition quand une ligne vaut 0 ou 1 (acquisition période mais ça c'est juste à titre informatif)

Reply

Marsh Posté le 27-05-2001 à 19:28:10    

voilà le principe (..en C):
 
int i = 0
bool termine = false
 
while ( (i < = 1000) && (!termine) )
{
 
}
 
quand tu click sur le bouton annuler ou qqchose comme ca pour arreter ca met simplement:
termine = true

Reply

Marsh Posté le 27-05-2001 à 20:03:00    

il faut aussi que de temps en temps tu traites les messages (clavier, souris, etc...)
par ex :

Code :
  1. if i mod 50 = 0 then application.processmessages;


ici toutes les 50 lignes il traite les messages.
évidemment l'intervalle des processmessages dépend de la durée d'un passage dans la boucle.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 27-05-2001 à 22:18:38    

Mhhh je comprend vos réponse et pas en faite ce que je comprend pas c'est que pour arreter une boucle il n'existe pas de procédure ou de fonctions bien spécifique pour arreter une boucle ? non ?  
 
C'est pas possible par exemple de creer (comme en html) une encre je m'explique dans la procédure tform1.onclick on met le non de l'encre qui lorsqu'on clique n'impote où sur form1 l'appele et vu que celle ci serait après le boucle ne la ferait plus justement ? je rêve là non ?

Reply

Marsh Posté le 28-05-2001 à 11:06:34    

Dans le OnClick de ta form, tu mets ton boolean à True:
 
procedure TForm1.FormClick(Sender: TObject);
begin
  Stop := True;
end;
 
et dans ta boucle, tu peux faire comme ça :
 
while (i < nb_boucles) do
  begin
    Application.ProcessMessages;
    Inc(i);
    if (Stop) then
      Break;
  end;
 
ou comme ça, moins bourrin :
 
while ((i < nb_boucles) and not(Stop)) do
  begin
    Application.ProcessMessages;
    Inc(i);
  end;

 

[edit]--Message édité par Zero Cool--[/edit]


---------------
"D'abord arrêter le chimique, et après reprendre l'école ..."  
Reply

Marsh Posté le 28-05-2001 à 11:26:24    

La solution proposee par endi, antp, zcool et les autres est non seulement la bonne solution mais la seule : lorsque t'entre ds une boucle et que tu veux en sortir par une action exterieure (click sur un bouton ou autre) il faut de tps en temps donner la main par un ProcessMessage, modifier une var booleenne ds un OnClick par ex at au retour du ProcessMessage verifer cette var et sortir si elle est fausse.
voila.

Reply

Marsh Posté le 28-05-2001 à 18:23:22    

Ben justement c'est ce qu'il me falait car j'avais bien réussi à mettre pour que ça s'arrete mais l'acquisition continuait encore mais je vais essayer ça sinon merci  :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed