GUI - Während einer laufenden Schleife, weitere Button-Clicks verhindern?

  • Hallo,
    ich habe eine ganz normale GUI (MessageLoop Modus).

    Mit den Buttons lassen sich verschiedene Schleifen starten.
    Die Schleifen beenden sich, wenn die Aufgabe erfüllt ist.
    Danach gehts automatisch mit der normalen "While 1 - Schleife" von der GUI weiter.

    Soo.. jetzt zu meinem Problem...
    Wenn z.B. Aufgabe1 durch den Button1 ausgelöst ist und jemand in dieser Zeit Button2 drück, wird die Aufgabe2 ungewollt in eine Art Warteschleife gesetzt.
    Ist die erste Aufgabe irgendwann erledigt, folgt sofort danach Aufgabe2 ohne dass man wieder einen Button drücken muss.

    Am Liebsten wäre es mir, wenn jemand während einer laufenden Aufgabe einen Button drückt, dass nur eine MsgBox erscheint (Text-Meldung: Nur eine Aktion ist zur selben Zeit erlaubt).
    Die erste Aufgabe läuft dann weiter, bis diese sich irgendwann automatisch beendet und danach gehts zur normalen "While 1 - Schleife" von der GUI zurück.


    Ist so was möglich?
    Und wenn ja, könnt ihr mir bitte den Namen der Funktion schreiben?


    Gruß
    Manta

    Edit: Danke @ progandy

    2 Mal editiert, zuletzt von Manta (5. Januar 2011 um 09:16) aus folgendem Grund: gelöst

  • Hallo,
    Es ist sicher möglich, eine solche Nachricht einzubauen, aber meiner Meinung nach gibt es einen sinnvolleren Weg:
    Deaktiviere entweder die gesamte GUI per GUISetState(@SW_DISABLE) und aktiviere sie wieder per @SW_ENABLE oder mache das gleiche für einzelne Buttons per GUICtrlSetState($CtrlID, $GUI_DISABLE) bzw. $GUI_ENABLE.

  • Hallo, das ist jetzt nicht mein Thread aber es passt grad so schön.
    ich wollte mal fragen wie es andersrum ist ? wenn ich in einer schleife bin

    zb.

    [autoit]

    While $WMP.playstate <> 3
    tooltip("Loading...")
    Wend

    [/autoit]


    wie schaffe ich es das andere buttons trotzdem noch reagieren , praktisch für einen Stop-Button der die aktion unterbricht, oder das ich wärend
    des ladevorgangs die lautstärke reguliere...

    MfG hellboy

    [autoit]

    Do
    _help($user)
    Until $questions = 0

    [/autoit]

    Meine Werke:
    Ste`s Web-Radio

  • Im Message-Loop Modus bleibt dir wohl nichts anderes übrig,
    als die Sache mit

    [autoit]

    GuiGetMsg()

    [/autoit]

    in die Schleife mit reinzupacken.
    Da das umständlich ist, empfehle ich dir den OnEventMode, dann haste das Problem nicht.

  • hi also ich habe das selbe Problem aber ich kann dieses nicht mit der Buttondeaktivierung lösen
    das ganze sieht bis jetzt so aus:

    [autoit]

    #include <GUIConstants.au3>$Name1 = 1$Name2 = 2$Name3 = 3$Name4 = 4$Name5 = 5$flash = 3#Region ### START Koda GUI section ### Form=$Form1 = GUICreate("Form1", 307, 227, 444, 110)$Label1 = GUICtrlCreateLabel($Name1, 8, 8, 36, 17)$Label2 = GUICtrlCreateLabel($Name2, 8, 40, 36, 17)$Label3 = GUICtrlCreateLabel($Name3, 8, 72, 36, 17)$Label4 = GUICtrlCreateLabel($Name4, 8, 104, 36, 17)$Label5 = GUICtrlCreateLabel($Name5, 8, 136, 36, 17)$Button1 = GUICtrlCreateButton("Flash", 56, 8, 41, 17, 0);GUICtrlSetState(-1, $GUI_DISABLE)$Button2 = GUICtrlCreateButton("Flash", 56, 40, 41, 17, 0)$Button3 = GUICtrlCreateButton("Flash", 56, 72, 41, 17, 0)$Button4 = GUICtrlCreateButton("Flash", 48, 104, 49, 17, 0)$Button5 = GUICtrlCreateButton("Flash", 56, 136, 41, 17, 0)$Button6 = GUICtrlCreateButton("Ghost", 168, 8, 41, 17, 0)$Button7 = GUICtrlCreateButton("Ghost", 168, 40, 41, 17, 0)$Button8 = GUICtrlCreateButton("Ghost", 168, 72, 41, 17, 0)$Button9 = GUICtrlCreateButton("Ghost", 160, 104, 49, 17, 0)$Button10 = GUICtrlCreateButton("Ghost", 168, 136, 41, 17, 0)$Label11 = GUICtrlCreateLabel("Label1", 232, 8, 36, 17)$Label12 = GUICtrlCreateLabel("Label2", 232, 40, 36, 17)$Label13 = GUICtrlCreateLabel("Label3", 232, 72, 36, 17)$Label14 = GUICtrlCreateLabel("Label4", 232, 104, 36, 17)$Label15 = GUICtrlCreateLabel("Label5", 232, 136, 36, 17)$Label6 = GUICtrlCreateLabel("", 112, 8, 36, 17)$Label7 = GUICtrlCreateLabel("Label2", 112, 40, 36, 17)$Label8 = GUICtrlCreateLabel("Label3", 112, 72, 36, 17)$Label9 = GUICtrlCreateLabel("Label4", 112, 104, 36, 17)$Label10 = GUICtrlCreateLabel("Label5", 112, 136, 36, 17)GUISetState(@SW_SHOW)#EndRegion ### END Koda GUI section ###
    While 1$nMsg = GUIGetMsg()Switch $nMsgCase $GUI_EVENT_CLOSEExitCase $button1$f1 = $flashGUICtrlSetState($button1, $GUI_DISABLE)while $f1 > 0$f1 = $f1 - 1GUICtrlSetData($label6,$f1)Sleep(1000)wendif $f1 = 0 ThenGUICtrlSetState($button1, $GUI_ENABLE)GUICtrlSetData($label6,"")EndIf;;;;;;;;;;;;;Case $button2$f2 = $flashGUICtrlSetState($button2, $GUI_DISABLE)while $f2 > 0$f2 = $f2 - 1GUICtrlSetData($label7,$f2)Sleep(1000)wendif $f2 = 0 ThenGUICtrlSetState($button2, $GUI_ENABLE)GUICtrlSetData($label7,"")EndIfEndSwitchWEnd

    [/autoit]


    also ich möchte, dass die beiden zeiten gleichzeitig ablaufen also nicht erst dann wenn die erste Zeit abgelaufen ist.

    vielen Dank

  • also so der quelltext funkt i-wie net:


    #include <GUIConstants.au3>
    $Name1 = 1
    $Name2 = 2
    $Name3 = 3
    $Name4 = 4
    $Name5 = 5
    $flash = 3
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 307, 227, 444, 110)
    $Label1 = GUICtrlCreateLabel($Name1, 8, 8, 36, 17)
    $Label2 = GUICtrlCreateLabel($Name2, 8, 40, 36, 17)
    $Label3 = GUICtrlCreateLabel($Name3, 8, 72, 36, 17)
    $Label4 = GUICtrlCreateLabel($Name4, 8, 104, 36, 17)
    $Label5 = GUICtrlCreateLabel($Name5, 8, 136, 36, 17)
    $Button1 = GUICtrlCreateButton("Flash", 56, 8, 41, 17, 0)
    ;GUICtrlSetState(-1, $GUI_DISABLE)
    $Button2 = GUICtrlCreateButton("Flash", 56, 40, 41, 17, 0)
    $Button3 = GUICtrlCreateButton("Flash", 56, 72, 41, 17, 0)
    $Button4 = GUICtrlCreateButton("Flash", 48, 104, 49, 17, 0)
    $Button5 = GUICtrlCreateButton("Flash", 56, 136, 41, 17, 0)
    $Button6 = GUICtrlCreateButton("Ghost", 168, 8, 41, 17, 0)
    $Button7 = GUICtrlCreateButton("Ghost", 168, 40, 41, 17, 0)
    $Button8 = GUICtrlCreateButton("Ghost", 168, 72, 41, 17, 0)
    $Button9 = GUICtrlCreateButton("Ghost", 160, 104, 49, 17, 0)
    $Button10 = GUICtrlCreateButton("Ghost", 168, 136, 41, 17, 0)
    $Label11 = GUICtrlCreateLabel("Label1", 232, 8, 36, 17)
    $Label12 = GUICtrlCreateLabel("Label2", 232, 40, 36, 17)
    $Label13 = GUICtrlCreateLabel("Label3", 232, 72, 36, 17)
    $Label14 = GUICtrlCreateLabel("Label4", 232, 104, 36, 17)
    $Label15 = GUICtrlCreateLabel("Label5", 232, 136, 36, 17)
    $Label6 = GUICtrlCreateLabel("", 112, 8, 36, 17)
    $Label7 = GUICtrlCreateLabel("Label2", 112, 40, 36, 17)
    $Label8 = GUICtrlCreateLabel("Label3", 112, 72, 36, 17)
    $Label9 = GUICtrlCreateLabel("Label4", 112, 104, 36, 17)
    $Label10 = GUICtrlCreateLabel("Label5", 112, 136, 36, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button1
    $f1 = $flash
    GUICtrlSetState($button1, $GUI_DISABLE)
    while $f1 > 0
    $f1 = $f1 - 1
    GUICtrlSetData($label6,$f1)
    Sleep(1000)
    wend
    if $f1 = 0 Then
    GUICtrlSetState($button1, $GUI_ENABLE)
    GUICtrlSetData($label6,"")

    EndIf
    ;;;;;;;;;;;;;
    Case $button2
    $f2 = $flash
    GUICtrlSetState($button2, $GUI_DISABLE)
    while $f2 > 0
    $f2 = $f2 - 1
    GUICtrlSetData($label7,$f2)
    Sleep(1000)

    wend
    if $f2 = 0 Then
    GUICtrlSetState($button2, $GUI_ENABLE)
    GUICtrlSetData($label7,"")

    EndIf

    EndSwitch
    WEnd

  • Du musst

    [autoit]

    @SW_DISABLE

    [/autoit]

    verwenden und das nur in Verbindung mit

    [autoit]

    GuiSetState

    [/autoit]

    benutzen, aber nicht mit

    [autoit]

    GuiCtrlSetState

    [/autoit]

    .

    PS: Es gibt auch einen Bearbeitenbutton, dann brauchst du nicht noch einen Post machen, sondern kannst einfach deinen alten editieren. Außerdem sind Spoiler bei längeren Quelltexten angebracht ;)

  • nein!
    es geht nicht darum die Buttons zu deaktivieren sondern um das Problem, dass die zeiten nacheinander ablaufen. SIe sollen aber gleichzeitig laufen

  • Hallo Marki155,

    benutze die Boardeigene Suchfunktion BugFix hat so einen Timer vor längerer Zeit gepostet, ansonsten mach einen eigenen Thread auf, da die Fragestellung unterschiedlich ist,

    mfg autoBert