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

MFC Discussion :

[MFC] Problème d'EditBox


Sujet :

MFC

  1. #41
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Par défaut
    je vois pas ou je copie/colle.

    Sinon laissez tomber, je crois que vous en avez marre !

    Je vais me débrouiller

  2. #42
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Par défaut
    Je re avec une autre solution :

    j'ai fais ca :

    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
     
    void CDlgReglages::OnEnChangeEdit13()
    {
       CString STemp ;
       char CTemp ;
       int j = 0 ;
     
       UpdateData(true) ;
     
       for(int i = 0 ; i !=  Seuil_PenteTQ.GetLength() +1 ; i++)
       {
           CTemp = Seuil_PenteTQ[i] ;
           if((CTemp <= '9' && CTemp >= '0') || CTemp == '.')
           {
               /* il faut copier CTemp dans STemp[j] */
               j++ ;
           }
       }
       Seuil_PenteTQ = STemp ;
       UpdateData(false) ;
    }
    Je pense qu'il y a beaucoup plus simple mais je ne vois pas trop.
    Sinon pour copier CTemp dans STemp[j] j'ai essayer STemp[j] = CTemp, ca marche ds l'autre sens mais pas ds celui la on dirait. J'ai vu aussi qu'il y avait la fonction SetAt mais je ne vois pas la syntaxe à utiliser.

    Merci

  3. #43
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    Citation Envoyé par le-makinero
    Je pense qu'il y a beaucoup plus simple
    oui, tu peux tout simplement attacher une variable de type "double" à ton edit. ça n'empêche pas les saisies erronés, mais ça les détecte lors de la validation (message d'avertissement "Tapez un nombre !").

    ça a l'avantage de n'autoriser la validation que des saisies conformes au type de la variable et de ne nécessiter aucune ligne de code pour traiter l'affaire.

    exemples de saisies conformes d'un double =

    12
    -12.2
    +12E-1
    12.E+023
    12.25e06

    le . est géré, ainsi que les signes et le E. maintenant si tu ne veux pas laisser la possibilité de saisir un nombre négatif, il te suffit de vérifier la validité du double lors de la validation de ta saisie.

  4. #44
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Par défaut
    c'est une bonne idée d'utiliser un Cstring mais j'utilise des Cstring car ces valeurs sont prises dans un fichier texte et doivent etre réécrites

  5. #45
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    ?

    on peut très bien lire/écrire un double

  6. #46
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Par défaut
    je vais essayer alors

  7. #47
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Par défaut
    Ma dernière technique est qd même "plus simple" pour moi car sinon cela m'oblige à revoir tout le traitement que j'ai pu faire auparavant. Pourriez-vous m'aider à l'utiliser corectement ?

  8. #48
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    tu peux aussi convertir des double en CString (et inversement) pour lire/écrire dans les fichiers.
    (voir FAQ)

  9. #49
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       char* stopString;
       strtod(Seuil_PenteTQ.GetBuffer(), &stopString);
       if (stopString != NULL)
          MessageBox("erreur",NULL,MB_OK);
    Je n'ai toujours pas eu de réponse la-dessus !
    A prioris stopString est toujours != NULL. Pourquoi ?
    et pourquoi utiliser Seuil_PenteTQ.GetBuffer() plutôt que Seuil_PenteTQ ?

    Merci !

  10. #50
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    Citation Envoyé par le-makinero
    A prioris stopString est toujours != NULL. Pourquoi ?
    regarde la doc de la fonction ()

    Citation Envoyé par le-makinero
    et pourquoi utiliser Seuil_PenteTQ.GetBuffer() plutôt que Seuil_PenteTQ ?
    moi j'aurais mis Seuil_PenteTQ ou (LPCTSTR)Seuil_PenteTQ

  11. #51
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Par défaut
    stopstring n'est pas le premier caractère non numérique de la chaine ou NULL si toute la chaine a été convertie ?

  12. #52
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    "123456" '1','2','3','4','5','6','\0'

    strtod convertit '1','2','3','4','5','6' en long
    stopString pointe sur '\0' (caractère de fin de chaîne, qui est dans notre cas le caractère suivant le dernier caractère convertit)

    (int)'\0' = NULL

  13. #53
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    je penses qu'il doit contenir le caractère de fin de ligne \n (voir \r\n) ou bien de fin de texte \0 donc NULL

  14. #54
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Par défaut
    j'ai trouvé une solution mais j'ai nouveau probleme maintenant :

    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
     
    void CDlgReglages::OnEnChangeEdit13()
     {
           char *stopstring ;
     
           UpdateData(true) ;
           strtod(Seuil_PenteTQ,&stopstring) ;
           if((stopstring[0] >= 0 && stopstring[0] <= 9) || stopstring[0] == '.')
           {
              TempSeuil_PenteTQ = Seuil_PenteTQ ;
           }
           else
           {
              Seuil_PenteTQ = TempSeuil_PenteTQ ;
              UpdateData(false) ;
           }
       }
    TempSeuil_PenteTQ permet de mémoriser les données qui étaient présentes ds l'Edit Box avant une modification

    mais je valide en cliquant sur OK au meme sur annuler j'ai le message d'erreur suivant :
    Run-Time Check Failure #2 - Stack around the variable 'Dlg' was corrupted
    Pourquoi ?

  15. #55
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    ha, j'ai l'impression que "la vérité est ailleurs".
    En effet, le compilateur te dis qu'il y a un problème pas loin de la variable Dlg, et il n'y a pas de variable Dlg dans le code que tu a posté. L'erreur est donc ailleurs.

  16. #56
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Par défaut
    le probleme étatit que Dlg était le nom donné à la classe de CDlgReglages, je l'ai changé et c'est bon j'ai plus d'erreurs.

  17. #57
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Par défaut
    ca y'est ca approche de la fin !
    Encore un dernier probleme : il faut que je puisse placer le curseur d'edition sur le dernier caractere du CEdit.
    Pour cela, j'ai vu ds la FAQ

    Pour un CEdit simple ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pEdit->PostMessage(WM_KEYDOWN,VK_END,0);pEdit->SetFocus(); // eventuellement
    pEdit est bien un pointeur qui pointe sur le CEdit en question ?Si oui, comment doit on le déclarer ?

  18. #58
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Par défaut
    personne ?

  19. #59
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    tu ajoutes une variable de Controle de type CEdit

    ensuite tu remplaces ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     pEdit->PostMessage(WM_KEYDOWN,VK_END,0);pEdit->SetFocus(); // eventuellement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     cEdit.PostMessage(WM_KEYDOWN,VK_END,0);cEdit.SetFocus(); // eventuellement
    si cette ligne est effectué dans la classe representant la dialog contenant la CEdit

  20. #60
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Par défaut
    Merci ! ca marche nickel maintenant........sauf que quand je tape un point avec Maj + ;/. ensuite je peux rentrer n'importe quel caractère alors que sinon je ne peux saisir que des chiffres ou le point (si je passe par le clavier numérique). Là franchement, ca me dépasse.....

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. [MFC] problème avec les insertions dans CComboBox
    Par Joeleclems dans le forum MFC
    Réponses: 12
    Dernier message: 11/06/2004, 15h31
  2. Réponses: 3
    Dernier message: 05/05/2004, 10h23
  3. [MFC] Problème pointeur sur une classe
    Par mick74 dans le forum MFC
    Réponses: 7
    Dernier message: 14/04/2004, 14h17
  4. [MFC] Problème de pointeur !!
    Par acastor dans le forum MFC
    Réponses: 7
    Dernier message: 19/03/2004, 15h50
  5. [MFC] problème d'éxécution
    Par ben_iap dans le forum MFC
    Réponses: 2
    Dernier message: 15/03/2004, 10h31

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