Programmation GTK2 en Pascal/GtkTearoffMenuItem
Programmation GTK2 en Pascal |
|
Présentation
modifierLe contrôle GtkTearoffMenuItem permet de créer une copie d'un menu dans une fenêtre.
Hiérarchie
modifierHiérarchie |
GObject └─GtkObject └─GtkWidget └─GtkContainer └─GtkBin └─GtkItem └─GtkMenuItem ├─GtkImageMenuItem ├─GtkCheckMenuItem ─ GtkRadioMenuItem ├─GtkSeparatorMenuItem └─GtkTearoffMenuItem |
Utilisation de base
modifierCréation
modifierLa fonction de création est la suivante :
function gtk_tearoff_menu_item_new : PGtkWidget;
Détacher le menu
modifierPour détacher le menu dans lequel se trouve l'élément GtkTearoffMenuItem
, il suffit de cliquer sur celui-ci. Un second clic sur l'élément (que cela soit dans le menu ou dans la fenêtre) supprimera la fenêtre créée.
Programme exemple
modifierVoilà le fichier gtk038.pas
:
program gtk038; uses glib2, gtk2; var pFenetre : PGtkWidget; pVBox : PGtkWidget; pBarreMenu : PGtkWidget; pMenuItemFichier : PGtkWidget; pMenuFichier : PGtkWidget; pMenuDetachable : PGtkWidget; pMenuItemOuvrir : PGtkWidget; pMenuItemFermer : PGtkWidget; pMenuItemQuitter : PGtkWidget; pMenuSeparateur : 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), 'Gtk038 : Menu détachable'); gtk_signal_connect(pGTKOBJECT(pFenetre), 'destroy', GTK_SIGNAL_FUNC(@gtk_main_quit), NULL); // Création de la GtkVBox pVBox := gtk_vbox_new(FALSE, 5); 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 de l'item Fichier et rattachement à la barre de menu pMenuItemFichier := gtk_menu_item_new_with_label('Fichier'); gtk_menu_shell_append(GTK_MENU_SHELL(pBarreMenu), pMenuItemFichier); // Création du menu Fichier et rattachement à l'item Fichier pMenuFichier := gtk_menu_new; gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItemFichier), pMenuFichier); // Création de l'élément détachable pMenuDetachable := gtk_tearoff_menu_item_new; gtk_menu_shell_append(GTK_MENU_SHELL(pMenuFichier), pMenuDetachable); // Création de l'item Ouvrir et rattachement au menu Fichier pMenuItemOuvrir := gtk_image_menu_item_new_from_stock(GTK_STOCK_OPEN, NULL); gtk_menu_shell_append(GTK_MENU_SHELL(pMenuFichier), pMenuItemOuvrir); // Création de l'item Fermer et rattachement au menu Fichier pMenuItemFermer := gtk_image_menu_item_new_from_stock(GTK_STOCK_CLOSE, NULL); gtk_menu_shell_append(GTK_MENU_SHELL(pMenuFichier), pMenuItemFermer); // Création du séparateur pMenuSeparateur := gtk_separator_menu_item_new; gtk_menu_shell_append(GTK_MENU_SHELL(pMenuFichier), pMenuSeparateur); // Création de l'item Quitter et rattachement au menu Fichier pMenuItemQuitter := gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, NULL); gtk_menu_shell_append(GTK_MENU_SHELL(pMenuFichier), pMenuItemQuitter); g_signal_connect(pGTKOBJECT(pMenuItemQuitter), 'activate', G_CALLBACK(@gtk_main_quit), NULL); gtk_widget_show_all(pFenetre); gtk_main; end.
Voilà ce que donne l'exécution du programme gtk038.pas
après le lancement après avoir cliqué sur le menu « Fichier » et placer le curseur de la souris au dessus de l'élément « détachable » (la ligne de pointillée) :
Puis après avoir cliqué sur l'élément « détachable » :
Menu : GtkMenuBar ~ GtkMenu ~ GtkMenuShell — GtkMenuItem ~ GtkImageMenuItem ~ GtkCheckMenuItem ~ GtkRadioMenuItem ~ GtkSeparatorMenuItem ~ GtkTearoffMenuItem |