Jump to content
Sign in to follow this  
Zohar

[Solved] Why Isn't The ContextMenuHandler Function Called?

Recommended Posts

Zohar

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 by Zohar

Share this post


Link to post
Share on other sites
Melba23

Zohar,

- 1. You have not set OnEvent mode so it is hardly suprising that nothing works. :bye:

- 2. You need to use GUISetState so that the GUI actually exists. :doh:

This works for me: :oops:

#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   ;==>ContextMenuHandler

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites
Zohar

Hi Melba

Thank 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?

Share this post


Link to post
Share on other sites
Melba23

Zohar,

Make the GUI a child of the hidden Autoit window like this: :oops:

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._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites
Zohar

Hi Melba

Thank you, it worked =)

Zohar

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×