Programmation GTK2 en Pascal/GtkFrame
Programmation GTK2 en Pascal |
|
Présentation
modifierLe contrôle GtkFrame permet de créer différentes zones dans une même fenêtre à l'aide de cadres qui peuvent avoir un titre afin de définir la zone.
Il est classé par différents auteurs dans les contrôles décoratifs, mais il pourrait également être dans les conteneurs.
Hiérarchie
modifierHiérarchie |
GObject └─GtkObject └─GtkWidget └─GtkContainer └─GtkBin └─GtkFrame |
Utilisation de base
modifierCréation
modifierLe contrôle GtkFrame
étant très simple, il n'y a qu'une seule fonction de création :
function gtk_frame_new(_label : Pgchar) : PGtkWidget;
Le paramètre _label
est tout simplement le texte qui sera affiché en haut à gauche du cadre (position par défaut).
Modification du texte
modifierIl peut arriver que dans votre application, le texte du cadre nécessite une modification. Bien entendu, le contrôle GtkFrame
est fourni avec toutes les fonctions nécessaires :
procedure gtk_frame_set_label(frame : PGtkFrame; _label : Pgchar);
Le paramètre frame
est le contrôle GtkFrame
dont nous voulons modifier le texte, et _label
est le nouveau texte à inscrire. Cette fois encore, il faut utiliser une fonction de conversion pour le premier paramètre qui est cette fois GTK_FRAME.
Pour récupérer le texte du cadre, la fonction est :
function gtk_frame_get_label(frame : PGtkFrame) : Pgchar;
Remplacer le texte par un contrôle
modifierLes cadres offrent aussi la possibilité de remplacer le texte par un contrôle quelconque (GtkImage, GtkStockItem, etc.) grâce à cette fonction :
procedure gtk_frame_set_label_widget(frame : PGtkFrame; label_widget : PGtkWidget);
Et comme toujours, la fonction permettant de récupérer le contrôle affiché:
function gtk_frame_get_label_widget(frame : PGtkFrame) : PGtkWidget;
Position du texte
modifierPar défaut, la position du texte est en haut à gauche du cadre, centré en hauteur par rapport à la ligne supérieure. Cela peut-être modifié avec cette fonction :
procedure gtk_frame_set_label_align(frame : PGtkFrame; xalign : gfloat; yalign : gfloat);
Les valeurs xalign
et yalign
doivent être comprises entre 0.0 et 1.0.
Le paramètre xalign
définit la position horizontale du texte. Une valeur de 0.0 positionne le texte à gauche du cadre, tandis qu'une valeur de 1.0 le positionne à droite. Évidemment, une valeur de 0.5 centrera le texte.
Quant à yalign
, il permet de définir la position verticale du texte par rapport à la ligne supérieure du cadre. Une valeur de 0.0 mettra le nom en dessous de la ligne et une valeur de 1.0 le mettra au-dessus de la ligne.
On peut, bien sûr, connaître les valeurs de positionnement avec les fonctions suivantes :
procedure gtk_frame_get_label_align(frame : PGtkFrame; xalign : Pgfloat; yalign : Pgfloat);
Style du cadre
modifierLe style du cadre est donné par la configuration visuelle de ses lignes et plus précisément de l'ombre des lignes. Cette modification de fait avec cette fonction :
procedure gtk_frame_set_shadow_type(frame : PGtkFrame; _type : TGtkShadowType);
Le paramètre type peut prendre cinq valeurs différentes :
- GTK_SHADOW_NONE : pas d'ombre
- GTK_SHADOW_IN : les lignes sont biseautées à l'intérieur, comme un champ de saisie
- GTK_SHADOW_OUT : les lignes sont biseautées à l'extérieur, comme un bouton
- GTK_SHADOW_ETCHED_IN : les lignes paraissent creusées (valeur par défaut)
- GTK_SHADOW_ETCHED_OUT : les lignes paraissent en relief
Programme exemple
modifierNous allons créer un programme très simple avec trois cadres différents.
Voilà le fichier gtk039.pas
:
program gtk039; uses glib2, gtk2; var pFenetre : PGtkWidget; pVBox : PGtkWidget; pBouton : PGtkWidget; pChampSaisie : PGtkWidget; pLabel : PGtkWidget; pCadre : array[1..3] of PGtkWidget; pHBox : array[1..3] of 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_window_set_title(GTK_WINDOW(pFenetre), 'Gtk039 : Cadres'); gtk_signal_connect(pGTKOBJECT(pFenetre), 'destroy', G_CALLBACK(@gtk_main_quit), NULL); // Création de la GtkVBox pVBox := gtk_vbox_new(TRUE, 5); gtk_container_add(GTK_CONTAINER(pFenetre), pVBox); // Création des cadres, des contrôles à mettre dedans, etc. pCadre[1] := gtk_frame_new('Un GtkLabel'); pLabel := gtk_label_new('Le label'); gtk_container_add(GTK_CONTAINER(pCadre[1]), pLabel); gtk_box_pack_start(GTK_BOX(pVBox), pCadre[1], FALSE, FALSE, 0); pCadre[2] := gtk_frame_new('Un GtkButton'); pBouton := gtk_button_new_with_label('Le bouton'); pHBox[2] := gtk_hbox_new(TRUE, 5); gtk_box_pack_start(GTK_BOX(pHBox[2]), pBouton, TRUE, FALSE, 5); gtk_container_add(GTK_CONTAINER(pCadre[2]), pHBox[2]); gtk_box_pack_start(GTK_BOX(pVBox), pCadre[2], FALSE, FALSE, 0); gtk_frame_set_shadow_type(GTK_FRAME(pCadre[2]), GTK_SHADOW_IN); pCadre[3] := gtk_frame_new('Une GtkEntry'); pChampSaisie := gtk_entry_new; pHBox[3] := gtk_hbox_new(TRUE, 5); gtk_box_pack_start(GTK_BOX(pHBox[3]), pChampSaisie, TRUE, FALSE, 5); gtk_container_add(GTK_CONTAINER(pCadre[3]), pHBox[3]); gtk_box_pack_start(GTK_BOX(pVBox), pCadre[3], TRUE, FALSE, 5); gtk_frame_set_shadow_type(GTK_FRAME(pCadre[3]), GTK_SHADOW_ETCHED_OUT); gtk_widget_show_all(pFenetre); gtk_main; end.
Voilà ce que donne l'exécution du programme gtk039
:
Décorations : GtkFrame ~ GtkHSeparator ~ GtkVSeparator |