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

    über mich...

    ich habe meine Erfahrungen hauptsächlich gesammelt in (grobe Übersicht):

    - RibbonBar Automation
    - MySQL Nutzung
    - GUIs in vielerlei Ausprägung
    - Nutzung von Powershell / Batch in AutoIt
    - Windows Automatisierung

    außerhalb von AutoIt:

    - Sprachen: PS, Batch, php, html(5), javascript, (perl eingeschränkt), vbs
    - Powershell (AD, WPF inkl. Multi-Threading, ...)
    - Deployment-Automatisierung ohne SCCM
    - Office-Nutzung mit COM-Object (AutoIt, PowerShell)
    - ActiveDirectory und alles was damit zusammenhängt
    - Hyper-V Clustering (Converged / Hyper Converged)
    - Serverhardware (Konfiguration, Aufbau, Architektur, Betrieb)

    Lieblingsthema:

    günstige Automatisierung von Vorgängen, für die andere Firmen viel Geld nehmen

    more to come ...

  • 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]