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

C++Builder Discussion :

Mettre en pause le Timer !


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 19
    Points : 11
    Points
    11
    Par défaut Mettre en pause le Timer !
    salut tt le monde,

    je veux juste savoir si c'est possible de controler les inetervalles des timers !? ( faire un pause)
    est ce possible de stopper un timer et de le relancer a partir de ce point
    ex:
    on cree un timer avec un intervalle de 5 secondes est ce possible de stopper ce timer en la 2 eme secondes et quand on le relance il commence a partir de ce points pour finir son travail.

    je tiens a vous signaler que je developpe une application multimedia et j'évite au max les compteurs ( testes) , je vous remercie d'avance j'espere que j'ai été claire

    Cordialement NaDia!

    [Modération Alacazam : Prière d'utiliser un titre explicite, merci]
    Ancien titre : Pbm avec le Timer !

  2. #2
    Membre à l'essai
    Inscrit en
    Août 2002
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 19
    Points : 21
    Points
    21
    Par défaut
    A mon avis , il faut que tu utilise la proprieté "Tag" de ton Timer pour sauvegarder la valeur ou tu est arrivé dans le temps.

    Cependant, il existe peut être une solution plus simple

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    slt,

    merci pour votre reponse microsebmais je ne sais pas comment recuperer cette valeure

    Cordialement NaDiA

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Tu fais comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int taVariable = tonTimer->Tag;
    Pour moi le problème c'est de savoir où tu es arrivée dans le temps....
    [Contrepète N° 73] Compiler le C

  5. #5
    Membre habitué
    Avatar de Alacazam
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 88
    Points : 167
    Points
    167
    Par défaut
    Bonjour,

    Si j'ai bien compris la question ... je te conseille :

    D'utiliser une variable static (voire la propriété Tag si tu as besoin de ce temps écoulé en dehors de ta fonction OnTimer).

    D'utiliser tout simplement la propriété Enabled du Timer !
    (En effet, logiquement ton temps écoulé n'est incrémenté que dans le OnTimer, donc rendre ton Timer inactif arrêtera aussi le décompte du temps écoulé !).

    Si par ailleurs tu désires arrêter le décompte du temps sans pour autant arrêter le Timer, utilise alors un static bool Actif que tu mets à true quand tu le souhaites).

    J'espère avoir été clair
    Bonne Continuation,
    Mathieu
    Développeur confirmé C++, Java, Python, JS.

  6. #6
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    slt

    ce que je veux recuperer c'est la valeure de l'intervalle du timer et non pas son Tag en tt ca sje vous remercie

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    slt,

    je vous remercie infiniment Alacazam mais un exemple serait un peu plus claire

    Cordialement NaDiA

  8. #8
    Membre habitué
    Avatar de Alacazam
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 88
    Points : 167
    Points
    167
    Par défaut
    Bien sûr.

    Je suppose que ton but est de mettre :

    Dans l'événement OnTimer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    static long Temps = 0;
    Temps++;
    Le fait de déclarer ta variable static assure qu'elle ne sera modifiée en dehors de cette fonction (hors de portée), et ne sera initialisée qu'une seule fois.

    Ensuite, pour modifier l'état du Timer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Timer1->Enabled = true; // "active" le temps
    Timer1->Enabled = false; // le "désactive".
    Bonne Chance,
    Mathieu
    Développeur confirmé C++, Java, Python, JS.

  9. #9
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Voila c plutot mettre le Timer en pause, puis le relancer de ce points sans utiliser un autre timer parce que sa complique un peu les choses

    donc ce que je veux c recuperer la valeure de l'intervalle du timer avant qu'il termine son travail, dans votre exemple la variable Temps s'incrimente a chaque fois que le temps de l'intervalle s'ecoule ce n'est pas mal heureusement ce que je veux avoir

    si vous avez un astuce ou bien une autre solution je vous serai reconnaissante

    Cordialement NaDia

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Avant de poursuivre je voudrais savoir quel est l'evenement qui t'indique que tu dois mettre en pause le timer :
    [Contrepète N° 73] Compiler le C

  11. #11
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    OnClick du bouton Button1 par exemple !

  12. #12
    Membre chevronné
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Points : 1 911
    Points
    1 911
    Par défaut
    Bonjour,

    la solution d'Alacazam est très belle mais peut-être difficile à comprendre pour un débutant car dans son incrémentation du temps, il s'agit d'une subdivision du temps réel cherché et non du temps total. Par exemple, si votre action doit s'exécuter toutes les 5 secondes soit Interval=5000 pour un timer normal, vous mettrez la propriété Interval à un petit diviseur par exemple Interval=100 soit un dixième de seconde. Dans ce cas, il faudra que la variable soit égal à 50 pour que le temps cherché de 5 secondes soit respecté. Faites le test suivant. Mettez un timer, un bouton et un Label sur votre forme. Le bouton va soit arrêter le timer soit le faire repartir par simple inversion de la propriété Enabled. Mettez la propriété Interval du timer à 100. Le label va afficher la variable t. Déclarez une constante

    Voici l'événement du timer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    static t=0;
    Label1->Caption=IntToStr(t++);
    if(t==NbDizieme)
       {
       t=0;
       ShowMessage("coucou");
       }
    }
    On affiche dans le Label la variable t. Bien que le timer soit appelé chaque dixième de seconde, la véritable action (ici afficher "coucou" dans une fenêtre) ne s'exécute que quand t=NbDizieme. Pour le bouton, vous inversez l'état du timer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    if(Timer1->Enabled)
       {
       Timer1->Enabled=false;
       ShowMessage("Je viens d'arrêter le timer");
       }
       else
       {
       ShowMessage("Le timer va redémarrer");
       Timer1->Enabled=true;
       }
    }
    Bien entendu, si vous n'avez pas de message à afficher, vous inversez seulement le timer comme suit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Timer1->Enabled=!Timer1->Enabled;
    }
    Quand le timer redémarre, vous voyez que l'affichage de l'entier t reprend à partir de là où il en était au moment de l'arrêt du timer, ce qui prouve que ça marche parfaitement.

    À bientôt.
    Gilles

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    D'après ce que j'ai vu sur la doc de BC6, mettre en pause un timer est impossible, donc, il faut le simuler.

    Le moyen le plus simple est evidemment d'avoir 2 timers, MainTimer & Compteur, supposons aussi que l'intervalle de ton timer principal c'est 500000ms.

    1. Sur OnCompteur tu decompte les milisecondes qui s'ecoulent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /* Temps est une variable membre de ta forme 
    initialisé à la valeur de l'intervalle du ton autre timer(500000)*/
    Temps--
    2. Sur OnMainTimer tu fais ce que t'as à faire et à la fin tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     //tout le boulot
    Temps = 500000;
    MainTimer->Interval = 500000; //Pas sur que ça s'appele interval.
    3. Sur click du bouton tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MainTimer->Stop(); //??
    MainTimer->Interval = Temps;
    4. Sur un autre evenement tu relances MainTimer et voilà

    A priori (j'aime bien dire à priori ça fait stylee), ça devrait marcher, j'ai pas testé mais l'idée est là.


    La 2ème façon c'est de garder un espèce de timestamp lorsque tu lances le compteur et un autre lorsque tu l'arrêtes, avec ça tu calcules le temps restant et tu l'appliques à la propriété Interval de ton timer
    [Contrepète N° 73] Compiler le C

  14. #14
    Membre habitué
    Avatar de Alacazam
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 88
    Points : 167
    Points
    167
    Par défaut
    Bonsoir,

    Citation Envoyé par spenasal
    D'après ce que j'ai vu sur la doc de BC6, mettre en pause un timer est impossible, donc, il faut le simuler.
    Je pense que tu as mal interprété l'aide.

    Même lorsque ta Form est inactive (par exemple lors de l'utilisation d'une fenêtre type OpenDialog), le Timer continue de s'exécuter ; en effet, un Timer n'a pas de Parent (GetParentComponent de TComponent renvoit NULL si non surchargé).

    Par contre, tu peux toi-même décider de l'arrêter (ou le mettre en pause, selon l'interprétation) par sa propriété Enabled.

    J'espère avoir pu t'éclairer sur ce point.
    Bonne Continuation,
    Mathieu
    Développeur confirmé C++, Java, Python, JS.

  15. #15
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    bonsoir,

    merci a vous tous Gilles,spenasal et Alacazam je suis reconnaisante pour votre precieuse aide

    Cordialement NaDiA .

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

Discussions similaires

  1. Mettre une pause dans un programme
    Par PNL dans le forum Général Java
    Réponses: 12
    Dernier message: 28/01/2016, 00h54
  2. Mettre en pause un timer
    Par Adrael dans le forum Général Java
    Réponses: 2
    Dernier message: 12/06/2009, 14h57
  3. mettre une pause
    Par filax dans le forum Flash
    Réponses: 7
    Dernier message: 27/09/2006, 14h28
  4. [VB6] Mettre en pause l'execution du code
    Par ironik dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 19/05/2006, 10h56
  5. [FLASH MX2004] Comment mettre une pause dans un script
    Par vbcasimir dans le forum Flash
    Réponses: 3
    Dernier message: 16/02/2006, 09h47

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