Arret d'un boucle par appui d'un bouton

Résolu
math3002 Messages postés 6 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 15 novembre 2006 - 8 nov. 2006 à 15:35
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 - 22 nov. 2006 à 18:04
Je souhaiterai faire une boucle while tant mon bouton n'est pas appuyé mais je ne sais pas ce que mettre comme condition

while not ??? do
begin
  monAction
end;

Y a-t-il une fonction du style Bouton.Click?
Merci d'avance

17 réponses

cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
8 nov. 2006 à 16:38
"'Application.ProcessManager' ?
C'est sa qui va empecher que je puisse plus cliquer sur aucun bouton pendant ma boucle?"

c'est le contraire, ça vas permettre a ton programm de process (traiter) les message que windows lui envoye (comme un click par exemple).

Si ton traitement est long, ne l'appel pas trop souvent. cela ralentis pas mal le programme. fait des essais...

bon code,
3
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
8 nov. 2006 à 20:20
Après la boucle, pense à "réarmer" le flag bCancel si tu veux que àa fonctionne les fois suivantes :

procedure TForm1.Button2Click(Sender: TObject);
begin
    while (not bCancel) and (ProgressBar.Position < 5000) do begin
      { code here }
      if odd(ProgressBar.Position) then  begin
         ProgressBar.StepIt;
         application.ProcessMessages;
     end;
    end;
   //réinitialiser le flag
   bCancel := False;
end;

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
3
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
9 nov. 2006 à 14:07
c'est procesSmessageS , pas ProcesMessage

:-D

tant qu'a être juste....

moi, ça m'écorche pas tant. tant qu'on sait de quoi on parle....


PS pour math3002:
stp, accept les réponses une fois que tu les a testées.
3
elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 3
9 nov. 2006 à 14:12
AH PU**** j'trouve le moyen de faire une faute dans ma correction .... AHHHH çà m'ecorche encore PLUS ... auto-flagélation avec des Orties !!!
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
8 nov. 2006 à 15:58
declare un boolean du genre :
bCancel: boolean = false;

puis sous le clic du bouton : bCancel := true;

et dans la boucle tu vérifies si bCancel est TRUE, dans ce cas, tu arretes ta boucle.
qu'en penses-tu ?
ps : je pense que tu auras besoin de 'Application.ProcessMessages;' pour que l'appuie du bouton sois 'pris en compte' (je ne sais pas comment le dire :p) avant la fin de l boucle, la boucle va 'bloquer' en quelques sortes l'acces au bouton.
bon codage
1
math3002 Messages postés 6 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 15 novembre 2006 2
8 nov. 2006 à 16:20
Merci c'est ça
Mais c'est quoi 'Application.ProcessManager' ?
C'est sa qui va empecher que je puisse plus cliquer sur aucun bouton pendant ma boucle?
1
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
8 nov. 2006 à 16:25
je viens de tester, ça marche :
je pose une TProgressBar (step=1, max=5000), et 2 TButton, je declare bCancel ici:

var
Form1: TForm1;
bCancel: boolean = false;


puis bouton 1 :

procedure TForm1.Button1Click(Sender: TObject);
begin
bCancel := true;
end;


bouton 2 :

procedure TForm1.Button2Click(Sender: TObject);
begin
while ProgressBar.Position <5000 do
begin
if bCancel then exit;
ProgressBar..StepIt;
application.ProcessMessages;
sleep(1);
end;
end;

=)
1
math3002 Messages postés 6 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 15 novembre 2006 2
8 nov. 2006 à 16:29
Merci beaucoup
1
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
8 nov. 2006 à 18:06
var
  Form1 : TForm1;
  bCancel : boolean = false;

procedure TForm1.Button1Click(Sender: TObject);
begin
    bCancel := true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
    while (not bCancel) and (ProgressBar.Position < 5000) do begin
      { code here }
      if odd(ProgressBar.Position) then  begin
         ProgressBar.StepIt;
         application.ProcessMessages;
     end;
    end;
end;

<hr size="2" width="100%" />Croc (click me)
1
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
9 nov. 2006 à 09:02
lol, si on s'y met tous on va y arriver...
1
elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 3
9 nov. 2006 à 09:33
C'est Application.ProcesMessage, pas Application.ProcessManager !

Dsl mais çà m'écorche lol

Bon Code ;-)
1
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
10 nov. 2006 à 11:18
Il a quand même fallut trois Admins pour arriver à une réponse aussi simple et surtout si élémentaire ...

    
@+
Cirec

<hr size="2" />
1
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
10 nov. 2006 à 11:23
*vois pas le rapport avec le fait d'être admin*

Mon site DELPHI =)
1
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
10 nov. 2006 à 13:05
Avant toutes choses ... c'était une plaisanterie et sans méchanceté aucune ...

je n'ai pas besoin de rapport puisque c'est une constatation
 
@+
Cirec

<hr size="2" />
1
elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 3
10 nov. 2006 à 13:11
L'admin est censé etre une force vive, bourré de connaissance, ne manquant jamais de réponse et faisant preuve d'une objectivité sans faille :-)

non ?
1
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
10 nov. 2006 à 21:23
Elle me plait bien cette définition d'Elguevel.
Je propose qu'on la mette dans le dico !

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.afipa.net
1
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
22 nov. 2006 à 18:04
L'admin est censé









être





une
force vive : on l'appelle Damoclès !





être





bourré de connaissance : il sait COMMENT ramener un quota utilisateur à 20 ko.....

ne jamais manquer de réponse :



il PEUT ramener un quota utilisateur à 20 ko.....













être





d'une objectivité sans faille : l'utilisateur EST LA SOURCE DE TOUT LES MAUX, ramenons lui son quota à 20ko !













Fear the Wrath of the (SYS/DBA)Admin
1
Rejoignez-nous