Présentation.
Le contrôle GtkCheckButton permet de gérer les cases à cocher. Comme c'est un contrôle qui peut prendre deux états, coché ou pas, il dérive directement du codice_1.
Utilisation de base.
Création.
Une fois encore, la syntaxe et l'utilisation des fonctions de création restent classiques :
 function gtk_check_button_new : PGtkWidget;
 function gtk_check_button_new_with_label(_label : Pgchar) : PGtkWidget;
 function gtk_check_button_new_with_mnemonic(_label : Pgchar) : PGtkWidget;
Pour le reste, il faut utiliser les fonctions et signaux du contrôle codice_1.
Programme exemple.
Nous allons reprendre l'exemple du contrôle codice_3 mais cette fois-ci avec un codice_4.
Voilà le fichier codice_5 :
 program gtk022;
 uses glib2, gtk2;
 procedure OnBtnAEtatToggle(APWidget : PGtkwidget; AData : pgpointer); cdecl;
 var
 Etat : GBoolean;
 Inconsistent : GBoolean;
 LabelBtn : PGChar;
 LabelEtat, LabelIncons : PGChar;
 begin
 // Récuperation de l'état du bouton
 Etat := gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(APWidget));
 // Récuperation de l'aspect du bouton 
 Inconsistent := gtk_toggle_button_get_inconsistent(GTK_TOGGLE_BUTTON(APWidget));
 // Construction du label du bouton 
 if Etat then
 LabelEtat := g_strdup('Coché')
 else
 LabelEtat := g_strdup('Décoché');
 if Inconsistent then
 LabelIncons := g_strdup('Modifié')
 else
 LabelIncons := g_strdup('Normal');
 LabelBtn := g_strdup_printf('État : %s/Aspect : %s', [LabelEtat, LabelIncons]);
 // Modification du label du bouton 
 gtk_button_set_label(GTK_BUTTON(APWidget), LabelBtn);
 // Libération des chaînes
 g_free(LabelBtn);
 g_free(LabelEtat);
 g_free(LabelIncons);
 end;
 procedure OnBtnMajEtatClick(APWidget : PGtkwidget; AData : pgpointer); cdecl;
 var
 Etat : GBoolean;
 begin
 // Récuperation de l'état du bouton
 Etat := gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(AData));
 // Modification de l'état du bouton
 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(AData), Etat <> TRUE);
 end;
 procedure OnBtnMajAspectClick(APWidget : PGtkwidget; AData : pgpointer); cdecl;
 var
 Inconsistent : GBoolean;
 begin
 // Récuperation de l'aspect du bouton
 Inconsistent := gtk_toggle_button_get_inconsistent(GTK_TOGGLE_BUTTON(AData));
 // Modification de l'aspect du bouton 
 gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(AData), Inconsistent <> TRUE);
 // On emet le signal « toggle » pour changer le texte du bouton 
 gtk_toggle_button_toggled(GTK_TOGGLE_BUTTON(AData));
 end;
 var
 pFenetre : PGtkWidget;
 pVBox : PGtkWidget;
 pCaseACocher : PGtkWidget;
 pBtnMajEtat : PGtkWidget;
 pBtnMajAspect : 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_container_set_border_width(GTK_CONTAINER(pFenetre), 4);
 gtk_window_set_title(GTK_WINDOW(pFenetre), 'Gtk022 : Case à cocher');
 gtk_signal_connect(pGTKOBJECT(pFenetre), 'destroy', GTK_SIGNAL_FUNC(@gtk_main_quit), NULL);
 pVBox := gtk_vbox_new(TRUE, 0);
 gtk_container_add(GTK_CONTAINER(pFenetre), pVBox);
 // Création de la case à cocher
 pCaseACocher := gtk_check_button_new_with_label('État : Décoché/Aspect : Normal');
 gtk_box_pack_start(GTK_BOX(pVBox), pCaseACocher, FALSE, FALSE, 5);
 g_signal_connect(pGTKOBJECT(pCaseACocher), 'toggled', GTK_SIGNAL_FUNC(@OnBtnAEtatToggle), NULL);
 // Création du bouton de changement d'état
 pBtnMajEtat := gtk_button_new_with_label('Changer état');
 gtk_box_pack_start(GTK_BOX(pVBox), pBtnMajEtat, FALSE, FALSE, 5);
 g_signal_connect(pGTKOBJECT(pBtnMajEtat), 'clicked', GTK_SIGNAL_FUNC(@OnBtnMajEtatClick), pCaseACocher);
 // Création du bouton de changement d'aspect
 pBtnMajAspect := gtk_button_new_with_label('Changer aspect');
 gtk_box_pack_start(GTK_BOX(pVBox), pBtnMajAspect, FALSE, FALSE, 5);
 g_signal_connect(pGTKOBJECT(pBtnMajAspect), 'clicked', GTK_SIGNAL_FUNC(@OnBtnMajAspectClick), pCaseACocher);
 gtk_widget_show_all(pFenetre);
 gtk_main;
 end.
Voilà ce que donne l'exécution du programme codice_6 :
Puis après avoir cliqué sur la case à cocher :
Puis après avoir cliqué sur le bouton de changement d'aspect :

Programmation GTK2 en Pascal/GtkRadioButton