Programmation GTK2 en Pascal/GtkVBox

Un livre de Wikilivres.
Programmation GTK2 en Pascal

Présentation[modifier | modifier le wikicode]

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

Hiérarchie[modifier | modifier le wikicode]

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

Utilisation de base[modifier | modifier le wikicode]

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

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

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

Le paramètre homogeneous définit si tous les contrôles contenus dans la GtkVBox utilisent un espace équivalent. C'est à dire que si ce paramètre est à TRUE, la zone d'affichage de la GtkVBox sera divisée en x lignes 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 GtkVBox, il faut utiliser les fonctions disponibles pour le contrôle GtkBox. Cependant, il est nécessaire de savoir que le début d'une GtkVBox est en haut et que sa fin est en bas.

Programme exemple[modifier | modifier le wikicode]

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

Voilà le fichier gtk007.pas :

program gtk007;

uses glib2, gtk2;

var
  pFenetre : PGtkWidget;
  pVBox    : 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), 'Gtk007 : GtkVBox');
  gtk_signal_connect(pGTKOBJECT(pFenetre), 'destroy', GTK_SIGNAL_FUNC(@gtk_main_quit), NULL);

  // Création de la GtkVBox et ajout dans la fenêtre
  pVBox := gtk_vbox_new(FALSE, 0);
  gtk_container_add(GTK_CONTAINER(pFenetre), pVBox);

  // 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 GtkVBox 
  gtk_box_pack_start(GTK_BOX(pVBox), pBouton[1], TRUE, TRUE, 0);
  gtk_box_pack_start(GTK_BOX(pVBox), pBouton[2], TRUE, FALSE, 0);
  gtk_box_pack_start(GTK_BOX(pVBox), pBouton[3], FALSE, FALSE, 0);
  gtk_box_pack_start(GTK_BOX(pVBox), pBouton[4], FALSE, TRUE, 0);

  gtk_widget_show_all(pFenetre);
  gtk_main;
end.

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

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.

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