begin process at 2012 05 30 10:19:37
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

GUI

 > 

transcodage arabe anglais


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

transcodage arabe anglais

vendredi 21 mars 2008 à 16:07:54 | transcodage arabe anglais

elmarokinho

bonjour,
je suis en DUT 2e année ... je dois réaliser un projet pr la mi-mars  ;
cry:
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 whistle

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 !!!!

voila ou j'en suis :

#include <windows.h>
#include <stdio.h>

#define ID_B_TRADUIRE 0
#define ID_B_QUITTER 1
#define ID_B_TEST 2
#define ID_ANGAR  3
#define ID_ARANG  4

HINSTANCE instance;

LRESULT CALLBACK procedureFenetrePrincipale(HWND, UINT, WPARAM, LPARAM);

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


    classeFenetre.style = 0;
    classeFenetre.lpfnWndProc = procedureFenetrePrincipale;
    classeFenetre.cbClsExtra = 0;
    classeFenetre.cbWndExtra = 0;
    classeFenetre.hInstance = NULL;
    classeFenetre.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    classeFenetre.hCursor = LoadCursor(NULL, IDC_ARROW);
    classeFenetre.hbrBackground = (HBRUSH)(1 + COLOR_BTNFACE);
    classeFenetre.lpszMenuName =  NULL;
    classeFenetre.lpszClassName = "classeF";

    // On prévoit quand même le cas où ça échoue
    if(!RegisterClass(&classeFenetre)) return FALSE;

    fenetrePrincipale = CreateWindow("classeF", "Transcodage arabe anglais", WS_OVERLAPPEDWINDOW,
                                   CW_USEDEFAULT, CW_USEDEFAULT, 400, 300,
                                                   NULL, NULL, cetteInstance, NULL);
    if (!fenetrePrincipale) return FALSE;

    ShowWindow(fenetrePrincipale, modeDAffichage);
    UpdateWindow(fenetrePrincipale);


    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

//variables globales
HINSTANCE cetteInstance;
HWND hEdit[1]; //handle des deux contrôles d'édition

//Afficher un contrôle d'édition d'une ligne
HWND afficheEditUneLigne (HWND fenetrePrincipale)
{
HWND hEdit=CreateWindow(
                        "EDIT",
                        "Modifiez le texte SVP",
                         WS_VISIBLE|WS_CHILD|WS_BORDER|ES_CENTER ,
                        30, 80, 383, 30,fenetrePrincipale,NULL,instance,NULL);

return hEdit;
}
//Traitement des messages
void msgCtl(HWND fenetrePrincipale,UINT msg, WPARAM wParam, LPARAM lParam)
{
UINT motBas =  LOWORD(wParam);
HWND hCtl= (HWND) lParam;
int nombreLignes=0;
char lignes[70]={0},nLignes[5]={0};


}
//Traitement des notifications
void NotificationControle(HWND fenetrePrincipale,UINT msg, WPARAM wParam, LPARAM lParam)
{
UINT motHaut= HIWORD(wParam);
HWND hCtl= (HWND) lParam;

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;
}
}

LRESULT CALLBACK  Procedure (HWND fenetrePrincipale, UINT msg, WPARAM wParam, LPARAM lParam)
{


        switch (msg)

    {
        //afficher les contrôles d'édition à la réception du message WM_CREATE
        case WM_CREATE:
               hEdit[0]=afficheEditUneLigne (fenetrePrincipale);

        default:
            return DefWindowProc(fenetrePrincipale, msg, wParam, lParam);
        }
}
LRESULT CALLBACK procedureFenetrePrincipale(HWND fenetrePrincipale, UINT msg, WPARAM wParam, LPARAM lParam)
{
    static HWND boutons[5] = {NULL};

    switch (msg)
    {
        case WM_CREATE:
                boutons[0] = CreateWindow("BUTTON", "Traduire", WS_CHILD | WS_VISIBLE,
        5, 145, 383, 30, fenetrePrincipale, (HMENU)ID_B_TRADUIRE, instance, NULL);
                boutons[1] = CreateWindow("BUTTON", "Quitter", WS_CHILD | WS_VISIBLE,
        5, 185, 383, 30, fenetrePrincipale, (HMENU)ID_B_QUITTER, instance, NULL);

                HWND hGroup = CreateWindow("BUTTON","*** Votre Choix : ***",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,
        10,5,383,60,fenetrePrincipale,NULL,instance,NULL);
    {
        HWND hControle;
                hControle = CreateWindow("BUTTON","anglais/arabe",WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,
        20,25,120,30,fenetrePrincipale,(HMENU)ID_ANGAR,instance,NULL);
                hControle = CreateWindow("BUTTON","arabe/anglais",WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,
        260,25,120,30,fenetrePrincipale,(HMENU)ID_ARANG,instance,NULL);
                 return 0;
    }
        case WM_COMMAND:
            switch(LOWORD(wParam))
            {
                case ID_B_TRADUIRE:
                    MessageBox(fenetrePrincipale, "Il n'y a rien à traduire", "Bonjour.", MB_ICONINFORMATION);
                    break;

                case ID_B_QUITTER:
                    SendMessage(fenetrePrincipale, WM_DESTROY, 0, 0);
                    break;

                case ID_B_TEST:
                    SendMessage(fenetrePrincipale, WM_DESTROY, 0, 0);
                    break;
            }
            return 0;

        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;

        default:
            return DefWindowProc(fenetrePrincipale, msg, wParam, lParam);
    }
}



merci de votre aide
vendredi 21 mars 2008 à 18:46:53 | Re : transcodage arabe anglais

jfrancois

Bonjour,

Après suppression de choses inutiles, voici un petit réaménagement qui fonctionne (sous Visual C++ 6.0) :

#include <stdio.h>
#include <windows.h>

#define ID_ANGAR      1000
#define ID_ARANG      1001
#define ID_TEXTE      1002
#define ID_B_EFFACER  1003
#define ID_B_TRADUIRE 1004


// --- Variables globales
HINSTANCE instanceGlobale = NULL;
int       sensTraduction  = 1; // 1=ANGAR 2=ARANG

#define   LONGUEUR_MAXI_TEXT  100
char      Text[LONGUEUR_MAXI_TEXT];


// --- Prototypes des fonctions locales
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int);
LRESULT CALLBACK procedureFenetrePrincipale(HWND,UINT,WPARAM,LPARAM);
void TraduireANGAR(void);
void TraduireARANG(void);

 

 

// ===================
// Fonction principale
// ===================

int WINAPI WinMain
(
    HINSTANCE cetteInstance
   ,HINSTANCE precedenteInstance
   ,LPSTR     lignesDeCommande
   ,int       modeDAffichage
)
{
   HWND     fenetrePrincipale;
   WNDCLASS classeFenetre;
   MSG      msg;

  
   // --- Mémo de l'instance globale
   instanceGlobale = cetteInstance;

  
   // --- Enregistrer la classe de la fenêtre principale
   classeFenetre.style         = 0;
   classeFenetre.lpfnWndProc   = procedureFenetrePrincipale;
   classeFenetre.cbClsExtra    = 0;
   classeFenetre.cbWndExtra    = 0;
   classeFenetre.hInstance     = instanceGlobale;
   classeFenetre.hIcon         = LoadIcon(NULL,IDI_APPLICATION);
   classeFenetre.hCursor       = LoadCursor(NULL,IDC_ARROW);
   classeFenetre.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
   classeFenetre.lpszMenuName  = NULL;
   classeFenetre.lpszClassName = "classeF";
   if (! RegisterClass(&classeFenetre)) return 0;


   // --- Créer la fenêtre principale
   fenetrePrincipale = CreateWindow
   (
       "classeF"
      ,"Traduction Arabe/Anglais"
      ,WS_OVERLAPPEDWINDOW
      ,CW_USEDEFAULT,CW_USEDEFAULT // x,y
      ,400,220                     // largeur,hauteur
      ,(HWND)NULL
      ,(HMENU)NULL
      ,instanceGlobale
      ,(LPVOID)NULL
   );
   if (fenetrePrincipale == NULL) return 0;
   ShowWindow(fenetrePrincipale,modeDAffichage);
   UpdateWindow(fenetrePrincipale);


   // --- Traiter les messages de la fenêtre
   while (GetMessage(&msg,NULL,0,0))
   {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
   }
   return msg.wParam;
}

 

 

// =============================================
// Traiter les messages de la fenêtre principale
// =============================================

LRESULT CALLBACK procedureFenetrePrincipale
(
    HWND   fenetrePrincipale
   ,UINT   msg
   ,WPARAM wParam
   ,LPARAM lParam
)
{
   static HWND boutonANGAR    = NULL;
   static HWND boutonARANG    = NULL;
   static HWND zoneTexte      = NULL;
   static HWND boutonEffacer  = NULL;
   static HWND boutonTraduire = NULL;
   static HWND boutonQuitter  = NULL;

   switch (msg)
   {
      // --- Creation de la fenêtre principale
      case WM_CREATE:
      {
         // --- GROUPBOX autour de la sélection du sens de traduction
         CreateWindow
         (
             "BUTTON"
            ,"Sens de la traduction"
            ,WS_CHILD | WS_VISIBLE | BS_GROUPBOX
            ,10,10  // x,y
            ,375,50 // largeur,hauteur
            ,fenetrePrincipale
            ,NULL
            ,instanceGlobale
            ,NULL
         );

         // --- Radiobouton de sélection du sens de traduction
         boutonANGAR = CreateWindow
         (
             "BUTTON"
            ,"Anglais vers Arabe"
            ,WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON
            ,20,25  // x,y
            ,140,30 // largeur,hauteur
            ,fenetrePrincipale
            ,(HMENU)ID_ANGAR
            ,instanceGlobale
            ,NULL
         );
         boutonARANG = CreateWindow
         (
             "BUTTON"
            ,"Arabe vers Anglais"
            ,WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON
            ,230,25 // x,y
            ,140,30 // largeur,hauteur
            ,fenetrePrincipale
            ,(HMENU)ID_ARANG
            ,instanceGlobale
            ,NULL
         );
         CheckRadioButton(fenetrePrincipale,ID_ANGAR,ID_ARANG
                         ,sensTraduction == 1 ? ID_ANGAR : ID_ARANG);

         // --- Zone de texte
         zoneTexte = CreateWindow
         (
             "EDIT"
            ,"Modifiez le texte SVP"
            ,WS_VISIBLE | WS_CHILD | WS_BORDER | ES_AUTOHSCROLL | ES_CENTER
            ,10,70  // x,y
            ,335,30 // largeur,hauteur
            ,fenetrePrincipale
            ,(HMENU)ID_TEXTE
            ,instanceGlobale
            ,NULL
         );
         SendMessage(GetDlgItem(fenetrePrincipale,ID_TEXTE),EM_LIMITTEXT
                    ,(WPARAM)LONGUEUR_MAXI_TEXT,(LPARAM)0);

         // --- Bouton pour effacer
         boutonEffacer = CreateWindow
         (
             "BUTTON"
            ,"C"
            ,WS_CHILD | WS_VISIBLE
            ,355,70 // x,y
            ,30,30  // largeur,hauteur
            ,fenetrePrincipale
            ,(HMENU)ID_B_EFFACER
            ,instanceGlobale
            ,NULL
         );

         // --- Bouton pour traduire
         boutonTraduire = CreateWindow
         (
             "BUTTON"
            ,"Traduire"
            ,WS_CHILD | WS_VISIBLE
            ,10,110 // x,y
            ,375,30 // largeur,hauteur
            ,fenetrePrincipale
            ,(HMENU)ID_B_TRADUIRE
            ,instanceGlobale
            ,NULL
         );

         // --- Bouton pour quitter
         boutonQuitter = CreateWindow
         (
             "BUTTON"
            ,"Quitter"
            ,WS_CHILD | WS_VISIBLE
            ,10,150 // x,y
            ,375,30 // largeur,hauteur
            ,fenetrePrincipale
            ,(HMENU)IDCANCEL
            ,instanceGlobale
            ,NULL
         );
      }
      return 0;


      // --- Traitement d'une commande
      case WM_COMMAND:
      switch(LOWORD(wParam))
      {
         // --- Radiobouton Anglais vers Arabe
         case ID_ANGAR :
         sensTraduction = 1;
         break;

        
         // --- Radiobouton Arabe vers Anglais
         case ID_ARANG :
         sensTraduction = 2;
         break;

        
         // --- Saisie dans la zone
         case ID_TEXTE :
         {
            // --- Valider/invalider les boutons d'effacement et de traduction
            // --- en fonction de l'existance d'un texte à traduire
            GetDlgItemText(fenetrePrincipale,ID_TEXTE,Text,LONGUEUR_MAXI_TEXT);
            BOOL b = (BOOL)(Text[0] != 0);
            EnableWindow(GetDlgItem(fenetrePrincipale,ID_B_EFFACER) ,b);
            EnableWindow(GetDlgItem(fenetrePrincipale,ID_B_TRADUIRE),b);
         }
         break;

        
         // --- Bouton pour effacer
         case ID_B_EFFACER :
         SetDlgItemText(fenetrePrincipale,ID_TEXTE,"");
         SetFocus(GetDlgItem(fenetrePrincipale,ID_TEXTE));
         break;

        
         // --- Bouton pour traduire
         case ID_B_TRADUIRE :
         {
            GetDlgItemText(fenetrePrincipale,ID_TEXTE,Text,LONGUEUR_MAXI_TEXT);
            if (sensTraduction == 1)
               TraduireANGAR();
            else
               TraduireARANG();
            SetDlgItemText(fenetrePrincipale,ID_TEXTE,Text);
         }
         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;
   }

  
   // --- Traitement par défaut
   return DefWindowProc(fenetrePrincipale,msg,wParam,lParam);
}

 

 

// ====================================
// Traduction de l'anglais vers l'arabe
// ====================================

void TraduireANGAR(void)
{
   strcpy(Text,"Résultat de l'anglais vers l'arabe");
}

 

 

// ====================================
// Traduction de l'arabe vers l'anglais
// ====================================

void TraduireARANG(void)
{
   strcpy(Text,"Résultat de l'arabe vers l'anglais");
}

Jean-François

lundi 24 mars 2008 à 15:27:04 | Re : transcodage arabe anglais

elmarokinho

merci beaucoup ...
maintenant que j'ai le fond il me reste a travailler la forme ;-) !

comment fais t on pour :
afficher l'écriture arabe?
ecrire de droite a gauche?

merci de votra aide
lundi 24 mars 2008 à 16:13:13 | Re : transcodage arabe anglais

jfrancois

Ca je n'ai jamais utilisé ! je sais qu'il existe un style étendu pour ça (WS_EX_RTLREADING en utilisant un CreateWindowEx() à la place d'un CreateWindow()) mais d'après la doc il faut que le système soit paramétrer sur une langue utilisant ce sens d'écriture donc c'est tout ou rien !

Il va falloir inverser les caractères avant visu !

Jean-François

lundi 24 mars 2008 à 16:18:26 | Re : transcodage arabe anglais

elmarokinho

ok donc si j'utilse ce style ( mon xp accepte la langue arabe) , le script affichera bien les caracteres arabes au lieu des petits carré?
lundi 24 mars 2008 à 16:31:36 | Re : transcodage arabe anglais

jfrancois

Je ne sais pas du tout si c'est suffisant ! Essayez avec ça au niveau de la création de la zone de texte :

         // --- Zone de texte
         zoneTexte = CreateWindowEx
         (
             WS_EX_RTLREADING
            ,
"EDIT"
            ,"Modifiez le texte SVP"
            ,WS_VISIBLE | WS_CHILD | WS_BORDER | ES_AUTOHSCROLL | ES_CENTER
            ,10,70  // x,y
            ,335,30 // largeur,hauteur
            ,fenetrePrincipale
            ,(HMENU)ID_TEXTE
            ,instanceGlobale
            ,NULL
         );


Jean-François

lundi 24 mars 2008 à 16:42:50 | Re : transcodage arabe anglais

elmarokinho

merci beaucoup pour tout le mal que vous vous donnez mais lorsque je modifie la source, et que j'execute il n'y a aucune difference avec le précedenet. comment puis-je intégrer une police arabe?

et également, pourquoi ai-je une fenetre Dos qui s'ouvre en arriere plan lorsque j'execute le programme?
lundi 24 mars 2008 à 17:14:42 | Re : transcodage arabe anglais

jfrancois

Pour la cohabitation entre 2 langues aussi différentes, il faudrait avoir l'aide de quelqu'un qui a déjà réaliser un tel programme !

En ce qui concerne la fenêtre DOS, je n'ai pas ça ici (compilation avec Visual C++ 6.0) !

Jean-François

mardi 25 mars 2008 à 16:35:47 | Re : transcodage arabe anglais

elmarokinho

Réponse acceptée !

bonjour,
outre le probleme de l'affichage de caractere. il me reste plus beaucoup de temps pour mettre sur pied un programme fonctionnel quitte a ce que se soit de français a français, uniquement pour afficher la démarche.

voila j'ai écri un programe servan a une étape du projet qui écri dans un fichier le caractere corespondan au code ascii ( exemple si jentre 6 la lettre sera affichée dans le fichier txt).
Donc je ne parviens pas a intégrer le contenu de ce fichier dans ma fenetre, a la place du "résultat...".
Comment faire svp?
voila le code du programme ...
est-ce que je doit executer directement le prog en ariere plan, ou je doit l'executer indépendemment du premier. L'ideal serait d'avoir a la fin un seul .exe

code :
#include <stdlib.h>
#include <stdio.h>

int main(void)
{
    int ascii_code;
    FILE *fp;
    printf("vueillez saisir le code ascii d'un mot ou lettre arabe: ");
    scanf("%d",&ascii_code);

    fp = fopen("C:\\proj\\a.txt","w");
    if(fp != NULL)
    {
          fprintf(fp,"%s",&ascii_code);
          fclose(fp);
    }
    return 0;
}

merci de votre aide !

mardi 25 mars 2008 à 17:09:52 | Re : transcodage arabe anglais

elmarokinho

j'ai essayé de moficier cette partie du code de l'interface

// ====================================
// Traduction de l'anglais vers l'arabe
// ====================================

void TraduireANGAR(void)
{
   sprintf(Text,"%c",fopen("C:\\proj\\a.txt","r"));
}


mais lorsque j'execute cela me donne des caracteres au hasard ( €, à @, $ ...)
pourquoi?
aidez moi svp?


1 2 3 4 5 6 7

Cette discussion est classée dans : hwnd, msg, wparam, lparam, fenetreprincipale


Répondre à ce message

Sujets en rapport avec ce message

Comment sortir d'une boucle avec clic sur un bouton Cancel? [ par rolanddegilead1 ] Bonjour,je suis debutant et je m'arrache les cheveux depuis presque une semaine a cause d'un truc tout bete: en gros je cree une fenetre avec 2 bouton c++ API Windows : sous classement de fenetre dans une classe [ par _Jonathan ] Bonjour, je cherche à créer un controle de type Edit en utilisant une classe. Le probleme, c'est que je souhaite redéfinir la procedure callback du co Hook dans Dll [ par larion ] Bonjour,Mon problème est pourtant simple, mais impossible de m'en sortir sans votre aide.J'ai ajouté des éléments dans les menus système de cette mani Mélange entre C++ et Win32 [ par vecchio56 ] J'ai décidé d'encapsuler mes fenêtres dans des classes, mais je me trouve confronté à un problème: en gros je n'arrive pas à changer de WndProc en uti erreur LNK2001 [ par biscot19 ] j'ai une erreur de LNK 2001 sur la fonction suivanteSNMPAPI_STATUS CALLBACK cbFunc (HSNMP_SESSION hSession, HWND hWnd, UINT wMsg, WPARAM wParam, DialoBox [ par noel70 ] Voici ce que j'ai fait, mais le souci, c'est que je n'ai aucune fenetre qui s'affiche,Lors de la compilation, aucune erreur, je ne sais pas d'ou sa vi Dll Visual Aide [ par TheMaster ] Salut!j'ai un probleme, j'ai créer un logiciel permettant de visualiser des images.Les images sont stocke en ressource dans un dll.Mais je n'arrive pa crer "dialog non modal" [ par comfm ] BonjourJe n'arrive pas à créer une boite de dialogue non modal, c'est à dire celle qui permet d'être tjs affichée et on peut cliquer derriere sans pro problème CreateDialog et afficher icone [ par Suisse00 ] J'ai un petit problème avec CreateDialog, il y a aucun fenêtre qui s'ouvre (VC++ 6)#include #include "resource.h"HWND hDlg;LRESULT Gestion des evenements Win32 [ par zibo3 ] J'aimerai créer un événement appuyer sur une touche de type F3 mais cet événement doit se réaliser à chaque fois que j'appuie sur cette touche quelque


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,326 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales