Programmation GTK2 en Pascal/GtkFrame

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche
Programmation GTK2 en Pascal

Présentation[modifier | modifier le wikicode]

Le 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[modifier | modifier le wikicode]

Hiérarchie
GObject
  └─GtkObject
      └─GtkWidget
          └─GtkContainer
              └─GtkBin
                  └─GtkFrame

Utilisation de base[modifier | modifier le wikicode]

Création[modifier | modifier le wikicode]

Le 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[modifier | modifier le wikicode]

Il 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[modifier | modifier le wikicode]

Les 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[modifier | modifier le wikicode]

Par 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[modifier | modifier le wikicode]

Le 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[modifier | modifier le wikicode]

Nous 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 :

Programmation GTK2 en Pascal - gtk039.png


Décorations : GtkFrame ~ GtkHSeparator ~ GtkVSeparator