Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

[C/GTK]Saisir une tabulation dans une zone de saisie de texte


Messages recommandés

Posté(e)

Bonjour,

 

Voilà 2-3 mois que je m'essaie à GTK et c'est assez sympa comme librairie.

Le programme que j'ai fait consiste en du traitement plus ou moins lourd de fichiers texte de formats assez divers et gère l'insertion correcte des données dans une base MySQL.

 

La version actuelle dispose en dur dans son code des séparateurs de champ, séparateur décimal, format de date et heure pour chaque type de fichier.

 

Dans un souci d'amélioration du programme, j'ai commencé à écrire un panneau de configuration dans lequel l'utilisateur pourra saisir/modifier les informations sus-citées en cours de programme.

Les paramètres sont stockés dans une structure déclarée en variable globale suivante

typedef struct{
				 gchar separateur_champ;
				 gchar separateur_decimal;
				 gchar* format_date;
				 gchar* format_heure;
			   } parametre_format_t;

			   extern parametre_format_t parametre_format;

 

et initialisée en variable globale dans main.c avec des valeurs par défaut:

parametre_format_t parametre_format = {'\t','.',"aaaa/mm/dd","hh:mm:ss"};

 

Chaque champ de saisie des paramètres dans le panneau de configuration est un GtkWidget GtkEntry dont le prototype de fonction de récupération du texte saisi est le suivant:

 

const gchar* gtk_entry_get_text(GtkEntry *entry);

 

On récupère donc un pointeur sur un const gchar (= const char*).

gchar *sep_champ = NULL;
gchar *sep_decimal = NULL;
sep_champ = gtk_entry_get_text(pEntry1);
sep_decimal = gtk_entry_get_text(pEntry2);
/* Attribution du premier caractère saisi aux variables gchar de la structure*/
parametre_format.separateur_champ = *sep_champ;
parametre_format.separateur_decimal = *sep_decimal;

 

Tout ça fonctionne correctement (mis à part que le compilo hurle des warning parce que sep_champ et sep_decimal ne sont pas des const gchar*).

Le problème vient quand l'utilisateur a modifié le séparateur de champ par défaut qui est le caractère tabulation ('\t') par un autre caractère puis

quand il lui prend l'envie de remettre le caractère tabulation comme séparateur de champ:

 

Quand celui-ci appuie sur la touche Tabulation lorsque le curseur est dans la zone de saisie idoine, ce dernier (le curseur) passe à la zone de saisie suivante en laissant le premier champ vide .... :-/

 

Si on saisit \t , on obtient comme séparateur de champ \ : normal, on prend le premier caractère du gchar* comme séparateur de champ ....

 

Donc, comment c'est y qu'on peut s'y prendre pour saisir le caractère tabulation dans une zone de saisie de texte (mis à part le copier-coller à partir d'un éditeur de texte)?

Posté(e)

j'ai fait un test sur la chaine saisie, si c'est "tab" alors on met le caractère tabulation. ça fonctionne... mais y'a pas un truc moins bidouille (et qui nécessite que les utilisateurs soient au courant qu'il faille saisir tab pour avoir la tabulation)?

			if (strcmp(sep_champ,"tab") == 0)
		{
			parametre_format.separateur_champ = '\t';
		}
		else
		{
			param_format.separateur_champ = *sep_champ;
		}

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...