Programmation GTK2 en Pascal/GtkDialog
Présentation.
Le contrôle GtkDialog permet de gérer un style de fenêtre particulier : les boîtes de dialogue. Elles permettent de demander à l'utilisateur des informations ou de poser des questions.
Utilisation de base.
Composition de la boîte de dialogue.
Une boîte de dialogue de type codice_1 est constituée de trois éléments :
On peut donc ainsi distinguer deux zones différentes :
Création de la fenêtre.
La fonction de création est un peu plus complexe que d'habitude :
 function gtk_dialog_new_with_buttons(title : Pgchar; parent : PGtkWindow; 
 flags : TGtkDialogFlags; first_button_text : Pgchar; args : array of const) : PGtkWidget;
Le premier paramètre codice_7 n'est autre que le titre de la boîte de dialogue.
Le deuxième paramètre codice_8 sert à désigner la fenêtre parente. Cette valeur peut être égale à NULL.
Le troisième paramètre codice_9 permet de définir certains paramètres de la boîte de dialogue. Ce paramètre peut prendre trois valeurs différentes :
Enfin, le dernier paramètre est plutôt une liste de paramètres permettant de définir les boutons de la boîte de dialogue ainsi que les réponses qui leurs sont associées. Pour chaque bouton que nous voulons ajouter, il faut définir le texte du bouton et le type de réponse qui sera envoyé lorsque nous cliquerons sur le bouton.
Le texte du bouton peut, comme pour tous les boutons, être un texte normal, un texte avec raccourci (de la forme "_Quitter") ou même une valeur de type codice_10 dont voici une toute partie de la liste :
La valeur de la réponse, peut être un élément de type codice_11 ou bien une valeur entière positive que nous pouvons définir nous-mêmes. Le plus simple étant bien sûr d'utiliser les valeurs classiques définies par le type codice_11 dont voici la liste :
Une fois que tous les boutons ont été définis, il faut le dire à notre fonction de création. Pour cela, il suffit de terminer la liste des paramètres par NULL.
Ajout d'éléments dans la zone de travail.
La majeure partie des éléments de la boîte de dialogue sont maintenant créés. Il reste cependant à ajouter les éléments de la zone de travail pour que la boîte soit complète. Une fois que ceux-ci sont créés, il suffit de les ajouter dans la boîte de dialogue avec la fonction codice_13.
La question est maintenant de savoir comment passer la codice_2 en paramètre à la fonction codice_13. Nous allons tout simplement utiliser l'opérateur codice_16 pour l'élément GtkDialog de cette manière :
 GTK_DIALOG(nom_de_la_fenêtre)^.vbox;
La boîte de dialogue est maintenant complète.
Affichage de la boîte de dialogue.
L'affichage de la boîte de dialogue comporte deux étapes. Tout d'abord, il faut demander d'afficher tout le contenu de la codice_2 qui est inclus dans la boîte de dialogue avec la fonction codice_18.
Ensuite il faut afficher la boîte de dialogue elle-même et attendre la réponse de l'utilisateur avec cette fonction :
 function gtk_dialog_run(dialog : PGtkDialog) : gint;
Le paramètre de cette fonction étant de type codice_19 il faut utiliser la fonction de conversion GTK_DIALOG().
Cette fonction affiche l'intégralité de la boîte de dialogue, mais rentre aussi dans une boucle récursive qui ne s'arrêtera que lorsque l'utilisateur cliquera sur un des boutons de retour. La valeur de retour correspond à la valeur associée au bouton cliqué. Si, par hasard, l'utilisateur quitte la boîte de dialogue en cliquant sur la croix de celle-ci, codice_20 renvoie codice_21.
Une fois la valeur de retour connue, il ne reste plus qu'à agir en conséquence.
Programme exemple.
L'exemple de ce chapitre est constitué d'une fenêtre principale dans laquelle nous allons ajouter un codice_22 et un codice_23. Lorsque l'utilisateur clique sur le codice_22, une boîte de dialogue apparaîtra et demandera à l'utilisateur de saisir son nom.
Cette boîte de dialogue sera constituée d'une codice_25, d'un codice_22 « OK » et d'un codice_22 « Annuler ». Si l'utilisateur clique sur « OK » le contenu de la codice_25 sera copié dans le codice_23 de la fenêtre principale tandis que s'il clique sur « Annuler » on affichera « Vous n'avez rien saisi. » dans le codice_23.
Voici le fichier codice_31, pour faire simple il a été utilisé des variables globales ce qui n'est pas forcément à conseiller :
 program gtk003;
 uses glib2, gtk2;
 var
 pWindow : PGtkWidget;
 pLabel : PGtkWidget;
 procedure LancerBoite;
 var
 pBoite : PGtkWidget;
 pChampSaisie : PGtkWidget;
 Nom : PGChar;
 begin
 // Creation de la boîte de dialogue 
 ///1 bouton Valider (« Ok »)
 ///1 bouton Annuler 
 pBoite := gtk_dialog_new_with_buttons('Saisie du nom',
 GTK_WINDOW(pWindow),
 GTK_DIALOG_MODAL,
 GTK_STOCK_OK, [GTK_RESPONSE_OK,
 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
 NULL]);
 // Creation de la zone de saisie 
 pChampSaisie := gtk_entry_new();
 gtk_entry_set_text(GTK_ENTRY(pChampSaisie), 'Saisissez votre nom');
 // Insertion de la zone de saisie dans la boîte de dialogue 
 // Rappel : paramètre 1 de gtk_box_pack_start de type GtkBox 
 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(pBoite)^.vbox), pChampSaisie, TRUE, FALSE, 0);
 // Affichage des éléments de la boîte de dialogue 
 gtk_widget_show_all(GTK_DIALOG(pBoite)^.vbox); 
 // On lance la boîte de dialogue et on récupère la réponse 
 case gtk_dialog_run(GTK_DIALOG(pBoite)) of
 // L'utilisateur valide
 GTK_RESPONSE_OK : begin
 Nom := gtk_entry_get_text(GTK_ENTRY(pChampSaisie));
 gtk_label_set_text(GTK_LABEL(pLabel), Nom);
 end;
 // L'utilisateur annule 
 GTK_RESPONSE_CANCEL, GTK_RESPONSE_DELETE_EVENT : begin
 gtk_label_set_text(GTK_LABEL(pLabel), 'Vous n"avez rien saisi !');
 end;
 else begin
 gtk_label_set_text(GTK_LABEL(pLabel), 'Réponse inattendue !');
 end;
 end;
 // Destruction de la boîte de dialogue 
 gtk_widget_destroy(pBoite);
 end;
 procedure OnDestroy(widget : PGtkwidget; data : pgpointer); cdecl;
 begin
 gtk_main_quit;
 end;
 var
 pVBox : PGtkWidget;
 pBouton : PGtkWidget;
 begin
 gtk_init(@argc, @argv);
 pWindow := gtk_window_new(GTK_WINDOW_TOPLEVEL);
 gtk_window_set_position(GTK_WINDOW(pWindow), GTK_WIN_POS_CENTER);
 gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
 gtk_window_set_title(GTK_WINDOW(pWindow), 'Fenêtre principale');
 gtk_signal_connect(pGTKOBJECT(pWindow), 'destroy', GTK_SIGNAL_FUNC(@OnDestroy), NULL);
 // Création de la GtkVBox
 pVBox := gtk_vbox_new(TRUE, 0);
 gtk_container_add(GTK_CONTAINER(pWindow), pVBox);
 // Création du bouton
 pBouton := gtk_button_new_with_label('Cliquez ici pour saisir votre nom');
 gtk_box_pack_start(GTK_BOX(pVBox), pBouton, FALSE, TRUE, 0);
 // Création du label
 pLabel := gtk_label_new(NULL);
 gtk_box_pack_start(GTK_BOX(pVBox), pLabel, FALSE, FALSE, 0);
 // Connexion du signal « clicked » pour ouvrir la boîte de dialogue 
 g_signal_connect(pGTKOBJECT(pBouton), 'clicked', GTK_SIGNAL_FUNC(@LancerBoite), NULL);
 gtk_widget_show_all(pWindow);
 gtk_main;
 end.
Voila ce que donne l'exécution du programme gtk003 :
La fenêtre principale s'affiche et on clique sur le bouton « Cliquez ici pour saisir votre nom »
Dans la fenêtre de dialogue, on a saisi « Didier » puis cliqué sur « Valider »

Enseignement de l'anglais/Parfait présent Test

Voir la leçon
= Exercices =
Exercice 1.
Conjugate the following verbs to forms requested:
Exercice 2.
Employez le parfait présent simple ou le parfait progressif :
Exercice3.
Conjuguer :
= Solutions =
Retour au sommaire

Programmation GTK2 en Pascal/GtkMessageDialog