| Programmation GTK2 en Pascal |
|
Présentation
Pour 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
| Hiérarchie |
GObject
└─GtkObject
└─GtkWidget
└─GtkContainer
└─GtkBin
└─GtkWindow
└─GtkDialog
└─GtkMessageDialog |
Utilisation de bases
Création
L'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
Nous 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 |