Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : sortir d'une boucle [ Divers / Débutant(e) ] (PhilLU)

lundi 21 mai 2007 à 19:42:38 | sortir d'une boucle

PhilLU

Salut,
Mon programme propose une solution qui s'approche de la réponse idéale à chaque itération.
Donc je ne peux pas donner de nombre d'itération à l'avance, mais l'utilisateur doit pouvoir décider quand arrêter la boucle en appuyant sur un bouton.
Je cherche une solution pour sortir de la boucle en cliquant sur le bouton, mais sans résultat! (pour le moment...)
Quelqu'un à une idée?
A+
PhilLU

lundi 21 mai 2007 à 20:43:25 | Re : sortir d'une boucle

f0xi

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !



 
var
  Stop : boolean = false; { control de sortie }

const
  MaxItC = 1000000; { max d'iterations }

procedure Boucle;
var ItC : integer;
begin
  { init }
  Stop := False;
  ItC := 0;
 
  { boucle tant que Stop=False et ItC inferieur a MaxItc }
  while (not Stop) and (ItC < MaxItC) do
  begin
    { ... code ... }
   
    Inc(ItC); { incremenation du compteur d'iteration }
    if (ItC mod 5) = 0 then { toute les 5 iteration on appel ProcessMessages pour
                              ne pas bloquer le programme }
       Application.ProcessMessages;
  end;
end;


procedure TFormX.ButtonStopClick(Sender : TObject);
begin
  { simple comme bonjour }
  Stop := true;
end;




Croc (click me)

mardi 22 mai 2007 à 10:10:52 | Re : sortir d'une boucle

rt15

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
Salut,

Petite remarque au passage concernant un piège courant -> si tu as deux boutons, un pour démarrer la résolution et un pour la stopper en cours de résolution, avec le code de f0xi, les deux boutons deviennent utilisables en plein calcul.

Autrement dit, l'utilisateur peut démarrer un nouveau calcul avant que le précédent ne soit finit... Tout dépend de l'algo, mais cela peut avoir des conséquences facheuses, si il modifie une variable globale par exemple...

On peut désactiver temporairement les boutons avec leurs propriété enable.



mardi 22 mai 2007 à 14:38:16 | Re : sortir d'une boucle

f0xi

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !

exact!


var
  Stop : boolean = false; { control de sortie }

const
  MaxItC = 1000000; { max d'iterations }

procedure Boucle;
var ItC : integer;
begin
  { init }
  ItC := 0;
 
  { boucle tant que Stop=False et ItC inferieur a MaxItc }
  while (not Stop) and (ItC < MaxItC) do
  begin
    { ... code ... }
   
    Inc(ItC); { incremenation du compteur d'iteration }
    if (ItC mod 5) = 0 then { toute les 5 iteration on appel ProcessMessages pour
                              ne pas bloquer le programme }
       Application.ProcessMessages;
  end;
end;


procedure TFormX.ButtonStopClick(Sender : TObject);
begin
  { simple comme bonjour }
  Stop := true;

  ButtonStart.Enabled := true;
  ButtonStop.Enabled  := false;
end;


procedure TFormX.ButtonStartClick(Sender : TObject);
begin
  ButtonStart.Enabled := false;
  ButtonStop.Enabled  := true;

  Stop := false;
  Boucle;
end;




Croc (click me)

mardi 22 mai 2007 à 16:55:58 | Re : sortir d'une boucle

PhilLU

Merci pour les infos!!!
Si je comprend bien c'est le 'Application.ProcessMessages;' qui rend l'évennement click du bouton 'atteignable'.
Je teste ça asap!
Concernant le risque boutons multiples, je vais changer la fonction du bouton en fonction de son état 'Stop<->Start' comme ça pas de lézard.
A+
PhilLU

mercredi 23 mai 2007 à 07:04:44 | Re : sortir d'une boucle

PhilLU

Même si je ne comprend pas encore comment, mais ça marche!
Il semble que l'appli ne stoppe pas immédiatement et qu'il faut cliquer longtemps sur le bouton.
La position de Application.ProcessMessages; semble critique.
De plus quand je clique sur une autre zone de l'appli, la routine de calcul se met en pause!?!
Encore merci!
A+
PhilLU



Cette discussion est classé dans : bouton, solution, boucle, sortir, itération


Répondre à ce message

Sujets en rapport avec ce message

Sortir d'une boucle [ par jmp77 ] Tout dabord Bonjours à tous et toutes, Voici mon problème, j'ai une boucle dans laquelle se déroule des milliers de calculs. Je voudrais l'arreter p peut-on sauter une itération dans une boucle [ par olator ] Est il possible en delphi dans sauter une itération dans une boucle for dans certain condition.exempleFor i:= 1 to 7 do(si variable x>6 passe a l'itér Sortir d'une boucle for [ par Filipe35 ] Salut, J'ai une boucle for, le code (ke je souhaiterai) est le suivant; For conditionBEGIN  If temp := 1 then Exit For  (&nb arret d'un boucle par appui d'un bouton [ par math3002 ] Je souhaiterai faire une boucle while tant mon bouton n'est pas appuyé mais je ne sais pas ce que mettre comme conditionwhile not ??? dobegin  monActi sortir d'une boucle [ par didierm ] pouvez vous m'aider?comment sortir d'une boucle par un clic sur un bouton ou par l'activation d'une touche du clavier (esc pas exemple)mon prog est st Sortir d'une Form en mode ShowModal [ par MicFor ] Bonjour Je dois modifier une source et je butte sur un problème. Une fenêtre est activée avec la fonction Form.ShowModal, un traitement y est donc lan Problème sur TreeView avec la souris bouton droit [ par skorpios27 ] Bonsoir à tous,J'ai créer un popmenu qui fonctionne bien, mais il apparaît un affichage sélectionné quand je clique Image sur bouton [ par nou366 ] Bonjour, Quelqu'un pourrait-il me dire comment faire pour mettre une image sur un bouton ( style standard : une image d'imprimante pour imprimer ou un webbrowser formulaire bouton action click [ par askil2000 ] Bonjour à tous !Je charge une page HTML dans mon TWebBrowser.La page HTML est un formulaire avec des champs et des boutons.J'aimerais que mon programm Bouton-Docking [ par nou366 ] Bonjour, Je voudrais faire une application de facture.Je vais utiliser plusieurs écrans ( clients, articles,factures...)Pour ouvrir chaque fenêtre ou


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,780 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.