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

Langage Delphi Discussion :

Définir le jour de début de semaine (dimanche, lundi etc)


Sujet :

Langage Delphi

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Par défaut Définir le jour de début de semaine (dimanche, lundi etc)
    Bonjour.
    Voici mon problème:
    J'ai une appli delphi XE3 qui utilise un contrôle cxCalendar (le calendrier de devexpress)
    L'appli est utilisée sur un Windows Server 2003 en TSE.
    Dans la config régionale du serveur, dans les préférences de date, le premier jour de la semaine est un dimanche. J'ai essayé de changer la config du serveur pour mettre lundi, mais je n'y arrive pas! Dés que je ferme la session puis la reouvre, le premier jour de la semaine se remet sur dimanche.
    Bref, je souhaiterais modifier le premier jour de la semaine uniquement au niveau de l'exe, sans affecter les params du serveur (que l'admin du serveur se débrouille...)
    J'ai vu qu'il y a des variables du type DecimalSeparator, ShortDateFormat, etc...
    Mais existe t'il une variable qui définit le premier jour de la semaine, avec un fonctionnement identique à la modif du DecimalSeparator?

    Merci de votre aide

  2. #2
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 479
    Par défaut
    Bonjour,

    je ne sais pas si cela peut te servir (et peut être l'as tu déjà vu ?) mais l'aide de D7 donne pour les fonction DayOfWeek et DayOfTheWeek :

    Appelez DayOfTheWeek pour obtenir le jour de la semaine représenté par une valeur TDateTime spécifiée. DayOfTheWeek renvoie une valeur comprise entre 1 et 7, qui représentent respectivement lundi et dimanche.

    Remarque*: DayOfTheWeek respecte la norme ISO 8601 (dans laquelle lundi est considéré comme le premier jour de la semaine). Pour obtenir le jour de la semaine lorsque dimanche est considéré comme le premier jour de la semaine, utilisez la fonction DayOfWeek.
    A+

    Charly

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Par défaut Pas ma question...
    Merci de ta réponse, mais ce n'était pas ma question...
    J'utilise déjà ces fonctions (DateUtils) qui sont super pratiques.
    Je précise ce que je cherche:
    Dans Windows, dans les préférences régionales, il y a un champ qui dit: "Jour de début de semaine", ou un truc dans le genre.
    Ce champ est défini à "Dimanche" dans mon cas. Quand je le modifie au lundi, que je ferme puis ouvre ma session (Win2008Srv), cette valeur se remet au Dimanche!

    Donc je voudrais savoir si on peut modifier cette valeur en utilisant une fonction delphi. Et que ce changement soit effectif 1) soit au niveau de tout le profil utilisateur 2) soit au niveau de l'appli uniquement.


    Merci

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 130
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Citation Envoyé par sbeu Voir le message
    Donc je voudrais savoir si on peut modifier cette valeur en utilisant une fonction Delphi.
    En supposant que ce soit une bonne idée (ce dont je doute pour ma part), je pense qu'il faudrait modifier la valeur correspondante dans le registre.

    Cela peut-être fait, par exemple, au moyen de l'unité RegEdit. Voici un programme qui lit la valeur en question.

    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
    program FirstDayOfWeek;
     
    {$APPTYPE CONSOLE}
     
    uses
      RegEdit; // http://tothpaul.free.fr/inside/sources.php?tools.units
     
    const
      HKEY_CURRENT_USER = $80000001;
      path = 'Control Panel\International';
      value = 'iFirstDayOfWeek';
     
    begin
      WriteLn(ReadRegString(HKEY_CURRENT_USER, path, value, 'ERREUR')); // 0
      ReadLn;
    end.

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Par défaut D'accord avec toi
    Je suis d'accord avec toi c'est pas beau du tout!
    Par exemple je sais que pour le séparateur décimal et le ShortDateFormat, par exemple, on peut définir leur valeur AU NIVEAU DE L'APPLICATION uniquement.
    Je cherche un moyen de faire ça pour le premier jour de la semaine.
    Je voudrais vraiment éviter de toucher au registre, mais si c'est la seule solution, je le ferai

  6. #6
    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
    Par défaut
    Salut sbeu,

    J'ai eu le même besoin que toi.

    Et pour des personnes qui gere un planning il est TRES important de pouvoir maitriser ce fameux jour de début de semaine.

    Voilà ce qu'il faut faire.

    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
     
     
    // La première semaine de l'année
    // = 0 La semaine contenant le 01/01 est la première semaine de cette année. Notez que cela peut être un seul jour, si 1 / 1 tombe le dernier jour de la semaine.
    // = 1 La première semaine complète après le 01/01 est la première semaine de cette année.
    // = 2 La Première semaine contenant au moins quatre jours est la première semaine de cette année.
     
     
    procedure TFPrincipal.FormCreate(Sender: TObject);
    begin
    //...
     
      MemoFirstWeekOfYear := GetUserFirstWeekOfYear;
      if MemoFirstWeekOfYear <> '2' then SetLocaleInfo(LOCALE_SYSTEM_DEFAULT,LOCALE_IFIRSTWEEKOFYEAR,'2');
     
    end;
    Ne pas oublier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TFPrincipal.FormDestroy(Sender: TObject);
    begin
    // On remet le paramètre initiale du FirstWeekOfYear
      SetLocaleInfo(LOCALE_SYSTEM_DEFAULT,LOCALE_IFIRSTWEEKOFYEAR,PWideChar(MemoFirstWeekOfYear));
     
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function GetUserFirstWeekOfYear: string;
    var
      sz: Integer;
    begin
     
      sz:= GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_IFIRSTWEEKOFYEAR, nil, 0);
     
      SetLength(result, sz - 1); // - 1 car la longueur contient le zéro terminal
     
      GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_IFIRSTWEEKOFYEAR,
        Pchar(result), sz);
    end;
    Bye

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Par défaut Merci Buzz!
    Merci Buzz l'Eclair!!
    C'est exactement ce que je cherchais.


    EDIT: En fait c'est pas EXACTEMENT ce que je cherchais, mais ça se rapproche. Mon problème n'est pas de définir la première semaine de l'année, mais le premier JOUR de la semaine (sur mon serveur, défini comme étant le dimanche)

    Mais en utilisant ton code, je trouverai ce que je veux faire.

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

Discussions similaires

  1. Mise a jour de graphe chaque semaine.
    Par ekynoxx dans le forum Excel
    Réponses: 1
    Dernier message: 19/07/2007, 13h45
  2. Calcul de dates : début de semaine, de mois, de trimestre
    Par pyxosledisciple dans le forum Access
    Réponses: 13
    Dernier message: 22/02/2006, 08h07
  3. [DATE] - Le 5° jour de la 31° semaine
    Par spidetra dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 01/08/2005, 09h35

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