Programmation GTK2 en Pascal/GtkHBox

Un livre de Wikilivres.
Programmation GTK2 en Pascal

Présentation[modifier | modifier le wikicode]

Le contrôle GtkHBox est tout simplement une GtkBox qui va nous permettre d'empiler les contrôles horizontalement.

Hiérarchie[modifier | modifier le wikicode]

Hiérarchie
GObject
  └─GtkObject
      └─GtkWidget
          └─GtkContainer
              └─GtkBox
                  └─GtkHBox

Utilisation de base[modifier | modifier le wikicode]

Création d'une GtkHBox[modifier | modifier le wikicode]

La création d'une GtkHBox se fait tout simplement à l'aide de l'unique fonction disponible pour ce contrôle :

function gtk_hbox_new(homogeneous : gboolean; spacing : gint) : PGtkWidget;

Le paramètre homogeneous définit si tous les contrôles contenus dans la GtkHBox utilisent un espace équivalent. C'est à dire que si ce paramètre est à TRUE, la zone d'affichage de la GtkHBox sera divisée en x colonnes de taille égale (x étant le nombre de contrôles contenus).

Le paramètre spacing permet de définir l'espacement entre chacun des contrôles contenus.

Ajout d'un contrôle[modifier | modifier le wikicode]

Pour ajouter un contrôle dans une GtkHBox, il faut utiliser les fonctions disponibles pour le contrôle GtkBox. Cependant, il est nécessaire de savoir que le début d'une GtkHBox est à gauche et que sa fin est à droite.

Programme exemple[modifier | modifier le wikicode]

Nous allons simplement insérer quatre boutons dans une GtkHBox.

Voilà le fichier gtk006.pas :

program gtk006;

uses glib2, gtk2;

var
  pFenetre : PGtkWidget;
  pHBox    : PGtkWidget;
  pBouton  : array [1..4] 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), 'Gtk006 : GtkHBox');
  gtk_signal_connect(pGTKOBJECT(pFenetre), 'destroy', GTK_SIGNAL_FUNC(@gtk_main_quit), NULL);

  // Création de la GtkHBox et ajout dans la fenêtre
  pHBox := gtk_hbox_new(FALSE, 0);
  gtk_container_add(GTK_CONTAINER(pFenetre), pHBox);

  // Création des boutons
  pBouton[1] := gtk_button_new_with_label('Bouton 1');
  pBouton[2] := gtk_button_new_with_label('Bouton 2');
  pBouton[3] := gtk_button_new_with_label('Bouton 3');
  pBouton[4] := gtk_button_new_with_label('Bouton 4');

  // Ajout des boutons dans la GtkHBox 
  gtk_box_pack_start(GTK_BOX(pHBox), pBouton[1], TRUE, TRUE, 0);
  gtk_box_pack_start(GTK_BOX(pHBox), pBouton[2], TRUE, FALSE, 0);
  gtk_box_pack_start(GTK_BOX(pHBox), pBouton[3], FALSE, FALSE, 0);
  gtk_box_pack_start(GTK_BOX(pHBox), pBouton[4], FALSE, TRUE, 0);

  gtk_widget_show_all(pFenetre);
  gtk_main;
end.

Voilà ce que donne l'exécution du programme gtk006 :

Récapitulatif des paramètres de gtk_box_pack_start pour chaque bouton (La boîte n'est pas homogène) :

Bouton expand fill
n° 1 True True
n° 2 True False
n° 3 False False
n° 4 False True

Rappel : Quand expand n'est pas positionné, fill n'a aucun effet.

La même fenêtre après redimensionnement « à la main » :

Conteneurs : GtkContainer ~ GtkBox ~ GtkBinGtkHBox ~ GtkVBox ~ GtkTable ~ GtkNotebook