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 :

Questions sur gtk entry


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Par défaut Questions sur gtk entry
    Bonjour à tous,

    J'utilise dans mon programme des GtkEntry, et je cherchais un moyen de contrôler ce que l'utilisateur peut entrer. Je suis tombé sur un code fournit en exemple par la doc :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    #include <ctype.h>
    #include <gtk/gtk.h>
     
    void insert_text_handler (GtkEntry    *entry,
                              const gchar *text,
                              gint         length,
                              gint        *position,
                              gpointer     data)
    {
      GtkEditable *editable = GTK_EDITABLE(entry);
      int i, count=0;
      gchar *result = g_new (gchar, length);
    printf("%d", length);
      for (i=0; i < length; i++) {
        if (!isalpha(text[i]))
          continue;
        result[count++] = islower(text[i]) ? toupper(text[i]) : text[i];
      }
     
      if (count > 0) {
        g_signal_handlers_block_by_func (G_OBJECT (editable),
                                         G_CALLBACK (insert_text_handler),
                                         data);
        gtk_editable_insert_text (editable, result, count, position);
        g_signal_handlers_unblock_by_func (G_OBJECT (editable),
                                           G_CALLBACK (insert_text_handler),
                                           data);
      }
      g_signal_stop_emission_by_name (G_OBJECT (editable), "insert_text");
     
      g_free (result);
    }
     
    int main (int   argc,
              char *argv[])
    {
      GtkWidget *window;
      GtkWidget *entry;
     
      gtk_init (&argc, &argv);
     
      /* create a new window */
      window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
      gtk_window_set_title(GTK_WINDOW (window), "GTK Entry");
      g_signal_connect (G_OBJECT (window), "destroy",
                        G_CALLBACK (gtk_main_quit),
                        NULL);
     
      entry = gtk_entry_new();
      g_signal_connect(G_OBJECT(entry), "insert_text",
    		     G_CALLBACK(insert_text_handler),
    		     NULL);
     
      gtk_container_add(GTK_CONTAINER (window), entry);
      gtk_widget_show(entry);
     
      gtk_widget_show(window);
     
      gtk_main();
      return(0);
    }
    Le problème c'est que je ne comprends pas plusieurs choses.
    Déjà au niveau des paramètres, comment se fait il que length, const gchar text et position contiennent des valeurs :o ? En effet dans la callback on passe seulement le gtk entry, non ?

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Je ne crois pas avoir utilisé un jour ce signal mais je suppose que c'est GTK lui-même qui rempli les variables pour que tu ais les informations nécessaires au différents traitements qu'on peut faire sur une chaîne.
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Par défaut
    Oui, je pense que cela provient du signal insert_text. Malheureusement la doc n'est pas très précise sur ce signal. Si quelqu'un en c'est plus...

    Y a un truc intéressant : http://pygtk.org/pygtk2reference/cla...e--insert-text

    Merci

  4. #4
    Membre Expert
    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
    Par défaut
    Oui tous les arguments d'un signal sont remplis par gtk+ à part l'argument gdata

Discussions similaires

  1. Question sur les "entry"
    Par snoopie69 dans le forum Tkinter
    Réponses: 5
    Dernier message: 06/01/2009, 16h55
  2. Quelques questions sur GTK
    Par PhR dans le forum GTK+
    Réponses: 2
    Dernier message: 16/05/2008, 14h06
  3. focus sur un widget gtk.Entry()
    Par awalter1 dans le forum GTK+ avec Python
    Réponses: 2
    Dernier message: 28/04/2008, 09h21
  4. Question sur le gtk separator
    Par argon dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 14/03/2007, 10h48
  5. Questions sur GTK+
    Par tintin72 dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 07/08/2006, 19h22

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