button endlosschleife

  • hi
    ich bin autoit anfänger und habe zwei buttons erstellt
    wenn ok gedrückt wird, wird ok gelöscht und ein abbrechen-button erstellt
    wird abbrechen gedrückt wird ein okay-button erstellt
    nun, wenn ich aber erneut okay drücke, wird dieser immre iweder erstellt
    ich verstehe nicht warum

    edit:
    okay, ich weiß jetzt waurm es passiert
    er betritt jedesmal die abbrechen if-anweisung
    obowhl der abbrechen ja nur ein einziges mal gedrückt worden ist und nicht jedes mal erneut
    wie kann ich das umgehn, dass der wert, der in $id_button_abbrechen = $msg anders wird?

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------
    Achim
    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include <Constants.au3>

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

    Global $ende, $stunden, $minuten, $sekunden, $start = 0, $umrechnen = 0
    Global $erstelle_ok_button = 1, $erstelle_abbrechen_button = 1, $id_button_abbrechen, $aller_erster_start = 1

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

    $id_hauptfenster = GUICreate("Herunterfahren", 256, 256, -1, -1)
    GUISetIcon("C:\Users\Achim\Icons\Shutdown.ico")
    TraySetIcon("C:\Users\Achim\Icons\Shutdown.ico")

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

    GUISetState ()
    $id_bild_hintergrund = GUICtrlCreatePic("C:\Users\Achim\Desktop\Neuer Ordner\firestorm.jpg", 0, 0, 256, 256); , 0) ;i hier die ",0"
    GuiCtrlSetState(-1 ,$GUI_DISABLE)

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

    ; erstelle die beschriftungslabels
    $id_label_stunden = GUICtrlCreateLabel("Stunden", 10, 10)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_label_minuten = GUICtrlCreateLabel("Minuten", 60, 10)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_label_sekunden = GUICtrlCreateLabel("Sekunden", 110, 10)
    GUICtrlSetBkColor(-1,0xFFFFFF)

    ;erstelle die eingabefelder
    $id_input_stunden = GuiCtrlCreateInput("", 10, 25, 40, 20, $ES_NUMBER)
    GUICtrlSetLimit(-1, 2, 2) ; nur 2 zahlen
    $id_input_minuten = GuiCtrlCreateInput("", 60, 25, 40, 20, $ES_NUMBER)
    GUICtrlSetLimit(-1, 2, 2) ; nur 2 zahlen
    $id_input_sekunden = GuiCtrlCreateInput("", 110, 25, 40, 20, $ES_NUMBER)
    GUICtrlSetLimit(-1, 2, 2) ; nur 2 zahlen

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

    $button_state_alt = 0
    $button_state_neu = 0

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

    Do
    $msg = GUIGetMsg()
    ;~ ----------------------------------------------------
    ;~ Schleife abbrechen wenn auf schließen gedrückt wurde
    If $msg = $GUI_EVENT_CLOSE Then
    $ende = 1
    EndIf
    ;~ ----------------------------------------------------

    ;erstelle herunterfahren-button
    if($start = 0 And $erstelle_ok_button = 1) Then
    $id_button_ok = GuiCtrlCreateButton("Ok", 170, 20, 70)
    $erstelle_ok_button = 0
    if ($aller_erster_start = 1) Then
    GuiCtrlSetState(-1, $GUI_DISABLE)
    $aller_erster_start = 0
    EndIf
    ElseIf($start = 1 And $erstelle_abbrechen_button = 1) Then
    $id_button_abbrechen = GuiCtrlCreateButton("Abbrechen", 170, 20, 70)
    $erstelle_abbrechen_button = 0
    EndIf


    if ($start = 0) Then
    ; --------------------------------
    ;~ Auslesen des Inhaltes der Felder
    $stunden = GuiCtrlRead($id_input_stunden)
    $minuten = GuiCtrlRead($id_input_minuten)
    $sekunden = GuiCtrlRead($id_input_sekunden)
    ;~ -------------------------------

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

    ; ----------------------------------------------------------
    ; Überprüfen ob Ok-Button ausgegraut werden soll oder nicht
    if($button_state_alt = $button_state_neu) Then
    if($stunden <> "" Or $minuten <> "" Or $sekunden <> "") Then
    GuiCtrlSetState($id_button_ok, $GUI_ENABLE)
    $button_state_neu = 1
    EndIf
    Else
    if($stunden = "" And $minuten = "" And $sekunden = "") Then
    GuiCtrlSetState($id_button_ok, $GUI_DISABLE)
    $button_state_neu = 0
    EndIf
    EndIf
    ; ----------------------------------------------------------
    EndIf

    ; --------------OK-----------------
    ; Wenn der OK button gedrückt wurde
    if($id_button_ok = $msg) Then
    $herunterfahren_status = 1
    $umrechnen = 1
    GUICtrlDelete($id_button_ok)
    GUICtrlSetState($id_label_stunden, $GUI_DISABLE)
    GUICtrlSetState($id_label_minuten, $GUI_DISABLE)
    GUICtrlSetState($id_label_sekunden, $GUI_DISABLE)
    GUICtrlSetState($id_input_stunden, $GUI_DISABLE)
    GUICtrlSetState($id_input_minuten, $GUI_DISABLE)
    GUICtrlSetState($id_input_sekunden, $GUI_DISABLE)
    $start = 1 ; start 0 = unterbrochen, start 1 = läuft
    EndIf
    ; ---------------------------------

    ; -------------UMRECHNEN-----------
    ; Gesamte Zeit umrechnen in Sekunden
    if($umrechnen = 1) Then
    $gesamt_sek = ($stunden * 3600 + $minuten * 60 + $sekunden)
    $umrechnen = 0
    EndIf
    ; ---------------------------------

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

    ; ----------------------------ABBRECHEN----------------------------
    ; Wenn der ABBRECHEN button gedrückt wurde
    if ($start = 1) Then
    if ($id_button_abbrechen = $msg) Then
    GUICtrlDelete($id_button_abbrechen)
    GUICtrlSetState($id_label_stunden, $GUI_ENABLE)
    GUICtrlSetState($id_label_minuten, $GUI_ENABLE)
    GUICtrlSetState($id_label_sekunden, $GUI_ENABLE)
    GUICtrlSetState($id_input_stunden, $GUI_ENABLE)
    GUICtrlSetState($id_input_minuten, $GUI_ENABLE)
    GUICtrlSetState($id_input_sekunden, $GUI_ENABLE)
    $start = 0 ; unterbrochen
    $erstelle_ok_button = 1
    EndIf
    Endif
    ; -----------------------------------------------------------------


    Until $ende = 1

    [/autoit]

    Einmal editiert, zuletzt von achim89 (21. März 2009 um 11:15)

  • Hi,

    versuch's mal im Eventmode

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)

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

    GUICreate("Toggle", 325, 235)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
    $Label = GUICtrlCreateLabel("BlaBlaBla", 16, 24, 49, 17)
    $Button= GUICtrlCreateButton("OK", 112, 16, 65, 25, 0)
    GUICtrlSetOnEvent(-1, "_ok")
    GUISetState()

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

    While 1
    Sleep(100)
    WEnd
    Func _exit()
    Exit
    EndFunc
    Func _ok()
    GUICtrlSetData($Button,"Abbruch")
    GUICtrlSetOnEvent($Button,"_Cancel")
    EndFunc
    Func _cancel()
    GUICtrlSetData($Button,"OK")
    GUICtrlSetOnEvent($Button,"_ok")
    EndFunc

    [/autoit]

    Gruß Rabbit

  • Versuch mal nich so kompliziert zu denken:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include <Constants.au3>

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

    Global $stunden, $minuten, $sekunden

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

    $id_hauptfenster = GUICreate("Herunterfahren", 256, 256, -1, -1)
    GUISetIcon("C:\Users\Achim\Icons\Shutdown.ico")
    TraySetIcon("C:\Users\Achim\Icons\Shutdown.ico")

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

    $id_bild_hintergrund = GUICtrlCreatePic("C:\Users\Achim\Desktop\Neuer Ordner\firestorm.jpg", 0, 0, 256, 256); , 0) ;i hier die ",0"
    GuiCtrlSetState(-1 ,$GUI_DISABLE)

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

    ; erstelle die beschriftungslabels
    $id_label_stunden = GUICtrlCreateLabel("Stunden", 10, 10)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_label_minuten = GUICtrlCreateLabel("Minuten", 60, 10)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_label_sekunden = GUICtrlCreateLabel("Sekunden", 110, 10)
    GUICtrlSetBkColor(-1,0xFFFFFF)

    ;erstelle die eingabefelder
    $id_input_stunden = GuiCtrlCreateInput("", 10, 25, 40, 20, $ES_NUMBER)
    GUICtrlSetLimit(-1, 2, 2) ; nur 2 zahlen
    $id_input_minuten = GuiCtrlCreateInput("", 60, 25, 40, 20, $ES_NUMBER)
    GUICtrlSetLimit(-1, 2, 2) ; nur 2 zahlen
    $id_input_sekunden = GuiCtrlCreateInput("", 110, 25, 40, 20, $ES_NUMBER)
    GUICtrlSetLimit(-1, 2, 2) ; nur 2 zahlen
    $button = GuiCtrlCreateButton("Ok", 170, 20, 70)
    GUISetState ()

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button
    If GuiCtrlRead($button) = "OK" Then
    $stunden = GuiCtrlRead($id_input_stunden)
    $minuten = GuiCtrlRead($id_input_minuten)
    $sekunden = GuiCtrlRead($id_input_sekunden)
    if $stunden <> "" Or $minuten <> "" Or $sekunden <> "" Then
    GuiCtrlSetData($button, "Abbrechen")
    GUICtrlSetState($id_label_stunden, $GUI_DISABLE)
    GUICtrlSetState($id_label_minuten, $GUI_DISABLE)
    GUICtrlSetState($id_label_sekunden, $GUI_DISABLE)
    GUICtrlSetState($id_input_stunden, $GUI_DISABLE)
    GUICtrlSetState($id_input_minuten, $GUI_DISABLE)
    GUICtrlSetState($id_input_sekunden, $GUI_DISABLE)
    $gesamt_sek = ($stunden * 3600 + $minuten * 60 + $sekunden)
    EndIf
    ElseIf GuiCtrlRead($button) = "Abbrechen" Then
    GuiCtrlSetData($button, "OK")
    GUICtrlSetState($id_label_stunden, $GUI_ENABLE)
    GUICtrlSetState($id_label_minuten, $GUI_ENABLE)
    GUICtrlSetState($id_label_sekunden, $GUI_ENABLE)
    GUICtrlSetState($id_input_stunden, $GUI_ENABLE)
    GUICtrlSetState($id_input_minuten, $GUI_ENABLE)
    GUICtrlSetState($id_input_sekunden, $GUI_ENABLE)
    EndIf
    EndSwitch
    Wend

    [/autoit]

    Ich empfehle trotzdem wie rabbit den Eventmode, obwohl man mit beidem zurechtkommen kann... ;p

    Grüße ChaosKeks

  • wow
    wie haste denn das geschafft
    so ein komplizierten quelltext in so kurzer zeit so zu kürzen? 8|
    es ist perfekt
    genau so soll es funktionieren, danke =)
    thx chaos

    und thx rabbit für den eventmode tipp, den werd ich künftig benutzen =)