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 :

Comment créer un compteur numérique


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Par défaut Comment créer un compteur numérique
    Bonjour à tous,

    Je souhaiterai créer une compteur numérique, c'est à dire en temps réel afficher dans 3 Tedit les secondes, les minutes et les heures.

    Je ne vois vraiment pas comment commencer, pouvez vous me donner quelques conseils.

    Faut il créer un évènement en utilisant un timer??

    je vous remercie d'avance...

    Nico

  2. #2
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut fmr130
    Peut etre comme ceci, adapte de l'aide en ligne, 1 Timer, 1 TEdit
    Dans l'evenement du Timer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    Edit1->Text = FormatDateTime("dddd, mmmm d, yyyy ' à ' hh:mm:ss AM/PM", Now());
    }
    A toi de l'adapter suivant tes besoins

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Par défaut
    C'est pas une mauvais idée sauf qu'en utilisant cette façon l'heure ne pourra pas dépasser 23.

    J'ai utilisé un Timer dans lequel j'incrémente des variables :heure, minute, secondes. Puis j'affiche ces valeurs dans les Tedit.

    Voila à quoi ressemble le 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    int seconde = 0, minute = 0, heure = 0;
    void __fastcall TMainForm::Timer1Timer(TObject *Sender)
    {
       seconde++;
       if (seconde == 60)
       {
          seconde = 0;
          Edt_Secondes_->Text = 0;
     
          minute ++;
          if (minute == 60)
          {
            Edt_Minutes_->Text = 0;
            minute = 0;
            heure ++;
            Edt_Heures_->Text = heure;
          }
          else
             Edt_Minutes_->Text = minute;
       }
       else
          Edt_Secondes_->Text = seconde;
    }
    Par contre je sais pas si le compteur est très précis... qu'en pensez vous??
    Et une autre question, j'ai vu sur un forum que le Timer se bloque à une certaine valeur (65536) est ce vrai??

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Par défaut
    Bon la je viens de vérifier le compteur ne se bloque pas.... donc pas de limite du au timer... pour le tester g simplement mis un intervalle de 1ms !!!

    Par contre je sais pas comment faire pour tester la précision de mon compteur avez vous une idée???

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    On peut le faire aussi de cette façon là :

    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
    16
     
    AnsiString Div60(int *G)
    {
    int c = *G % 60; *G = *G / 60;
    return IntToStr(c / 10) + IntToStr(c % 10);
    }
     
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    AnsiString N;
    Compteur++;
    int c = Compteur;
    N = " : " + Div60(&c);
    N = " : " + Div60(&c) + N;
    Panel1->Caption = IntToStr(c) + N;
    }
    Comme le compteur est défini sur un unsigned int, ça te laisse 1193046 heures avant le bug du siècle (grosso modo... dans 136 années) !

    A plus !

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 190
    Par défaut
    Bonjour fmr130,

    Un timer n'est pas précis, je te déconseille de procéder comme tu le fais.

    Ce que je te propose, c'est bien d'utiliser un timer mais seulement pour le rafraichissement des edits.

    En ce qui concerne le calcul du temps écoulé, tu peux procéder de la manière suivante par exemple:

    * Tu définies une variable StartTime, de type TDateTime, membre de ta form principale (ou en tant que variable globale, mais bon c'est moins propre):

    * Au moment où ton compteur doit démarer, tu conserves le temps de départ:

    * Dans l'événement du timer, tu peux faire quelque chose comme:

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    void __fastcall TForm1::Timer1Event(TObject *Sender)
    {
      //récupère le temps écoulé depuis StartTime
      TTime CrtTime = Now()-StartTime;
     
      //converti CrtTime en secondes
      int SecondTime = int(CrtTime.operator double()*3600*24);
     
      //détermine le nombre d'heures écoulées
      int HourTime = (SecondTime/3600);
      //mise à jour de SecondTime
      SecondTime -= (HourTime*3600);
     
      //détermine le nombre de minutes écoulées
      int MinuteTime = (SecondTime/60);
      //mise à jour de SecondTime
      SecondTime -= (MinuteTime*60);
     
      //rafraichissement des edits
      Edit1->Text = HourTime;
      Edit2->Text = MinuteTime;
      Edit3->Text = SecondTime;
    }
    Concernant l'interval du timer, 100 ms me semble largement suffisant.

    Cordialement,

    Benjamin

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

Discussions similaires

  1. [AC-2010] Comment peut-on créer un compteur dans une Zone de texte
    Par CLASSIQUE dans le forum IHM
    Réponses: 20
    Dernier message: 30/05/2015, 19h13
  2. Comment utiliser une macro pour créer un compteur
    Par PetitChris dans le forum Macros Access
    Réponses: 8
    Dernier message: 12/12/2014, 03h21
  3. Comment créer un magazine numérique en pdf
    Par barbato dans le forum Logiciels Libres & Open Source
    Réponses: 3
    Dernier message: 09/06/2014, 08h04
  4. comment créer un compteur d'intervention ?
    Par Bouom771 dans le forum Access
    Réponses: 5
    Dernier message: 28/01/2007, 18h53
  5. [] [Stratégie] Comment créer un fichier log
    Par Skeezo dans le forum Installation, Déploiement et Sécurité
    Réponses: 4
    Dernier message: 16/09/2002, 18h30

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