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 :

composant TDateTimePicker qui reste figé


Sujet :

C++Builder

  1. #1
    Membre averti
    Inscrit en
    Avril 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 31
    Par défaut composant TDateTimePicker qui reste figé
    Bonjour à tous!

    J'utilise deux composants TDateTimePicker, un pour la date est un pour l'horaire.

    Quand j'execute le programme, les deux composants prennent la date et l'heure du pc, mais reste figés , le problème se pose surtout pour l'heure, car j'ai besoin d'avoir un genre d'horloge.

    Merci d'avance pour votre aide

  2. #2
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Salut, avec un composant Timer, tu peut généré un événement toute les secondes, et mettre alors a jour ton TDateTimePicker, tu peut par exemple prendre l'heure courante est la mettre dans ton composant comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
      DateTimePicker1->Time = Time() ;
    }
    //---------------------------------------------------------------------------
    Le seul probleme est qu'ici si tu change la valeur de ton heure, qui est l'utilité de ton TDateTimePicker, elle va se remettre a jour la seconde qui suit, il faudrais donc initialisé ton TdateTimePicker au démarrage puis toute les secondes (grace à l'evenement du Timer), tu ajoute une seconde a la valeur prècedente de tonTDateTimePicker, mais je te laisse faire le reste.
    A plus

  3. #3
    Membre averti
    Inscrit en
    Avril 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 31
    Par défaut
    Merci pour ta réponse

    J'ai déjà mis ce code

    DateTimePicker2->DateTime = Now();
    DateTimePicker1->DateTime = Now();
    Mais pour que l'horloge fonctionne, je crois qu'il faut mettre un Timer, j'en ai jamais utilisé... y'aurait il un code simple qui pourra faire une mise à "heure" de mon dateTimePicker?

    Merci

  4. #4
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Il suffit de mettre le code que tu as montré dans l'évenement OnTimer du composant Timer, cela te mettra a jour tes TDateTimePicker régulierement, en fonction de la valeur que tu mettra dans la propriété Interval de ton composant Timer, cette propiété spécifie l'interval entre deux passage dans l'événement OnTimer, cette valeur est exprimé en milliseconde, donc si tu veut mettre à jour toute les secondes, tu y met la valeur 1000.
    Voila, j'espère que ceci t'aidera.
    A plus

  5. #5
    Membre averti
    Inscrit en
    Avril 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 31
    Par défaut
    Merci beaucoup, ça marche....Mais le problème se pose lorsque je change l'heure dans mon datetime picker, ça se remet automatiquement à l'heure du système.
    y'aurait-il un moyen simple pour y remedier?

    Merci d'avance

  6. #6
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Je t'ai déjà exposé ce problème, avec la solution à y apporter dans mon premier poste :
    Citation Envoyé par pottiez
    Le seul probleme est qu'ici si tu change la valeur de ton heure, qui est l'utilité de ton TDateTimePicker, elle va se remettre a jour la seconde qui suit, il faudrais donc initialisé ton TdateTimePicker au démarrage puis toute les secondes (grace à l'evenement du Timer), tu ajoute une seconde a la valeur prècedente de tonTDateTimePicker
    Si tu ne comprend pas ma solution pose une question plus prècise sur ce que tu ne comprend pas.
    A plus

  7. #7
    Membre averti
    Inscrit en
    Avril 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 31
    Par défaut
    Je viens de comprendre ce que vous vouliez dire

    Donc je dois mettre un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    TDateTimePicker1->Time = Time + 1
    }
    Biensur ce code ne fonctionne pas! Si quelqu'un pouvait me proposer une solution ça serait trés sympa.

    Merci d'avance

  8. #8
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    C'est presque ca, essaye plutot ceci, mais je ne suis pas sur que cela fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
      TDateTimePicker1->Time = TDateTimePicker1->Time + 1
    }
    Si ca ne fonctionne pas, tu as des fonction, dans BCB, qui te permette d'incrémenté d'une seconde une variable heure, cherche dans l'aide de BCB cette fonction par exemple : IncSecond().
    A plus

  9. #9
    Membre averti
    Inscrit en
    Avril 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 31
    Par défaut
    Malheusement ça ne marche pas...

    Et concernant les fonction du BCB, et bien il y a que "incmonth" incsecond n'existe pas.
    Je travaille avec la version 3...

    Il existe peut être un autre moyen!!!???

    Merci

  10. #10
    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 !

    Peut-être quelque chose dans ce genre là (BCB3 Pro):

    Déclarations globales

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    unsigned short hours;
    unsigned short minutes;
    unsigned short seconds;
    unsigned short milliseconds;
    Dans la OnTimer

    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
    DateTimePicker1->DateTime.DecodeTime(&hours, &minutes,
            &seconds, &milliseconds);
    seconds++;
    if(seconds > 60)
        {
        seconds = 0;
        minutes++;
        if(minutes > 60)
            {
            minutes = 0;
            hours++;
            if(hours > 24)
                {
                hours = 0;
                }
            }
        }
    DateTimePicker1->DateTime = TDateTime(hours, minutes, 
            seconds, milliseconds);
    Peut-être existe t-il une méthode plus simple ?

    A plus !

  11. #11
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Salut,
    pour utiliser la fonction IncSecond, il faut inclure le fichier DateUtils.hpp, l'as tu bien inclue?
    En tête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include <DateUtils.hpp>
    Constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
      DateTimePicker1->Time = Now() ;
    }
    //---------------------------------------------------------------------------
    Evenement OnTime du composant Timer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
      DateTimePicker1->Time = IncSecond(DateTimePicker1->Time,1) ;
    }
    //---------------------------------------------------------------------------
    En procédent de cette manière cela marche nickel chez moi, mais c'est BCB 6, essaye quand même, ca a de grande chance de fonctionner.
    A plus.

  12. #12
    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 !

    Dans BCB3, le fichier DateUtils.hpp est introuvable !
    C'est pour cette raison que j'ai donné cette bidouille !

    A plus !

  13. #13
    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 !

    Je viens de trouver la solution, à défaut d'une "IncSecond" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    double d = 1.0 / (24 * 60 * 60);
    DateTimePicker1->Time = DateTimePicker1->Time + d;
    DateTimePicker1->Repaint();
    Time contient la partie fractionnaire du TDateTime, donc il faut raisonner
    sur ce plan là :
    1 heure = 1.0 / 24.0
    1 minute = heure / 60.0
    etc...

    Il faut rajouter un Repaint sinon on ne voit rien !

    A plus !

  14. #14
    Membre averti
    Inscrit en
    Avril 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 31
    Par défaut
    Citation Envoyé par henderson


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    double d = 1.0 / (24 * 60 * 60);
    DateTimePicker1->Time = DateTimePicker1->Time + d;
    DateTimePicker1->Repaint();
    Time contient la partie fractionnaire du TDateTime, donc il faut raisonner
    sur ce plan là :
    1 heure = 1.0 / 24.0
    1 minute = heure / 60.0
    etc...

    Il faut rajouter un Repaint sinon on ne voit rien !
    Ce code marche trés trés bien, merci beaucoup henderson.

    Merci à pottiez aussi pour les efforts fournis

    Vous êtes géniaux et vive les developpeurs

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

Discussions similaires

  1. [PC fixe] pc qui reste figé sous windows XP
    Par jem27 dans le forum Ordinateurs
    Réponses: 2
    Dernier message: 10/03/2011, 09h14
  2. [C#][JS] Page qui reste en arrière plan
    Par Jap dans le forum ASP.NET
    Réponses: 2
    Dernier message: 13/02/2006, 09h20
  3. [wxpython] bitmap bouton qui reste pressé
    Par hysah dans le forum wxPython
    Réponses: 3
    Dernier message: 20/01/2006, 20h41
  4. barre des taches qui reste apparente
    Par arfy dans le forum Windows XP
    Réponses: 5
    Dernier message: 25/11/2005, 08h33
  5. Réponses: 9
    Dernier message: 30/08/2005, 09h17

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