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

GTK+ avec C & C++ Discussion :

Chiffres dans un GtkEntry


Sujet :

GTK+ avec C & C++

  1. #1
    Membre régulier Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Points : 101
    Points
    101
    Par défaut Chiffres dans un GtkEntry
    Bonjour,
    voilà ma question est simple, y a t-il une façon directe de ne permettre que les chiffres dans un GtkEntry ?


    S'il n'y a pas de méthode simple, j'imaginait :
    - connecter un signal pour tester les entrées dans le GtkEntry
    - si le dernier terme de la chaîne de caractère n'est pas un chiffre
    *** supprimer ce dernier terme et envoyer un bip
    *** supprimer la chaîne dans le GtkEntry
    *** entrer la nouvelle chaine raccourcie dans le GtkEntry

    Je ne sais pas quelle signal connecter,"activate" ne fonctionne pas.

    Merci pour vos conseils

    Edité : avec le signal "key-press-event" j'arrive à passer dans mon CallBack, mais le problème n'est pas encore résolu.

  2. #2
    Membre régulier Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Points : 101
    Points
    101
    Par défaut
    Rhaaa lala, je cherche pendant des heures et il suffit que je pose la question pour que je trouve la réponse... bon voilà ma solution, mais ça peut sans doute être amélioré.

    Donc dans une fonction j'ai créé un GtkEntry.
    Dans ma fonction je connecte le signal "key-press-event" ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void fonction ();
    {
        GtkWidget * entree;
        GdkEventKey *event;
    [...]
      //Créer le GtkEntry
       entree=gtk_entry_new();    
    [...]
      //Connecter le signal    "key-press-event"
     g_signal_connect(G_OBJECT(entree), "key-press-event", G_CALLBACK(chiffre_entree),NULL);
    }
    Et voici le callback chiffre_entree
    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
     
    void chiffre_entree(GtkEntry *entree, GdkEventKey *p_event,gpointer data)
    {
    const char *buffer;
       //prendre le texte qui est dans le GtkEntry
        buffer =  gtk_entry_get_text(entree);
       // voir si le membre *string de GdkEventKey  n'est pas une lettre
        if  (p_event->string[0]<58)
        {
           //si non on ajoute l'entrée au texte du GtkEntry
            strcat(buffer,p_event->string);
            gtk_entry_set_text(entree,buffer);
        }
        else
        {
           //si oui on emet un bip
            printf ("%c",7);
        }
     
    }
    Problèmes, est ce que j'ai éliminé des touches nécessaires en écrivant if (p_event->string[0]<58) ? Est ce que je ne fais pas de bêtises avec mon buffer ??

  3. #3
    Membre régulier Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Points : 101
    Points
    101
    Par défaut
    Une question : depuis le mois de janvier j'ai posté 8 messages, et 3MP (pas pour de l'aide) un seul message a eu une réponse... au 9ème message ou prochain MP je deviens parano !

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    La réponse que tu t'es faite est pas mal du tout, c'est pour ça que j'ai pas répondu Enfin en repassant dessus, le strcat me fait tiquer... Surtout sur une chaîne qui est const char *
    Par contre, ce que tu dois pouvoir tenter de faire, c'est de ne rien faire (ou presque). Je m'explique
    Si tu regardes la doc du signal "key-press-event", le callback peut renvoyer une valeur booléenne. Si cette valeur est TRUE, l'émission du signal s'arrêtera là, ie les autres callbacks attachés à cet évènement ne seront pas exécutés. Si cette valeur est FALSE, l'évènement continue à se propager. Donc peut être qu'en renvoyant TRUE/FALSE en fonction de si t'as trouvé un chiffre ou non, tu peux empêcher/autoriser ta GtkEntry de traiter la pression sur la touche. Je te garantis pas que ça marche, mais ça vaut le coup de tester.

  5. #5
    Membre régulier Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Points : 101
    Points
    101
    Par défaut
    Merci pour la réponse
    Je fais quoi pour le strcat ?

    Je vais essayer ta méthode du "rien faire" merci. Mais si après l'appel du callback je n'utilise pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            gtk_entry_set_text(entree,buffer);
    alors rien ne s'affiche dans le GtkEntry.... je ne vois pas trop comment je pourrais faire.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Même si tu renvoies FALSE rien ne s'affiche ?

  7. #7
    Membre régulier Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Points : 101
    Points
    101
    Par défaut
    Non mais bon avec l'autre méthode ça marche alors je cherche pas trop j'avoue

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA-PP]fonction qui écrit un chiffre dans une cellule excel
    Par alpking dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 26/04/2006, 19h34
  2. verifier si il y a 2 chiffre dans ma chaine
    Par dam-s dans le forum Langage
    Réponses: 4
    Dernier message: 09/03/2006, 08h02
  3. empéché la saisie de chiffre dans dbedit
    Par sabrina22 dans le forum Bases de données
    Réponses: 3
    Dernier message: 08/03/2006, 22h10
  4. Affichage des chiffres dans une phrases arabe
    Par omda dans le forum Oracle
    Réponses: 4
    Dernier message: 30/09/2005, 13h36
  5. Test si il y a des chiffres dans un champs
    Par deaqu1 dans le forum Access
    Réponses: 4
    Dernier message: 14/06/2005, 21h36

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