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 :

Vieux programmes (D3) et FormatSettings


Sujet :

Langage Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 097
    Points : 41 081
    Points
    41 081
    Billets dans le blog
    62
    Par défaut Vieux programmes (D3) et FormatSettings
    Bonjour,

    Encore une maintenance rapide à faire mais je me heurte à un problème de FormatSettings.
    Je dois basculer un programme d'une société à une autre au runtime . La première utilisant les formats FRENCH_FR, la seconde ENGLISH_US.
    Je pourrais, bien sûr, me taper les différents formats "à la main"
    DecimalSeparator:='.', etc. mais je me demande s'il n'y a pas un moyen plus efficace ?

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 754
    Points : 13 340
    Points
    13 340
    Par défaut
    Essaye FormatSettings := TFormatSettings.Create('en-US');

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 563
    Points : 25 165
    Points
    25 165
    Par défaut
    En D3, je dirais plutôt GetLocaleFormatSettings
    C'est clair que si tu dois changer à la volée, peut-importe la locale de l'OS, c'est plus chiant normalement LOCALE_SYSTEM_DEFAULT (celui chargé par Delphi) devrait déjà être bon pour le FR, celui, tu peux le sauvegarder avant de permuter vers EN

    LocaleNameToLCID('en-us') tu devrais trouver la locale associée pour appeler GetLocaleFormatSettings

    Sinon EnumSystemLocales
    Je dirais 1033 pour en-us et 1036 pour fr-fr (comme on le voit d'ailleurs les ressources d'un programme Delphi qui contient plus de truc en 1033 alors que le projet est mis en 1036)

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 097
    Points : 41 081
    Points
    41 081
    Billets dans le blog
    62
    Par défaut
    Merci à vous deux de répondre si vite ! Malheureusement D3 ne connait pas ainsi ces FormatSettings et cie

    Entre temps, une fois posée, j'ai pu retrouver une astuce ici
    du coup j'ai repris
    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
     
    procedure RegionalSettings(p,s : Word);
     function MakeLCID( lgID: Word; srtid: Word ): DWORD;
      begin
      Result := MakeLong( lgid, srtid );
      end;
     
     function MakeLangID( p, s: Word ): Word;
      begin
      Result := ( s shl 10 ) or p
      end;
     
    begin
    Win32Check( SetThreadLocale(MakeLCID(MakeLangID(p,s), 0)));
    GetFormatSettings;
    end;
    et utilise ainsi RegionalSettings(LANG_FRENCH,SUBLANG_FRENCH);Je pensais n'utiliser qu'un code genre RegionalSettings(idlangue); où idlangue était directement le CLSID mais telle qu'est Win32Check ce ne semble pas possible
    je vais donc utiliser deux colonnes au lieu d'une dans ma table des sociétés pour m'en sortir rapidement.

    c'est donc à moins que d'autres idées ?

    question subsidiaire faut-il appliquer un simple Application.UpdateFormatSettings := false; où plutôt quelque chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Application.UpdateFormatSettings := true;
    RegionalSettings(LANG_FRENCH,SUBLANG_FRENCH);
    Application.UpdateFormatSettings := False;
    par précaution ?

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 563
    Points : 25 165
    Points
    25 165
    Par défaut
    Euh UpdateFormatSettings , c'est pas plutôt, l'inverse ?
    C'est si l'utilisateur change ses paramètres systèmes et que Delphi va le relire, je dirais donc que dans ton cas Application.UpdateFormatSettings := False; dans le DPR juste après le Initialize (ou après le passage en EN-US) pour éviter que si l'utilisateur change un truc qui cela pourrisse ton appli.

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 097
    Points : 41 081
    Points
    41 081
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    je dirais donc que dans ton cas Application.UpdateFormatSettings := False; dans le DPR juste après le Initialize

    hyper judicieux dans le dpr

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut

    le formatsetting dans delphi n'est qu'un record

    du genre

    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
    26
     
      TMonthNameArray = array[1..12] of string;
      TWeekNameArray = array[1..7] of string;
     
      TFormatSettings = record
        CurrencyFormat: Byte;
        NegCurrFormat: Byte;
        ThousandSeparator: Char;
        DecimalSeparator: Char;
        CurrencyDecimals: Byte;
        DateSeparator: Char;
        TimeSeparator: Char;
        ListSeparator: Char;
        CurrencyString: string;
        ShortDateFormat: string;
        LongDateFormat: string;
        TimeAMString: string;
        TimePMString: string;
        ShortTimeFormat: string;
        LongTimeFormat: string;
        ShortMonthNames: TMonthNameArray;
        LongMonthNames: TMonthNameArray;
        ShortDayNames: TWeekNameArray;
        LongDayNames: TWeekNameArray;
        TwoDigitYearCenturyWindow: Word;
      end;
    dans sysutils tu as les fonctions InitSysLocale et GetFormatSettings qui sont super intéressantes

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

Discussions similaires

  1. Migration de vieux programmes en Quick-Basic
    Par yakapa33 dans le forum Basic
    Réponses: 9
    Dernier message: 16/10/2021, 15h00
  2. Vieux programme C
    Par ccsdst dans le forum C
    Réponses: 3
    Dernier message: 18/01/2013, 15h03
  3. Excécuter mes vieux programmes ?
    Par mimanot dans le forum Fortran
    Réponses: 12
    Dernier message: 30/03/2010, 22h20
  4. [Visual FoxPro] Vieux programme à déchiffrer...
    Par pingos dans le forum Autres SGBD
    Réponses: 1
    Dernier message: 25/04/2006, 11h44
  5. comment lancer mes vieux programmes sur BDS2006
    Par emmental dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/01/2006, 13h07

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