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 averti
    Inscrit en
    Juillet 2003
    Messages
    19
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 19
    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 averti
    Inscrit en
    Ao�t 2002
    Messages
    19
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2002
    Messages : 19
    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 averti
    Inscrit en
    Juillet 2003
    Messages
    19
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 19
    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
    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....

  5. #5
    Membre �prouv�
    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
    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

  6. #6
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    19
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 19
    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 averti
    Inscrit en
    Juillet 2003
    Messages
    19
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 19
    Par d�faut
    slt,

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

    Cordialement NaDiA

  8. #8
    Membre �prouv�
    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
    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

  9. #9
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    19
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 19
    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
    Par d�faut
    Avant de poursuivre je voudrais savoir quel est l'evenement qui t'indique que tu dois mettre en pause le timer :

  11. #11
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    19
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 19
    Par d�faut
    OnClick du bouton Button1 par exemple !

  12. #12
    Membre Expert
    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
    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
    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

  14. #14
    Membre �prouv�
    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
    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

  15. #15
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    19
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 19
    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