< Programmation GTK2 en Pascal
| Programmation GTK2 en Pascal |
|
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 GtkToggleButton.
Hiérarchie
| Hiérarchie |
GObject
└─GtkObject
└─GtkWidget
└─GtkContainer
└─GtkBin
└─GtkButton
└─GtkToggleButton
└─GtkCheckButton |
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 GtkToggleButton.
Programme exemple
Nous 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 |
Cet article est issu de Wikibooks. Le texte est sous licence Creative Commons – Attribution – Partage à l’identique. Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.