IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Probleme de verification de variables


Sujet :

Windows

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 240
    Points : 132
    Points
    132
    Par défaut Probleme de verification de variables
    Bonjour a tous, mon code fait ce que je lui demande mais pas ce que je veux . Je veux qui test le champ et mette un messagebox en fonction du resultat. Mais il met pas toujours la bonne box. Voici mon code :
    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
    case WM_COMMAND:
                switch(LOWORD(wParam))
                {
                    case ID_BOUTON_ENVOYER:
                        int boiteModifie = 0;
                        boiteModifie = SendMessage(htext[1], EM_GETMODIFY, 0, 0);
                        if(boiteModifie)
                        {
                            resultatUtilisateur = SendMessage(htext[1], EM_GETHANDLE, 0, 0);
                            if(resultatUtilisateur == resultatJuste)
                            MessageBox(fenetrePrincipale, "Votre résultat est correct", "Resultat", MB_OK);
                            else
                            MessageBox(fenetrePrincipale, "Votre résultat est incorrect", "Resultat", MB_OK);
                        }
                        else
                        MessageBox(fenetrePrincipale, "Veuillez entrer un résultat", "Resultat", MB_OK);
                        break;
                }
                return 0;
    .
    Merci à tous.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    Euh...
    Peut-on savoir ce que tu cherches à faire avec ton EM_GETHANDLE ?
    Que cherches-tu à comparer à quoi ?

  3. #3
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 240
    Points : 132
    Points
    132
    Par défaut
    Re bonjour a tous,
    pour répondre à ta question, je cherche a verifier avec mon EM_GETHANDLE si l'entre de l'utilisateur est identique à celle un réponse juste généré par le programme, mais j'ai testé et "resultatUtilisateur" vaux à chaque fois 0.
    Merci d'avance pour vos réponses.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    Et qu'est-ce qui t'a fait penser que EM_GETHANDLE pouvait servir à ça ?
    Si tu veux lire le contenu d'une editbox, tu dois utiliser GetWindowText()/GetDlgItemText() ou envoyer un message WM_GETTEXT...

  5. #5
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 240
    Points : 132
    Points
    132
    Par défaut
    Ok merci, mais tu peux m'en dire plus à propos des solution proposé stp et plus precisement à propos de WM_GETTEXT.
    Merci.

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578

  7. #7
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 240
    Points : 132
    Points
    132
    Par défaut
    Merci mais n'y a t-il pas un moyen pour récupérer des nombres stp?

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    Une textbox ne sait pas ce que c'est qu'un "nombre", et un "handle vers sa mémoire" n'est en aucun cas "le nombre qu'elle contient".
    Pour obtenir un nombre, tu dois prendre la chaîne et la convertir en nombre.

    Pour les paresseux, la fonction GetDlgItemInt() fait du même coup la récupération du texte et la conversion.

  9. #9
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 240
    Points : 132
    Points
    132
    Par défaut
    Ok encore merci mais tu pourrais me faire juste un exemple stp ?
    Voici le prototype :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UINT GetDlgItemInt(HWND hDlg,
        int nIDDlgItem,
        BOOL *lpTranslated,
        BOOL bSigned);
    Merci

  10. #10
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 240
    Points : 132
    Points
    132
    Par défaut
    Bon je recupere la valeur et tt, ensuite je les test et il me dis 49 != 49 .
    Je comprend pas tout
    Mon code :
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    #include <windows.h>
    #include <stdio.h>
    #include "constantes.h"
    #include <time.h>
    
    HINSTANCE instance;
    HWND htext[2];
    
    char chiffres[15], resultatTrue[5], resultat[100];
    char resultatUtilisateurChaine[5] = {NULL};
    long chiffre1 = 0, chiffre2 = 0, MAX = 10, MIN = 0, resultatJuste = 0;
    char resultatJusteChaine[5] = {NULL};
    
    
    void chiffresMultiplication(long &chiffre1, long &chiffre2, long &resultatJuste, const long MAX, const long MIN)
    {
        srand(time(NULL));
        chiffre1 = (rand() % (MAX - MIN + 1)) + MIN;
        chiffre2 = (rand() % (MAX - MIN + 1)) + MIN;
        resultatJuste = chiffre1 * chiffre2;
    }
    
    LRESULT CALLBACK procedureFenetrePrincipale(HWND fenetrePrincipale, UINT message, WPARAM wParam, LPARAM lParam)
    {
        static HWND boutons[2] = {NULL};
        HWND hControle;
    
        switch (message)
        {
            case WM_CREATE:
                HWND hGroup=CreateWindow("BUTTON", "Multiplication Trainer", WS_CHILD|WS_VISIBLE|BS_GROUPBOX,
                     10,5,275,105, fenetrePrincipale, NULL, instance, NULL);
                {
                    htext[0]=CreateWindow("EDIT", chiffres, WS_CHILD|WS_VISIBLE|ES_READONLY|ES_RIGHT,
                        100-5,30, 65,18, fenetrePrincipale, (HMENU)ID_DIALOGUE_1, instance, NULL);
    
                    htext[1]=CreateWindow("EDIT", "", WS_CHILD|WS_VISIBLE|ES_NUMBER|ES_LEFT, 165,30,
                        30,18, fenetrePrincipale, (HMENU)ID_DIALOGUE_2, instance, NULL);
    
                    hControle=CreateWindow("BUTTON", "Envoyer", WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,
                        275/2-35,100-25, 100,30, fenetrePrincipale, (HMENU)ID_BOUTON_ENVOYER,
                        instance, NULL);
                }
                return 0;
    
            case WM_COMMAND:
                switch(LOWORD(wParam))
                {
                    case ID_BOUTON_ENVOYER:
                        int boiteModifie = 0;
                        boiteModifie = SendMessage(htext[1], EM_GETMODIFY, 0, 0);
                        if(boiteModifie)
                        {
                            //resultatUtilisateur = SendMessage(htext[1], WM_GETTEXT, 0, 0);
                            GetWindowText(htext[1], resultatUtilisateurChaine, 10);
                            long resultatUtilisateur = (long)resultatUtilisateurChaine;
                            if(resultatUtilisateur == resultatJuste)
                            {
                                sprintf(resultat, "Resultat correct : %s", resultatUtilisateur);
                            }
                            else
                            {
                                sprintf(resultat, "Resultat incorrect : %s != %s", resultatUtilisateur, resultatJusteChaine);
                            }
                            CreateWindow("EDIT", resultat, WS_CHILD|WS_VISIBLE|ES_READONLY|ES_CENTER,
                                15,50, 265,18, fenetrePrincipale, (HMENU)ID_DIALOGUE_1, instance, NULL);
                        }
                        else
                        CreateWindow("EDIT", "Veuillez entrer un résultat", WS_CHILD|WS_VISIBLE|ES_READONLY|ES_CENTER,
                                15,50, 265,18, fenetrePrincipale, (HMENU)ID_DIALOGUE_1, instance, NULL);
                        break;
                }
                return 0;
    
            case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
            default:
                return DefWindowProc(fenetrePrincipale,message,wParam,lParam);
        }
    }
    
    
    int WinMain (HINSTANCE cetteInstance, HINSTANCE precedenteInstance,
                 LPSTR lignesDeCommande, int modeDAffichage)
    {
        HWND fenetrePrincipale;
        MSG message;
        WNDCLASS classeFenetre;
    
        instance = cetteInstance;
    
        chiffresMultiplication(chiffre1, chiffre2, resultatJuste, MAX, MIN);
    
        printf("%ld", resultatJuste);
    
        sprintf(resultatJusteChaine, "%ld", resultatJuste);
    
        sprintf(chiffres, "%ld * %ld =", chiffre1, chiffre2);
    
        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",
            "****",
            WS_SYSMENU | WS_GROUP,
            CW_USEDEFAULT,CW_USEDEFAULT,
            300,150,
            NULL,
            NULL,
            cetteInstance,
            NULL);
    
        if (!fenetrePrincipale)
            return FALSE;
    
        ShowWindow(fenetrePrincipale,modeDAffichage);
        UpdateWindow(fenetrePrincipale);
    
    
        while(GetMessage(&message,NULL,0,0))
        {
            TranslateMessage(&message);
            DispatchMessage(&message);
        }
    
        return message.wParam;
    }

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GetWindowText(htext[1], resultatUtilisateurChaine, 10);
    long resultatUtilisateur = (long)resultatUtilisateurChaine;

  12. #12
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 240
    Points : 132
    Points
    132
    Par défaut
    Mais c'est mon code et il me met quand meme par exemple : 25 != 25 et 7 != 7!!! Je désépére !!!!

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    Oui, c'est ton code. Et quand on te met le nez dessus, tu n'es pas capable de te rendre compte que caster un pointeur sur char en entier n'a jamais convertit la chaîne.
    Utilise strtol(), par exemple...

  14. #14
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 240
    Points : 132
    Points
    132
    Par défaut
    Et nn tout compte fait l'entré utilisateur vaut des nombres extraordinaire comment ce faisse ? Mon code : Plus haut.
    EDIT : J'ai trouvé le problème mais il reste présent le cast pose problème et change la valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GetWindowText(htext[1], resultatUtilisateurChaine, 10);
    resultatUtilisateur = (long)resultatUtilisateurChaine;

  15. #15
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 240
    Points : 132
    Points
    132
    Par défaut
    Bon je repose ma question car je pose que j'ai du mal la formuler.
    Prenons mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    long resultatUtilisateur = 0;
    GetWindowText(htext[1], resultatUtilisateurChaine, 10);
    resultatUtilisateur = (long)resultatUtilisateurChaine;
    Je test "resultatUtilisateurChaine" et il vaut bien le nombre entré par l'utilisateur mais apres le cast je test "resultatUtilisateur" mais il vaut des sommes astronomique (ex: 4214932).
    Je n'y comprend rien c'est peut etre l'adresse de la variable mais je ne voit pas pourquoi?
    Merci d'avance à tous.

  16. #16
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    Hou Hou!
    Chaine!
    Pointeur sur char!
    cast de pointeur != conversion de chaine!
    strtol()!

    Hou Hou?
    Quelqu'un?

  17. #17
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 240
    Points : 132
    Points
    132
    Par défaut
    Un énorme merci, grace à toi mon problème est résolu .
    Grand bravo .

  18. #18
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    Il t'en a fallu du temps pour comprendre (19h21 environ).
    C'est pourtant une des bases du C...

    Il faut savoir "programmer en C" avant d'apprendre à "programmer en C sous Windows"...

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/11/2005, 12h59
  2. petit problem de transfer de variable entre page
    Par Damarus dans le forum Langage
    Réponses: 8
    Dernier message: 11/09/2005, 12h56
  3. Réponses: 3
    Dernier message: 01/09/2005, 11h56
  4. [web] Probleme de passe de variable qd j utilise un module TK
    Par Slippers dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 19/04/2005, 17h48
  5. [VB.NET] Problem de récupération de variable avec une DLL
    Par ludovic85 dans le forum Windows Forms
    Réponses: 11
    Dernier message: 19/01/2005, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo