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

C Discussion :

Ouvrir une boite de message


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 103
    Par défaut Ouvrir une boite de message
    Bonjour,

    J'ai programmé un petit code qui demande à l'utilisateur d'entrer un mot de passe. Ensuite, l'utilisateur clique sur le bouton "Valider" et le programme vérifie si le mot de passe saisi est valide et affiche "Autorisé" sinon "Non autorisé". Mais à la place d'afficher cela j'aimerais ouvrir une boite de message ou il serait affiché "Autorisé" ou "Non autorisé".
    Je sais comment créer une boite de message mais mon problème vient, à mon avis, de la fonction g_signal_connect.

    Car si je met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_signal_connect(G_OBJECT(ptgui->ptbouton[1]), "clicked", G_CALLBACK(Pass), (gpointer *) ptgui);
    la vérification de l'exactitude du mot de passe se passe bien mais l'ouverture de la boite de message ne fonctionne pas.

    Et si je met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_signal_connect(G_OBJECT(ptgui->ptbouton[1]), "clicked", G_CALLBACK(Pass), (GtkWidget *) ptgui->ptfenetre);
    c'est l'inverse

    Merci

    Code entier :
    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<gtk/gtk.h>
     
    struct GUI { GtkWidget *ptfenetre;
    			 GtkWidget *ptbox;
    			 GtkWidget *ptframe;
    			 GtkWidget *ptboxframe;
    			 GtkWidget *ptentry;
    			 GtkWidget *ptbouton[2];
    			 GtkWidget *pttexte;
    			 GtkWidget *ptboite;
    };
     
    void CreationGUI(struct GUI *);
    void Pass(struct GUI *, gpointer);
     
    void main(int argc, char **argv)
    {
    	struct GUI *ptgui;
     
    	gtk_init(&argc, &argv);
     
    	ptgui = (GUI *)malloc(sizeof(struct GUI));
     
    	CreationGUI(ptgui);
    }
     
    void CreationGUI(struct GUI *ptgui)
    {
    	ptgui->ptfenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    	gtk_window_set_title(GTK_WINDOW(ptgui->ptfenetre), "Dimsoft - Mot de passe");
    	gtk_container_set_border_width(GTK_CONTAINER(ptgui->ptfenetre), 5);
    	gtk_window_set_default_size(GTK_WINDOW(ptgui->ptfenetre), 320, 200);
    	gtk_window_set_position(GTK_WINDOW(ptgui->ptfenetre), GTK_WIN_POS_CENTER);
     
    	ptgui->ptbox = gtk_vbox_new(FALSE, 0);
    	gtk_container_add(GTK_CONTAINER(ptgui->ptfenetre), ptgui->ptbox);
     
    	ptgui->ptframe = gtk_frame_new("Entrez votre mot de passe : ");
    	gtk_box_pack_start(GTK_BOX(ptgui->ptbox), ptgui->ptframe, TRUE, FALSE, 0);
     
    	ptgui->ptboxframe = gtk_vbox_new(TRUE, 0);
    	gtk_container_add(GTK_CONTAINER(ptgui->ptframe), ptgui->ptboxframe);
     
    	ptgui->ptentry = gtk_entry_new();
    	gtk_entry_set_visibility(GTK_ENTRY(ptgui->ptentry), FALSE);
    	gtk_box_pack_start(GTK_BOX(ptgui->ptboxframe), ptgui->ptentry, TRUE, FALSE, 0);
     
    	ptgui->pttexte = gtk_label_new(NULL);
    	gtk_box_pack_start(GTK_BOX(ptgui->ptbox), ptgui->pttexte, TRUE, FALSE, 0);
     
    	ptgui->ptbouton[0] = gtk_button_new_from_stock(GTK_STOCK_QUIT);
    	gtk_box_pack_end(GTK_BOX(ptgui->ptbox), ptgui->ptbouton[0], FALSE, FALSE, 0);
     
    	ptgui->ptbouton[1] = gtk_button_new_from_stock(GTK_STOCK_OK);
    	gtk_box_pack_end(GTK_BOX(ptgui->ptbox), ptgui->ptbouton[1], FALSE, FALSE, 0);
     
    	g_signal_connect(G_OBJECT(ptgui->ptfenetre), "destroy", G_CALLBACK(gtk_main_quit), NULL);
     
    	g_signal_connect(G_OBJECT(ptgui->ptbouton[0]), "clicked", G_CALLBACK(gtk_main_quit), NULL);
     
    	g_signal_connect(G_OBJECT(ptgui->ptbouton[1]), "clicked", G_CALLBACK(Pass), (gpointer *) ptgui);
     
    	gtk_widget_show_all(ptgui->ptfenetre);
     
    	gtk_main();
    }
     
    void Pass(struct GUI *ptgui, gpointer data)
    {
    	char pass[] = "1234";
    	char *pt;
     
    	ptgui = (GUI *) data;
     
    	pt = (char *)gtk_entry_get_text(GTK_ENTRY(ptgui->ptentry));
     
    	if(strcmp(pt, pass) == 0)
    	{
    		gtk_label_set_markup(GTK_LABEL(ptgui->pttexte), "<b>Access Granted</b>");
    	}
    	else
    	{
    		gtk_label_set_markup(GTK_LABEL(ptgui->pttexte), "<b>Access Denied</b>");
    	}
     
    }

  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 sais pas si ca joue (à mon avis je pense que oui) mais une fonction callback en GTK+ à plutot une entete de ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Pass(GtkWidget * wid, gpointer data);
    donc le 1° argument doit être au moins du type GtkWidget
    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 confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 103
    Par défaut
    Je ne sais pas je vais tester (je suis débutant sous GTK ) mais même avec ma méthode de passage de paramètre pour la fonction "Pass", le programme tourne à merveille

  4. #4
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Rien à voir avec le problème mais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void main(int argc, char **argv)
    Le prototype du "main" est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main(int argc, char **argv)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef struct GUI { ...
    }GUI,*ptgui;
    permet d'éviter de rajouter le mot clé "struct" à chaque fois.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ptgui = (GUI *)malloc(sizeof(struct GUI));
    le cast est inutile:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ptgui = malloc(sizeof(struct GUI));
    et pour des raisons de maintenabilité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ptgui = malloc(sizeof(*ptgui));

  5. #5
    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
    Code un peu corrigé (surtout coté GTK) et 2 ou 3 remarques:

    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<gtk/gtk.h>
     
     
    typedef struct
    {
       GtkWidget *ptfenetre;
       GtkWidget *ptbox;
       GtkWidget *ptframe;
       GtkWidget *ptboxframe;
       GtkWidget *ptentry;
       GtkWidget *ptbouton[2];
       GtkWidget *pttexte;
       GtkWidget *ptboite;
    }
    GUI;
     
     
    GUI * CreationGUI(void); /* Le mieux est le lui faire retourner le pointeur. */
    void Pass(GtkWidget * wid, gpointer data); /* Le 1° argument doit être du type d'un widget, mettre par defaut GtkWidget. */
     
     
    int main(int argc, char **argv)
    {
       GUI *ptgui = NULL;
     
     
       gtk_init(&argc, &argv);
     
     
       ptgui = CreationGUI();
     
       if (ptgui == NULL)
       {
          exit (EXIT_FAILURE);
       }
     
     
       gtk_main();  /* Il est mieux de lancer la boucle GTK+ dans le main. */
     
     
       /* Il ne faut pas oublier de liberer les ressources. */
       free (ptgui);
     
     
       /* main retourne toujours un int !!! */
       return EXIT_SUCCESS;
    }
     
     
    GUI * CreationGUI(void)
    {
       GUI *ptgui = NULL;
     
     
       ptgui = malloc (1 * sizeof (* ptgui)); /* Cast inutile. */
     
       /* TOUJOUR verifier les retours de malloc. */
       if (ptgui == NULL)
       {
          g_warning ("Erreur de malloc.\n");
          return NULL;
       }
     
     
       ptgui->ptfenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL);
       gtk_window_set_title(GTK_WINDOW(ptgui->ptfenetre), "Dimsoft - Mot de passe");
       gtk_container_set_border_width(GTK_CONTAINER(ptgui->ptfenetre), 5);
       gtk_window_set_default_size(GTK_WINDOW(ptgui->ptfenetre), 320, 200);
       gtk_window_set_position(GTK_WINDOW(ptgui->ptfenetre), GTK_WIN_POS_CENTER);
     
       ptgui->ptbox = gtk_vbox_new(FALSE, 0);
       gtk_container_add(GTK_CONTAINER(ptgui->ptfenetre), ptgui->ptbox);
     
       ptgui->ptframe = gtk_frame_new("Entrez votre mot de passe : ");
       gtk_box_pack_start(GTK_BOX(ptgui->ptbox), ptgui->ptframe, TRUE, FALSE, 0);
     
       ptgui->ptboxframe = gtk_vbox_new(TRUE, 0);
       gtk_container_add(GTK_CONTAINER(ptgui->ptframe), ptgui->ptboxframe);
     
       ptgui->ptentry = gtk_entry_new();
       gtk_entry_set_visibility(GTK_ENTRY(ptgui->ptentry), FALSE);
       gtk_box_pack_start(GTK_BOX(ptgui->ptboxframe), ptgui->ptentry, TRUE, FALSE, 0);
     
       ptgui->pttexte = gtk_label_new(NULL);
       gtk_box_pack_start(GTK_BOX(ptgui->ptbox), ptgui->pttexte, TRUE, FALSE, 0);
     
       ptgui->ptbouton[0] = gtk_button_new_from_stock(GTK_STOCK_QUIT);
       gtk_box_pack_end(GTK_BOX(ptgui->ptbox), ptgui->ptbouton[0], FALSE, FALSE, 0);
     
       ptgui->ptbouton[1] = gtk_button_new_from_stock(GTK_STOCK_OK);
       gtk_box_pack_end(GTK_BOX(ptgui->ptbox), ptgui->ptbouton[1], FALSE, FALSE, 0);
     
     
       g_signal_connect(G_OBJECT(ptgui->ptfenetre), "destroy", G_CALLBACK(gtk_main_quit), NULL);
       g_signal_connect(G_OBJECT(ptgui->ptbouton[0]), "clicked", G_CALLBACK(gtk_main_quit), NULL);
       g_signal_connect(G_OBJECT(ptgui->ptbouton[1]), "clicked", G_CALLBACK(Pass), (gpointer *) ptgui);
     
     
       gtk_widget_show_all(ptgui->ptfenetre);
     
     
       return ptgui;
    }
     
    void Pass(GtkWidget * wid, gpointer data)
    {
       char pass[] = "1234";
       const char *pt = NULL;
       GUI * ptgui = NULL;
     
     
       ptgui = (GUI *) data;
     
       pt = gtk_entry_get_text(GTK_ENTRY(ptgui->ptentry));
     
       if(strcmp(pt, pass) == 0)
       {
          gtk_label_set_markup(GTK_LABEL(ptgui->pttexte), "<b>Access Granted</b>");
       }
       else
       {
          gtk_label_set_markup(GTK_LABEL(ptgui->pttexte), "<b>Access Denied</b>");
       }
    }
    A part ca, ici tu n'affiche que la fenetre principale rien de plus, pas de messagebox ou autre fenetres !
    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 !

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 103
    Par défaut
    Merci pour vos réposes.

    Le programme tel que je l'ai posté n'affiche que la vérification dans la fenêtre principal. Le problème vient du fait que j'aimerais affiche la validité du mot de passe saisi dans une messagebox avec un bouton(et je ne trouve pas comment faire).
    Moi je pensais faire comme suit, mettre dans ma fonction "Pass" ceci :

    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
    void Pass(GtkWidget *ptentry, gpointer data)
    {
    	char pass[] = "1234";
    	const char *pt;
     
    	struct GUI *ptgui = NULL; 
     
    	ptgui = (GUI *) data;
     
    	pt = gtk_entry_get_text(GTK_ENTRY(ptgui->ptentry));
     
    	if(strcmp(pt, pass) == 0)
    	{
    		//gtk_label_set_markup(GTK_LABEL(ptgui->pttexte), "<b>Acces Autorise</b>");
    		ptgui->ptboite = gtk_message_dialog_new(GTK_WINDOW(data), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Acces Autorise");
    		gtk_dialog_run(GTK_DIALOG(ptgui->ptboite));
    		gtk_widget_destroy(ptgui->ptboite);
    	}
    	else
    	{
    		gtk_label_set_markup(GTK_LABEL(ptgui->pttexte), "<b>Acces Non Autorise</b>");
    	}
     
    }
    mais cela ne fonctionne pas !!

Discussions similaires

  1. impossible d'ouvrir une boite de dialogue
    Par paolo2002 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 19/02/2008, 15h38
  2. Réponses: 10
    Dernier message: 25/10/2007, 14h40
  3. [C# + WPF] Ouvrir une boite de dialog perso après la fermeture de la MainWindow
    Par Thor Tillas dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 06/07/2007, 15h22
  4. [IMAP] ouvrir une boite d'emails en php
    Par jadoo dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 03/04/2006, 22h11
  5. Condition pour l'affichage d'une boite de message
    Par Virgile59 dans le forum Access
    Réponses: 19
    Dernier message: 05/10/2005, 14h22

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