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 :

Correction de saisie à la volée.


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif Avatar de bobyboby
    Inscrit en
    Septembre 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 108
    Par défaut Correction de saisie à la volée.
    Voila le problème si l'utilisateur entre une mauvaise saisie, j'aimerai corriger le contenu de ma GtkEntry à la volée.

    j'ai une fonction de contrôle qui est appelée via l'evenement "change" donc a chaque nouveau caractère entré.

    exemple 1 qui marche :

    Si il entre un nombre décimal avec une virgule au lieu d'un point elle es automatiquement templacée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    gchar* saisie = (gchar*)gtk_entry_get_text(GTK_ENTRY(entry));
    for(i = 0; saisie[i] != '\0'; i++) 
    { 
     if (saisie[i]== 44)// 44 = code ascii d'une virgule
    		{
    			saisie[i] = 46;//code ascii d'un point
    			gtk_entry_set_text(GTK_ENTRY(entry), saisie);
    		}
    }
    exemple 2 qui marche pas :

    Si il entre un espace et que je n'autorise que des chiffres, j'aimerais effacer le dernier caractère entré.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (saisie[i]== 32)// 32 = code ascii d'un espace
    {
    	saisie[i] = 0;//code ascii du caractère NULL
    	gtk_entry_set_text(GTK_ENTRY(entry), saisie);
    }
    mais ce code provoque une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Pango-CRITICAL **: pango_layout_get_cursor_pos: assertion `index >= 0 && index <= layout->length' failed
    Je pense que c'est parce que le curseur se retrouve après le caractère de fin de chaine non? Comment faire pour supprimer le dernier caractère d'une chaine?
    Quelle autre solution alors? j'ai pensé a sauvegardé a chaque fois la saisie dans une saisie temporaire à restituer en cas d'erreur mais ça ne marche pas non plus


    Merci de votre aide.

  2. #2
    Membre expérimenté

    Inscrit en
    Mai 2005
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 132
    Par défaut
    Salut,

    je l'ai essaye avec le meme resultat. Peut etre il n'est pas possible le changer dans GtkEntry. Le code sivant avec une copie de text marche bien :

    GString *p = g_string_new ( gtk_entry_get_text ( (GtkEntry*)editable ) );

    for(int i = 0; p->str[i] != '\0'; i++)
    {
    if (p->str[i]== 32)
    {
    p->str[i] = 0x0;//code ascii d'un point
    gtk_entry_set_text(GTK_ENTRY(editable), p->str );
    }
    }

    Fredy "KRUGER"

Discussions similaires

  1. [WD-2003] Champ de saisie "à la volée"
    Par CUCARACHA dans le forum Word
    Réponses: 3
    Dernier message: 01/04/2009, 10h06
  2. Saisie d'une date correcte dans un formulaire
    Par breizhgen dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 24/10/2007, 15h31
  3. Remplacer un caractère saisi, a la volée en JS ?
    Par fc_pim dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/09/2007, 09h52
  4. Saisie correcte ?
    Par Premium dans le forum C
    Réponses: 5
    Dernier message: 23/01/2006, 08h09

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