Programmation GTK2 en Pascal/GtkMessageDialog
Programmation GTK2 en Pascal |
|
Présentation
modifierPour simplifier l'affichage de message à l'aide d'une boîte de dialogue, Gtk+ offre un nouveau contrôle qui dérive directement de GtkDialog
: le contrôle GtkMessageDialog. Ce contrôle permet de créer une boîte de dialogue complète avec une seule fonction.
Hiérarchie
modifierHiérarchie |
GObject └─GtkObject └─GtkWidget └─GtkContainer └─GtkBin └─GtkWindow └─GtkDialog └─GtkMessageDialog |
Utilisation de bases
modifierCréation
modifierL'unique fonction de ce contrôle est celle permettant de créer la boîte de dialogue :
function gtk_message_dialog_new(parent : PGtkWindow; flags : TGtkDialogFlags; _type : TGtkMessageType; buttons : TGtkButtonsType; message_format : Pgchar; args : array of const) : PGtkWidget;
Les paramètres parent
et flags
sont identiques à ceux du contrôle GtkDialog
, nous ne reviendrons donc pas dessus et allons nous concentrer sur les nouveaux paramètres.
Le tout premier _type
, permet de définir le texte qui sera affiché dans la barre de titre de la boîte de dialogue ainsi que l'icône correspondant. Ce paramètre est de type GtkMessageType
et peut prendre une des quatre valeurs suivantes :
- GTK_MESSAGE_INFO : titre de la boîte « Information » ;
- GTK_MESSAGE_WARNING : titre de la boîte « Avertissement » ;
- GTK_MESSAGE_QUESTION : titre de la boîte « Question » ;
- GTK_MESSAGE_ERROR : titre de la boîte « Erreur ».
Le deuxième nouveau paramètre buttons
, de type GtkButtonsType
, permet de définir les boutons qui seront présents en bas de la boîte de dialogue. Les valeurs autorisées sont les suivantes :
- GTK_BUTTONS_NONE
- GTK_BUTTONS_OK
- GTK_BUTTONS_CLOSE
- GTK_BUTTONS_CANCEL
- GTK_BUTTONS_YES_NO
- GTK_BUTTONS_OK_CANCEL
Et le dernier paramètre message_format
est tout simplement le texte qui sera affiché à l'intérieur de la boîte de dialogue. Ce texte peut être formaté comme il est possible de le faire avec la fonction Format
.
Programme exemple
modifierNous allons créer une fenêtre comportant deux boutons. Le premier permettra d'afficher les informations habituelles d'une boîte de dialogue « À propos... ». Le deuxième offrira la possibilité de quitter le programme, en passant par une demande de confirmation à l'utilisateur.
Voici le fichier gtk004.pas
:
program gtk004; uses glib2, gtk2; procedure OnBtnAProposClick(AWidget : PGtkwidget; AData : PGPointer); cdecl; var pAbout : PGtkWidget; Site : PGChar; begin // Création de la boîte de message // Type : Information -> GTK_MESSAGE_INFO // Bouton : 1 OK -> GTK_BUTTONS_OK Site := '- WikiLivres -'; pAbout := gtk_message_dialog_new (GTK_WINDOW(AData), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, 'Cours Gtk+ 2.0 en Pascal'#13#10'%s', [Site]); // Affichage de la boîte de message gtk_dialog_run(GTK_DIALOG(pAbout)); // Destruction de la boîte de message gtk_widget_destroy(pAbout); end; procedure OnBtnQuitterClick(AWidget : PGtkwidget; AData : PGPointer); cdecl; var pQuestion : PGtkWidget; begin // Création de la boîte de message // Type : Question -> GTK_MESSAGE_QUESTION // Boutons : 1 OUI, 1 NON -> GTK_BUTTONS_YES_NO pQuestion := gtk_message_dialog_new(GTK_WINDOW(AData), GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, 'Voulez vous vraiment'#13#10'quitter ce programme?'); // Affichage et attente d'une réponse case gtk_dialog_run(GTK_DIALOG(pQuestion)) of GTK_RESPONSE_YES : begin // OUI -> on quitte l application gtk_main_quit; end; GTK_RESPONSE_NO : begin // NON -> on detruit la boite de message gtk_widget_destroy(pQuestion); end; end; end; var pFenetre : PGtkWidget; pVBox : PGtkWidget; pBtnAPropos : PGtkWidget; pBtnQuitter : PGtkWidget; begin gtk_init(@argc, @argv); pFenetre := gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(pFenetre), GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(pFenetre), 320, 200); gtk_window_set_title(GTK_WINDOW(pFenetre), 'Fenêtre principale'); gtk_signal_connect(pGTKOBJECT(pFenetre), 'destroy', GTK_SIGNAL_FUNC(@gtk_main_quit), NULL); // Création de la GtkVBox pVBox := gtk_vbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(pFenetre), pVBox); // Création des boutons pBtnAPropos := gtk_button_new_with_label('À propos...'); gtk_box_pack_start(GTK_BOX(pVBox), pBtnAPropos, TRUE, FALSE, 0); g_signal_connect(pGTKOBJECT(pBtnAPropos), 'clicked', GTK_SIGNAL_FUNC(@OnBtnAProposClick), pGTKOBJECT(pFenetre)); pBtnQuitter := gtk_button_new_from_stock(GTK_STOCK_QUIT); gtk_box_pack_start(GTK_BOX(pVBox), pBtnQuitter, TRUE, FALSE, 0); g_signal_connect(pGTKOBJECT(pBtnQuitter), 'clicked', GTK_SIGNAL_FUNC(@OnBtnQuitterClick), pGTKOBJECT(pFenetre)); gtk_widget_show_all(pFenetre); gtk_main; end.
Voila ce que donne l'exécution du programme gtk004 :
La fenêtre principale s'affiche et on clique sur le bouton « À propos... »
On clique sur « Valider » puis de retour dans la fenêtre principale on clique sur « Quitter »
Fenêtres : GtkWindow ~ GtkDialog ~ GtkMessageDialog |