Présentation.
Le contrôle GtkRadioMenuItem est un élément de menu qui est l'équivalent d'un bouton radio (codice_1).
Utilisation de base.
Création.
Tout comme pour le contrôle codice_1, Gtk+ utilise les listes simplement chaînées. Pour créer le groupe ainsi que le premier bouton, il faut utiliser une des ces fonctions :
 function gtk_radio_menu_item_new(group : PGSList) : PGtkWidget;
 function gtk_radio_menu_item_new_with_label(group : PGSList; _label : Pgchar) : PGtkWidget;
 function gtk_radio_menu_item_new_with_mnemonic(group : PGSList; _label : Pgchar) : PGtkWidget;
Pour créer le premier élément du groupe, il faut que le paramètre codice_3 soit égal à codice_4. Par contre pour ajouter des éléments supplémentaires, ce paramètre est obligatoire. Il faudra donc récupérer sa valeur avec cette fonction :
 function gtk_radio_menu_item_get_group(radio_menu_item : PGtkRadioMenuItem) : PGSList;
Cette fonction doit être utilisée avant chaque ajout d'élément.
Cependant pour éviter cette étape, GTK nous offre trois autres fonctions d'ajout :
 function gtk_radio_menu_item_new_from_widget(group : PGtkRadioMenuItem) : PGtkWidget;
 function gtk_radio_menu_item_new_with_label_from_widget(group : PGtkRadioMenuItem; _label : Pgchar) : PGtkWidget;
 function gtk_radio_menu_item_new_with_mnemonic_from_widget(group : PGtkRadioMenuItem; _label : Pgchar) : PGtkWidget;
Programme exemple.
Nous allons créer un menu permettant le choix entre trois valeurs différentes, la valeur sélectionnée étant affichée dans un label.
Voilà le fichier codice_5 :
 program gtk036;
 uses glib2, gtk2;
 procedure OnMenuItemClic(APWidget : PGtkwidget; AData : pgpointer); cdecl;
 var
 TexteDuMenu : pgchar;
 Texte : pgchar;
 begin
 // Récuperation du texte du menu cliqué
 TexteDuMenu := gtk_label_get_text(GTK_LABEL(GTK_BIN(APWidget)^.Child));
 Texte := g_strdup_printf('%s est actif', [TexteDuMenu]);
 // Affichage du texte dans le label
 gtk_label_set_text(GTK_LABEL(AData), Texte);
 g_free(Texte);
 end;
 var
 pFenetre : PGtkWidget;
 pVBox : PGtkWidget;
 pBarreMenu : PGtkWidget;
 pMenuItemAffichage : PGtkWidget;
 pMenuAffichage : PGtkWidget;
 pMenuItemValeur1 : PGtkWidget;
 pMenuItemValeur2 : PGtkWidget;
 pMenuItemValeur3 : PGtkWidget;
 pLabel : PGtkWidget;
 pGroupe : PGSList;
 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), 'Gtk036 : Élément de menu « radio »');
 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 Affichage et rattachement à la barre de menu
 pMenuItemAffichage := gtk_menu_item_new_with_label('Affichage');
 gtk_menu_shell_append(GTK_MENU_SHELL(pBarreMenu), pMenuItemAffichage);
 // Création du menu Affichage et rattachement à l'item Affichage
 pMenuAffichage := gtk_menu_new;
 gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItemAffichage), pMenuAffichage);
 // Création de l'item « Valeur 1 » et rattachement au menu Affichage
 pMenuItemValeur1 := gtk_radio_menu_item_new_with_label(NULL, 'Valeur 1');
 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(pMenuItemValeur1), TRUE);
 gtk_menu_shell_append(GTK_MENU_SHELL(pMenuAffichage), pMenuItemValeur1);
 pGroupe := gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(pMenuItemValeur1));
 // Création de l'item « Valeur 2 » et rattachement au menu Affichage
 pMenuItemValeur2 := gtk_radio_menu_item_new_with_label(pGroupe, 'Valeur 2');
 gtk_menu_shell_append(GTK_MENU_SHELL(pMenuAffichage), pMenuItemValeur2);
 pGroupe := gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(pMenuItemValeur2));
 // Création de l'item « Valeur 3 » et rattachement au menu Affichage
 pMenuItemValeur3 := gtk_radio_menu_item_new_with_label(pGroupe, 'Valeur 3');
 gtk_menu_shell_append(GTK_MENU_SHELL(pMenuAffichage), pMenuItemValeur3);
 pGroupe := gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(pMenuItemValeur3));
 // Création du label 
 pLabel := gtk_label_new('Valeur 1 est actif');
 gtk_box_pack_start(GTK_BOX(pVBox), pLabel, TRUE, FALSE, 0);
 // Signal des items « Valeur x »
 g_signal_connect(pGTKOBJECT(pMenuItemValeur1), 'activate', G_CALLBACK(@OnMenuItemClic), pLabel);
 g_signal_connect(pGTKOBJECT(pMenuItemValeur2), 'activate', G_CALLBACK(@OnMenuItemClic), pLabel);
 g_signal_connect(pGTKOBJECT(pMenuItemValeur3), 'activate', G_CALLBACK(@OnMenuItemClic), pLabel);
 gtk_widget_show_all(pFenetre);
 gtk_main;
 end.
Voilà ce que donne l'exécution du programme codice_5 après le lancement après avoir cliqué sur le menu « Affichage » et placer le curseur de la souris au dessus de « Valeur 3 » :
Puis après avoir cliqué sur « Valeur 3 » et à nouveau resélectionner le menu « Affichage », le label et le menu ont bien été modifiés :

Programmation GTK2 en Pascal/GtkSeparatorMenuItem