Page 1 of 1

Menu, MenuName, Cmd

Posted: 18 Sep 2017, 04:44
by eagerahk
If we could enhance the command Menu, MenuName, Cmd, so that even if a SubMenu does not exist, AHK will automatically build it without our knowledge. In the following code, we can build the popup menu in the sequence of Layer 1, Layer 2, Layer 2, Layer 1, Layer 2, Layer 2, which is clearer than how a popup menu needs to be built now--Layer 2, Layer 2, Layer 1, Layer 2, Layer 2, Layer 1. If AHK can automatically build any submenu if it does not exist, we do not need to code the initial statement to define Menus, G1 ~ G13. Thanks for reading!

Code: Select all

#singleinstance force
; must define all SubMenus,G1 ~ G13, first, to avoid seeing 「SubMenu does not exist」 error msg

Menu, G1, Add, USA, :G2
    Menu, G2, Add, New York, MenuHandler
    Menu, G2, Add, Los Angeles, MenuHandler
    Menu, G2, Add, Chicago, MenuHandler
    Menu, G2, Add, San Francisco, MenuHandler
    Menu, G2, Add, Boston, MenuHandler
Menu, G1, Add, Abroad, :G3
    Menu, G3, Add, Europe, :G4
        Menu, G4, Add, Sweden, MenuHandler
        Menu, G4, Add, Denmark, :G5
            Menu, G5, Add, Copenhagen, MenuHandler
            Menu, G5, Add, Tivoli Park, MenuHandler
        Menu, G4, Add, Norway, :G6
            Menu, G6, Add, Oslo, MenuHandler
        Menu, G4, Add, Germany, :G7
            Menu, G7, Add, Berlin, MenuHandler
			Menu, G7, Add, the Rhine, MenuHandler
		Menu, G4, Add, UK, :G8
            Menu, G8, Add, London, MenuHandler
			Menu, G8, Add, Liverpool, MenuHandler
		Menu, G4, Add, France, :G9
            Menu, G9, Add, Paris, MenuHandler
			Menu, G9, Add, Marseille, MenuHandler
    Menu, G3, Add, Asia, :G10
        Menu, G10, Add, Japan, :G11
            Menu, G11, Add, Tokyo, :G12
               Menu, G12, Add, Shinjuku, :G13
                   Menu, G13, Add, East Gate, MenuHandler
                   Menu, G13, Add, Imperial Garden, MenuHandler
			Menu, G11, Add, Osaka, MenuHandler
    
menu, G1, Add, leave

Menu, G1, Show, 1500, 500
return
MenuHandler:
MsgBox You selected "%A_ThisMenuItem%" from the menu %A_ThisMenu%.
return
leave:
menu, G1, DeleteAll
return
exit



Re: Menu, MenuName, Cmd

Posted: 18 Sep 2017, 04:54
by jeeswg
Yes, this always annoyed me about the Menu command. Perhaps this will work for you:

Code: Select all

Loop, 13
{
	Menu, % "G" A_Index, Add
	Menu, % "G" A_Index, DeleteAll
}

Re: Menu, MenuName, Cmd

Posted: 18 Sep 2017, 04:59
by eagerahk
Thanks, jeeswg.

Re: Menu, MenuName, Cmd  Topic is solved

Posted: 20 Sep 2017, 02:52
by just me
If you want to add empty submenus on the fly, you might want to use a function:

Code: Select all

#SingleInstance,  Force

MenuAddEmptySubmenu("G1", "USA", "G2")
   Menu, G2, Add, New York, MenuHandler
   Menu, G2, Add, Los Angeles, MenuHandler
   Menu, G2, Add, Chicago, MenuHandler
   Menu, G2, Add, San Francisco, MenuHandler
   Menu, G2, Add, Boston, MenuHandler
MenuAddEmptySubmenu("G1", "Abroad", "G3")
   MenuAddEmptySubmenu("G3", "Europe", "G4")
      Menu, G4, Add, Sweden, MenuHandler
      MenuAddEmptySubmenu("G4", "Denmark", "G5")
         Menu, G5, Add, Copenhagen, MenuHandler
         Menu, G5, Add, Tivoli Park, MenuHandler
      MenuAddEmptySubmenu("G4", "Norway", "G6")
         Menu, G6, Add, Oslo, MenuHandler
      MenuAddEmptySubmenu("G4", "Germany", "G7")
         Menu, G7, Add, Berlin, MenuHandler
         Menu, G7, Add, the Rhine, MenuHandler
      MenuAddEmptySubmenu("G4", "UK", "G8")
         Menu, G8, Add, London, MenuHandler
         Menu, G8, Add, Liverpool, MenuHandler
      MenuAddEmptySubmenu("G4", "France", "G9")
         Menu, G9, Add, Paris, MenuHandler
			Menu, G9, Add, Marseille, MenuHandler
   MenuAddEmptySubmenu("G3", "Asia", "G10")
      MenuAddEmptySubmenu("G10", "Japan", "G11")
         MenuAddEmptySubmenu("G11", "Tokyo", "G12")
            MenuAddEmptySubmenu("G12", "Shinjuku", "G13")
               Menu, G13, Add, East Gate, MenuHandler
               Menu, G13, Add, Imperial Garden, MenuHandler
			Menu, G11, Add, Osaka, MenuHandler

Menu, G1, Add, Leave

Menu, G1, Show ; , 1500, 500
Return

MenuHandler:
MsgBox You selected "%A_ThisMenuItem%" from the menu %A_ThisMenu%.
Return

Leave:
Menu, G1, DeleteAll
Return
Exit

MenuAddEmptySubmenu(MenuName, ItemName, SubmenuName) {
   Menu, %SubmenuName%, Add
   Menu, %SubmenuName%, DeleteAll
   Menu, %MenuName%, Add, %ItemNAme%, :%SubMenuName%
}

Re: Menu, MenuName, Cmd

Posted: 20 Sep 2017, 03:50
by eagerahk
Thanks, just me...Good idea!

Re: Menu, MenuName, Cmd

Posted: 20 Sep 2017, 03:57
by just me
Post it wherever you want. ;)