Programmation GTK2 en Pascal/GtkMenuBar

Programmation GTK2 en Pascal

Présentation modifier

Le contrôle GtkMenuBar permet de gérer une barre de menu dans une fenêtre.

Hiérarchie modifier

Hiérarchie
GObject
  └─GtkObject
      └─GtkWidget
          └─GtkContainer
              └─GtkMenuShell
                  └─GtkMenuBar

Utilisation de base modifier

Création modifier

La fonction de création d'une barre de menu est simple :

function gtk_menu_bar_new : PGtkWidget;

Ajout d'élément modifier

Pour ajouter des éléments dans une GtkMenuBar, il faut utiliser les fonctions du contrôle GtkMenuShell :

procedure gtk_menu_shell_append(menu_shell : PGtkMenuShell; child : PGtkWidget);
procedure gtk_menu_shell_prepend(menu_shell : PGtkMenuShell; child : PGtkWidget);

La première fonction ajoute les éléments de gauche à droite alors que la seconde les ajoute de droite à gauche. Le paramètre menu_shell est le GtkMenuBar dans laquelle nous voulons ajouter l'élément et le paramètre child est l'élément à ajouter. Pour le premier paramètre, il faudra utiliser la fonction de conversion GTK_MENU_SHELL.

Programme exemple modifier

Nous allons créer dans une fenêtre une barre de menu dans laquelle nous allons ajouter un item de menu qui permettra de quitter l'application.

Voilà le fichier gtk032.pas :

program gtk032;

uses glib2, gtk2;

procedure OnQuitter(AWidget : PGtkwidget; AData : PGPointer); cdecl;
var
  pQuestion : PGtkWidget;
begin
  // Création de la boîte de message 
  pQuestion := gtk_message_dialog_new(GTK_WINDOW(AData),
                 GTK_DIALOG_MODAL,
                 GTK_MESSAGE_QUESTION,
                 GTK_BUTTONS_YES_NO,
                 'Voulez-vous vraiment'#13#10'quitter le programme ?');

  // Affichage de la boîte de message 
  case gtk_dialog_run(GTK_DIALOG(pQuestion)) of
    GTK_RESPONSE_YES : gtk_main_quit;
    GTK_RESPONSE_NONE, GTK_RESPONSE_NO : gtk_widget_destroy(pQuestion);
  end; 
end;

var
  pFenetre   : PGtkWidget;
  pVBox	     : PGtkWidget;
  pBarreMenu : PGtkWidget;
  pItemMenu  : 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), 'Gtk032 : Barre de menu');
  gtk_signal_connect(pGTKOBJECT(pFenetre), 'destroy', GTK_SIGNAL_FUNC(@gtk_main_quit), NULL);

  // Création de la GtkVBox
  pVBox := gtk_vbox_new(FALSE, 0);
  gtk_container_add(GTK_CONTAINER(pFenetre), pVBox);

  // Création de la barre de menu
  pBarreMenu := gtk_menu_bar_new;
  gtk_box_pack_start(GTK_BOX(pVBox), pBarreMenu, FALSE, FALSE, 0);

  // Création du GtkMenuItem Quitter
  pItemMenu := gtk_menu_item_new_with_label('Quitter');
  g_signal_connect(pGTKOBJECT(pItemMenu), 'activate', G_CALLBACK(@OnQuitter), pGTKOBJECT(pFenetre));
  gtk_menu_shell_append(GTK_MENU_SHELL(pBarreMenu), pItemMenu);

  gtk_widget_show_all(pFenetre);
  gtk_main;
end.

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

 


Menu : GtkMenuBar ~ GtkMenu ~ GtkMenuShellGtkMenuItem ~ GtkImageMenuItem ~ GtkCheckMenuItem ~ GtkRadioMenuItem ~ GtkSeparatorMenuItem ~ GtkTearoffMenuItem