[Delphi] Faire une pause dans une procedure

le.schtroumpf.jedi Messages postés 66 Statut Membre -  
 nobody -
J'ai dévellopé en Delphi une application qui doit attendre une frappe au clavier ou la fin d'un timer pour continuer.

Mon pb est le suivant, comment faire une pause dans une procedure ou est ce possible ?

La seule solution que j'ai trouvé est de décompser la procedure en plusieurs procedures, ainsi le timer ou le clavier lance la suite.

Je trouve ma solution pas très optimale car j'ai du faire appel à 7 procedure pour faire le traitement d'une seule.

Pourriez vous m'indiquer si une autre solution existe ?

Merci...

5 réponses

  1. nobody
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    test :=false;
    while not test do
    application.ProcessMessages ;
    edit1.Text:='pouet'; <------là tu ralentis lexécution de ton programme inutilement en définissant indéfiniment la valeur de ton contrôle
    end;

    il vaut mieux :

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    test :=false;
    edit1.Text:='pouet';
    while not test do
    application.ProcessMessages ;
    end;
    1
  2. nabzone
     
    pour faire une pause il existe la célébre fonction :
    sleep(X)
    si X=1000 ---> 1 seconde
    si X=2000 ---> 2 secondes
    ...
    ...
    0
    1. le.schtroumpf.jedi Messages postés 66 Statut Membre 3
       
      Comment faire une pause seulement terminé par le timer ou le clavier ?
      0
  3. samounet Messages postés 99 Statut Membre
     
    g une otre solution... mais ca marche en VB, je sais po pour delphi

    l idee c de faire

    tant que faux
    Doevents <---- ca veut dire que ca permet a d autre evenements de s executer
    fintq

    et en fait quand tu a une frappe au clavier, ou ton timer qui se declenche, tu metsq ton booleen a vrai

    si tu oublies le doevents, ton prog va boucler sans fin.... mais je connais po l equivalent de DoEvents en delphi, mais ca doit bien exister
    0
    1. le.schtroumpf.jedi Messages postés 66 Statut Membre 3
       
      j'ai essayé cette solution, mais le problème est que m^me qd le booléen est mis à vrai la boucle n'est pas terminée.

      PS : en Delphi c'est ProcessMessage.
      0
  4. samounet Messages postés 99 Statut Membre
     
    ben ca m etonnes assez, parce que si tu fais un bete

    tant que faux
    blahblah
    fintq

    des que ton booleen passe a vrai il doit sortir du tant que...$

    t sur qu il y a pas une couille o nivo de tes noms de variables, quelle sont bien declarees en global... tout ca ?
    0
    1. le.schtroumpf.jedi Messages postés 66 Statut Membre 3
       
      Tout est ok.

      Excue moi, mais tu es sûr de ton coup, moi ça marche toujours pas.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. samounet Messages postés 99 Statut Membre
     
    chez moi ca marche

    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls;

    type
    TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    private
    { Déclarations privées }
    public
    { Déclarations publiques }
    end;

    var
    Form1: TForm1;
    test : Boolean;
    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    test :=false;
    while not test do
    application.ProcessMessages ;
    edit1.Text:='pouet';
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    begin
    test :=true;
    end;

    end.
    -1