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 ~ GtkMenuShell — GtkMenuItem ~ GtkImageMenuItem ~ GtkCheckMenuItem ~ GtkRadioMenuItem ~ GtkSeparatorMenuItem ~ GtkTearoffMenuItem |