Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1262 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Afficher un texte arabe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Afficher un texte arabe

n°1134604
Boromir_Le​_Best
Posté le 29-06-2005 à 12:35:24  profilanswer
 

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

mood
Publicité
Posté le 29-06-2005 à 12:35:24  profilanswer
 

n°1134665
HelloWorld
Salut tout le monde!
Posté le 29-06-2005 à 13:33:18  profilanswer
 

Compile ton programme en UNICODE.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1134793
Boromir_Le​_Best
Posté le 29-06-2005 à 15:28:57  profilanswer
 

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
n°1134971
HelloWorld
Salut tout le monde!
Posté le 29-06-2005 à 16:52:16  profilanswer
 

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
n°1135482
Boromir_Le​_Best
Posté le 30-06-2005 à 10:10:28  profilanswer
 

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

n°1136058
HelloWorld
Salut tout le monde!
Posté le 30-06-2005 à 15:36:15  profilanswer
 

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
n°1144695
Boromir_Le​_Best
Posté le 08-07-2005 à 19:51:23  profilanswer
 

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.

n°1144758
Tarabiscot​e
Posté le 09-07-2005 à 00:43:56  profilanswer
 

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

n°1144837
Taz
bisounours-codeur
Posté le 09-07-2005 à 10:11:19  profilanswer
 

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.

n°1145025
Boromir_Le​_Best
Posté le 09-07-2005 à 18:18:47  profilanswer
 

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?

mood
Publicité
Posté le 09-07-2005 à 18:18:47  profilanswer
 

n°1145962
HelloWorld
Salut tout le monde!
Posté le 11-07-2005 à 09:26:25  profilanswer
 

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
n°1146264
Boromir_Le​_Best
Posté le 11-07-2005 à 13:37:35  profilanswer
 

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.

n°1146284
HelloWorld
Salut tout le monde!
Posté le 11-07-2005 à 13:49:19  profilanswer
 

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
n°1146413
Boromir_Le​_Best
Posté le 11-07-2005 à 14:57:12  profilanswer
 

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

n°1146428
HelloWorld
Salut tout le monde!
Posté le 11-07-2005 à 15:05:06  profilanswer
 

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
n°1149554
Boromir_Le​_Best
Posté le 13-07-2005 à 22:31:37  profilanswer
 

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

n°1155560
Boromir_Le​_Best
Posté le 21-07-2005 à 09:33:44  profilanswer
 

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?

n°1155934
Attallah
Don de Dieu
Posté le 21-07-2005 à 12:57:40  profilanswer
 

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
n°1155994
Boromir_Le​_Best
Posté le 21-07-2005 à 14:02:19  profilanswer
 

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

n°1156041
Attallah
Don de Dieu
Posté le 21-07-2005 à 14:31:29  profilanswer
 

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
n°1156091
Boromir_Le​_Best
Posté le 21-07-2005 à 15:01:25  profilanswer
 

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?

n°1156099
Attallah
Don de Dieu
Posté le 21-07-2005 à 15:06:34  profilanswer
 

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
n°1156171
Boromir_Le​_Best
Posté le 21-07-2005 à 15:47:30  profilanswer
 

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

n°1158670
Boromir_Le​_Best
Posté le 25-07-2005 à 08:51:55  profilanswer
 

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

n°1274806
opened_min​d
Posté le 30-12-2005 à 09:27:21  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Afficher un texte arabe

 

Sujets relatifs
[JAVA] Lecture/Ecriture dans un fichier texte.Créer une interface utilisateur en mode texte...
Afficher une image en C++[ASP/Access]Comment je peux consulter et afficher un enregistrement
comment mettre du texte en couleur ds un post ???transcodage ascii hexa en texte
conversion ASCII hexa en texteN'afficher que X caractères d'une chaine
div, image de fond et textemail à partir d'un fichier texte
Plus de sujets relatifs à : Afficher un texte arabe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR