Jump to content

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


Recommended Posts

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
Link to post
Share on other sites
  • Moderators

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

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 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

 

Link to post
Share on other sites

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?

Link to post
Share on other sites
  • Moderators

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

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 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

 

Link to post
Share on other sites
  • 2 weeks later...

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
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...