Programmation GTK2 en Pascal/GtkCheckButton
Programmation GTK2 en Pascal |
|
Présentation
modifierLe 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 GtkToggleButton
.
Hiérarchie
modifierHiérarchie |
GObject └─GtkObject └─GtkWidget └─GtkContainer └─GtkBin └─GtkButton └─GtkToggleButton └─GtkCheckButton |
Utilisation de base
modifierCréation
modifierUne 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 GtkToggleButton
.
Programme exemple
modifierNous allons reprendre l'exemple du contrôle GtkToggleButton
mais cette fois-ci avec un GtkCheckButton
.
Voilà le fichier gtk022.pas
:
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 gtk022
:
Puis après avoir cliqué sur la case à cocher :
Puis après avoir cliqué sur le bouton de changement d'aspect :
Boutons : GtkButton ~ GtkToggleButton ~ GtkCheckButton ~ GtkRadioButton |