IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Quelque chose pour remplacer un "sleep()" ?


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Par défaut Quelque chose pour remplacer un "sleep()" ?
    Bonjour !

    J'ai un petit souci, et qui est probablement un souci de débutant.
    J'ai éssayé avec un Sleep() par éxemple, mais sa ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    begin
    if getasynckeystate(VK_F1) <> 0 then
    label1.Caption := 'uh ?' ;
      if Label1.Caption <> '' then
      begin
        sleep(2000);
        Label1.visible := False;
      end;
    end;
    Il faudrai donc que au bout d'un certain temps définissable se fasse mon action.

    Hors avec un sleep, j'ai l'impréssion que l'action qui est écrite aprés, se fait avant le sleep, et que ensuite j'ai un gros ramage du temps indiqué .

    Euh, une idée?

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 190
    Par défaut
    une solution simple consiste a utiliser un ttimer

    sinon il faut utiliser les threads

  3. #3
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Peut-être ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    {*
      Met en pause l'exécution pendant un temps défini
      Pendant cette pause, les messages Windows de l'applications sont tout de
      même traités.
      @param Milliseconds   Nombre de milisecondes pendant lesquelles pauser
    *}
    procedure WaitProcessMessages(Milliseconds : integer);
    var BeginTime : TDateTime;
    begin
      BeginTime := Now;
      while MilliSecondsBetween(Now, BeginTime) < Milliseconds do
        Application.ProcessMessages;
    end;
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Par défaut
    Désolé, mais je ne comprends pas comment l'utiliser afin de placer ma pause au milieu d'une suite d'instruction.

  5. #5
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Salut,

    Il te faut remplacer, si j'ai bien suivi, ton sleep(2000) par WaitProcessMessages(2000)

    Il a juste ça à faire

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Par défaut
    Ah oui d'accord, et ce pour appeler la procedure de sjrd.

    cepandant il me dit que "MilliSecondsBetween" n'est pas déclaré .

    je l'ai déclaré comme un integer, mais par la suite il me dit :
    [Pascal Error] Unit1.pas(432): E2066 Missing operator or semicolon

    en pointant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while MilliSecondsBetween('ici'Now, BeginTime) < Milliseconds do

  7. #7
    Membre Expert
    Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    Citation Envoyé par WolffN
    une solution simple consiste a utiliser un ttimer
    sera mieux, voir cette example

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Par défaut
    Vraiment désolé ...

    Il y a des fois ou je fais pas assez attention...
    cepandant merci beaucoup !!

    Par contre (Non ne me fouetez pas ! ) j'ai le meme probleme qu'avec un timer.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    procedure WaitProcessMessages(Milliseconds : integer);
    var BeginTime : TDateTime;
    begin
      BeginTime := Now;
      while MilliSecondsBetween(Now, BeginTime) < Milliseconds do
        Application.ProcessMessages;
    end;
     
    procedure TFmain.Timer1Timer(Sender: TObject);
    begin
    if Label1.Caption<> '' then
    begin
      WaitProcessMessages(1000);
      Label1.Caption := '';
    end;

    Mais mon programme se gele .

    En fait j'ai plusieurs procédures qui font changer le contenu du label1.
    Je voudrai qu'une fois le label apparu, aprés un certain laps de temps, il devienne " Label1.Caption := '' "

    Donc j'ai pensé au sleep qui me faisais freeze, mais meme la avec le WaitProcessMessages, bisarement le label défini dans les procédures ne s'éfichent pas, et je freeze autant qu'avec le sleep() .

    Vous savez de quoi sa pourai provenir ?

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    je reviens à ton premier post...
    ton label change mais tu ne le vois pas...
    essaie ceci...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      If getasynckeystate(VK_F1) <> 0 Then
      Begin
        label1.Caption := 'uh ?';
        label1.Refresh; //Force le rafraichissement du label à l'écran
      End;
      If Label1.Caption <> '' Then
      Begin
         WaitProcessMessages(2000); //sleep(2000);
        Label1.visible := False;
      End;
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Par défaut
    J'ai préféré l'utilisation d'un timer secondaire.
    Désolé d'avoir fait trainer sur des broutilles pareils.
    Merci beaucoup .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/11/2010, 18h59
  2. Réponses: 1
    Dernier message: 22/04/2008, 11h20
  3. existe t'il quelque chose pour parser du rtf?
    Par ukanoldai dans le forum Forms
    Réponses: 5
    Dernier message: 09/03/2007, 17h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo