Programmation GTK2 en Pascal/GtkHScale
Programmation GTK2 en Pascal |
|
Présentation
modifierLe contrôle GtkHScale est un curseur horizontal qui permet de sélectionner une valeur numérique.
Hiérarchie
modifierHiérarchie |
GObject └─GtkObject └─GtkWidget └─GtkRange └─GtkScale └─GtkHScale |
Utilisation de base
modifierCréation
modifierLa création d'un curseur se fait grâce à la fonction :
function gtk_hscale_new(adjustment : PGtkAdjustment) : PGtkWidget;
Le paramètre adjustment
est l'ajustement que le curseur doit représenter. Le même ajustement peut être attribué à plusieurs curseurs sur la même fenêtre. Le déplacement de l'un entrainera le déplacement des autres.
La création d'un ajustement qui est un type PGtkObject
se fait grâce à la fonction :
function gtk_adjustment_new(value : gdouble; lower : gdouble; upper : gdouble; step_increment : gdouble; page_increment : gdouble; page_size : gdouble) : PGtkObject;
Le paramètre value
représente la valeur actuelle de l'ajustement, les paramètres lower
et upper
sont les valeurs mini et maxi, donc les valeurs quand le curseur sera respectivement à gauche et à droite. Le paramètre step_increment
est la valeur qui est utilisée pour incrémenter ou décrémenter la valeur de l'ajustement quand on bouge le curseur d'une position. Les autres paramètres doivent être utilisés pour les ascenseurs.
On peut en fait créer un curseur plus rapidement en utilisant la fonction :
function gtk_hscale_new_with_range(min : gdouble; max : gdouble; step : gdouble) : PGtkWidget;
Il n'y a pas d'ajustement à fournir, juste les valeurs min
et max
, ainsi que le pas, step
.
Affichage de la valeur
modifierPar défaut, la valeur est affichée près du curseur. On peut changer cela avec la fonction :
procedure gtk_scale_set_draw_value(scale : PGtkScale; draw_value : gboolean);
Le paramètre scale
est le curseur et si on met FALSE dans draw_value
, la valeur ne sera pas affichée. TRUE l'affiche.
On peut également déterminer le nombre de chiffres après la virgule on désire afficher avec la fonction :
procedure gtk_scale_set_digits(scale : PGtkScale; digits : gint);
Le paramètre digits
permet d'indiquer le nombre de chiffres désirés.
Une dernière fonction permet de décider de l'emplacement de l'affichage de la valeur, par défaut celui-ci étant au dessus du curseur :
procedure gtk_scale_set_value_pos(scale : PGtkScale; pos : TGtkPositionType);
Le paramètre pos
peut prendre les valeurs :
- GTK_POS_LEFT, pour la valeur placée à gauche du curseur ;
- GTK_POS_RIGHT, pour la valeur à droite ;
- GTK_POS_TOP, pour la valeur au dessus ;
- GTK_POS_BOTTOM, pour la valeur en dessous.
Position du curseur
modifierC'est l'objet GtkRange
dont GtkHScale
hérite les propriétés qui gère la position du curseur. Pour positionner le curseur, on a donc la fonction :
procedure gtk_range_set_value(range : PGtkRange; value : gdouble);
Le paramètre value
donne la valeur.
Pour récupérer la position du curseur, on utilisera :
function gtk_range_get_value(range : PGtkRange) : gdouble;
À noter qu'à chaque déplacement, un signal « value_changed » est émis.
Programme exemple
modifierDans une fenêtre, on va placer une jauge horizontale pouvant aller de 0 à 100 avec comme valeur initiale 50 et l'ffichage de la valeur en dessous. On aura un bouton et un label, le bouton permettant d'afficher la valeur dans le label.
Voilà le fichier gtk026.pas
:
program gtk026; uses glib2, gtk2; type TFenetrePrincipale = record pFenetre : PGtkWidget; pVBox : PGtkWidget; pCurseur : 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 GtkHScale Valeur := gtk_range_get_value(GTK_RANGE(pFenPrinc^.pCurseur)); 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), 'Gtk026 : Curseur'); 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 GtkHScale pFenPrinc^.pCurseur := gtk_hscale_new_with_range(0, 100, 1); // Position du curseur gtk_range_set_value(GTK_RANGE(pFenPrinc^.pCurseur), 50); // Affichage de 2 chiffres après la virgule gtk_scale_set_digits(GTK_SCALE(pFenPrinc^.pCurseur), 2); // Affichage de la valeur en dessous gtk_scale_set_value_pos(GTK_SCALE(pFenPrinc^.pCurseur), GTK_POS_BOTTOM); gtk_box_pack_start(GTK_BOX(pFenPrinc^.pVBox), pFenPrinc^.pCurseur, 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 gtk026
:
Puis après avoir déplacé le curseur et cliqué sur le bouton :
Saisie de données : GtkEntry ~ GtkHScale ~ GtkVScale ~ GtkSpinButton |