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 :

Problème avec la fonction "Format", option %.0n [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 145
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 145
    Par défaut Problème avec la fonction "Format", option %.0n
    Bonjour à tous,

    Le résultat du test ci-après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.Button2Click(Sender: TObject);
    var
      e: extended;
    begin
      e := 123456789;
      ShowMessage(Format('%.0n', [e]));
    end;
    affiche lamentablement 123?456?789...

    Comment lui faire afficher 123 456 789, tel que prévu par %.0n (fonctionne OK sous Delphi sur la même machine) ?

    Merci à tous,

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 458
    Par défaut
    Bonjour,

    le code de l'espace dans format est contrôlé par defaultFormatSettings.ThousandSeparator qui a par défaut en France chr(160). Tu obtiens une chaîne ansi et show message l'attends en UTF8. Ce qui explique le point d'interrogation que l'affichage ne peut pas interpréter en UTF8.

    Donc au choix:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        defaultFormatSettings.ThousandSeparator := ' ';
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ShowMessage(AnsiToUtf8(Format('%.0n', [e])));

  3. #3
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 145
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 145
    Par défaut
    Bonjour,

    Merci infiniment pour cette réponse claire, précise, et efficace

    J'ai donc choisi defaultFormatSettings.ThousandSeparator := ' ';, ça roule tip-top, je te remercie !

    Bonne journée,

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 145
    Par défaut
    Salut à tous,

    Citation Envoyé par Jipété Voir le message
    [...] ça roule tip-top, [...]
    Sauf sur UNE machine dont la langue du Bios est en anglais et non modifiable...
    Là, les espaces sont remplacés par des virgules,
    Sur cette même machine la date est au format anglo-saxon (MM DD YYYY), mais j'espère m'en sortir avec FormatDateTime (tests ce soir).

    Mais pour le séparateur des milliers, là, j'ai pas d'idée, car remplacer la solution que j'avais choisie par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var
      tfs: TFormatSettings;
    begin
      tfs.ThousandSeparator := ' ';
    me renvoie les "?" du début...
    Une idée ?
    Un collègue qui bosse en .NET me parlait de "CultureInfo", mais ça ne semble pas connu en Pascal...

    [EDIT] Bon, en utilisant ShowMessage(AnsiToUtf8(Format('%.0n', [e])));ça a l'air d'aller. Tests ce soir, [/EDIT]

  5. #5
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 145
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 145
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Sur cette même machine la date est au format anglo-saxon (MM DD YYYY), mais j'espère m'en sortir avec FormatDateTime (tests ce soir).
    Test OK avec l'exe compilé avec FormatDateTime !

    Maintenant, la machine concernée étant une 64 bits, je viens d'installer Laz64 et là, tenez-vous bien,
    y a pas besoin de FormatDateTime pour avoir une bonne date ! C'est infernal !

    Sinon, j'ai fait d'autres tests hier, cette histoire de TFormatSettings pour le ThousandSeparator a l'air parfaitement inopérante...
    Donc, dans le FormCreate, defaultFormatSettings.ThousandSeparator := ' '; // Mandatory en 32 comme en 64 !

    Bon 1er mai,

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

Discussions similaires

  1. Formulaires : problème avec les slashes et les quotes
    Par GarGamel55 dans le forum Langage
    Réponses: 1
    Dernier message: 12/10/2005, 15h59
  2. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  3. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

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