OnEventMode - Während dem Durchlaufen einer Schleife inerhalb einer mit OnEvent aufgerufenen Funktion soll das Script beendet werden

  • Hallo,
    hab' da ein Problem, bei dem ich nicht weiterkomme:

    [autoit]


    #cs
    Das soll gemacht werden:
    Btn1 wird gedrückt und die Funktion btn1() wird aufgerufen.
    Nun wird das zweite Fenster angezeigt und eine Schleife
    durchlaufen.
    Während die Schleife durchlaufen wird, soll nun mit Dücken
    des btn2 bzw. mit Drücken des [X]-Buttons am Fenster das Script
    beendet werden können.

    Frage:
    Wie mache ich das am besten?
    #ce

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

    #include <GuiConstantsEx.au3>
    Opt("GUIOnEventMode", 1)

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

    $gui1 = GUICreate("gui1", 400, 300, 200, 200)
    GUISetOnEvent($GUI_EVENT_CLOSE, "close")
    $btn1 = GUICtrlCreateButton("gui2 öffnen", 150, 140, 100, 20)
    GUICtrlSetOnEvent($btn1, "btn1")

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

    $gui2 = GUICreate("gui2", 300, 200, 450, 350)
    GUISetOnEvent($GUI_EVENT_CLOSE, "close")
    $btn2 = GUICtrlCreateButton("schließen", 100, 90, 100, 20)
    GUICtrlSetOnEvent($btn2, "close")
    $lab2 = GUICtrlCreateLabel("", 50, 50, 50)

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

    GUISetState(@SW_SHOW, $gui1)

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

    While 1
    Sleep(20)
    WEnd

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

    Func btn1()
    GUISetState(@SW_SHOW, $gui2)

    $n = 1
    For $i = 1 To 100
    $n += 1
    Sleep(250);Während diese Schleife durchlaufen wird, soll das Script beendet werden können
    GUICtrlSetData($lab2, $n)
    Next
    EndFunc

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

    Func close()
    Exit
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von fraengers (14. Mai 2008 um 21:57)

  • dieses problem hatte ich auch schon ..

    ich habs dann mit einem hotkey gemacht =)

    kannst ja mal versuchen

  • joar entweder mit hotkey der dann einen exitloop bzw. deine 2. funktion aufruft oder in deiner jetztigen schleife eine _IsPressed Key abfrage machen... ;)

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Die Sache mit AdlibEnable() klappt gut, danke!
    Aber warum soll ich das Sleep rausnehmen? geht doch auch so

    Spoiler anzeigen
    [autoit]


    #include <GuiConstantsEx.au3>
    Opt("GUIOnEventMode", 1)

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

    $gui1 = GUICreate("gui1", 400, 300, 200, 200)
    GUISetOnEvent($GUI_EVENT_CLOSE, "close")
    $btn1 = GUICtrlCreateButton("gui2 öffnen", 150, 140, 100, 20)
    GUICtrlSetOnEvent($btn1, "Adlib")

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

    $gui2 = GUICreate("gui2", 300, 200, 450, 350)
    GUISetOnEvent($GUI_EVENT_CLOSE, "close")
    $btn2 = GUICtrlCreateButton("schließen", 100, 90, 100, 20)
    GUICtrlSetOnEvent($btn2, "close")
    $lab2 = GUICtrlCreateLabel("", 50, 50, 50)

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

    GUISetState(@SW_SHOW, $gui1)

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

    While 1
    Sleep(20)
    WEnd

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

    Func Adlib()
    AdlibEnable("btn1", 250)
    EndFunc

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

    Func btn1()
    GUISetState(@SW_SHOW, $gui2)

    $n = 1
    For $i = 1 To 100
    $n += 1
    Sleep(250);Während diese Schleife durchlaufen wird, soll das Script beendet werden können
    GUICtrlSetData($lab2, $n)
    Next
    EndFunc

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

    Func close()
    Exit
    EndFunc

    [/autoit]

    edit: Ich lese gerade in der Hilfe, dass man vorsichtig mit dem Time-Parameter sein soll und die Funktion einfach gehalten sein soll.

    Nun was muss man denn da beachten?
    Ob die Funktion einfach ist, die ich aufrufe ... Das Script, das ich gepostet habe ist ja nur das grobe Gerüst der Sache, für die ich es verwenden will. Und diese Funktion, für die das ganze angewendet werden soll ist jetzt nicht so einfach wie in dem Beispiel. Es werden ein paar Arrays bearbeitet und einige For-Schleifen durchlaufen und noch andere Sachen. Vielleicht ist das ja auch noch einfach...ich weiß es nicht.

    Einmal editiert, zuletzt von fraengers (14. Mai 2008 um 09:53)

  • Ist nicht so schlimm, wenn man es gleich wieder deaktiviert::

    Spoiler anzeigen
    [autoit]

    Func Adlib()
    AdlibEnable("btn1", 250)
    EndFunc

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

    Func btn1()
    AdlibDisable()
    GUISetState(@SW_SHOW, $gui2)
    ...

    [/autoit]


    Damit wird das AdLib sozusagen als CallBack verwendet.

  • Zwar habe ich noch nicht so ganz verstanden, was dieses AdlibEn/Disable() macht aber hauptsache es geht.
    Ich danke euch!