| Programmation GTK2 en Pascal |
|
Présentation
Le contrôle GtkMenuBar permet de gérer une barre de menu dans une fenêtre.
Hiérarchie
| Hiérarchie |
GObject
└─GtkObject
└─GtkWidget
└─GtkContainer
└─GtkMenuShell
└─GtkMenuBar |
Utilisation de base
Création
La fonction de création d'une barre de menu est simple :
function gtk_menu_bar_new : PGtkWidget;
Ajout d'élément
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
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 ~ GtkMenuShell — GtkMenuItem ~ GtkImageMenuItem ~ GtkCheckMenuItem ~ GtkRadioMenuItem ~ GtkSeparatorMenuItem ~ GtkTearoffMenuItem |