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 codice_1 : le contrôle GtkMessageDialog. Ce contrôle permet de créer une boîte de dialogue complète avec une seule fonction.
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 codice_2 et codice_3 sont identiques à ceux du contrôle codice_1, nous ne reviendrons donc pas dessus et allons nous concentrer sur les nouveaux paramètres.
Le tout premier codice_5, 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 codice_6 et peut prendre une des quatre valeurs suivantes :
Le deuxième nouveau paramètre codice_7, de type codice_8, 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 :
Et le dernier paramètre codice_9 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 codice_10.
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 codice_11 :
 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 »

Programmation GTK2 en Pascal/Les conteneurs

GTK+ permet de gérer plusieurs types de conteneurs.

Programmation GTK2 en Pascal/GtkContainer

Présentation.
Le contrôle GtkContainer est un contrôle de base qui va nous permettre d'insérer un ou plusieurs contrôle dans un autre contrôle. 
En effet si l'on veut insérer du texte dans une fenêtre, il va bien falloir insérer le codice_1 quelque part. C'est là que l'on s'aperçoit que le contrôle codice_2 dérive du contrôle codice_3 et que l'on va pouvoir insérer le texte dans la fenêtre.
Utilisation de base.
Le contrôle codice_3 n'est pas utilisé en tant que tel mais plutôt au travers d'autres contrôles qui en dérivent. Par exemple, les codice_5, codice_6, codice_2, etc.
Ajout et suppression d'éléments.
La fonction pour ajouter un élément à un codice_3 est très souvent utilisée mais elle est aussi très simple d'utilisation :
 procedure gtk_container_add(container : PGtkContainer; widget : PGtkWidget); 
Le paramètre codice_9 est le contrôle parent dans lequel on veut insérer le contrôle enfant qui vient en deuxième paramètre. Le premier paramètre demande un contrôle du type codice_3, il est très probable que le contrôle parent ne soit pas de ce type là, mais d'une classe fille. Il faudra donc utiliser la fonction GTK_CONTAINER().
Pour la suppression c'est aussi simple, il faut utiliser la fonction :
 procedure gtk_container_remove(container : PGtkContainer; widget : PGtkWidget);
Attention, avec cette fonction le contrôle codice_11 va être détruit.
Espacement.
Avec le contrôle codice_3, il existe la possibilité de laisser un espace minimum entre le bord du contrôle parent et le bord du contrôle enfant. Cela est rendu possible grâce à cette fonction :
 procedure gtk_container_set_border_width(container : PGtkContainer; border_width : guint);
Le paramètre codice_13 correspond à l'espacement minimum.
Et pour connaître la valeur de cet espacement, il y a la fonction :
 function gtk_container_get_border_width(container : PGtkContainer) : guint;