elmarokinho
Messages postés58Date d'inscriptionvendredi 18 janvier 2008StatutMembreDernière intervention 6 février 2009
-
21 mars 2008 à 16:07
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 2009
-
28 mars 2008 à 01:25
bonjour,
je suis en DUT 2e année ... je dois réaliser un projet pr la
mi-mars ;
:
realisation d'un logiciel de transcodage anglais/arabe
...
voila j'ai commencé a me remettre au langage C , d'ailleurs je me dit que
j'aurais bien fait 'écouter un peu plus en cours ^^ ...
Donc si quelqun a
déja réalisé ce type de projet ou si vous avez un code source d'un logiciel
proche qui pourrait m'aider , merci de me faire signe
pour ma part je suis chargé de l'interface graphique.
j'utilise WinApi mais je n'arrive pas a intégrer une zone de texte !!!!
int WINAPI WinMain (HINSTANCE cetteInstance, HINSTANCE precedenteInstance,
LPSTR lignesDeCommande, int modeDAffichage)
{
HWND fenetrePrincipale;
WNDCLASS classeFenetre;
//Variables de la fonction principale
MSG msg;
instance = cetteInstance;
// Structure de la classe de la fenêtre principale
switch(motHaut)
{
//Notification EN_CHANGE envoyée par le contrôle
case EN_CHANGE:
if (hCtl == hEdit[0])
{
MessageBox(fenetrePrincipale,"Vous avez modifié le texte d'une contrôle à une ligne !!","",MB_OK);
}
break;
case BN_CLICKED: // cliquer sur un des boutons pour analyser les messages
msgCtl((HWND)fenetrePrincipale,(UINT)msg,(WPARAM)wParam,(LPARAM)lParam);
break;
}
}
elmarokinho
Messages postés58Date d'inscriptionvendredi 18 janvier 2008StatutMembreDernière intervention 6 février 2009 26 mars 2008 à 16:33
oh merci beaucoup pour votre aide, sincerement je vous suis tres reconnaisant.
D'autant plus que je me demandais comment fair pour certaine lettre ( P , V, X ) qui n'existent pas en arabe ...
switch (msg)
{
// ---------------------------
// Creer la fenêtre principale
// ---------------------------
case WM_CREATE:
{
// --- GROUPBOX autour de la sélection du sens de transcodage
CreateWindow
(
TEXT("BUTTON")
,TEXT("Sens du transcodage")
,WS_CHILD | WS_VISIBLE | BS_GROUPBOX
, 10,10 // x,y
,375,50 // largeur,hauteur
,fenetrePrincipale
,NULL
,instanceGlobale
,NULL
);
// --- Radioboutons de sélection du sens de transcodage
boutonLATIN_ARABE = CreateWindow
(
TEXT("BUTTON")
,TEXT("Latin vers Arabe")
,WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON
, 20,25 // x,y
,130,30 // largeur,hauteur
,fenetrePrincipale
,(HMENU)ID_LATIN_ARABE
,instanceGlobale
,NULL
);
boutonARABE_LATIN = CreateWindow
(
TEXT("BUTTON")
,TEXT("Arabe vers Latin")
,WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON
,245,25 // x,y
,130,30 // largeur,hauteur
,fenetrePrincipale
,(HMENU)ID_ARABE_LATIN
,instanceGlobale
,NULL
);
CheckRadioButton // positionner le radiobouton par défaut
(
fenetrePrincipale
,ID_LATIN_ARABE // ID du premier radiobouton
,ID_ARABE_LATIN // ID du dernier radiobouton
,sensTranscoder == 1 ? ID_LATIN_ARABE : ID_ARABE_LATIN // radiobouton à positionner
);
// -------------------------------------
// Changer la couleur dans la zone texte
// -------------------------------------
case WM_CTLCOLOREDIT :
{
SetBkMode((HDC)wParam,OPAQUE);
if (GetDlgCtrlID((HWND)lParam) == ID_TEXTE)
SetTextColor((HDC)wParam,RGB(255,0,0)); // rouge
}
return (LRESULT)GetStockObject(WHITE_BRUSH);
// -------------------------
// Traiter la commande reçue
// -------------------------
case WM_COMMAND:
switch(LOWORD(wParam))
{
// --- Radiobouton Latin vers Arabe
case ID_LATIN_ARABE :
sensTranscoder = 1;
break;
// --- Radiobouton Arabe vers Latin
case ID_ARABE_LATIN :
sensTranscoder = 2;
break;
// --- Saisie dans la zone
case ID_TEXTE :
{
// --- Valider/invalider les boutons d'effacement et de transcodage
// --- en fonction de l'existance d'un texte à transcoder
GetDlgItemText(fenetrePrincipale,ID_TEXTE,TexteEntree,LONGUEUR_MAXI_TEXTE);
BOOL b = (BOOL)(TexteEntree[0] != 0);
EnableWindow(GetDlgItem(fenetrePrincipale,ID_B_EFFACER) ,b);
EnableWindow(GetDlgItem(fenetrePrincipale,ID_B_TRANSCODER),b);
}
break;
// --- Bouton pour effacer
case ID_B_EFFACER :
SetDlgItemText(fenetrePrincipale,ID_TEXTE,TEXT(""));
SetFocus(GetDlgItem(fenetrePrincipale,ID_TEXTE));
break;
// --- Bouton pour transcoder
case ID_B_TRANSCODER :
{
GetDlgItemText(fenetrePrincipale,ID_TEXTE,TexteEntree,LONGUEUR_MAXI_TEXTE);
if (sensTranscoder == 1) LatinVersArabe(); else ArabeVersLatin();
SetDlgItemText(fenetrePrincipale,ID_TEXTE,TexteSortie);
}
break;
// --- Bouton pour quitter
case IDCANCEL :
SendMessage(fenetrePrincipale,WM_DESTROY,0,0);
break;
}
return 0;
// --------------------
// Quitter le programme
// --------------------
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
// --- Retour du traitement par défaut pour les messages non traités
return DefWindowProc(fenetrePrincipale,msg,wParam,lParam);
}
// ==================================================
// Transcoder du latin vers l'arabe
// --------------------------------------------------
// TexteEntree = Texte saisi en caractères latin
// TexteSortie = Texte transcodé en caractères arabes
// ==================================================
void LatinVersArabe(void)
{
int iSortie = 0;
for (int iEntree=0 ; TexteEntree[iEntree] ; ++iEntree)
{
switch (TexteEntree[iEntree])
{
case 'A' : TexteSortie[iSortie] = 1575; break;
case 'B' : TexteSortie[iSortie] = 1576; break;
case 'C' :
{
if (TexteEntree[iEntree + 1] == 'H')
{
// --- CH
TexteSortie[iSortie++] = 1588; // code pour CH
++iEntree; // sauter le 'H' traité
}
else
{
// --- C
TexteSortie[iSortie++] = 1612;
}
}
break;
case 'D' : TexteSortie[iSortie] = 1583; break;
case 'E' : TexteSortie[iSortie] = 1600; break;
case 'F' : TexteSortie[iSortie] = 1601; break;
case 'G' : TexteSortie[iSortie] = 1575; break;
case 'H' : TexteSortie[iSortie] = 1581; break;
case 'I' : TexteSortie[iSortie] = 1575; break;
case 'J' : TexteSortie[iSortie] = 1580; break;
case 'K' : TexteSortie[iSortie] = 1603; break;
case 'L' : TexteSortie[iSortie] = 1604; break;
case 'M' : TexteSortie[iSortie] = 1605; break;
case 'N' : TexteSortie[iSortie] = 1606; break;
case 'O' : TexteSortie[iSortie] = 1575; break;
case 'P' : TexteSortie[iSortie] = 1575; break;
case 'Q' : TexteSortie[iSortie] = 1602; break;
case 'R' : TexteSortie[iSortie] = 1585; break;
case 'S' : TexteSortie[iSortie] = 1589; break;
case 'T' : TexteSortie[iSortie] = 1591; break;
case 'U' : TexteSortie[iSortie] = 1575; break;
case 'V' : TexteSortie[iSortie] = 1575; break;
case 'W' : TexteSortie[iSortie] = 1608; break;
case 'X' : TexteSortie[iSortie] = 1575; break;
case 'Y' : TexteSortie[iSortie] = 1610; break;
case 'Z' : TexteSortie[iSortie] = 1586; break;
// ... Ici les autres caractères latins à transcoder en arabe
// --- Les caractères non reconnus sont conservés
default : TexteSortie[iSortie++] = TexteEntree[iEntree]; break;
}
}
TexteSortie[iSortie] = 0; // terminateur de la chaîne
}
// ==================================================
// Transcoder de l'arabe vers le latin
// --------------------------------------------------
// TexteEntree = Texte saisi en caractères arabes
// TexteSortie = Texte transcodé en caractères latins
// ==================================================
void ArabeVersLatin(void)
{
int iSortie = 0;
for (int iEntree=0 ; TexteEntree[iEntree] ; ++iEntree)
{
switch (TexteEntree[iEntree])
{
case 1575 : TexteSortie[iSortie++] = 'A'; break;
case 1576: TexteSortie[iSortie++] = 'B'; break;
case 1612 : TexteSortie[iSortie++] = 'C'; break;
// ... ici les autres caractères arabes à transcoder en latin
case 1583 : TexteSortie[iSortie] = 'D'; break;
case 1600 : TexteSortie[iSortie] = 'E'; break;
case 1601 : TexteSortie[iSortie] = 'F'; break;
case 1581 : TexteSortie[iSortie] = 'H'; break;
case 1675 : TexteSortie[iSortie] = 'I'; break;
case 1580 : TexteSortie[iSortie] = 'J'; break;
// --- Les caractères non reconnus sont conservés
default : TexteSortie[iSortie++] = TexteEntree[iEntree]; break;
}
}
TexteSortie[iSortie] = 0; // terminateur de la chaîne
}
par exemple lorsque j'execute ceci aucune lettre ne fonctionne a part le CH , (désolé je ne sais pas comment rajouter de la couleur au post).
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 26 mars 2008 à 16:57
Il manque l'incrémentation de l'indice iSortie : TexteSortie[iSortie++] = ...
Dans les 2 fonctions de transcodage sauf à la mise en place du zéro terminateur où c'est inutile.
Je n'utilise pas de messager comme MSN ! Je n'aime pas du tout et je ne pourrais pas travailler en même temps, alors que répondre à des e-mails n'est pas un problème !
Jean-François
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 26 mars 2008 à 17:09
Je constate que seules les lettres majuscules sont utiles, il serait bon :
- Soit d'ajouter un toupper() pour traiter le caractère à transcoder dans la fonction LatinVersArabe()
(remplacer switch(TexteEntree[iEntree]) par switch(toupper(TexteEntree[iEntree])))
- Soit d'ajouter le style ES_UPPERCASE aux styles lors de la création de la zone de texte :
WS_VISIBLE | WS_CHILD | WS_BORDER | ES_AUTOHSCROLL | ES_CENTER | ES_UPPERCASE
elmarokinho
Messages postés58Date d'inscriptionvendredi 18 janvier 2008StatutMembreDernière intervention 6 février 2009 26 mars 2008 à 17:12
VOILA LA FIN
sincérement je vous remercie de la part de tout mon groupe de travail ... je ne sais pas comment j'aurais pu faire sans vous !
je vais tenter de reproduire le modele que vous m'avez fourni pour toutes les lettres particulieres et au besoin je vous recontacterai.
quoi qu'il en soit je vous ferait parvenir une partie de mon projet car c'est un peu le votre également.
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 26 mars 2008 à 19:00
toupper() = to upper = vers majuscule ! cela retourne le caractère en majuscule (au niveau du traitement, pas de l'affichage contrairement au style ES_UPPERCASE).
Dans Latin vers Arabe :
case ' ' : TexteSortie[iSortie++] = 160; break;
il manque le ++ et y-a-t'il bien un espace entre les deux apostrophes ?
Dans le sens Arabe vers Latin :
case 160 : TexteSortie[iSortie++] = ' '; break;
avec un espace entre les apostrophes.
Remarque :
TexteSortie[iSortie++] = caractère;
est équivalent à :
TexteSortie[iSortie] = caractère;
++iSortie;
switch (msg)
{
// ---------------------------
// Creer la fenêtre principale
// ---------------------------
case WM_CREATE:
{
// --- GROUPBOX autour de la sélection du sens de transcodage
CreateWindow
(
TEXT("BUTTON")
,TEXT("Sens du transcodage")
,WS_CHILD | WS_VISIBLE | BS_GROUPBOX
, 10,10 // x,y
,375,50 // largeur,hauteur
,fenetrePrincipale
,NULL
,instanceGlobale
,NULL
);
// --- Radioboutons de sélection du sens de transcodage
boutonLATIN_ARABE = CreateWindow
(
TEXT("BUTTON")
,TEXT("Latin vers Arabe")
,WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON
, 20,25 // x,y
,130,30 // largeur,hauteur
,fenetrePrincipale
,(HMENU)ID_LATIN_ARABE
,instanceGlobale
,NULL
);
boutonARABE_LATIN = CreateWindow
(
TEXT("BUTTON")
,TEXT("Arabe vers Latin")
,WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON
,245,25 // x,y
,130,30 // largeur,hauteur
,fenetrePrincipale
,(HMENU)ID_ARABE_LATIN
,instanceGlobale
,NULL
);
CheckRadioButton // positionner le radiobouton par défaut
(
fenetrePrincipale
,ID_LATIN_ARABE // ID du premier radiobouton
,ID_ARABE_LATIN // ID du dernier radiobouton
,sensTranscoder == 1 ? ID_LATIN_ARABE : ID_ARABE_LATIN // radiobouton à positionner
);
// -------------------------------------
// Changer la couleur dans la zone texte
// -------------------------------------
case WM_CTLCOLOREDIT :
{
SetBkMode((HDC)wParam,OPAQUE);
if (GetDlgCtrlID((HWND)lParam) == ID_TEXTE)
SetTextColor((HDC)wParam,RGB(255,0,0)); // rouge
}
return (LRESULT)GetStockObject(WHITE_BRUSH);
// -------------------------
// Traiter la commande reçue
// -------------------------
case WM_COMMAND:
switch(LOWORD(wParam))
{
// --- Radiobouton Latin vers Arabe
case ID_LATIN_ARABE :
sensTranscoder = 1;
break;
// --- Radiobouton Arabe vers Latin
case ID_ARABE_LATIN :
sensTranscoder = 2;
break;
// --- Saisie dans la zone
case ID_TEXTE :
{
// --- Valider/invalider les boutons d'effacement et de transcodage
// --- en fonction de l'existance d'un texte à transcoder
GetDlgItemText(fenetrePrincipale,ID_TEXTE,TexteEntree,LONGUEUR_MAXI_TEXTE);
BOOL b = (BOOL)(TexteEntree[0] != 0);
EnableWindow(GetDlgItem(fenetrePrincipale,ID_B_EFFACER) ,b);
EnableWindow(GetDlgItem(fenetrePrincipale,ID_B_TRANSCODER),b);
}
break;
// --- Bouton pour effacer
case ID_B_EFFACER :
SetDlgItemText(fenetrePrincipale,ID_TEXTE,TEXT(""));
SetFocus(GetDlgItem(fenetrePrincipale,ID_TEXTE));
break;
// --- Bouton pour transcoder
case ID_B_TRANSCODER :
{
GetDlgItemText(fenetrePrincipale,ID_TEXTE,TexteEntree,LONGUEUR_MAXI_TEXTE);
if (sensTranscoder == 1) LatinVersArabe(); else ArabeVersLatin();
SetDlgItemText(fenetrePrincipale,ID_TEXTE,TexteSortie);
}
break;
// --- Bouton pour quitter
case IDCANCEL :
SendMessage(fenetrePrincipale,WM_DESTROY,0,0);
break;
}
return 0;
// --------------------
// Quitter le programme
// --------------------
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
// --- Retour du traitement par défaut pour les messages non traités
return DefWindowProc(fenetrePrincipale,msg,wParam,lParam);
}
// ==================================================
// Transcoder du latin vers l'arabe
// --------------------------------------------------
// TexteEntree = Texte saisi en caractères latin
// TexteSortie = Texte transcodé en caractères arabes
// ==================================================
void LatinVersArabe(void)
{
int iSortie = 0;
for (int iEntree=0 ; TexteEntree[iEntree] ; ++iEntree)
{
switch (TexteEntree[iEntree])
{
case ' ' : TexteSortie[iSortie++] = 160; break;
case 'A' : TexteSortie[iSortie] = 1575; break;
case 'B' : TexteSortie[iSortie] = 1576; break;
case 'C' :
{
if (TexteEntree[iEntree + 1] == 'H')
{
// --- CH
TexteSortie[iSortie++] = 1588; // code pour CH
++iEntree; // sauter le 'H' traité
}
else
{
// --- C
TexteSortie[iSortie++] = 1612;
}
}
break;
case 'D' : TexteSortie[iSortie] = 1583; break;
case 'E' : TexteSortie[iSortie] = 1600; break;
case 'F' : TexteSortie[iSortie] = 1601; break;
case 'G' :
{
if (TexteEntree[iEntree + 1] == 'H')
{
// --- GH
TexteSortie[iSortie++] = 1594; // code pour CH
++iEntree; // sauter le 'H' traité
}
else
{
// --- C
TexteSortie[iSortie++] = 1580;
}
}
break;
case 'H' : TexteSortie[iSortie] = 1581; break;
case 'I' : TexteSortie[iSortie] = 1616; break;
case 'J' : TexteSortie[iSortie] = 1580; break;
case 'K' : TexteSortie[iSortie] = 1603; break;
case 'L' : TexteSortie[iSortie] = 1604; break;
case 'M' : TexteSortie[iSortie] = 1605; break;
case 'N' : TexteSortie[iSortie] = 1606; break;
case 'O' : TexteSortie[iSortie] = 1615; break;
case 'Q' : TexteSortie[iSortie] = 1602; break;
case 'R' : TexteSortie[iSortie] = 1585; break;
case 'S' : TexteSortie[iSortie] = 1589; break;
case 'T' : TexteSortie[iSortie] = 1591; break;
case 'U' : TexteSortie[iSortie] = 1575; break;
case 'V' : TexteSortie[iSortie] = 1584; break;
case 'W' : TexteSortie[iSortie] = 1608; break;
case 'Y' : TexteSortie[iSortie] = 1610; break;
case 'Z' : TexteSortie[iSortie] = 1586; break;
// ... Ici les autres caractères latins à transcoder en arabe
// --- Les caractères non reconnus sont conservés
default : TexteSortie[iSortie++] = TexteEntree[iEntree]; break;
}
++iSortie;
}
TexteSortie[iSortie] = 0; // terminateur de la chaîne
}
// ==================================================
// Transcoder de l'arabe vers le latin
// --------------------------------------------------
// TexteEntree = Texte saisi en caractères arabes
// TexteSortie = Texte transcodé en caractères latins
// ==================================================
void ArabeVersLatin(void)
{
int iSortie = 0;
for (int iEntree=0 ; TexteEntree[iEntree] ; ++iEntree)
{
switch (TexteEntree[iEntree])
{
case 1575 : TexteSortie[iSortie++] = 'A'; break;
case 1576: TexteSortie[iSortie++] = 'B'; break;
case 1612 : TexteSortie[iSortie++] = 'C'; break;
case 1588 :
{
TexteSortie[iSortie++] = 'C';
TexteSortie[iSortie++] = 'H';
}
break;
case 1583 : TexteSortie[iSortie] = 'D'; break;
case 1600 : TexteSortie[iSortie] = 'E'; break;
case 1601 : TexteSortie[iSortie] = 'F'; break;
case 1581 : TexteSortie[iSortie] = 'H'; break;
case 1616 : TexteSortie[iSortie] = 'I'; break;
case 1580 : TexteSortie[iSortie] = 'J'; break;
case 1603 : TexteSortie[iSortie] = 'K'; break;
case 1604 : TexteSortie[iSortie] = 'L'; break;
case 1605 : TexteSortie[iSortie] = 'M'; break;
case 1606 : TexteSortie[iSortie] = 'N'; break;
case 1615 : TexteSortie[iSortie] = 'O'; break;
case 1602 : TexteSortie[iSortie] = 'Q'; break;
case 1585 : TexteSortie[iSortie] = 'R'; break;
case 1589 : TexteSortie[iSortie] = 'S'; break;
case 1591 : TexteSortie[iSortie] = 'T'; break;
case 1584 : TexteSortie[iSortie] = 'V'; break;
case 1608 : TexteSortie[iSortie] = 'W'; break;
case 1610 : TexteSortie[iSortie] = 'Y'; break;
case 1586 : TexteSortie[iSortie] = 'Z'; break;
case 160 : TexteSortie[iSortie++] = ' '; break;
// --- Les caractères non reconnus sont conservés
default : TexteSortie[iSortie++] = TexteEntree[iEntree]; break;
}
++iSortie;
}
TexteSortie[iSortie] = 0; // terminateur de la chaîne
}
lorsque je transcode successivement anglais/arabe Arabe/anglais plusieur fois cela me donne des truc bizarre :
bob > ÈõÈ > BõOB > ÈõOõÈ > BõOOÈOB etc ...
d'autre part, est il possible de limiter a une fois le nombre de trnascvodage dans le meme sens ?
par exemple interdire le arabe/latin deux fois de suite parce que cela donne des résultat surprenant ...
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 27 mars 2008 à 12:01
Bonjour,
On peut invalider le bouton de transcodage pour éviter d'en faire plusieurs à la suite mais je n'ai pas du tout ce problème ici ! Une fois transcodé, d'autre appuis sur le bouton ne changent rien au texte puisque les caractères ne sont plus reconnus (ils ne font plus partie de la même gamme de codes ASCII) et sont donc conservés.
Bien faire attention aux iSortie++. Il doit y en avoir partout sauf sur la mise en place du zéro terminateur où c'est inutile (on peut en mettre un aussi mais cela donnera une incrémentation qui ne servira à rien).
Dans le dernier code posté, à part le problème des iSortie++, surveiller les commentaires placés : il y a des commentaires concernant C et CH dans le traitement de la lettre G, cela ne va pas simplifier la relecture et la maintenance du programme ! Et dans la conversion ArabeVersLatin() il vaudrait mieux placer les case dans l'ordre des codes ASCII arabes; là aussi cela simplifiera la lecture et la maintenance.
elmarokinho
Messages postés58Date d'inscriptionvendredi 18 janvier 2008StatutMembreDernière intervention 6 février 2009 27 mars 2008 à 12:23
oui , pour les commentaires je sais qu'il y a encore des petites erreures mais je suis en train de corriger cela.
et pour l'ordre des lettre en arabes , je prefere le laisser dans l'ordre alphabetique français, je trouve cela plus facil pour s'y reperer ...
en tout cas merci beaucoup pour votre aide.
je susi actuellement en train de peaufiner les détails :
- cmment fixer la taille de la fenetre? interdire les agrandissement?
- changer l'icone de la fenetre? (en haut a gache)
il ne me reste plus qu'à rédiger mon rapport, et a préparer le poster du projet :p
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 27 mars 2008 à 15:28
Voilà une version modifiée (les modifs sont en rouge) avec :
- Le non-redimensionnement de la fenêtre (style dans CreateWindow()).
- L'utilisation d'icône(s) associée(s) au programme (visible dans l'explorateur de fichiers) et à la barre de titre.
- Lorsque le programme fonctionne correctement il n'y a pas de problème si on appuie plusieurs fois de suite sur le bouton "Transcoder". Par contre ce que j'ai modifié dans cette version, c'est l'alternance automatique dans le sens du transcodage : Quand on appuie sur "Transcoder", le transcodage se réalise et le sens s'inverse comme cela si on appuie à nouveau sur "Transcoder" on retrouve le texte de départ !
switch (msg)
{
// ---------------------------
// Creer la fenêtre principale
// ---------------------------
case WM_CREATE:
{
// --- Changer l'icône de la barre de titre
SetClassLong
(
fenetrePrincipale
,GCL_HICON
,(long)LoadIcon(instanceGlobale,TEXT("ICONE_PROGRAMME"))
);
// --- GROUPBOX autour de la sélection du sens de transcodage
CreateWindow
(
TEXT("BUTTON")
,TEXT("Sens du transcodage")
,WS_CHILD | WS_VISIBLE | BS_GROUPBOX
, 10,10 // x,y
,375,50 // largeur,hauteur
,fenetrePrincipale
,NULL
,instanceGlobale
,NULL
);
// --- Radioboutons de sélection du sens de transcodage
boutonLATIN_ARABE = CreateWindow
(
TEXT("BUTTON")
,TEXT("Latin vers Arabe")
,WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON
, 20,25 // x,y
,130,30 // largeur,hauteur
,fenetrePrincipale
,(HMENU)ID_LATIN_ARABE
,instanceGlobale
,NULL
);
boutonARABE_LATIN = CreateWindow
(
TEXT("BUTTON")
,TEXT("Arabe vers Latin")
,WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON
,245,25 // x,y
,130,30 // largeur,hauteur
,fenetrePrincipale
,(HMENU)ID_ARABE_LATIN
,instanceGlobale
,NULL
);
CheckRadioButton // positionner le radiobouton par défaut
(
fenetrePrincipale
,ID_LATIN_ARABE // ID du premier radiobouton
,ID_ARABE_LATIN // ID du dernier radiobouton
,sensTranscoder == 1 ? ID_LATIN_ARABE : ID_ARABE_LATIN // radiobouton à positionner
);
// -------------------------------------
// Changer la couleur dans la zone texte
// -------------------------------------
case WM_CTLCOLOREDIT :
{
SetBkMode((HDC)wParam,OPAQUE);
if (GetDlgCtrlID((HWND)lParam) == ID_TEXTE)
SetTextColor((HDC)wParam,RGB(255,0,0)); // rouge
}
return (LRESULT)GetStockObject(WHITE_BRUSH);
// -------------------------
// Traiter la commande reçue
// -------------------------
case WM_COMMAND:
switch(LOWORD(wParam))
{
// --- Radiobouton Latin vers Arabe
case ID_LATIN_ARABE :
sensTranscoder = 1;
break;
// --- Radiobouton Arabe vers Latin
case ID_ARABE_LATIN :
sensTranscoder = 2;
break;
// --- Saisie dans la zone
case ID_TEXTE :
{
// --- Valider/invalider les boutons d'effacement et de transcodage
// --- en fonction de l'existance d'un texte à transcoder
GetDlgItemText(fenetrePrincipale,ID_TEXTE,TexteEntree,LONGUEUR_MAXI_TEXTE);
BOOL b = (BOOL)(TexteEntree[0] != 0);
EnableWindow(GetDlgItem(fenetrePrincipale,ID_B_EFFACER) ,b);
EnableWindow(GetDlgItem(fenetrePrincipale,ID_B_TRANSCODER),b);
}
break;
// --- Bouton pour effacer
case ID_B_EFFACER :
SetDlgItemText(fenetrePrincipale,ID_TEXTE,TEXT(""));
SetFocus(GetDlgItem(fenetrePrincipale,ID_TEXTE));
break;
// --- Bouton pour transcoder
case ID_B_TRANSCODER :
{
// --- Lire/Transcoder/Montrer
GetDlgItemText(fenetrePrincipale,ID_TEXTE,TexteEntree,LONGUEUR_MAXI_TEXTE);
if (sensTranscoder == 1) LatinVersArabe(); else ArabeVersLatin();
SetDlgItemText(fenetrePrincipale,ID_TEXTE,TexteSortie);
// --- Alterner automatiquement le sens du transcodage et le positionner if (sensTranscoder 1) sensTranscoder 2; else sensTranscoder = 1;
CheckRadioButton
(
fenetrePrincipale
,ID_LATIN_ARABE // ID du premier radiobouton
,ID_ARABE_LATIN // ID du dernier radiobouton
,sensTranscoder == 1 ? ID_LATIN_ARABE : ID_ARABE_LATIN // radiobouton à positionner
);
}
break;
// --- Bouton pour quitter
case IDCANCEL :
SendMessage(fenetrePrincipale,WM_DESTROY,0,0);
break;
}
return 0;
// --------------------
// Quitter le programme
// --------------------
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
// --- Retour du traitement par défaut pour les messages non traités
return DefWindowProc(fenetrePrincipale,msg,wParam,lParam);
}
// ==================================================
// Transcoder du latin vers l'arabe
// --------------------------------------------------
// TexteEntree = Texte saisi en caractères latin
// TexteSortie = Texte transcodé en caractères arabes
// ==================================================
void LatinVersArabe(void)
{
int iSortie = 0;
for (int iEntree=0 ; TexteEntree[iEntree] ; ++iEntree)
{
switch (TexteEntree[iEntree])
{
case ' ' : TexteSortie[iSortie++] = 160; break;
case 'A' : TexteSortie[iSortie++] = 1575; break;
case 'B' : TexteSortie[iSortie++] = 1576; break;
case 'C' :
{
if (TexteEntree[iEntree + 1] == 'H')
{
// --- CH
TexteSortie[iSortie++] = 1588; // code pour CH
++iEntree; // sauter le 'H' traité
}
else
{
// --- C
TexteSortie[iSortie++] = 1612;
}
}
break;
case 'D' : TexteSortie[iSortie++] = 1583; break;
case 'E' : TexteSortie[iSortie++] = 1600; break;
case 'F' : TexteSortie[iSortie++] = 1601; break;
case 'G' :
{
if (TexteEntree[iEntree + 1] == 'H')
{
// --- GH
TexteSortie[iSortie++] = 1594; // code pour GH
++iEntree; // sauter le 'H' traité
}
else
{
// --- G
TexteSortie[iSortie++] = 1580;
}
}
break;
case 'H' : TexteSortie[iSortie++] = 1581; break;
case 'I' : TexteSortie[iSortie++] = 1616; break;
case 'J' : TexteSortie[iSortie++] = 1580; break;
case 'K' : TexteSortie[iSortie++] = 1603; break;
case 'L' : TexteSortie[iSortie++] = 1604; break;
case 'M' : TexteSortie[iSortie++] = 1605; break;
case 'N' : TexteSortie[iSortie++] = 1606; break;
case 'O' : TexteSortie[iSortie++] = 1615; break;
case 'Q' : TexteSortie[iSortie++] = 1602; break;
case 'R' : TexteSortie[iSortie++] = 1585; break;
case 'S' : TexteSortie[iSortie++] = 1589; break;
case 'T' : TexteSortie[iSortie++] = 1591; break;
case 'U' : TexteSortie[iSortie++] = 1575; break;
case 'V' : TexteSortie[iSortie++] = 1584; break;
case 'W' : TexteSortie[iSortie++] = 1608; break;
case 'Y' : TexteSortie[iSortie++] = 1610; break;
case 'Z' : TexteSortie[iSortie++] = 1586; break;
// --- Les caractères non reconnus sont conservés
default : TexteSortie[iSortie++] = TexteEntree[iEntree]; break;
}
}
TexteSortie[iSortie] = 0; // terminateur de la chaîne
}
// ==================================================
// Transcoder de l'arabe vers le latin
// --------------------------------------------------
// TexteEntree = Texte saisi en caractères arabes
// TexteSortie = Texte transcodé en caractères latins
// ==================================================
void ArabeVersLatin(void)
{
int iSortie = 0;
for (int iEntree=0 ; TexteEntree[iEntree] ; ++iEntree)
{
switch (TexteEntree[iEntree])
{
case 160 : TexteSortie[iSortie++] = ' '; break;
case 1575 : TexteSortie[iSortie++] = 'A'; break;
case 1576 : TexteSortie[iSortie++] = 'B'; break;
case 1612 : TexteSortie[iSortie++] = 'C'; break;
case 1581 : TexteSortie[iSortie++] = 'H'; break;
case 1616 : TexteSortie[iSortie++] = 'I'; break;
case 1580 : TexteSortie[iSortie++] = 'J'; break;
case 1603 : TexteSortie[iSortie++] = 'K'; break;
case 1604 : TexteSortie[iSortie++] = 'L'; break;
case 1605 : TexteSortie[iSortie++] = 'M'; break;
case 1606 : TexteSortie[iSortie++] = 'N'; break;
case 1615 : TexteSortie[iSortie++] = 'O'; break;
case 1602 : TexteSortie[iSortie++] = 'Q'; break;
case 1585 : TexteSortie[iSortie++] = 'R'; break;
case 1589 : TexteSortie[iSortie++] = 'S'; break;
case 1591 : TexteSortie[iSortie++] = 'T'; break;
case 1584 : TexteSortie[iSortie++] = 'V'; break;
case 1608 : TexteSortie[iSortie++] = 'W'; break;
case 1610 : TexteSortie[iSortie++] = 'Y'; break;
case 1586 : TexteSortie[iSortie++] = 'Z'; break;
// --- Les caractères non reconnus sont conservés
default : TexteSortie[iSortie++] = TexteEntree[iEntree]; break;
}
}
TexteSortie[iSortie] = 0; // terminateur de la chaîne
}
L'utilisation de l'icône nécessite l'ajout d'un fichier de ressources insérer dans le projet. Il doit contenir :
// Programme de transcodage Latin/Arabe
// Fichier des ressources
// --- Icone
ICONE_PROGRAMME ICON "icone.ico"
// --- Manifest XP
#ifndef CREATEPROCESS_MANIFEST_RESOURCE_ID
#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
#endif
1) L'icône utilisée ici s'appelle icone.ico et se trouve dans le répertoire du projet (sinon ajouter le chemin d'accès adéquat).
2) La partie "Manifest XP" correspond à l'intégration du look XP directement dans l'exécutable créé, sans avoir besoin de promener le fichier "toto.exe.manifest" avec le programme "toto.exe" (si le programme créé se nomme ainsi !). Il faut simplement renommer le fichier manifest utilisé précédemment "toto.exe.manifest" en "manifest.xml" et le déplacer du répertoire de l'exécutable vers le répertoire du projet pour qu'il soit pris en compte à la compilation.
elmarokinho
Messages postés58Date d'inscriptionvendredi 18 janvier 2008StatutMembreDernière intervention 6 février 2009 27 mars 2008 à 19:25
bonjour,
maintenant que la premiere étape est finie je me dis que je peux espérer finir la 2e pour viser une bonne note.
Cependant je sais que je n'y arriverais pas tout seul, j'aurais aimé ne pas avoir a vous demander un code tout pres mais le temps manque énormément.
Si vous avez le temps, et uniquement si cela ne vous dérange pas j'aimerais savoir si vous pouviez intégrer une fonction traduction qui prendra comme exemple uniquement quelques mots.
comment je vois la fenetre?
-la traduction ne se fera que de anglais vers arabe
-un troisieme radio bouton traduction ou un champs Edit dédié a la traduction
par exemple j'entre Write.
Le logiciel me donne 'Kataba'
ainsi que le transcodage arabe de Kataba (qui sera donc basé sur le scipt qui fonctionne déja parfaitement).
enfin voila, si vous avez du temps avant Lundi je vous serai tres reconaissant sinon sachez que je le suis déja énormément pour tout ce que vous avez fait pour nous.
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 27 mars 2008 à 20:44
C'est pas très compliqué à ajouter et là il va y avoir un fichier externe contenant le dictionnaire des traductions !!! par contre une petite liste de traductions ne serait pas de trop pour tester (les 2 mots séparés par un espace) :
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 27 mars 2008 à 22:44
Voilà ce que cela donne (avec quelques modifs : renommage de variables, centrage de la fenêtre sur l'écran au lancement et fonte de caractère plus esthétique dans la fenêtre) :
// --- Traiter les messages de la fenêtre
MSG Msg;
while (GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
// =============================================
// Traiter les messages de la fenêtre principale
// =============================================
LRESULT CALLBACK FenetreProc
(
HWND hFenetre // E:handle de la fenêtre
,UINT Msg // E:message à traiter
,WPARAM wParam // E:paramètre WPARAM
,LPARAM lParam // E:paramètre LPARAM
) // S:code retour
{
switch (Msg)
{
// ---------------------------
// Creer la fenêtre principale
// ---------------------------
case WM_CREATE:
{
// --- Changer la petite icône dans la barre de titre
SetClassLong
(
hFenetre
,GCL_HICON
,(long)LoadIcon(hInstanceGlobale,TEXT("ICONE_PROGRAMME"))
);
// --- Centrer la fenêtre sur l'écran
// --- 1) Lire les dimensions de l'écran
RECT Ecran;
SystemParametersInfo(SPI_GETWORKAREA,0,&Ecran,0);
// --- 2) Lire les dimensions de la fenêtre
WINDOWPLACEMENT Fenetre;
Fenetre.length = sizeof(WINDOWPLACEMENT);
GetWindowPlacement(hFenetre,&Fenetre);
// --- 3) Déplacer la fenêtre au centre de l'écran
int iLargeur = Fenetre.rcNormalPosition.right - Fenetre.rcNormalPosition.left;
int iHauteur = Fenetre.rcNormalPosition.bottom - Fenetre.rcNormalPosition.top;
int iX = (Ecran.right - iLargeur) / 2;
int iY = (Ecran.bottom - iHauteur) / 2;
MoveWindow(hFenetre,iX,iY,iLargeur,iHauteur,(BOOL)FALSE);
// --- Fonte pour les textes de la fenêtre
HFONT hFonte = CreateFont
(
-MulDiv
(
10
,GetDeviceCaps(GetDC(hFenetre),LOGPIXELSY)
,72
) // hauteur (1er paramètre)
,0 // largeur
,0 // inclinaison du texte
,0 // orientation
,FW_NORMAL // graisse
,(DWORD)false // italique
,(DWORD)false // souligné
,FALSE // barré
,ANSI_CHARSET // jeu de caractères
,OUT_DEFAULT_PRECIS // précision du tracé
,CLIP_DEFAULT_PRECIS // précision du rognage
,PROOF_QUALITY // qualité
,DEFAULT_PITCH | FF_SWISS // pitch et famille
,TEXT("Arial") // nom de la fonte
);
// --- GROUPBOX autour de la sélection du sens de transcodage
HWND hGroupbox = CreateWindowEx
(
0
,TEXT("BUTTON")
,TEXT("Sens du transcodage")
,WS_CHILD | WS_VISIBLE | BS_GROUPBOX
, 10,10 // x,y
,375,50 // largeur,hauteur
,hFenetre
,NULL
,hInstanceGlobale
,NULL
);
SendMessage(hGroupbox,WM_SETFONT,(WPARAM)hFonte,(LPARAM)true); // fonte
// --- Radioboutons de sélection du sens de transcodage
HWND hRB1 = CreateWindowEx
(
0
,TEXT("BUTTON")
,TEXT("Latin vers Arabe")
,WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON
, 25,30 // x,y
,130,20 // largeur,hauteur
,hFenetre
,(HMENU)ID_RBTN_LA
,hInstanceGlobale
,NULL
);
SendMessage(hRB1,WM_SETFONT,(WPARAM)hFonte,(LPARAM)true); // fonte
HWND hRB2 = CreateWindowEx
(
0
,TEXT("BUTTON")
,TEXT("Arabe vers Latin")
,WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON
,250,30 // x,y
,130,20 // largeur,hauteur
,hFenetre
,(HMENU)ID_RBTN_AL
,hInstanceGlobale
,NULL
);
SendMessage(hRB2,WM_SETFONT,(WPARAM)hFonte,(LPARAM)true); // fonte
CheckRadioButton // positionner le radiobouton par défaut
(
hFenetre
,ID_RBTN_LA // ID du premier radiobouton
,ID_RBTN_AL // ID du dernier radiobouton
,iSensTranscoder == 1 ? ID_RBTN_LA : ID_RBTN_AL // radiobouton à positionner
);
// -------------------------------------
// Changer la couleur dans la zone texte
// -------------------------------------
case WM_CTLCOLOREDIT :
{
SetBkMode((HDC)wParam,OPAQUE);
if (GetDlgCtrlID((HWND)lParam) == ID_TEXTE)
SetTextColor((HDC)wParam,RGB(255,0,0)); // rouge
}
return (LRESULT)GetStockObject(WHITE_BRUSH);
// -------------------------
// Traiter la commande reçue
// -------------------------
case WM_COMMAND:
switch(LOWORD(wParam))
{
// --- Radiobouton "Latin vers Arabe"
case ID_RBTN_LA :
iSensTranscoder = 1;
break;
// --- Radiobouton "Arabe vers Latin"
case ID_RBTN_AL :
iSensTranscoder = 2;
break;
// --- Saisie dans la zone
case ID_TEXTE :
{
// --- Valider/invalider certains boutons
// --- en fonction de l'existance d'un texte à transcoder
GetDlgItemText(hFenetre,ID_TEXTE,szEntree,LONGUEUR_MAXI_TEXTE);
BOOL b = (BOOL)(szEntree[0] != 0);
EnableWindow(GetDlgItem(hFenetre,ID_BTN_EFFACER) ,b);
EnableWindow(GetDlgItem(hFenetre,ID_BTN_TRADUIRE) ,b);
EnableWindow(GetDlgItem(hFenetre,ID_BTN_TRANSCODER),b);
}
break;
// --- Bouton "Effacer"
case ID_BTN_EFFACER :
SetDlgItemText(hFenetre,ID_TEXTE,TEXT(""));
SetFocus(GetDlgItem(hFenetre,ID_TEXTE));
break;
// --- Bouton "Transcoder"
case ID_BTN_TRANSCODER :
{
// --- Lire/Transcoder/Montrer
GetDlgItemText(hFenetre,ID_TEXTE,szEntree,LONGUEUR_MAXI_TEXTE);
if (iSensTranscoder == 1) LatinVersArabe(); else ArabeVersLatin();
SetDlgItemText(hFenetre,ID_TEXTE,szSortie);
// --- Alterner automatiquement le sens du transcodage et le positionner if (iSensTranscoder 1) iSensTranscoder 2; else iSensTranscoder = 1;
CheckRadioButton
(
hFenetre
,ID_RBTN_LA // ID du premier radiobouton
,ID_RBTN_AL // ID du dernier radiobouton
,iSensTranscoder == 1 ? ID_RBTN_LA : ID_RBTN_AL // radiobouton à positionner
);
}
break;
// --------------------
// Quitter le programme
// --------------------
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
// --- Retour du traitement par défaut pour les messages non traités
return DefWindowProc(hFenetre,Msg,wParam,lParam);
}
// ==========================================================
// Traduire la saisie
// ----------------------------------------------------------
// szEntree = Texte saisi en caractères latins
// szSortie = Texte traduit en caractères latins
// ----------------------------------------------------------
// Le fichier "Dictionnaire.txt" contient les couples de mots
// <mot non arabe>,<mot arabe en caractères latins>
// Ex: write,kataba
// ==========================================================
void Traduire
(
HWND hFenetre // E:handle de la fenêtre
)
{
// --- Copier la saisie dans le texte en sortie
// --- pour les cas d'erreur
wcscpy(szSortie,szEntree);
// --- Ouvrir le fichier dictionnaire
FILE* pf = fopen("Dictionnaire.txt","rt");
if (pf == NULL)
{
MessageBox
(
hFenetre
,TEXT("Erreur à l'ouverture du fichier dictionnaire\n(fichier dictionnaire non trouvé ?)")
,TEXT("Erreur")
,MB_OK | MB_ICONERROR
);
return;
}
// --- Parcourir le fichier dictionnaire
// --- pour y chercher la saisie
TCHAR szLigne[256];
bool bTrouve = false;
int iCompteur = 0;
while (fgetws(szLigne,256,pf) != NULL)
{
// --- Pointer la virgule séparatrice
++iCompteur;
TCHAR* pSep = wcschr(szLigne,L',');
if (pSep == NULL)
{
// --- Ligne incorrecte (pas de virgule trouvée)
TCHAR szMessage[100];
swprintf(szMessage,TEXT("La ligne %d du dictionnaire est incorrecte\n(pas de virgule séparatrice)"),iCompteur);
MessageBox(hFenetre,szMessage,TEXT("Erreur"),MB_OK | MB_ICONERROR);
continue;
}
// --- Chercher si la saisie est égale au premier mot de la ligne
if (wcsnicmp(szEntree,szLigne,(size_t)(pSep - szLigne)) == 0)
{
// --- La saisie est égale au premier mot de la ligne
// --- Copier le mot arabe et quitter la lecture du fichier
wcscpy(szSortie,pSep + 1);
bTrouve = true;
break;
}
}
if (! bTrouve)
{
MessageBox
(
hFenetre
,TEXT("Le mot saisi n'existe pas dans le dictionnaire")
,TEXT("Traduction")
,MB_OK | MB_ICONWARNING
);
}
// --- Fermer le fichier dictionnaire
fclose(pf);
}
// ===============================================
// Transcoder du latin vers l'arabe
// -----------------------------------------------
// szEntree = Texte saisi en caractères latins
// szSortie = Texte transcodé en caractères arabes
// ===============================================
void LatinVersArabe(void)
{
int iSortie = 0;
for (int iEntree=0 ; szEntree[iEntree] ; ++iEntree)
{
switch (szEntree[iEntree])
{
case ' ' : szSortie[iSortie++] = 160; break;
case 'A' : szSortie[iSortie++] = 1575; break;
case 'B' : szSortie[iSortie++] = 1576; break;
case 'C' :
{
if (szEntree[iEntree + 1] == 'H')
{
// --- CH
szSortie[iSortie++] = 1588; // code pour CH
++iEntree; // sauter le 'H' traité
}
else
{
// --- C
szSortie[iSortie++] = 1612;
}
}
break;
case 'D' : szSortie[iSortie++] = 1583; break;
case 'E' : szSortie[iSortie++] = 1600; break;
case 'F' : szSortie[iSortie++] = 1601; break;
case 'G' :
{
if (szEntree[iEntree + 1] == 'H')
{
// --- GH
szSortie[iSortie++] = 1594; // code pour GH
++iEntree; // sauter le 'H' traité
}
else
{
// --- G
szSortie[iSortie++] = 1580;
}
}
break;
case 'H' : szSortie[iSortie++] = 1581; break;
case 'I' : szSortie[iSortie++] = 1616; break;
case 'J' : szSortie[iSortie++] = 1580; break;
case 'K' : szSortie[iSortie++] = 1603; break;
case 'L' : szSortie[iSortie++] = 1604; break;
case 'M' : szSortie[iSortie++] = 1605; break;
case 'N' : szSortie[iSortie++] = 1606; break;
case 'O' : szSortie[iSortie++] = 1615; break;
case 'Q' : szSortie[iSortie++] = 1602; break;
case 'R' : szSortie[iSortie++] = 1585; break;
case 'S' : szSortie[iSortie++] = 1589; break;
case 'T' : szSortie[iSortie++] = 1591; break;
case 'U' : szSortie[iSortie++] = 1575; break;
case 'V' : szSortie[iSortie++] = 1584; break;
case 'W' : szSortie[iSortie++] = 1608; break;
case 'Y' : szSortie[iSortie++] = 1610; break;
case 'Z' : szSortie[iSortie++] = 1586; break;
// --- Les caractères non reconnus sont conservés
default : szSortie[iSortie++] = szEntree[iEntree]; break;
}
}
szSortie[iSortie] = 0; // terminateur de la chaîne
}
// ===============================================
// Transcoder de l'arabe vers le latin
// -----------------------------------------------
// szEntree = Texte saisi en caractères arabes
// szSortie = Texte transcodé en caractères latins
// ===============================================
void ArabeVersLatin(void)
{
int iSortie = 0;
for (int iEntree=0 ; szEntree[iEntree] ; ++iEntree)
{
switch (szEntree[iEntree])
{
case 160 : szSortie[iSortie++] = ' '; break;
case 1575 : szSortie[iSortie++] = 'A'; break;
case 1576 : szSortie[iSortie++] = 'B'; break;
case 1612 : szSortie[iSortie++] = 'C'; break;
case 1581 : szSortie[iSortie++] = 'H'; break;
case 1616 : szSortie[iSortie++] = 'I'; break;
case 1580 : szSortie[iSortie++] = 'J'; break;
case 1603 : szSortie[iSortie++] = 'K'; break;
case 1604 : szSortie[iSortie++] = 'L'; break;
case 1605 : szSortie[iSortie++] = 'M'; break;
case 1606 : szSortie[iSortie++] = 'N'; break;
case 1615 : szSortie[iSortie++] = 'O'; break;
case 1602 : szSortie[iSortie++] = 'Q'; break;
case 1585 : szSortie[iSortie++] = 'R'; break;
case 1589 : szSortie[iSortie++] = 'S'; break;
case 1591 : szSortie[iSortie++] = 'T'; break;
case 1584 : szSortie[iSortie++] = 'V'; break;
case 1608 : szSortie[iSortie++] = 'W'; break;
case 1610 : szSortie[iSortie++] = 'Y'; break;
case 1586 : szSortie[iSortie++] = 'Z'; break;
// --- Les caractères non reconnus sont conservés
default : szSortie[iSortie++] = szEntree[iEntree]; break;
}
}
szSortie[iSortie] = 0; // terminateur de la chaîne
}
Le fichier contenant les traductions doit s'appeler "Dictionnaire.txt" (si vous préférez un autre nom, modifiez la fonction Traduire()) et il doit se trouver dans le répertoire courant lors de l'exécution du programme (sinon il y a un message d'erreur). Il doit avoir la structure suivante :
write,kataba
door,el bab
blue,azraq
house,manzil
ball,al kora
chair,korssy
Les mots sont séparés par une virgule et il n'y a pas d'espaces inutiles.
Si un mot à traduire n'existe pas dans le fichier, il y a un message d'erreur.
Si une virgule n'est pas trouvée sur une ligne, il y a un message d'erreur.
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 27 mars 2008 à 23:00
Je n'ai pas d'erreur ici (ni warning) ! elle dit quoi cette erreur ?
Sinon vous pouvez mettre cette ligne en commentaire le temps de tester. Elle concerne juste le formatage du message d'erreur dans le cas où une virgule n'est pas trouvée sur une ligne du fichier dictionnaire.