Zohar Posted March 10, 2012 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
Moderators Melba23 Posted March 10, 2012 Moderators 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
Zohar Posted March 10, 2012 Author 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?
Moderators Melba23 Posted March 10, 2012 Moderators 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
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