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

Lazarus Pascal Discussion :

Imposer un affichage des heures dans TDateTimePicker [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre averti
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 312
    Points : 355
    Points
    355
    Par défaut Imposer un affichage des heures dans TDateTimePicker
    Bonjour,

    Je m'arrache les cheveux sur ce composant pourtant bien pratique. Il est utilisé et fonctionne correctement pour l'affichage des dates courantes. Mais ses propriétés permettent normalement d'afficher les heures, minutes, secondes et même les millisecondes dont j'ai besoin dans mes calculs... j'utilise une autre méthode en attendant, mais ça m'agace de voir que les propriétés affichées ne semblent pas fonctionner.

    voici l'affichage que j'ai à la conception sur ma fiche :
    Nom : Aide 24.jpg
Affichages : 115
Taille : 17,6 Ko

    Et le code que je mets dans le creat ou dans un évènement bouton, ça ne change rien!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      DateTimePicker1.Kind := dtkDateTime;
      DateTimePicker1.TimeDisplay := tdHMSMs;
      DateTimePicker1.TimeFormat := tf24;
      DateTimePicker1.DateTime := Now;
      Millisec := MilliSecondOf(Now);
      showmessage(Inttostr(millisec));
    Normalement Now donne les millisecondes au moment de l'exécution, mais le composant ne semble pas l'interpréter correctement. Est-ce un Bug ou j'ai loupé quelque chose?
    Par ailleurs, la date du 18 déc 1899 sort d'on ne sait où? La doc indique que la date minimale est de 1/10/1752!?!

    Nom : Aide 25.jpg
Affichages : 109
Taille : 20,3 Ko

    En allant voir la définition de TDateTimePicker dans son unité DateTimePicker, je trouve les codes suivants:

    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
    25
     
    procedure TCustomDateTimePicker.SetDateTime(const AValue: TDateTime);
    begin
      if not EqualDateTime(AValue, FDateTime) then begin
        if IsNullDate(AValue) then
          FDateTime := NullDate
        else
          FDateTime := AValue;
     
        UpdateDate(dtpoDoChangeOnSetDateTime in FOptions);
      end else
        UpdateDate;
     
    end;  
    ... et plus loin:
     
    procedure TCustomDateTimePicker.SetTime(const AValue: TTime);
    begin
      if IsNullDate(AValue) then
        DateTime := NullDate
      else if DateIsNull then
        DateTime := ComposeDateTime(Max(Min(SysUtils.Date, MaxDate), MinDate), AValue)
      else
        DateTime := ComposeDateTime(FDateTime, AValue);
    end;
    On voit que ça dépend aussi des options, mais je les ai toutes essayées, le problème ne vient pas de là!

    Du coup, je pense que c'est peut être un problème de directive d'exécution (ou peut-être de de compilation), car à la conception, il affiche les bonnes valeurs...

    Quelqu'un sait-il faire?

    Merci
    Je programme en Lazarus 3.4 sous windows 10 pro

  2. #2
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 024
    Points
    7 024
    Par défaut
    Le 30/12/1899, c'est la valeur 0.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  3. #3
    Membre averti
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 312
    Points : 355
    Points
    355
    Par défaut
    Citation Envoyé par Lung Voir le message
    Le 30/12/1899, c'est la valeur 0.
    Salut Lung,

    Merci pour ta réponse. Oui, c'est d'accord, mais je demande d'afficher la date Now? Il le fait bien lors de la conception au moment ou j'ai posé le composant!
    Pourquoi ça ne s'actualise pas à l'exécution?

    A+
    Je programme en Lazarus 3.4 sous windows 10 pro

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 850
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 850
    Points : 15 264
    Points
    15 264
    Par défaut
    Salut,

    j'ai généré un micro-test comme ça, dans un coin de mon projet sur les fontes, pour me changer les idées,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TfrmMain.Button1Click(Sender: TObject);
    var Millisec: Word;
    begin
      Millisec := MilliSecondOf(Now);
      showmessage(inttostr(millisec));
    end;
    et ma foi, ça fonctionne en ajoutant juste uses DateUtils, donc la blague est ailleurs.

    PS : Ça aussi ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var //Millisec: Word;
      adate: tdatetime;
    begin
    //  Millisec := MilliSecondOf(Now);
      adate := now;
    //  showmessage(inttostr(millisec));
      showmessage(floattostr(adate));
    end;
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 870
    Points : 11 353
    Points
    11 353
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Si tu utilises une variable intermédiaire, même comportement ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Maintenant := Now;
     DateTimePicker1.DateTime := Maintenant;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  6. #6
    Membre averti
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 312
    Points : 355
    Points
    355
    Par défaut
    Bonjour Torlourou et Jipété.

    Merci pour votre attention. Oui, j'ai déjà essayé vos solutions, ça ne marche pas!

    Ce qui est curieux, c'est que, si je ne touche pas au code DateTimePicker1 dans le code. A l'exécution, la valeur affichée est celle qui est affichée sur la Fiche lors de la conception!
    Mystère!
    Je programme en Lazarus 3.4 sous windows 10 pro

  7. #7
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 870
    Points : 11 353
    Points
    11 353
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Pardon, je ne me suis pas clairement exprimé.
    Le composant sait afficher une date jusqu'au 1/10/1752 et le 18 déc 1899 est l'origine du TDateTime, représentée par la valeur 0.0 (on peut donc fournir au TdateTimePicker un TDateTime négatif à afficher jusqu'à cette limite).
    S'il t'affiche 18/12/1899 00h00 à l'exécution de la ligne DateTimePicker1.DateTime := Now;, c'est que Now vaut 0.0, ce qui est improbable si c'est bien la valeur de retour de la fonction Now.
    D'où ma suggestion de passer par une variable intermédiaire à inspecter en débogage.
    Ou bien fait un ShowMessage(DateTimeToStr(Now)); qui - s'il vaut ce que te montre le TDateTimePicker - confirmera que ton Now se réfère à une variable imprudemment nommée plutôt qu'à la fonction souhaitée.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  8. #8
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 429
    Points : 4 537
    Points
    4 537
    Par défaut
    Bonjour,

    Pour reprendre l'idée de Tourlourou d'une variable Now qui masquerait la fonction éponyme, il est aussi possible d'écrire DateTimePicker1.DateTime := Now(); à la mode C, dont les parenthèses indiquent formellement le statut de fonction (ou procédure).

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  9. #9
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 945
    Points : 59 441
    Points
    59 441
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Je n'arrive pas à reproduire le problème avec Lazarus 3.4 sur Debian 64 bits.

    Quelle est la version de Lazarus, et quel est l'OS ?
    Le comportement est-il identique lors d'une exécution sans débogage ?

    En laissant le pointeur de la souris traîner sur "Now" dans le code source, tu sauras tout de suite s'il s'agit bien de la fonction grâce à un popup.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  10. #10
    Membre averti
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 312
    Points : 355
    Points
    355
    Par défaut
    Merci à vous tous pour vos réponses!

    C'est vrai que ça n'est pas facile d'exposer un Problème quand on travaille sur un projet conséquent...
    J'ai pris le Large et j'ai repris le problème du TDateTimePicker avec juste ce composant.

    Donc, c'est cool, j'ai sué un peu durant quelques heures, mais je suis très près de ce que je voulais obtenir.
    Je vous donne en pièce jointe le code que je vais publier pour tous

    TDateTimePicker.zip
    Résolu
    Je programme en Lazarus 3.4 sous windows 10 pro

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

Discussions similaires

  1. [WD25] Affichage des heures dans Agenda
    Par scn68100 dans le forum WinDev
    Réponses: 5
    Dernier message: 05/08/2020, 11h27
  2. Réponses: 9
    Dernier message: 02/02/2005, 15h52
  3. []Problème d'affichage des enregistrements dans un DataReport
    Par GeniuZ dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 05/01/2005, 16h52
  4. [C#] Affichage des lignes dans un tableau.
    Par maldufleur dans le forum ASP.NET
    Réponses: 4
    Dernier message: 21/04/2004, 11h28
  5. Réponses: 1
    Dernier message: 06/03/2003, 11h57

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