Arret d'un boucle par appui d'un bouton [Résolu]

Messages postés
6
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
15 novembre 2006
- - Dernière réponse : DeltaFX
Messages postés
459
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
Afficher la suite 

17 réponses

Meilleure réponse
Messages postés
900
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
3
Merci
"'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,

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Loda
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
24
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Delphiprog
Messages postés
900
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Loda
Messages postés
735
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
3
Merci
AH PU**** j'trouve le moyen de faire une faute dans ma correction .... AHHHH çà m'ecorche encore PLUS ... auto-flagélation avec des Orties !!!

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de elguevel
Messages postés
2349
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
12
1
Merci
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
Commenter la réponse de JulioDelphi
Messages postés
6
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
15 novembre 2006
2
1
Merci
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?
Commenter la réponse de math3002
Messages postés
2349
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
12
1
Merci
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;

=)
Commenter la réponse de JulioDelphi
Messages postés
6
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
15 novembre 2006
2
1
Merci
Merci beaucoup
Commenter la réponse de math3002
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26
1
Merci
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)
Commenter la réponse de f0xi
Messages postés
900
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
1
Merci
lol, si on s'y met tous on va y arriver...
Commenter la réponse de cs_Loda
Messages postés
735
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
1
Merci
C'est Application.ProcesMessage, pas Application.ProcessManager !

Dsl mais çà m'écorche lol

Bon Code ;-)
Commenter la réponse de elguevel
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 septembre 2019
32
1
Merci
Il a quand même fallut trois Admins pour arriver à une réponse aussi simple et surtout si élémentaire ...

    
@+
Cirec

<hr size="2" />
Commenter la réponse de Cirec
Messages postés
2349
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
12
1
Merci
*vois pas le rapport avec le fait d'être admin*

Mon site DELPHI =)
Commenter la réponse de JulioDelphi
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 septembre 2019
32
1
Merci
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" />
Commenter la réponse de Cirec
Messages postés
735
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
1
Merci
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 ?
Commenter la réponse de elguevel
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
24
1
Merci
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
Commenter la réponse de cs_Delphiprog
Messages postés
459
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
1
1
Merci
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
Commenter la réponse de DeltaFX