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 :

Label, cacher lettres


Sujet :

GTK+ avec C & C++

  1. #1
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Par défaut Label, cacher lettres
    Bonjour à tous,

    Je voudrais savoir si il est possible en GTK+ de cacher certaines lettres d'un label par un caractère comme "*".


    Merci

  2. #2
    Membre confirmé Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Par défaut
    Bah dans un label, il suffit d'utiliser gtk_set_label()
    Tu gardes le mot de passe réel en mémoire, mais tu affiches que des *

  3. #3
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Par défaut
    Merci de ta réponse, mais comment savoir le bon nombre de "*" à afficher, c'est à dire le nombre de lettres que contient le mot que je veux cacher ?

  4. #4
    Membre confirmé Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Par défaut
    Tu récupères le contenu du label dans un string, et tu utilises strlen

    =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int length, i;
    char* text;
     
    text = gtk_label_get_text(label);
    length= strlen(text);
     
    for(i=0 ; i<length; i++)text[i]='*';
     
    gtk_label_set_text(label, text);

  5. #5
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Par défaut
    Merci bien, je ne connaissais pas la fonction pour récupérer le texte du label. Peux tu me dire où tu l'as trouvé, sur la doc (pas trouvé) ou ailleurs ?

    Serais tu aussi par hazard, comment faire apparaitre une boite de dialogue durant quelques secondes, puis la fermer automatiquement ?

  6. #6
    Membre confirmé Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Par défaut
    Pas dans la doc ?
    Tu rigoles ? ^^

    http://man.chinaunix.net/develop/GTK.../GtkLabel.html

    Et puis de toute facon le gros avantage de GTK, à mon gout, c'est que les fonctions sont tout de même super intuitive.

    Tu veux récupérer du texte dans un label, bah tu fait gtk_label pour acceder aux fonctions du label, puis get_text pour le prendre, et set_text pour le changer.

    Pas bien compliqué tout de même

    Pour la pop up, je te conseille de passer par les tutos GTK disponibles ici même, qui sont trés largement suffisant pour maitriser les bases.

    Afficher une pop up ne devrait pas te poser trop de probleme, aprés pour la fermer aprés un certain temps, bah tu utilises un sleep, ca se trouve également super facilement sur la toile !

    Essayes de trouver tout de même avant de demander, y'a quand même vachement de solutions proposées sur le net

    Enfin, si tu es vraiment en galère, je me ferais un plaisir de t'aider

    Ciao !

  7. #7
    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
    Non, strlen ne marchera pas si ton label contient des lettres accentuées (entre autres). Utilise g_utf8_strlen qui te renverra le nombre de caractères dans ta chaîne de caractères. Si tu manipules un GtkEntry, il y a une fonction gtk_entry_set_visibility qui te permet d'avoir un mode "saisie de mot de passe". Enfin, pour faire disparaître ta fenêtre au bout de qques secondes, utilise g_timeout_add et appelle gtk_widget_destroy dans le callback qui est appelé lors le timeout s'est écoulé.

  8. #8
    Membre confirmé Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Par défaut
    Citation Envoyé par teuf13 Voir le message
    Utilise g_utf8_strlen
    Ah yep, j'oubliais le utf8, effectivement
    A ne pas négliger pourtant !

  9. #9
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Par défaut
    Merci à vous deux.

    Je comprend pas trop ce que tu entends skip78 par "pop up" (pop en GTK+, on est d'accord ?), excuse moi si je t'agace, mais tu es sûr qu'il y'a un tuto là-dessus sur Developpez.com ?

    Sinon effectivement j'utilise un GtkEntry mais je ne veux pas cacher la saisie, juste cacher les lettres d'un label.

    La solution le plus simple est peut être d'utiliser la fonction indiquée par toeuf13 ?

  10. #10
    Membre confirmé Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Par défaut
    Citation Envoyé par Captare Voir le message
    La solution le plus simple est peut être d'utiliser la fonction indiquée par toeuf13 ?
    Pour l'affichage de fenêtre pendant quelques secondes ?
    Oui, sans aucun doute

  11. #11
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Par défaut
    Si c'est le nom que cela porte, alors non. Je sais par contre afficher une boite de dialogue

    Peux tu me dire comment stp ? Je suppose que c'est quelque chose comme : void gtk_popup_new ?

  12. #12
    Membre confirmé Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Par défaut
    Bah c'est la même chose

    Bref je pense qu'au final tu peux te retrouver avec quelque chose du type :

    (ca me fait réviser c'est trés bien ^^)

    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
     
    // Déclaration des variables :
    int time = 2500, num_page = 1;
     
    (...)
     
        // On crée la pop up :
        pAbout = gtk_message_dialog_new (GTK_WINDOW(app->MainWindow),
        GTK_DIALOG_MODAL,
        GTK_MESSAGE_INFO,
        GTK_BUTTONS_OK,
        "Page %d affichee %d secondes",
        num_page,
        time);
     
        // On configure la pop up :
        gtk_window_set_modal(GTK_WINDOW(pAbout), TRUE);
        gtk_window_set_title(GTK_WINDOW(pAbout), "Affichage page");
        gtk_window_set_position(GTK_WINDOW(pAbout), GTK_WIN_POS_CENTER);
     
        // On indique à la pop up qu'on veut qu'elle ferme aprés 'time' ms
        g_timeout_add(time, (GSourceFunc)gtk_widget_destroy, pAbout);
     
        // On affiche la pop up
        gtk_dialog_run(GTK_DIALOG(pAbout));

  13. #13
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Par défaut
    C'est bien ce que je pensais, c'est pour ça que j'ai précisé

    Merci pour tout, j'ai plus de questions.

  14. #14
    Membre confirmé Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Par défaut
    De rien

    A noter que vu que t'as plus besoin des bouttons, tu peux les enlever :

    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
     
    // Déclaration des variables :
    GtkWidget *pAbout;
    int time = 3000, num_page = 1;
     
    (...)
     
        // On crée la pop up :
        pAbout = gtk_message_dialog_new (GTK_WINDOW(app->MainWindow),
        GTK_DIALOG_MODAL,
        GTK_MESSAGE_INFO,
        0,
        "Page %d affichee %d secondes",
        num_page,
        time/1000);
     
        // On configure la pop up :
        gtk_window_set_modal(GTK_WINDOW(pAbout), TRUE);
        gtk_window_set_title(GTK_WINDOW(pAbout), "Affichage page");
        gtk_window_set_position(GTK_WINDOW(pAbout), GTK_WIN_POS_CENTER);
     
        // On indique à la pop up qu'on veut qu'elle ferme aprés 'time' ms
        g_timeout_add(time, (GSourceFunc)gtk_widget_destroy, pAbout);
     
        // On affiche la pop up
        gtk_dialog_run(GTK_DIALOG(pAbout));

  15. #15
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Par défaut
    J'ai un petit problème. Mon compilateur ne m'indique rien, mais la console à coté de l'interface de mon programme en GTK+ affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_widget_destroy : assertion ' GTK_IS_WIDGET (widget)' failed
    Voici le code de la boite de dialogue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
                dialog = gtk_message_dialog_new(GTK_WINDOW(data),
                                                GTK_DIALOG_MODAL,
                                                GTK_MESSAGE_INFO,
                                                0,
                                                "Bonne Lettre\n");
     
                g_timeout_add(lenth, (GSourceFunc)gtk_widget_destroy, dialog);
     
                gtk_dialog_run(GTK_DIALOG(dialog));
    Voyez-vous quelque chose d'anormal ?

    Merci

  16. #16
    Membre confirmé Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Par défaut
    Je dirais a priori que ton "data" n'est pas un GtkWindow

  17. #17
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Par défaut
    Je regarde.

  18. #18
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Par défaut
    Alors, je pense que si je te donne tout le code ça va être plus simple, attention je débute en GTK+, il y'a surement des fautes. J'essaye de faire le jeu du Pendu en GTK+ , histoire de m'entrainer.

    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
    void search(GtkWidget *entry, gpointer data);
     
    gchar text[] = "salut";
     
    int main (int argc, char *argv[])
    {
        GtkWidget *main_window;
        GtkWidget *main_box;
        GtkWidget *entry;
        /* GtkWidget *label; */
     
        gtk_init(&argc,  &argv);
     
        /* Main Window */
        {
            main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
            gtk_window_set_default_size(GTK_WINDOW(main_window), 400, 600);
            gtk_window_set_title(GTK_WINDOW(main_window), "Pendu");
            g_signal_connect(G_OBJECT(main_window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
        }
     
        /* Main Box */
        {
            main_box = gtk_hbox_new(FALSE, 0);
            gtk_container_add(GTK_CONTAINER(main_window), main_box);
        }
     
        /* Entry */
        {
            entry = gtk_entry_new();
            gtk_box_pack_end(GTK_BOX(main_box), entry, FALSE, FALSE, 0);
            gtk_entry_set_max_length(GTK_ENTRY(entry), 1);
            g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(search), (gpointer*)main_window);
        }
     
     
        gtk_widget_show_all(main_window);
        gtk_main();
     
        return 0;
    }
     
    void search(GtkWidget *entry, gpointer data)
    {
        const gchar *text_enter;
        int i = 0;
        int time= 3000;
        GtkWidget *dialog;
     
        text_enter = gtk_entry_get_text(GTK_ENTRY(entry));
     
        for (i = 0; text[i] != '\0'; i++)
        {
            if (text_enter[0] == text[i])
            {
                dialog = gtk_message_dialog_new(GTK_WINDOW(data),
                                                GTK_DIALOG_MODAL,
                                                GTK_MESSAGE_INFO,
                                                0,
                                                "Bonne Lettre\n");
     
                g_timeout_add(time, (GSourceFunc)gtk_widget_destroy, dialog);
                gtk_dialog_run(GTK_DIALOG(dialog));
     
            }
        }
    }
     
    /* Afficher le mot secret dans un label, mais utiliser une boite de dialogue pour bonne lettre ou pas */

  19. #19
    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
    Je suis pas sûr que le gtk_widget_destroy pendant un gtk_dialog_run soit une bonne idée. Faut peut être utiliser gtk_dialog_response pour "fermer" le dialogue.

  20. #20
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Par défaut
    Bon, j'ai fait pas mal de recherches dans la doc et modifié mon code, mais sans résultat concret.
    Cependant d'après ce que j'ai compris comme mon dialog ne comporte aucun bouton (GTK_BUTTONS_NONE), la fonction citée au-dessus ne renverrait rien, en second paramètre il lui faut un reponse_id, qui n'existe pas pour mon type de dialog .

    Je sais pas trop quoi faire, je pense que je vais mettre un bouton valider, ça serait plus simple et ça fonctionne bien.

    SI vous avez une idée je suis preneur

    Merci, pour vos réponses précédentes.

Discussions similaires

  1. Lettre d'une partition à partir du Label ?
    Par Altess dans le forum C++
    Réponses: 3
    Dernier message: 08/07/2009, 10h10
  2. Cacher des labels avec boucle Next-For
    Par hotsauce91 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/05/2009, 11h01
  3. Label & supprime de lettre
    Par newin dans le forum C++Builder
    Réponses: 13
    Dernier message: 27/06/2008, 16h21
  4. Changer un Label et cacher un Button
    Par Xmemy dans le forum Tkinter
    Réponses: 2
    Dernier message: 07/12/2007, 16h09
  5. afficher/ cacher textbox/label
    Par t1marlartiste dans le forum ASP.NET
    Réponses: 5
    Dernier message: 29/05/2007, 14h07

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