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

 Delphi Discussion :

WeekOf et TMonthCalendar pas logique


Sujet :

Delphi

  1. #1
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut WeekOf et TMonthCalendar pas logique
    Bonsoir tout le monde,

    Cela faisait longtemps.

    J'ai un problème avec le composant TmonthCalandar et la function WeekOf()

    En effet si vous posez un composant TmonthCalandar avec le parametre WeekNumbers à True
    Puis un petit clique boutton qui ferais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    showmessage(inttostr(WeekOf(now)));
    Le numéro de semaine retourné ne corresponds pas au numéro de semaine afficher par le TMonthCalandar.

    J'ai tenté de jouer avec le paramètre StartOfWeek du composant TmonthCalandar... sans succès.

    Je me suis tourner ensuite sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetLocaleInfo(LOCALE_SYSTEM_DEFAULT,LOCALE_IFIRSTDAYOFWEEK,'3');
    Nada, tous ses paramètres font juste changer le départ du jour 1 d'un mois donné.

    Bref.

    J'ai alors ouvert Outlook 2010, dans les options j'ai 3 choix, pour la première semaine de l'année
    1) Comence le 1er janvier
    2) Première semaine de 4 jours
    3) Permière semaine entière

    la function Weekof() de delphi reponds bien à la norme iso 8061 soit ici le choix 2 dans Outlook, mais le Tmonthcalendar ne réponds pas à la norme iso 8061 on a le choix 1) en fait.

    Comment je peux faire pour que le composant TmonthCalandar arrete de délirer ?

    Merci de votre aide, là je seche.

  2. #2
    Membre confirmé
    Homme Profil pro
    Santé
    Inscrit en
    Septembre 2010
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2010
    Messages : 290
    Points : 534
    Points
    534
    Par défaut
    Bonjour,

    TMonthCalendar fonctionne bien sous la norme ISO 8601 si le 1er jour de la semaine est lundi (sous D7).
    Par contre, le numéro de semaine peut différer si un autre premier jour de la semaine est choisi.

    As-tu bien défini FirstDayOfWeek à dowLocaleDefault ou à dowMonday ?


    PS : "ISO 8061 is part of the ISO 8601 date and time standard"

  3. #3
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Salut,

    Je suis sous D2009, et je te pris de croire que la semaine 1 de cette année pour mon cas dans le composant TMonthCalendar va du lundi 27/01/2010 au dimanche 02/01/2011 alors que normalement cette semaine est normalement la 52.
    Le TmonthCalendar fait donc une erreur que tu place ou pas le parametre FirstDayOfWeek avec ce que tu veux
    Par contre si tu fais un Weekof(01/01/2011) celui-ci te retourne bien 52.

    Donc je redemande comment faire pour que les numéros de semaine du composant TmonthCalendar soit correct.

    Regarde bien ton composant sous D7 et dis moi si ce quer tu vois pour aujourd'hui ? normalement cela devrait être semaine 13 alors que le composant retourne 14 !!! ettupeux mettre tout ce que tu veux en FirstDayOfWeek.

  4. #4
    Membre confirmé
    Homme Profil pro
    Santé
    Inscrit en
    Septembre 2010
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2010
    Messages : 290
    Points : 534
    Points
    534
    Par défaut
    Je suis sous D7.
    Il me retourne bien la semaine 13 pour aujourd'hui et la 1ère semaine de cette année commence bien le lundi 3 janvier.
    Par contre, si je mets dowWednesday à FirstDayOfWeek, nous passons aujourd'hui à la 14 ème semaine...

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    En fait tout comme Buzz je constate le même décalage dans la numérotation des semaines.
    Cela vient, si je comprends bien, de la version de la DLL ComCtl32 utilisée.

    Un décalage avec la dll v6.10 (sous Vista)
    Aucun décalage avec la dll 6.0 (sous XP).

    Pas fait d'autres tests, ni même une solution de contournement.

  6. #6
    Membre confirmé
    Homme Profil pro
    Santé
    Inscrit en
    Septembre 2010
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2010
    Messages : 290
    Points : 534
    Points
    534
    Par défaut
    Effectivement, je suis sous XP (ComCtl32 v6.00)

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 426
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 426
    Points : 1 326
    Points
    1 326
    Par défaut
    Bonsoir à toutes et à tous,

    Test avec D6 et Seven 64bits.

    Le 02 avril, le composant indique semaine 13 dès son placement sur la fiche.

    @+,

    Cincap

  8. #8
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Salut

    En fait tout comme Buzz je constate le même décalage dans la numérotation des semaines.
    Cela vient, si je comprends bien, de la version de la DLL ComCtl32 utilisée.

    Un décalage avec la dll v6.10 (sous Vista)
    Aucun décalage avec la dll 6.0 (sous XP).

    Pas fait d'autres tests, ni même une solution de contournement.
    Bah v'là le délire...

    Le pire j'ai rien trouvé non plus pour recadrer cette affichage !!!

    Même dan sle système windows je n'ai rien trouvé. Il n'y a que dans outlook que l'on peut interragir, donc doit bien avoir un paramètre quelque par...

  9. #9
    Membre confirmé
    Homme Profil pro
    Santé
    Inscrit en
    Septembre 2010
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2010
    Messages : 290
    Points : 534
    Points
    534
    Par défaut
    Dans l'immédiat, tu peux toujours mettre WeekNumbers à false et afficher les numéros de semaine dans un Label...

  10. #10
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par Caribensila Voir le message
    Dans l'immédiat, tu peux toujours mettre WeekNumbers à false et afficher les numéros de semaine dans un Label...
    Je te rassure c'est ce que j'ai fais...

    Mais il faut que j'y arrive, d'où l'objet de mon topic ici

    Caribensila : "Dites moi ce dont vous avez besoin.... je vous dirais comment vous en passer.."

  11. #11
    Membre confirmé
    Homme Profil pro
    Santé
    Inscrit en
    Septembre 2010
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2010
    Messages : 290
    Points : 534
    Points
    534
    Par défaut
    ... Je plaisantais.

    Excuse-moi.

  12. #12
    Membre émérite
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 216
    Points : 2 303
    Points
    2 303
    Par défaut
    bon, je vais pas avancer la chose, mais le calendar de TMS a une property qui permet de définir la norme iso. je pense qu'ils déterminent eux-mêmes les dates, alors que le tmonthcalendar s’appuie sur windows (c'est du moins ce que j'en déduis des posts précédents). Outlook doit aussi avoir sa propre mécanique.

    @++
    Dany

  13. #13
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Ok ok, j'ai trouvé.
    C'est cincap qui m'a mis la puce à l'oreille avec un résultat correct sous Seven.

    Comme on pouvait s'en douter cela vient de la manière dont est définie la 1° semaine de l'année. (je sais j'enfonce les portes ouvertes là ).

    @Buzz
    Pour que le Calendar calcule les n° de semaines correctement il faut s'assurer que GetLocaleInfo avec le paramètre LOCALE_IFIRSTWEEKOFYEAR renvoie bien la valeur '2'.
    LOCALE_IFIRSTWEEKOFYEAR
    Specifier for the first week of the year. The specifier can be one of these values. Value Meaning
    0 Week containing 1/1 is the first week of that year. Note that this can be a single day, if 1/1 falls on the last day of the week.
    1 First full week following 1/1 is the first week of that year.
    2 First week containing at least four days is the first week of that year.
    Si cela te renvoie 0 comme je le suppose, force la valeur à 2 avec SetLocaleInfo.

    @+ Claudius.

  14. #14
    Membre émérite
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 216
    Points : 2 303
    Points
    2 303
    Par défaut


    Par contre moi avec XE et Seven 64bits, en posant le composant il me met semaine 14, il doit bien y avoir alors quelque part un paramètre système qui agit la dessus.
    Par contre en utilisant setLocalInfo comme précisé par Cl@udius, il me met bien la ssemaine 13 à l'execution.

    @++
    Dany

  15. #15
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Ok ok, j'ai trouvé.
    C'est cincap qui m'a mis la puce à l'oreille avec un résultat correct sous Seven.

    Comme on pouvait s'en douter cela vient de la manière dont est définie la 1° semaine de l'année. (je sais j'enfonce les portes ouvertes là ).

    @Buzz
    Pour que le Calendar calcule les n° de semaines correctement il faut s'assurer que GetLocaleInfo avec le paramètre LOCALE_IFIRSTWEEKOFYEAR renvoie bien la valeur '2'.


    Si cela te renvoie 0 comme je le suppose, force la valeur à 2 avec SetLocaleInfo.

    @+ Claudius.

    MDR regarde mon premier topic... j'etais fixé sur IFIRSTDayOfWeek, j'avais vue celui dont tu parles, mais apres 4 heures de test, recherche etc.. je me suis dit "va sur le forum Buzz". Et j'ai bien fait...

    Je vais tester cela, il faut aussi que cela reste fonctionnelle sous XP et seven.

    Je reviens après mes tests.

  16. #16
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Re

    J'arrive pas à le forcer,
    j'utilise cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetLocaleInfo(LOCALE_SYSTEM_DEFAULT,LOCALE_IFIRSTWEEKOFYEAR,'2');
    Mais j'ai toujours 0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     showmessage(GetLocaleChar(LOCALE_SYSTEM_DEFAULT,LOCALE_IFIRSTDAYOFWEEK,'0'));
    Merci

  17. #17
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var
      S: PChar;
    begin
      S := '2';
      SetLocaleInfo(LOCALE_SYSTEM_DEFAULT,LOCALE_IFIRSTWEEKOFYEAR, S);
    end;

    [Edit]
    C'est quoi ce GetLocaleChar ?

  18. #18
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var
      S: PChar;
    begin
      S := '2';
      SetLocaleInfo(LOCALE_SYSTEM_DEFAULT,LOCALE_IFIRSTWEEKOFYEAR, S);
    end;

    [Edit]
    C'est quoi ce GetLocaleChar ?
    Ok ok, j'ai vue apres que cela fonctionnais quand même.

    Mon getlocaleChar retourne la valeur d'un clé, mais j'utilsais pas bien la fonction.

    Cela fonctionne trés bien avec un TMontCalendar de Delphi et cela me rassure. Mais le composant spéciqiue que j'utilise reste inchangé, mais là je vais écrire sur le forum de Alphacontrol pour le signaler.

    J'ai une dernière question, lorsqu'on utilise SetLocalInfo ets-ce que cela affecte les paramètre du pc ? est-ce que si je sors de l'application cela redeviens normal ?

  19. #19
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par BuzzLeclaire Voir le message
    J'ai une dernière question, lorsqu'on utilise SetLocalInfo ets-ce que cela affecte les paramètre du pc ?
    Oui, cela affecte la clé de regsistre HKCU\Control Panel\International\iFirstWeekOfYear.

    Citation Envoyé par BuzzLeclaire Voir le message
    est-ce que si je sors de l'application cela redeviens normal ?
    Ben non.

  20. #20
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Une petite dernière :

    Comment vous utiliser le

    GetLocalInfo ?

    Je fais cela, mais il me retourne toujours 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      showmessage(inttostr(GetLocaleInfo(LOCALE_SYSTEM_DEFAULT,LOCALE_IFIRSTWEEKOFYEAR,'',0)));
    Merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Logique ou pas logique ? Telle est la question
    Par Milo59000 dans le forum SQL
    Réponses: 4
    Dernier message: 20/06/2008, 23h03
  2. erreur n'est pas logique
    Par info_sara dans le forum Flash
    Réponses: 14
    Dernier message: 05/06/2008, 21h36
  3. erreur n'est pas logique
    Par info_sara dans le forum C++Builder
    Réponses: 9
    Dernier message: 01/06/2008, 17h51
  4. Plan d'exécution pas logique
    Par pat29 dans le forum Administration
    Réponses: 6
    Dernier message: 07/03/2008, 14h37
  5. [Tkinter] Thread pas logique!
    Par airod dans le forum Tkinter
    Réponses: 4
    Dernier message: 26/11/2006, 22h36

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