Programmation GTK2 en Pascal/GtkMenuBar
Programmation GTK2 en Pascal |
|
Présentation
modifierLe contrôle GtkMenuBar permet de gérer une barre de menu dans une fenêtre.
Hiérarchie
modifierHiérarchie |
GObject └─GtkObject └─GtkWidget └─GtkContainer └─GtkMenuShell └─GtkMenuBar |
Utilisation de base
modifierCréation
modifierLa fonction de création d'une barre de menu est simple :
function gtk_menu_bar_new : PGtkWidget;
Ajout d'élément
modifierPour 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
modifierNous 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 |