Zohar Posted March 10, 2012 Share Posted March 10, 2012 (edited) Hi I am trying to create a simple code, that will open a ContextMenu, and will give some options, and then after I choose of MenuItem, some code will run. Here's what I have: #include <GuiMenu.au3> Local $SampleArray[4] =["A","B","C","D"] Local $WindowThatHoldsTheContextMenu = GUICreate("",1,1,-10,-10) Local $ContextMenu =CreateContextMenuFromArray($SampleArray,"ContextMenuHandler") _GUICtrlMenu_TrackPopupMenu(GUICtrlGetHandle($ContextMenu),$WindowThatHoldsTheContextMenu) Sleep(4000) Func CreateContextMenuFromArray($MenuItems,$ContextMenuHandler_Name) ;Creating the Menu Local $ContextMenu =GUICtrlCreateContextMenu() ;Creating the MenuItems Local $ContextMenu_MenuItem For $i=0 To UBound($MenuItems)-1 $ContextMenu_MenuItem =GUICtrlCreateMenuItem($MenuItems[$i],$ContextMenu) GUICtrlSetOnEvent($ContextMenu_MenuItem,$ContextMenuHandler_Name) Next Return $ContextMenu EndFunc Func ContextMenuHandler() Beep(1000,100) MsgBox(0,"",@GUI_CTRLID) EndFunc It does show the Menu, But after I choose a MenuItem, the relevant function is not called.. Why? Edited September 13, 2012 by Zohar Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted March 10, 2012 Moderators Share Posted March 10, 2012 Zohar,- 1. You have not set OnEvent mode so it is hardly suprising that nothing works. - 2. You need to use GUISetState so that the GUI actually exists. This works for me: #include <GuiMenu.au3> Opt("GUIOnEventMode", 1) Local $SampleArray[4] = ["A", "B", "C", "D"] Local $WindowThatHoldsTheContextMenu = GUICreate("",1,1,-10,-10) GUISetState() Local $ContextMenu = CreateContextMenuFromArray($SampleArray, "ContextMenuHandler") _GUICtrlMenu_TrackPopupMenu(GUICtrlGetHandle($ContextMenu), $WindowThatHoldsTheContextMenu) Sleep(4000) Func CreateContextMenuFromArray($MenuItems, $ContextMenuHandler_Name) ;Creating the Menu Local $ContextMenu = GUICtrlCreateContextMenu() ;Creating the MenuItems Local $ContextMenu_MenuItem For $i = 0 To UBound($MenuItems) - 1 $ContextMenu_MenuItem = GUICtrlCreateMenuItem($MenuItems[$i], $ContextMenu) GUICtrlSetOnEvent($ContextMenu_MenuItem, $ContextMenuHandler_Name) Next Return $ContextMenu EndFunc ;==>CreateContextMenuFromArray Func ContextMenuHandler() Beep(1000, 100) MsgBox(0, "", @GUI_CtrlId) EndFunc ;==>ContextMenuHandlerM23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Zohar Posted March 10, 2012 Author Share Posted March 10, 2012 Hi MelbaThank you very much.There's one problem tho, with GUISetState():The window that I created, is hidden on purpose - I do not want to show it, and the only reason it exists, is for the ContextMenu..(If I could create the ContextMenu without that window, I would have..)So now when I use GUISetState(), it makes the window appear in the TaskBar..What can I do to prevent it? Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted March 10, 2012 Moderators Share Posted March 10, 2012 Zohar, Make the GUI a child of the hidden Autoit window like this: Local $WindowThatHoldsTheContextMenu = GUICreate("", 1, 1, -10, -10, Default, Default, WinGetHandle(AutoItWinGetTitle())) M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Zohar Posted March 24, 2012 Author Share Posted March 24, 2012 Hi Melba Thank you, it worked =) Zohar Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now