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 :

variable contrôle EDIT?


Sujet :

Windows

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 24
    Points : 10
    Points
    10
    Par défaut variable contrôle EDIT?
    Salut

    je veut taper des nombres avec virgules
    dans le contrôle edit ;

    quelle variable utiliser , comment faire ?

    Merci

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    En général, on le laisse stocker une chaîne de caractères, que l'on convertit ensuite en nombre à virgule flottante.

    Après, pour le détail, il faudrait savoir quel framework tu utilises, et quel langage.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    je programme avec le language c,
    apret avoire vue le tuto api win de ce site
    j'essais de faire un programme avec api windows, qui fais le calcule
    exemple : addition de deux nombres;
    j'ai deffinit les variables avec float ...
    mais sa ne marche pas

  4. #4
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Comme te l'a dit Mac LAK, tu laisse l'utilisateur taper n'importe quelle chaîne dans ton EDIT, ensuite tu lis cette chaîne (avec GetWindowText par exemple) et la convertis en flottant (avec atof par exemple). Vient ensuite le moment d'améliorer ton programme : empêcher l'utilisateur de taper autre chose que ce qui peut bien être l'expression d'un nombre réel. Pour cela tu dois traiter l'événement EN_UPDATE du contrôle qui est généré chaque fois qu'il doit être mis à jour (chaque fois son texte à été modifié par exemple). A ce moment tu récupères le texte de l'EDIT et testes (avec strtod par exemple) si l'expression est bien valide. Si l'expression n'est pas valide, annule la dernière modification en lui envoyant le message EM_UNDO. Si t'as toujours des problèmes, poste ton code pour qu'on puisse voir ce qui ne va pas.

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    j'utilise GetDlgitemint et SetDlgitemint
    sa ne permet pas d'ecrire du text juste les nombres en décimal

    GetDlgitemText aussi

    je suis débutan en api windows

    merci pour votre aide

  6. #6
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par Melem Voir le message
    Si t'as toujours des problèmes, poste ton code pour qu'on puisse voir ce qui ne va pas.

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    Salut

    merci pour vos Réponses et votre aide.

    le code est simple et permet de faire une addition de deux nombres
    mais ils ne sont pas réel donc c'est pas pratique;
    comment utiliser des nombres avec deux chiffres aprés la virgule?

    fichier recource:

    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
      
    #include <windows.h>
    
    #define IDE_EDIT1 101
    #define IDE_EDIT2 102
    
    DIALOG1 DIALOG
       60, 60, 260, 80
              STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
                                            CAPTION "Dialogue Principale"
    BEGIN
        DEFPUSHBUTTON "Ok", IDOK, 56, 55, 42, 12
        LTEXT "Saisie d'un nombre :", -1, 45, 15, 80, 10
        EDITTEXT IDE_EDIT1, 45, 30, 60, 12, ES_NUMBER | ES_RIGHT
    
        LTEXT "Saisie d'un nombre :", -1, 125, 15, 80, 10
        EDITTEXT IDE_EDIT2, 125, 30, 60, 12, ES_NUMBER | ES_RIGHT
    
    END
    Fichier source:

    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
    #include <windows.h>
    
    #define IDE_EDIT1 101
    #define IDE_EDIT2 102
    
    
    BOOL APIENTRY DlgProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                                                    LPSTR lpCmdLine, int nCmdShow)
    {
           DialogBox(hInstance,"DIALOG1",NULL,(DLGPROC)DlgProc);
           return 0;
    }
    //---------------------------------------------------------------------------
    
    BOOL APIENTRY DlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
    {
        switch (uMsg)
        {
          case WM_INITDIALOG:
    
             return TRUE;
    
          case WM_COMMAND:
             if (LOWORD(wParam) == IDOK)
                  {
                   CHAR st[256];
                   UINT valeur,valeur1,valeur2 ;
                   valeur1 = GetDlgItemInt(hDlg, IDE_EDIT1, NULL, FALSE);
                   valeur2 = GetDlgItemInt(hDlg, IDE_EDIT2, NULL, FALSE);
                   valeur = valeur1+valeur2;
                   wsprintf(st, "La somme est: %d", valeur);
                   MessageBox(hDlg, st, "Résultat", MB_OK);
                  }
             if (LOWORD(wParam) == IDCANCEL)
                    {
                       EndDialog(hDlg,0);
                       return TRUE;
                    }
          default:
             return FALSE;
        }
    }

  8. #8
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Déjà il y a quelques corrections à faire :

    - DlgProc ne doit plus retourner BOOL mais INT_PTR. BOOL, c'était à l'époque de la préhistoire. Si ton compilateur ne connaît pas le type INT_PTR, c'est qu'il est trop ancien et que tu devrais mettre à jour tes outils.

    - Le code de formattage pour afficher un UINT est %u et non %d (INT).

    - Si LOWORD(wParam) == IDOK, il n'y a ni un break pour quitter le bloc switch après le traitement ni un return pour terminer la fonction. Le traitement va alors se poursuivre avec le cas "case default:".

    - Mettre un else entre les deux if. Pourquoi tester une deuxième fois une variable si on connaît déjà sa valeur ?

    Après correction on obtient :
    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
    INT_PTR APIENTRY DlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
    {
        switch (uMsg)
        {
          case WM_INITDIALOG:
             return TRUE;
    
          case WM_COMMAND:
             if (LOWORD(wParam) == IDOK)
                  {
                   CHAR st[256];
                   UINT valeur,valeur1,valeur2 ;
                   valeur1 = GetDlgItemInt(hDlg, IDE_EDIT1, NULL, FALSE);
                   valeur2 = GetDlgItemInt(hDlg, IDE_EDIT2, NULL, FALSE);
                   valeur = valeur1+valeur2;
                   wsprintf(st, "La somme est: %u", valeur);
                   MessageBox(hDlg, st, "Résultat", MB_OK);
                  }
             else if (LOWORD(wParam) == IDCANCEL)
                    {
                       EndDialog(hDlg,0);
                    }
             return TRUE;
          default:
             return FALSE;
        }
    }
    Quoiqu'on peut encore faire mieux ...

    Si tu veux pouvoir utiliser les nombres décimaux, enlève le style ES_NUMBER dans chacun de tes EDIT. Ce style impose au contrôle de n'accepter que des chiffres (c'est-à-dire les caractères de 0 à 9), avec quelques subtilités supplémentaires et que je n'ai pas envie de détailler et que tu peux d'ailleurs parfaitement ignorer. Va plutôt sur MSDN si tu veux plus d'infos. Tu peux utiliser Get(/Set)WindowText ou Get(/Set)DlgItemText pour lire/modifier le texte d'un EDIT.

  9. #9
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    Le probléme est résolue

    par les étapes suivantes:

    1: atof
    2: l'addition
    3: et gcvt qui permet de convertire la variable on text

    merci beaucoup et à la prochaine


  10. #10
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    gcvt est une fonction non standard et très obsolète. Utilise plutôt sprintf.

  11. #11
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    Salut

    strdot na pas fonctionner avec ce programe, j'ais beaucoup essayer mais..
    par contre gcvf permet de faire l'addition mais elle reconnait selement le pavé numerique c'est mieux que rien.
    et bien sur l'utilisateur peut écrire tous ce qu'il veut ( Lettres et nombres )

    j'ais pas bien compri EN_UPDATE et EM_UNDO ?

    Merci encore

  12. #12
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    C'est strtod ("string to double") et non strdot. L'utilisation de cette fonction, entre autres, est expliquée ici. Et je n'ai pas bien compris ton problème avec gcvt mais d'ailleurs je t'ai déjà dit de ne pas utiliser cette fonction.

    EN_UPDATE est une notification envoyée par un contrôle EDIT à la fenêtre à laquelle il appartient chaque fois qu'il doit se mettre à jour, comme je te l'ai déjà expliqué. Si tu ne sais toujours pas de quoi je parle, tout est expliqué dans ce tutoriel.

    EM_UNDO est un message que tu envoies à un contrôle EDIT (envoyer un message peut se faire avec la fonction SendMessage) pour annuler la dernière modification de son contenu.

  13. #13
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    Salut

    où peut-on mettre EN_UPDATE ?

    j'ai fait if pour tester la valeur entrée.
    j'ai écrie la ligne suivante :

    SendDlgItemMessage(hwnd,ID_EDIT1,EM_UNDO,0,0);

    sa na pas marcher je cherche encore

    je cherche des exemples de codes qui pourront m'aider ?


  14. #14
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    case WM_COMMAND:
        switch(LOWORD(wParam))
        {
        case LE_CONTROLE_EDIT:
            switch(HIWORD(wParam))
            {
            case EN_UPDATE:
                /* Faire ce que t'as à faire. */
                break;
            }
            break;
        }
        break;
    Il y a des tutoriels que tu peux lire pour apprendre la programmation Windows. Le forum c'est plus pour des questions un peu particulières .

Discussions similaires

  1. Touche return sur contrôle EDIT
    Par Athur dans le forum Windows
    Réponses: 2
    Dernier message: 09/05/2011, 08h08
  2. GUI-Win32 Historique d'un contrôle EDIT
    Par user25 dans le forum C++
    Réponses: 1
    Dernier message: 18/10/2010, 16h34
  3. Réponses: 5
    Dernier message: 29/06/2009, 16h11
  4. Contrôle EDIT en mode remplacement
    Par CAMIC dans le forum Windows
    Réponses: 1
    Dernier message: 23/05/2007, 21h58
  5. Réponses: 9
    Dernier message: 13/03/2007, 11h58

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