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
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
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]
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.
Pour afficher des accents dans une fenêtre de type MessageBox(), on peut faire comme ça :
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 ?
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.
Joyeux Noël à tous les utilisateurs du forum !
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.
Si c'est pour écrire dans la console, on peut accéder au caractère par son code ASCII :
Code : Sélectionner tout - Visualiser dans une fenêtre à part WriteLn('No'#137'l');
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 :
J'ai enfin pu tester sur Windows : ça marche.
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.![]()
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]
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.
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.
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]
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.
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]
Partager