GUIOnEventMode Beispiel - Ausführlich Kommentiert

  • Habe um Fragen wie beispielsweise:

    Zitat

    Hilfe , wenn ich 2 GUI's habe klappen meine Buttons nicht mehr?!?!?!?!

    Zitat

    Wie kann ich 2 GUI's erstellen?

    vorzubeugen mal ein kleines

    [autoit]

    GUICtrlSetOnEvent

    [/autoit]

    Beispiel gemacht.
    kann ja gepinned werden oder so :P.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3> ;wird benötigt für GUI und GUI-Event
    Opt("GUIOnEventMode", 1) ;schaltet den GUIOnEventMode ein
    $GUI1 = "Test GUI 1" ;dient der Übersicht
    $GUI2 = "Test GUI 2" ;dient der Übersicht
    $GUI3 = "Test GUI 3" ;dient der Übersicht
    GUICreate ($GUI1,161,51,0,0) ;GUI 1 wird erstellt (1./oberste)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_SpecialEvents") ;$GUI_EVENT_CLOSE ist = "X" drücken - Wenn "X" gedrückt wird dann soll die Funktion _SpecialEvents aufgerufen werden
    $Button1 = GUICtrlCreateButton("Button 1",0,0,50,50) ;erstellt Button 1 in der 1./obersten GUI
    GUICtrlSetOnEvent($Button1,"_Button1") ;wenn auf den 1. Button der obersten GUI gedrückt wird dann soll Funktion _Button1 aufgerufen werden
    $Button2 = GUICtrlCreateButton("Button 2",55,0,50,50) ;erstellt Button 2 in der 1./obersten GUI
    GUICtrlSetOnEvent($Button2,"_Button2") ;wenn auf den 2. Button gedrückt wird dann soll Funktion _Button2 aufgerufen werden
    $Button3 = GUICtrlCreateButton("Button 3",110,0,50,50) ;erstellt Button 3 in der 1./obersten GUI
    GUICtrlSetOnEvent($Button3,"_Button3") ;wenn auf den 3. Button gedrückt wird dann soll Funktion _Button3 aufgerufen werden
    GUISetState(@SW_SHOW) ;Damit die GUI angezeigt wird. (Man könnte auch GUISetState(@SW_HIDE) benutzen um die GUI quasi unsichtbar zustarten)
    GUICreate ($GUI2,161,51,0,90) ;GUI 2 wird erstellt (2./mittlere)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_SpecialEvents") ;$GUI_EVENT_CLOSE ist = "X" drücken - Wenn "X" gedrückt wird dann soll die Funktion _SpecialEvents aufgerufen werden
    $Button4 = GUICtrlCreateButton("Button 1",0,0,50,50) ;erstellt Button 1 in der 2./mittleren GUI
    GUICtrlSetOnEvent($Button4,"_Button4") ;wenn auf den 1. Button der mittleren GUI gedrückt wird dann soll Funktion _Button4 aufgerufen werden
    $Button5 = GUICtrlCreateButton("Button 2",55,0,50,50) ;erstellt Button 2 in der 2./mittleren GUI
    GUICtrlSetOnEvent($Button5,"_Button5") ;wenn auf den 2. Button der mittleren GUI gedrückt wird dann soll Funktion _Button5 aufgerufen werden
    $Button6 = GUICtrlCreateButton("Button 3",110,0,50,50) ;erstellt Button 3 in der 2./mittleren GUI
    GUICtrlSetOnEvent($Button6,"_Button6") ;wenn auf den 2. Button der mittleren GUI gedrückt wird dann soll Funktion _Button6 aufgerufen werden
    GUISetState(@SW_SHOW) ;Damit die GUI angezeigt wird. (Man könnte auch GUISetState(@SW_HIDE) benutzen um die GUI quasi unsichtbar zustarten)
    GUICreate ($GUI3,161,51,0,180) ;GUI 3 wird erstellt (3./unterste)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_SpecialEvents") ;$GUI_EVENT_CLOSE ist = "X" drücken - Wenn "X" gedrückt wird dann soll die Funktion _SpecialEvents aufgerufen werden
    $Button7 = GUICtrlCreateButton("Button 1",0,0,50,50) ;erstellt Button 1 in der 3./untersten GUI
    GUICtrlSetOnEvent($Button7,"_Button7") ;wenn auf den 1. Button der untersten GUI gedrückt wird dann soll Funktion _Button7 aufgerufen werden
    $Button8 = GUICtrlCreateButton("Button 2",55,0,50,50) ;erstellt Button 2 in der 3./untersten GUI
    GUICtrlSetOnEvent($Button8,"_Button8") ;wenn auf den 2. Button der untersten GUI gedrückt wird dann soll Funktion _Button8 aufgerufen werden
    $Button9 = GUICtrlCreateButton("Button 3",110,0,50,50) ;erstellt Button 3 in der 3./untersten GUI
    GUICtrlSetOnEvent($Button9,"_Button9") ;wenn auf den 3. Button der untersten GUI gedrückt wird dann soll Funktion _Button9 aufgerufen werden
    GUISetState(@SW_SHOW) ;Damit die GUI angezeigt wird. (Man könnte auch GUISetState(@SW_HIDE) benutzen um die GUI quasi unsichtbar zustarten)
    While 1 ;Anfang While - WEnd Schleife
    If WinGetState($GUI1) = 5 And WinGetState($GUI2) = 5 And WinGetState($GUI3) = 5 Then ;Da WinKill(WinGetTitle(@GUI_WinHandle)) nicht klappt habe ich es so gelöst.
    MsgBox (0,"","Alle 3 GUI's sind beendet wurden , das Programm wird sich nun beenden",2) ;MsgBox zu Vorführzwecken
    Exit ;Beendet die .au3/.exe
    EndIf
    Sleep (10) ;Um die CPU-Auslastung etwas zu entlasten
    WEnd ;Ende While - WEnd Schleife

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

    ;Hier stehen die Funktionen , ich denke nicht das man da großartig was erwähnen muss.
    ;BTW , @GUI_WinHandle liefert das Handle des zuletzt angeklickten Fensters zurück und mit WingetTitle() wandle ich das Handle quasi in einen Fesntertitel um! Falls sich manche jetzt fragen wofür das ist.
    Func _Button1()
    MsgBox (0,WinGetTitle(@GUI_WinHandle),"Button1 wurde gedrückt",2)
    EndFunc

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

    Func _Button2()
    MsgBox (0,WinGetTitle(@GUI_WinHandle),"Button2 wurde gedrückt",2)
    EndFunc

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

    Func _Button3()
    MsgBox (0,WinGetTitle(@GUI_WinHandle),"Button3 wurde gedrückt",2)
    EndFunc

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

    Func _Button4()
    MsgBox (0,WinGetTitle(@GUI_WinHandle),"Button1 wurde gedrückt",2)
    EndFunc

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

    Func _Button5()
    MsgBox (0,WinGetTitle(@GUI_WinHandle),"Button2 wurde gedrückt",2)
    EndFunc

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

    Func _Button6()
    MsgBox (0,WinGetTitle(@GUI_WinHandle),"Button3 wurde gedrückt",2)
    EndFunc

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

    Func _Button7()
    MsgBox (0,WinGetTitle(@GUI_WinHandle),"Button1 wurde gedrückt",2)
    EndFunc

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

    Func _Button8()
    MsgBox (0,WinGetTitle(@GUI_WinHandle),"Button2 wurde gedrückt",2)
    EndFunc

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

    Func _Button9()
    MsgBox (0,WinGetTitle(@GUI_WinHandle),"Button3 wurde gedrückt",2)
    EndFunc

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

    Func _SpecialEvents()
    WinSetState(WinGetTitle(@GUI_WinHandle),"",@SW_HIDE)
    MsgBox (0,"","Fenster " &WinGetTitle(@GUI_WinHandle) & " wurde beendet",2)
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Du kannst das gewaltig kürzen, wenn du das Makro @GUI_CtrlId verwendest.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3> ;wird benötigt für GUI und GUI-Event
    Opt("GUIOnEventMode", 1) ;schaltet den GUIOnEventMode ein
    $GUI1 = "Test GUI 1" ;dient der Übersicht
    $GUI2 = "Test GUI 2" ;dient der Übersicht
    $GUI3 = "Test GUI 3" ;dient der Übersicht
    GUICreate ($GUI1,161,51,0,0) ;GUI 1 wird erstellt (1./oberste)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_SpecialEvents") ;$GUI_EVENT_CLOSE ist = "X" drücken - Wenn "X" gedrückt wird dann soll die Funktion _SpecialEvents aufgerufen werden
    $Button1 = GUICtrlCreateButton("Button 1",0,0,50,50) ;erstellt Button 1 in der 1./obersten GUI
    GUICtrlSetOnEvent($Button1,"_CtrlEvent") ; für alle Button wird die Funktion _CtrlEvent aufgerufen werden, die Unterscheidung erfolgt dann mit @GUI_CtrlId
    $Button2 = GUICtrlCreateButton("Button 2",55,0,50,50) ;erstellt Button 2 in der 1./obersten GUI
    GUICtrlSetOnEvent($Button2,"_CtrlEvent") ; für alle Button wird die Funktion _CtrlEvent aufgerufen werden, die Unterscheidung erfolgt dann mit @GUI_CtrlId ;wenn auf den 2. Button gedrückt wird dann soll Funktion _Button2 aufgerufen werden
    $Button3 = GUICtrlCreateButton("Button 3",110,0,50,50) ;erstellt Button 3 in der 1./obersten GUI
    GUICtrlSetOnEvent($Button3,"_CtrlEvent") ; für alle Button wird die Funktion _CtrlEvent aufgerufen werden, die Unterscheidung erfolgt dann mit @GUI_CtrlId ;wenn auf den 3. Button gedrückt wird dann soll Funktion _Button3 aufgerufen werden
    GUISetState(@SW_SHOW) ;Damit die GUI angezeigt wird. (Man könnte auch GUISetState(@SW_HIDE) benutzen um die GUI quasi unsichtbar zustarten)
    GUICreate ($GUI2,161,51,0,90) ;GUI 2 wird erstellt (2./mittlere)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_SpecialEvents") ;$GUI_EVENT_CLOSE ist = "X" drücken - Wenn "X" gedrückt wird dann soll die Funktion _SpecialEvents aufgerufen werden
    $Button4 = GUICtrlCreateButton("Button 1",0,0,50,50) ;erstellt Button 1 in der 2./mittleren GUI
    GUICtrlSetOnEvent($Button4,"_CtrlEvent") ; für alle Button wird die Funktion _CtrlEvent aufgerufen werden, die Unterscheidung erfolgt dann mit @GUI_CtrlId ;wenn auf den 1. Button der mittleren GUI gedrückt wird dann soll Funktion _Button4 aufgerufen werden
    $Button5 = GUICtrlCreateButton("Button 2",55,0,50,50) ;erstellt Button 2 in der 2./mittleren GUI
    GUICtrlSetOnEvent($Button5,"_CtrlEvent") ; für alle Button wird die Funktion _CtrlEvent aufgerufen werden, die Unterscheidung erfolgt dann mit @GUI_CtrlId ;wenn auf den 2. Button der mittleren GUI gedrückt wird dann soll Funktion _Button5 aufgerufen werden
    $Button6 = GUICtrlCreateButton("Button 3",110,0,50,50) ;erstellt Button 3 in der 2./mittleren GUI
    GUICtrlSetOnEvent($Button6,"_CtrlEvent") ; für alle Button wird die Funktion _CtrlEvent aufgerufen werden, die Unterscheidung erfolgt dann mit @GUI_CtrlId ;wenn auf den 2. Button der mittleren GUI gedrückt wird dann soll Funktion _Button6 aufgerufen werden
    GUISetState(@SW_SHOW) ;Damit die GUI angezeigt wird. (Man könnte auch GUISetState(@SW_HIDE) benutzen um die GUI quasi unsichtbar zustarten)
    GUICreate ($GUI3,161,51,0,180) ;GUI 3 wird erstellt (3./unterste)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_SpecialEvents") ;$GUI_EVENT_CLOSE ist = "X" drücken - Wenn "X" gedrückt wird dann soll die Funktion _SpecialEvents aufgerufen werden
    $Button7 = GUICtrlCreateButton("Button 1",0,0,50,50) ;erstellt Button 1 in der 3./untersten GUI
    GUICtrlSetOnEvent($Button7,"_CtrlEvent") ; für alle Button wird die Funktion _CtrlEvent aufgerufen werden, die Unterscheidung erfolgt dann mit @GUI_CtrlId ;wenn auf den 1. Button der untersten GUI gedrückt wird dann soll Funktion _Button7 aufgerufen werden
    $Button8 = GUICtrlCreateButton("Button 2",55,0,50,50) ;erstellt Button 2 in der 3./untersten GUI
    GUICtrlSetOnEvent($Button8,"_CtrlEvent") ; für alle Button wird die Funktion _CtrlEvent aufgerufen werden, die Unterscheidung erfolgt dann mit @GUI_CtrlId ;wenn auf den 2. Button der untersten GUI gedrückt wird dann soll Funktion _Button8 aufgerufen werden
    $Button9 = GUICtrlCreateButton("Button 3",110,0,50,50) ;erstellt Button 3 in der 3./untersten GUI
    GUICtrlSetOnEvent($Button9,"_CtrlEvent") ; für alle Button wird die Funktion _CtrlEvent aufgerufen werden, die Unterscheidung erfolgt dann mit @GUI_CtrlId ;wenn auf den 3. Button der untersten GUI gedrückt wird dann soll Funktion _Button9 aufgerufen werden
    GUISetState(@SW_SHOW) ;Damit die GUI angezeigt wird. (Man könnte auch GUISetState(@SW_HIDE) benutzen um die GUI quasi unsichtbar zustarten)
    While 1 ;Anfang While - WEnd Schleife
    If WinGetState($GUI1) = 5 And WinGetState($GUI2) = 5 And WinGetState($GUI3) = 5 Then ;Da WinKill(WinGetTitle(@GUI_WinHandle)) nicht klappt habe ich es so gelöst.
    MsgBox (0,"","Alle 3 GUI's sind beendet wurden , das Programm wird sich nun beenden",2) ;MsgBox zu Vorführzwecken
    Exit ;Beendet die .au3/.exe
    EndIf
    Sleep (10) ;Um die CPU-Auslastung etwas zu entlasten
    WEnd ;Ende While - WEnd Schleife

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

    ;Hier stehen die Funktionen , ich denke nicht das man da großartig was erwähnen muss.
    ;BTW , @GUI_WinHandle liefert das Handle des zuletzt angeklickten Fensters zurück und mit WingetTitle() wandle ich das Handle quasi in einen Fesntertitel um! Falls sich manche jetzt fragen wofür das ist.
    Func _CtrlEvent()
    MsgBox (0,WinGetTitle(@GUI_WinHandle), ControlGetText('', '', @GUI_CtrlId) & " wurde gedrückt",2)
    EndFunc

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

    Func _SpecialEvents()
    WinSetState(WinGetTitle(@GUI_WinHandle),"",@SW_HIDE)
    MsgBox (0,"","Fenster " &WinGetTitle(@GUI_WinHandle) & " wurde beendet",2)
    EndFunc

    [/autoit]
  • Ja , aber ich wollte es so unkompliziert wie möglich machen damit Neulinge es auch halbwegs nachvollziehen können. ;)