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

Free Pascal Discussion :

Afficher les caractères accentués dans la console et dans une MessageBox [Dev-Pascal]


Sujet :

Free Pascal

  1. #1
    Membre du Club
    Homme Profil pro
    Gérant d'un site
    Inscrit en
    Février 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Gérant d'un site
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 59
    Points : 44
    Points
    44
    Par défaut Afficher les caractères accentués dans la console et dans une MessageBox
    Bonsoir
    Je n'arrive pas à afficher nos voyelles accentuées.
    Le é nécessite une sorte de virgule, le è un s de type hongrois. Le à s'affiche avec un o accent aigu.
    Comment faire ?

    Merci de vos conseils.
    Bernard

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    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 937
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Une solution de contournement : http://alcatiz.developpez.com/tutori...=pg_intro#LI-E

    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]

  3. #3
    Membre du Club
    Homme Profil pro
    Gérant d'un site
    Inscrit en
    Février 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Gérant d'un site
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 59
    Points : 44
    Points
    44
    Par défaut Afficher les caractères accentués
    Citation Envoyé par Alcatîz Voir le message
    Bonjour,

    Une solution de contournement : http://alcatiz.developpez.com/tutori...=pg_intro#LI-E

    Bonjour
    J'ai intégré la ligne dans mon programme, mais si je définis chaine comme PWideChar, FP n'accepte pas. Et si je définis comme Pchar, la version compilée ne transforme pas les codes.
    Quel doit-être l'environnement ?

  4. #4
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 070
    Points : 15 457
    Points
    15 457
    Billets dans le blog
    9
    Par défaut
    Bonjour ! J'avoue que j'ai un peu de mal à voir de quoi il s'agit exactement. Pourrait-on avoir le morceau de code qui pose problème ?
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  5. #5
    Membre du Club
    Homme Profil pro
    Gérant d'un site
    Inscrit en
    Février 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Gérant d'un site
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 59
    Points : 44
    Points
    44
    Par défaut Afficher les caractères accentués
    Citation Envoyé par Roland Chastain Voir le message
    Bonjour ! J'avoue que j'ai un peu de mal à voir de quoi il s'agit exactement. Pourrait-on avoir le morceau de code qui pose problème ?
    Bonjour
    J'ai repris le programme "Oudin.pas" en l'allégeant.
    Je suis sous Dev-Pascal avec FP 2.6.4.
    Je ne sais utiliser UTF8ToSys.

    Joyeux Noël

    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
     
    (* Delphi 6, FreePascal 2.6.2, Virtual Pascal 2.1 *)
    { à partir de oudin.pas }
    program Oudini;
    {$MODE DELPHI}
    uses
      crt,SysUtils, Windows{,UTF8ToSys};
     
    var s, accent : string;
     
    begin
      accent:=  '..... â, à, é, ù, è, ê, ï, ô, û, ñ';
      MessageBox(0, pChar(accent), pChar('Accent'), MB_OK);
     
      s:= ' 20 avril ';
      s:= ' En 2014, le dimanche de Pâques est le ' + s + accent ;
     
      MessageBox(0, pChar(s), pChar('Date de Pâques'), MB_OK);
     
      writeln(s);
      readkey;
    end.

  6. #6
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 070
    Points : 15 457
    Points
    15 457
    Billets dans le blog
    9
    Par défaut
    Pour afficher des accents dans une fenêtre de type MessageBox(), on peut faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    program TestMessageBox;
    {$MODE DELPHI}
     
    uses
      Windows;
     
    var
      s: string;
     
    begin
      //s := 'Joyeux Noël !';
      s := 'Joyeux No'#235'l !';
      MessageBox(0, PChar(s), '', 0);
    end.
    Pour trouver le numéro du caractère, j'ai suivi le lien donné plus haut par Alcatîz. Est-ce que cela répond à votre question ?

    Joyeux Noël à tous les utilisateurs du forum !
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  7. #7
    Membre du Club
    Homme Profil pro
    Gérant d'un site
    Inscrit en
    Février 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Gérant d'un site
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 59
    Points : 44
    Points
    44
    Par défaut Afficher les caractères accentués
    Bonjour
    Il n'est pas nécessaire de donner le code ANSI, ë apparaît déjà dans mon code.
    Ce sont les lignes à partir de writeln ou d'un texte quelconque dans la fenêtre Dos (et pas de type MessageBox) qui sont mal accentuées.

  8. #8
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 070
    Points : 15 457
    Points
    15 457
    Billets dans le blog
    9
    Par défaut
    Si c'est pour écrire dans la console, on peut accéder au caractère par son code ASCII :

    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  9. #9
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    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 937
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Les résultats seront différents entre l'éditeur natif de Free Pascal et l'éditeur Dev-Pascal : le premier est une application en mode texte, qui utilise des caractères ASCII, tandis que le second est une application Windows, qui utilise des caractères ANSI.

    Lorsque l'on exécute le programme, la fonction MessageBox affiche du texte dans une fenêtre Windows (qui attend des caractères ANSI) et la procédure WriteLn affiche du texte sur la console (qui attend des caractères ASCII). Par conséquent, si l'on exécute depuis l'éditeur natif de Free Pascal, MessageBox affichera des caractères incorrects et WriteLn affichera les caractères accentués attendus (car l'éditeur utilise des caractères ASCII) ; si l'on l'exécute depuis Dev-Pascal, c'est exactement le contraire : MessageBox affichera les caractères accentués attendus et WriteLn affichera des caractères incorrects (car l'éditeur utilise des caractères ANSI).

    Partant de cela, si l'on compile depuis Dev-Pascal, il faut convertir les caractères ANSI stockés dans la chaîne s en caractères ASCII. La fonction CharToOEM fait cela :
    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
    program Oudini;
    {$MODE DELPHI}
    uses
      crt,
      SysUtils,
      Windows;
     
    var s, accent : string;
     
    begin
      accent:=  '..... â, à, é, ù, è, ê, ï, ô, û, ñ';
      MessageBox(0, pChar(accent), pChar('Accent'), MB_OK);
     
      s:= ' 20 avril ';
      s:= ' En 2014, le dimanche de Pâques est le ' + s + accent ;
     
      MessageBox(0, pChar(s), 'Date de Pâques', MB_OK);
     
      CharToOEM(@s[1],@s[1]);
      writeln(s);
      readln;
    end.
    J'ai enfin pu tester sur Windows : ça marche.
    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 du Club
    Homme Profil pro
    Gérant d'un site
    Inscrit en
    Février 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Gérant d'un site
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 59
    Points : 44
    Points
    44
    Par défaut Afficher les caractères accentués
    Bonjour Alcatiz

    Merci, cela fonctionne bien avec CharToOEM, à la première utilisation, mais ensuite les caractères ne sont plus ceux attendus.
    Vous voudrez bien vous penchez sur la version suivante où même en conservant "s" et en utilisant "t" qui varie, s et t varient.
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    program Oudini;
    {$MODE DELPHI}
    uses
      crt, SysUtils, Windows;
     
    var s,t, accent : string;
        no : integer;
     
    begin
      accent:=  '.. â, à, é, ù, è, ê, ï, ô, û, ñ';
      MessageBox(0, pChar(accent), pChar('Accent'), MB_OK);
     
      s:= ' En 2014, Pâques est le 20 avril ' + accent ;
      writeln('s= ',s);
      MessageBox(0, pChar(s), 'Date de Pâques', MB_OK);
     
      t:=s;
      CharToOEM(@t[1],@t[1]);
      writeln('t= ',t);
      writeln;
     
      MessageBox(0, pChar('Avec répétition '), pChar('Oudini'), MB_OK);
      no:=0;
      s:= ' En 2014, Pâques est le 20 avril '+ accent ;
      writeln(no,' s= ',s);
      writeln;
     
      repeat
        inc(no);
        {s:= ' En 2014, Pâques est le 20 avril ' + accent ;
        writeln(no,' s= ',s);}
        t:=s;
        writeln(no,' t= ',t);
        CharToOEM(@t[1],@t[1]);
        writeln(no,' t= ',t);
        writeln;
     
      until MessageBox(0, pChar(' Fin ? (O/N) '), pChar('Oudini'), MB_YESNO)=6;
    end.

  11. #11
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    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 937
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par escargot72 Voir le message
    Merci, cela fonctionne bien avec CharToOEM, à la première utilisation, mais ensuite les caractères ne sont plus ceux attendus.
    La procédure CharToOEM effectue une conversion caractère par caractère. Après CharToOEM(@s[1],@s[1]);, la chaîne s est en effet irrémédiablement modifiée.

    Citation Envoyé par escargot72 Voir le message
    Vous voudrez bien vous penchez sur la version suivante où même en conservant "s" et en utilisant "t" qui varie, s et t varient.
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    program Oudini;
    {$MODE DELPHI}
    uses
      crt, SysUtils, Windows;
     
    var s,t, accent : string;
        no : integer;
     
    begin
      accent:=  '.. â, à, é, ù, è, ê, ï, ô, û, ñ';
      MessageBox(0, pChar(accent), pChar('Accent'), MB_OK);
     
      s:= ' En 2014, Pâques est le 20 avril ' + accent ;
      writeln('s= ',s);
      MessageBox(0, pChar(s), 'Date de Pâques', MB_OK);
     
      t:=s;
      CharToOEM(@t[1],@t[1]);
      writeln('t= ',t);
      writeln;
     
      MessageBox(0, pChar('Avec répétition '), pChar('Oudini'), MB_OK);
      no:=0;
      s:= ' En 2014, Pâques est le 20 avril '+ accent ;
      writeln(no,' s= ',s);
      writeln;
     
      repeat
        inc(no);
        {s:= ' En 2014, Pâques est le 20 avril ' + accent ;
        writeln(no,' s= ',s);}
        t:=s;
        writeln(no,' t= ',t);
        CharToOEM(@t[1],@t[1]);
        writeln(no,' t= ',t);
        writeln;
     
      until MessageBox(0, pChar(' Fin ? (O/N) '), pChar('Oudini'), MB_YESNO)=6;
    end.
    Le problème vient de la représentation d'une AnsiString (le type String de Delphi) en mémoire. Cet article devrait t'éclairer :
    http://reisubar.developpez.com/tutor...trings-pchars/

    En rapport avec ce paragraphe, s et t sont en réalité des pointeurs et l'instruction t:=s; fait en sorte que s et t pointent vers la même adresse : il n'y a pas de duplication de la chaîne.

    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]

  12. #12
    Membre du Club
    Homme Profil pro
    Gérant d'un site
    Inscrit en
    Février 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Gérant d'un site
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 59
    Points : 44
    Points
    44
    Par défaut Afficher les caractères accentués
    Bonjour et merci à vous deux

    J'ai bien lu le tutoriel et l'étincelle a jailli.
    Avec l'idée de scinder la chaîne à transformer, ainsi la chaîne annexe et la principale n'ont plus la même adresse.
    CharToOEM me rend un grand service et j'espère ne pas avoir contrevenu à l'esprit du Pascal.
    Voir le code ci-dessous.

    Bonnes fêtes de fin d'année.
    Bernard

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    program Oudini;
    {$MODE DELPHI}
    uses
      crt, SysUtils, Windows;
     
    var s, accent : string;
        no : integer;
    const Fin ='                                   Fin ? ';
     
    begin
      accent:=  '.. â, à, é, ù, è, ê, ï, ô, û, ñ';
      MessageBox(0, pChar(accent), pChar('Accent'), MB_OK);
     
      s:= ' En 2014, Pâques est le 20 avril ' + accent ;
      writeln('s= ',s);
      MessageBox(0, pChar(s), 'Date de Pâques', MB_OK);
     
      CharToOEMA(@s[1],@s[1]);
      writeln('s= ',s);
     
      writeln;
     
      MessageBox(0, pChar('Avec répétition '), pChar('Oudini'), MB_OK);
      no:=0;
      s:= ' En 2014, Pâques est le 20 avril '+ accent ;
      writeln(no,' s= ',s);
      writeln;
     
      repeat
        inc(no);
        s:= ' En 2014, Pâques est le 20 avril ' + accent ;
        writeln(no,' s= ',s);
     
        CharToOEM(@s[1],@s[1]);
        writeln(no,' s= ',s);
        writeln;
     
      until MessageBox(0, pChar(Fin), pChar('Oudini'), MB_YESNO)=6;
    end.

  13. #13
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    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 937
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut


    Bonnes fêtes également !

    Si le problème est résolu, n'oublie pas d'actionner le bouton ad hoc.
    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]

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

Discussions similaires

  1. Afficher les caractères étendus dans la console
    Par ShinobiX1 dans le forum C++
    Réponses: 19
    Dernier message: 05/12/2014, 11h22
  2. Réponses: 0
    Dernier message: 28/03/2014, 18h45
  3. Afficher les caractères accentués
    Par wincroc dans le forum Langage
    Réponses: 7
    Dernier message: 18/06/2007, 12h18
  4. [SQL] Comment afficher correctement les caractères accentués ?
    Par innova dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 06/01/2007, 10h35
  5. Réponses: 6
    Dernier message: 14/07/2005, 14h25

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