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:
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:
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:
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.