Présentation.
Le contrôle GtkSpinButton permet de gérer la saisie d'une valeur numérique compris entre deux bornes. Il se présente comme une zone de texte dans laquelle on peut saisir un nombre à laquelle est accolée deux flèches qui permettent d'incrémenter ou de décrémenter la valeur.
Utilisation de base.
Création.
Comme pour les curseurs (../GtkHScale/ et ../GtkVScale/), il y a deux méthodes pour créer un codice_1.
La première nécessite la création préalable d'un ajustement :
 function gtk_spin_button_new(adjustment : PGtkAdjustment; climb_rate : gdouble; digits : guint) : PGtkWidget;
Le paramètre codice_2 qui doit être compris entre 0,0 et 1,0 est la valeur d'accélération quand on appuie longtemps sur une des flèches. À 0, la vitesse de défilement des nombres est constante, à 1,0 elle s'accélère à mesure qu'on laisse longtemps la flèche enfoncée.
Le paramètre codice_3 indique combien de décimales doivent être affichées.
La deuxième fonction permet d'indiquer tout de suite les bornes de saisie :
 function gtk_spin_button_new_with_range(min : gdouble; max : gdouble; step : gdouble) : PGtkWidget;
Le paramètre codice_4 est le pas d'incrément ou de décrément de la valeur.
Affichage de la valeur.
Le nombre de décimales peut-être modifié directement :
 procedure gtk_spin_button_set_digits(spin_button : PGtkSpinButton; digits : guint);
Valeur saisie.
La valeur peut-être modifiée par l'utilisateur en tapant sur les touches numériques ou à la souris en cliquant sur les flèches. Par programme, on peut également avec la fonction :
 procedure gtk_spin_button_set_value(spin_button : PGtkSpinButton; value : gdouble);
Le paramètre codice_5 est la nouvelle valeur.
Quelle que soit la méthode de mise-à-jour, à chaque modification, le signal « value_changed » est émis.
Pour récupérer la valeur saisie, il y a les fonctions, selon le format désiré :
 function gtk_spin_button_get_value_as_float(spin_button : PGtkSpinButton) : gdouble;
 function gtk_spin_button_get_value_as_int(spin_button : PGtkSpinButton) : gint;
Programme exemple.
Comme exemple, nous allons créer une fenêtre comportant un codice_1, un codice_7 et un codice_8. Quand on cliquera sur le bouton, on affichera le texte du codice_1 dans le codice_8.
Voilà le fichier codice_11 :
 program gtk028;
 uses glib2, gtk2;
 type
 TFenetrePrincipale = record
 pFenetre : PGtkWidget;
 pVBox : PGtkWidget;
 pChampEntree : PGtkWidget;
 pBouton : PGtkWidget;
 pLabel : PGtkWidget;
 end;
 PFenetrePrincipale = ^TFenetrePrincipale;
 procedure OnBtnClick(APWidget : PGtkwidget; AData : pgpointer); cdecl;
 var
 pFenPrinc : PFenetrePrincipale;
 Valeur : GDouble;
 Texte : PGChar;
 begin
 // Récuperation des données de la fenêtre principale (qui sont dans AData)
 pFenPrinc := PFenetrePrincipale(AData);
 // Récuperation du texte contenu dans le GtkSpinButton
 Valeur := gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(pFenPrinc^.pChampEntree));
 Texte := g_strdup_printf('%f', [Valeur]); 
 // Modification du texte contenu dans le GtkLabel 
 gtk_label_set_text(GTK_LABEL(pFenPrinc^.pLabel), Texte);
 g_free(Texte);
 end;
 var
 pFenPrinc : PFenetrePrincipale;
 begin
 pFenPrinc := g_malloc(SizeOf(TFenetrePrincipale));
 gtk_init(@argc, @argv);
 pFenPrinc^.pFenetre := gtk_window_new(GTK_WINDOW_TOPLEVEL);
 gtk_window_set_position(GTK_WINDOW(pFenPrinc^.pFenetre), GTK_WIN_POS_CENTER);
 gtk_window_set_default_size(GTK_WINDOW(pFenPrinc^.pFenetre), 320, 200);
 gtk_container_set_border_width(GTK_CONTAINER(pFenPrinc^.pFenetre), 4);
 gtk_window_set_title(GTK_WINDOW(pFenPrinc^.pFenetre), 'Gtk028 : GtkSpinButton');
 gtk_signal_connect(pGTKOBJECT(pFenPrinc^.pFenetre), 'destroy', GTK_SIGNAL_FUNC(@gtk_main_quit), NULL);
 pFenPrinc^.pVBox := gtk_vbox_new(TRUE, 0);
 gtk_container_add(GTK_CONTAINER(pFenPrinc^.pFenetre), pFenPrinc^.pVBox);
 // Création du GtkSpinButton
 pFenPrinc^.pChampEntree := gtk_spin_button_new_with_range(0, 100, 0.1);
 // Nombre de décimales
 gtk_spin_button_set_digits(GTK_SPIN_BUTTON(pFenPrinc^.pChampEntree), 2);
 gtk_box_pack_start(GTK_BOX(pFenPrinc^.pVBox), pFenPrinc^.pChampEntree, TRUE, FALSE, 0);
 pFenPrinc^.pBouton := gtk_button_new_with_label('Copier');
 gtk_box_pack_start(GTK_BOX(pFenPrinc^.pVBox), pFenPrinc^.pBouton, TRUE, FALSE, 0);
 g_signal_connect(pGTKOBJECT(pFenPrinc^.pBouton), 'clicked', 
 GTK_SIGNAL_FUNC(@OnBtnClick), gpointer(pFenPrinc));
 pFenPrinc^.pLabel := gtk_label_new(NULL);
 gtk_box_pack_start(GTK_BOX(pFenPrinc^.pVBox), pFenPrinc^.pLabel, TRUE, FALSE, 0);
 gtk_widget_show_all(pFenPrinc^.pFenetre);
 gtk_main;
 g_free(pFenPrinc);
 end.
Voilà ce que donne l'exécution du programme codice_12 après quelques clics et appuie sur « entrée » :

Enseignement de l'anglais/l'heure
Heures pleines.
On emploie o'clock seulement pour les heures complètes. 
Dire l'heure.
En anglais, les heures se comptent de 1 à 12. Ainsi pour parler de vingt-deux heures, on dit qu'il est dix heures. Si nécessaire, pour préciser si l'on parle de dix heures du matin on rajoute "in the morning", et pour l'après-midi et le soir, on rajoute "in the afternoon" ou "in the evening". On peut aussi préciser a.m. pour les heures avant midi et p.m. pour les heures après midi. Pour les heures multiples de cinq (2h25, 3h55, etc.), minutes n'est pas obligatoire. 
On utilise past pour donner le nombre de minutes après l'heure. 
Pour l'heure et demi, on utilise half. 
Après la demi-heure, on utilise to pour donner le nombre de minutes avant l'heure qui suit.
Pour les autres heures, on utilise les mêmes structures en rajoutant minutes.
Plus familièrement, on cite simplement les nombres, sans parler des "past" et "to"
Application.
Traduisez les heures suivantes :

Programmation GTK2 en Pascal/Les listes déroulantes

Les listes déroulantes ou "combobox" en anglais ont été complètement revues dans la version 2 de Gtk+, l'objet codice_1 ne doit plus être utilisé. Elles sont liées maintenant aux objets des listes et des arbres. Elle peuvent néanmoins être utilisées de manière simple en mode texte :

Programmation GTK2 en Pascal/GtkComboBox