Afficher un texte arabe

Afficher un texte arabe - C++ - Programmation

Marsh Posté le 29-06-2005 à 12:35:24    

bonjour,
voilà je récupère par le biais du presse-papier un texte arabe que j'affiche ensuite dans un EditBox mais celui-ci ne m'affiche que des points d'interrogation. Il faut apparement que je convertisse ma chaine de caractère avt mais je n'ai pas touvé comment..
Quelqu'un a t il une idée?
Merci

Reply

Marsh Posté le 29-06-2005 à 12:35:24   

Reply

Marsh Posté le 29-06-2005 à 13:33:18    

Compile ton programme en UNICODE.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 29-06-2005 à 15:28:57    

ah je ne savais pas que l'on pouvait. c'est #define UNICODE ?


Message édité par Boromir_Le_Best le 29-06-2005 à 16:22:43
Reply

Marsh Posté le 29-06-2005 à 16:52:16    

Oui, pour tout le projet, ou au pire avant chaque <windows.h>. Faut avoir codé en conséquence (macro TEXT(), utilisation de TCHAR, ...).


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 30-06-2005 à 10:10:28    

j'ai bien fait #define UNICODE sans conséquence..
j'ai aussi essayé de faire  :

Code :
  1. char* Text=_T(GetClipBoardData(CF_TEXT));


et de l'afficher dans mon EditBox, mais là aussi, je n'ai que des ??? qui s'affichent

Reply

Marsh Posté le 30-06-2005 à 15:36:15    

Ca marche pas comme ça.
GetClipBoardData te renvoie un handle. Faut faire un GlobalLock dessus afin de récupérer les données.
http://msdn.microsoft.com/library/ [...] pboard.asp
Puis Unlocker.
 
En UNICODE, ce n'est pas des char non plus. Utilise des TCHAR qui seront remplacés par des WCHAR en unicode. Si tu fais un SetWindowText avec des char*, ça ne doit pas compiler si tu as correctement défini UNICODE.
Mais commence par copier-coller ton texte dans ton code source et de faire un SetWindowText avec dans ton edit. Après tu gèreras le presse-papier.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 08-07-2005 à 19:51:23    

je comprends pas, j'ai essayé ce que tu m'a dit mais ca ne marche pas toujours pas..
ca doit venir de ma definition d'Unicode puisque lorsque je fais un SetWindowText avec des char*, ca compile bien, contrairement à ce que tu me dis.
quand à copier mon texte arabe directement dans mon code source, le problème est que dans celui-ci il ne m'affiche que des ??? du coup.

Reply

Marsh Posté le 09-07-2005 à 00:43:56    

Il me semble que :
#define _UNICODE -> _TEXT ou _T -> C
#define UNICODE -> TEXT -> Windows (entre autre)

Reply

Marsh Posté le 09-07-2005 à 10:11:19    

HelloWorld a écrit :

Compile ton programme en UNICODE.


c'est pas parce que ta chaîne est unicode que l'affichage se fera bien de droite à gauche.

Reply

Marsh Posté le 09-07-2005 à 18:18:47    

oui je sais mais normalement si je fais :

Code :
  1. #define UNICODE
  2. // puis  
  3.     HGLOBAL   hglb;
  4.     LPCTSTR    lptstr;
  5. if (!IsClipboardFormatAvailable(CF_TEXT))
  6.             return;
  7.         if (!OpenClipboard())
  8.             return;
  9.         hglb = GetClipboardData(CF_TEXT);
  10.         if (hglb != NULL)
  11.         {
  12.             lptstr = (char*)GlobalLock(hglb);
  13.             if (lptstr != NULL)
  14.             {
  15.         ((CEdit*)GetDlgItem(IDC_EDIT1))->SetWindowText(_TEXT(lptstr));
  16.                 GlobalUnlock(hglb);
  17.             }
  18.         }
  19.         CloseClipboard();


il devrait bien m'afficher mes caractères arabes et non pas des points d'interrogations non?

Reply

Marsh Posté le 09-07-2005 à 18:18:47   

Reply

Marsh Posté le 11-07-2005 à 09:26:25    

HelloWorld a écrit :

Oui, pour tout le projet, ou au pire avant chaque <windows.h>.


note bien le avant, ou bien défini pour tout le projet dans les propriétés de ton projet.
après <windows.h>, définir UNICODE ne sert à rien. UNICODE influe sur le "comportement" de <windows.h>.

Code :
  1. #define UNICODE
  2. #include <windows.h>


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 11-07-2005 à 13:37:35    

et je m'excuse déjà pour la question, mais comment le définir dans les propriétés du projet ?car je ne trouve pas d'option pour l'unicode dans project/settings.

Reply

Marsh Posté le 11-07-2005 à 13:49:19    

C'est pas une option, c'est un define. Ca se règle dans les options C/C++, au niveau des définitions du préprocesseur


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 11-07-2005 à 14:57:12    

ok un grand merci pour ton aide, j'essayerai ca fin de semaine et je vous tiens au courant

Reply

Marsh Posté le 11-07-2005 à 15:05:06    

Tu me remerciera si ton projet compile... ça risque de coincer à pas mal d'endroits si tu n'as pas été prévoyant :)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 13-07-2005 à 22:31:37    

oui j'ai bien défini unicode dans les propriétés et plein d'erreurs sont alors apparues ( d'un coté c'est bon signe) surtout dans le fichier ATLCONV.H dans des fonctions de conversion on dirait

Reply

Marsh Posté le 21-07-2005 à 09:33:44    

me revoilà. J'ai donc réussi à corriger toutes les erreurs et à compiler en unicode. Mais lorsque j'essaye de récuperer les caracteres arabes du presse papier pour les afficher, il m'affiche des petits carrés... ( au lieu de points d'interrogation précédemment ) Pourquoi? Est ce que ca pourrait être du à ma récupération du presse papier ou je convertit mal les données?

Reply

Marsh Posté le 21-07-2005 à 12:57:40    

Bonjour Boromir_Le_Best,
 
Pour afficher les caractères arabes, il faut tout d'abord s'assurer que tu as bien installé la Font et le script qui gère la langue arabe (ou hébreu).
 
Il te suffit de vérifier cela dans le panneau de configuration.
 
Sinon tu pouvais avoir les chaînes en Arabe tout en étant en ANSI... Par une mise à jour de l'ACP-Système en code page arabic (1256)...
 
Ton application ne fonctionnera alors que sur les systèmes complètement arabic ou (Enabled Arabic/Hebrew), ou par une mise à jour de la registry... Cela dit, il faut que tu saches que ton application en Unicode ne pourra fonctionner que sur des systèmes (NT-2000-XP).


Message édité par Attallah le 21-07-2005 à 12:58:57
Reply

Marsh Posté le 21-07-2005 à 14:02:19    

bonjour,
comme j'arrive à afficher un texte arabe dans le bloc notes, je pense que j'ai bien installé le font et la langue arabe.  
quant à la mise à jour de l'acp systeme pourrais tu préciser comment faire? je ne vois pas trop ce que tu veux dire là..
merci

Reply

Marsh Posté le 21-07-2005 à 14:31:29    

La clé :  
 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage
 
Qui est dans la registry contient des informations précieuses... Par exemple l'entrée :
 
ACP qui a une valeur en principe égale à 1252 western...
 
Si tu modifie cette entrée en 1256 (càd arabic) et que tu rebootes le systèmes la table de caractères ANSI par défaut serait celle de l'arabe et les caractères accentués comme le 'é' ne s'afficheront plus à leur place il y aura l'arabe et ton appli que tu as compilée en ANSI (en principe) s'afficherait bien...
 
Juste un rappel si tu utilises l'UNICODE... Ajoute à ton projet la bibliothèque UNICOWS qui te permettra de faire fonctionner ton programme sous toutes les plateformes de Windows y compris Windows 9x/Me...


Message édité par Attallah le 21-07-2005 à 14:32:14
Reply

Marsh Posté le 21-07-2005 à 15:01:25    

merci beaucoup pour toutes ces précisions. Une dernière question : en incluant la dll unicows dans mon projet, cela me permet de faire fonctionner mon appli sur des autres système que NT-2000-EXP c'est ca?

Reply

Marsh Posté le 21-07-2005 à 15:06:34    

La bibliothèque UNICOWS est une sorte de wrapper... Qui intercepte (si je puisse dire) les appels unicode du genre (SetWindowTextW) et les forward directement à leurs équivalents dans le cas de (NT-2000-XP)... Ou bien procède par conversion des chaines en ANSI avec un traitement au préalable dans le cas des systèmes ne gérants pas l'unicode...
 
Pour résumer Unicows est transparent sous Nt-2k-Xp et en plus te permet d'exécuter "en principe" tes applis UNICODE sous Windows 9x/Me


Message édité par Attallah le 21-07-2005 à 15:08:17
Reply

Marsh Posté le 21-07-2005 à 15:47:30    

ok je vais tester ça fin de semaine et je vous tiens au courant. merci

Reply

Marsh Posté le 25-07-2005 à 08:51:55    

j'ai trouvé, c'était vraiment totu bête. Une fois que j'ai converti mon programme en Unicode, il fallait juste que je change cette ligne  :o :

Code :
  1. GetClipboardData(CF_UNICODETEXT);


merci tout le monde

Reply

Marsh Posté le 30-12-2005 à 09:27:21    

salut!
est ce possible en visual C au lieu d'écrire: fprintf(fichier,"%s","Bonjour" );
on écrit: fprintf(fichier,"%s","صباح الخير" );
صباح الخير  n'apparait pas en arabe mais en caractère bizard.
comment faire pour pouvoir faire la saisie en arabe lors de la programmation en visualC++.
Merci

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed