menu mit gui on event ansprechen

  • theoretisch kann man ja ein menu über gui on event ansprechen.

    bei normalen buttons funktioniert das aufrufen der funktionen auch wunderbar. nur leider scheitert es beim menu.

    [autoit]


    Opt ("GUIOnEventMode", 1)
    $Form1 = GUICreate("auto junky", 226, 301, 275, 361)
    GUISetOnEvent($GUI_EVENT_CLOSE, "esc")
    $Group1 = GUICtrlCreateGroup("delay", 0, 112, 145, 57, -1, $WS_EX_TRANSPARENT)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $Input1 = GUICtrlCreateInput("0", 8, 136, 65, 21)
    $Label1 = GUICtrlCreateLabel("Sekunden", 88, 136, 53, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup("Stack", 0, 184, 145, 65, -1, $WS_EX_TRANSPARENT)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $Input2 = GUICtrlCreateInput("0", 8, 208, 65, 21)
    $Label2 = GUICtrlCreateLabel("Stackgröße", 80, 208, 59, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $MenuItem1 = GUICtrlCreateMenu("Start")
    GUICtrlSetOnEvent ($MenuItem1, "auto")
    $MenuItem2 = GUICtrlCreateMenu("ReadMe")
    GUICtrlSetOnEvent ($MenuItem2, "help")
    $MenuItem3 = GUICtrlCreateMenu("Exit")
    GUICtrlSetOnEvent ($MenuItem3, "esc")

    [/autoit][autoit][/autoit][autoit]

    While 1
    sleep(1000)
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func esc()
    Exit
    EndFunc

    [/autoit]

    oder ist es nicht möglich das menu auf diese weise zu belegen?

    Einmal editiert, zuletzt von bocky3 (15. April 2009 um 15:08)

  • Hallo bocky,

    erstmal 2 Anmerkungen:
    1. bitte poste nur Scripte, die vollständig sind.
    Auf Dauer hat hier niemand Lust immer trst Includes, GuiSetState, usw nachträglich einzufügen, um Dein Script überhaupt lauffähig zu bekommen.
    2. Wenn Du Dir die Hilfe zu GuiCtrlMenuCreate durchgelesen hättest und das Beispiel dazu "verinnerlicht", dann würdest Du auch Wissen warum Dein Ansatz nicht funktionieren kann.

    So jetzt zu Deinem Problem:
    GuiCtrlCreateMenu erstellt "nur" einen Menüpunkt" Diese sind nie mit Funktionen hinterlegbar und dienen ausschließlich dazu, das eigentliche Menü zu strukturieren.
    Um dem jeweiligen Menüpunkt Elemente hinzuzufügen verwendet man GuiCtrlCreateMenuItem.
    Dieses verweist dann auf den Menü-Baum, der vorher erstellt wurde, damit das Element weiß wo es zu erscheinen hat.
    Diesem Element kannst Du dann eine Funktion zuweisen.
    Ich habe Dein Script mal erweitert/angepasst.
    Sollte ersichtlich sein, wo der Fehler lag.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt ("GUIOnEventMode", 1)
    $Form1 = GUICreate("auto junky", 226, 301, 275, 361)
    GUISetOnEvent($GUI_EVENT_CLOSE, "esc")
    $Group1 = GUICtrlCreateGroup("delay", 0, 112, 145, 57, -1, $WS_EX_TRANSPARENT)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $Input1 = GUICtrlCreateInput("0", 8, 136, 65, 21)
    $Label1 = GUICtrlCreateLabel("Sekunden", 88, 136, 53, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup("Stack", 0, 184, 145, 65, -1, $WS_EX_TRANSPARENT)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $Input2 = GUICtrlCreateInput("0", 8, 208, 65, 21)
    $Label2 = GUICtrlCreateLabel("Stackgröße", 80, 208, 59, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $menu1 = GUICtrlCreateMenu("Start")
    $MenuItem1 = GUICtrlCreateMenuItem("Start",$menu1)
    GUICtrlSetOnEvent ($MenuItem1, "auto")
    $menu2 = GUICtrlCreateMenu("ReadMe")
    $MenuItem2 = GUICtrlCreateMenuItem("ReadMe",$menu2)
    GUICtrlSetOnEvent ($MenuItem2, "help")
    $menu3 = GUICtrlCreateMenu("Exit")
    $MenuItem3 = GUICtrlCreateMenuItem("Exit",$menu3)
    GUICtrlSetOnEvent ($MenuItem3, "esc")
    GuiSetState()
    While 1
    sleep(1)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func esc()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func auto()
    MsgBox(0, '', "Auto-Menü")
    EndFunc
    Func help()
    MsgBox(0, '', "Help-Menü")
    EndFunc

    [/autoit]

    Edit: Mist, zu lange am Text geschrieben... :rofl:

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • danke, war es von delphi gewohnt auch die menüpunkte per funktion ansprechen zu können.
    hat sich dann damit erledigt.

  • Wenn man keine Unterpunkte will, sondern nur Items in der Menüleiste, funktioniert das schon, aber nur mit einem Workaround:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt ("GUIOnEventMode", 1)
    $Form1 = GUICreate("auto junky", 226, 301, 275, 361)
    GUISetOnEvent($GUI_EVENT_CLOSE, "esc")
    $Group1 = GUICtrlCreateGroup("delay", 0, 112, 145, 57, -1, $WS_EX_TRANSPARENT)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $Input1 = GUICtrlCreateInput("0", 8, 136, 65, 21)
    $Label1 = GUICtrlCreateLabel("Sekunden", 88, 136, 53, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup("Stack", 0, 184, 145, 65, -1, $WS_EX_TRANSPARENT)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $Input2 = GUICtrlCreateInput("0", 8, 208, 65, 21)
    $Label2 = GUICtrlCreateLabel("Stackgröße", 80, 208, 59, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $menu1 = GUICtrlCreateMenu("DUMMYMENU, wird später gelöscht") ; nur, damit Menüleite angezeigt wird.
    $MenuItem1 = GUICtrlCreateMenuItem("Start",-1)
    GUICtrlDelete($menu1) ; Dummymenu kann gelöscht werden, nachdem ein Item erzeigt wurde
    GUICtrlSetOnEvent ($MenuItem1, "auto")
    $MenuItem2 = GUICtrlCreateMenuItem("ReadMe",-1)
    GUICtrlSetOnEvent ($MenuItem2, "help")
    $MenuItem3 = GUICtrlCreateMenuItem("Exit",-1)
    GUICtrlSetOnEvent ($MenuItem3, "esc")
    GuiSetState()
    While 1
    sleep(1)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func esc()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func auto()
    MsgBox(0, '', "Auto-Menü")
    EndFunc
    Func help()
    MsgBox(0, '', "Help-Menü")
    EndFunc

    [/autoit]