Funktion pausieren, bis ein GUI-Button gedrückt wird

  • Hi,
    mein Script hat den GUIOnEventMode 1.
    Ich möchte jetzt aber eine Funktion so lange pausieren, bis in der dazugehörigen Child-GUI eine Auswahl getroffen wurde.

    Hier mal ein kurzes Beispiel:

    [autoit]


    Opt("GUIOnEventMode", 1)

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

    ;~ ... MAINGUI & anderen FunKtionen ...
    ;~ ...

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

    Func LISTE()

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

    If $liste > 1 Then
    $childgui = GUICreate("Child-Test", 200, 100,-1,-1,-1,-1,$gui)
    $ja = GUICtrlCreateButton("ja", 10, 50, 60)
    $nein = GUICtrlCreateButton("nein", 110, 50, 60)
    ;~ GUICtrlSetOnEvent($ja, "jabutton")
    ;~ GUICtrlSetOnEvent($nein, "neinbutton")
    GUISetState(@SW_SHOW)

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

    While ;~ ??? ;~ Solange warten bis ja oder nein gedrückt wird.
    Sleep(1000)
    WEnd

    If $ja Then
    ;~ ...
    ElseIf $nein Then
    ;~ ...
    EndIf

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

    Else

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

    ;~ ...

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

    EndIf

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

    EndFunc

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

    Gibt es dafür eine simple Lösung?


    Gruß
    Nasenbär

  • GUIOnEventMode


    gibt es einen gewissen Grund, warum du OnEventMode benutzt & nicht einfach die Messages mit einer While Schleife bearbeitest?

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."

  • Das Script ist schon längere Zeit fertig und mit dem GUIOnEventMode viel übersichtlicher.
    Nun möchte ich das Script etwas erweiteren aber die Child-GUI Abfragen bereiten mir jetzt Probleme.

  • ok. dann würde ich es so lösen:

    Spoiler anzeigen
    [autoit]

    Opt("GUIOnEventMode", 1)
    $gui=GUICreate("main")
    GUISetState(@SW_SHOW)
    $liste=2
    Local $buttenpressed=0 ;~ 0 = kein Button gedrückt
    LISTE()

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

    Func LISTE()
    If $liste > 1 Then
    $childgui = GUICreate("Child-Test", 200, 100,-1,-1,-1,-1,$gui)
    $ja = GUICtrlCreateButton("ja", 10, 50, 60)
    $nein = GUICtrlCreateButton("nein", 110, 50, 60)
    GUICtrlSetOnEvent($ja, "jabutton")
    GUICtrlSetOnEvent($nein, "neinbutton")
    GUISetState(@SW_SHOW)
    While $buttenpressed=0 ;~ solange kein Button gedrückt ist ---> warten
    Sleep(100)
    WEnd
    If $buttenpressed=1 Then
    MsgBox(0, "Button", "ja")
    ElseIf $buttenpressed=2 Then
    MsgBox(0, "Button", "nein")
    EndIf
    Else
    ;~ ....
    EndIf
    EndFunc

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

    Func jabutton()
    $buttenpressed=1 ;~ 1=ja
    EndFunc

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

    Func neinbutton()
    $buttenpressed=2 ;~ 2=nein
    EndFunc

    [/autoit]

    mfg
    Developer30

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."

  • Hallo Nasenbär,

    kleine Child-Guis für wiederkehrende Meldungsfenster mache ich gerne im MsgLoop-Modus und lagere sie in eine UDF aus. Am Anfang merke ich mir aus wechem Modus sie aufgerufen wurde und stelle diesen beim Beenden wieder her. Dadurch kann sie sowohl in Skripten mit OnEvent-Modus (den ich auch bevorzuge) als auch aus Skripten im MsgLoop-Modus aufrufen und damit auch in anderen Projekten verwenden. Die Chld-Gui hat dann genau die von dir geforderten Eigenschaften, die man nur mit Adlib-Funktionen umgehen kann.

    Schau dir dazu eines meiner 1. Projekte an: Funktion zur Osterberechnung jetzt als UDF und modalem Meldungsfenster

    es wäre aber geschickter gewesen, wenn du deine aufrufende Gui bzw. ein Beispiel mit dem gleichen Problem mitgepostet hättest. Deine IF-Abfragen in der Childgui können auch nicht funktionieren.

    mfg atoBert

    mfg autoBert