hab ein problem eine schleife anzusprechen

  • Hallo ;)
    also ich hab da ein kleines problem mit einer schleife ich versteh nicht was ich falsch mache :(
    erst hatte ich die schleife in der funktion start aber hab gelesen das das nicht so gut ist .
    bin noch ziemlich neu

    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    Global $zahl = 1

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

    Global $loop = 0

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

    $Form1 = GUICreate("Form1", 615, 438, 192, 124)
    $start = GUICtrlCreateButton("start", 0, 400, 153, 33)
    $exit = GUICtrlCreateButton("aus", 432, 400, 153, 33)
    GUISetState(@SW_SHOW)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $exit
    aus ()
    Case $start
    start ()

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

    EndSwitch
    WEnd

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

    Func aus ()
    ($loop = 0)
    Sleep (2000)
    Exit
    EndFunc

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

    Func start ()
    $loop = 1
    EndFunc
    While(1)

    if ($zahl <= 10) And ($loop = 1) Then
    Msgbox(0,"",$zahl)

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

    $zahl += 1

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

    EndIf
    if ($zahl >= 9) And ($loop = 1) Then

    Sleep (20000)
    $zahl = 0

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

    EndIf
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von lotwstorm (30. Mai 2013 um 23:27)

  • habe es geäntert nun habe ich das problem das das programm nicht mehr ausgeht xD wie kann ich die schleife wieder abschalten scheinbar ignoriert das programm die func aus()


    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    Global $zahl = 1

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

    Global $loop = 0

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

    $Form1 = GUICreate("Form1", 615, 438, 192, 124)
    $start = GUICtrlCreateButton("start", 0, 400, 153, 33)
    $exit = GUICtrlCreateButton("aus", 432, 400, 153, 33)
    GUISetState(@SW_SHOW)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $exit
    aus ()
    Case $start
    start ()
    EndSwitch


    if ($zahl <= 10) And ($loop = 1) Then
    Msgbox(0,"",$zahl)
    $zahl += 1

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

    EndIf
    if ($zahl >= 9) And ($loop = 1) Then

    Sleep (20000)
    $zahl = 0

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

    EndIf

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

    WEnd

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

    Func aus ()
    ($loop = 0)
    Sleep (2000)
    Exit
    EndFunc

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

    Func start ()
    $loop = 1
    EndFunc

    [/autoit]
  • Lass die Klammern weg, sonst bekommst du einen Syntax Fehler, eigentlich solltest du das so in Scite ohne Fehlermeldung / Warnung garnicht ausführen können.

    [autoit]


    Func aus ()
    ($loop = 0) ; <----- falsch !
    Sleep (2000)
    Exit
    EndFunc

    [/autoit]


    Code
    >Running AU3Check (1.54.19.0)  from:C:\Program Files (x86)\AutoIt3
    C:\Users\*********\Desktop\AutoIt v3 Script (neu).au3(44,1) : ERROR: syntax error
    (
    ^
    C:\Users\********\Desktop\AutoIt v3 Script (neu).au3(22,20) : ERROR: start(): undefined function.
                start ()
    ~~~~~~~~~~~~~~~~~~~^
    C:\Users\*********\Desktop\AutoIt v3 Script (neu).au3 - 2 error(s), 0 warning(s)
    !>23:06:47 AU3Check ended. Press F4 to jump to next error.rc:2
    >Exit code: 0    Time: 0.295
  • nu ja ich schreibs speicher und mach doppelklick auf das dokument hab eingestellt das der script ausgefürt wird


    nach dem ich die klammern weckgemacht hab ging es vielen dank für die hilfe hab viel gelernt ;)

  • Das Problem liegt an dem Sleep(20000) in der Schleife...
    Ich gehe davon aus das du das Programm nicht schließen kannst wenn die MsgBox angezeigt wurden.

    Alternativ wäre es sinnvoll mit Timern zu arbeiten, damit das Programm auch auf die klicke reagieren kann.
    Notfalls im OnEventMode...

    Hier einmal mit der Message Schleife:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Global $hGUI, $idButtonStart, $idButtonAus, $iGMsg, $bLoop, $iNumber, $hTimer

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    $hGUI = GUICreate('Example', 600, 400)
    $idButtonStart = GUICtrlCreateButton('Start', 0, 367, 150, 33)
    $idButtonAus = GUICtrlCreateButton('Aus', 450, 367, 150, 33)
    GUISetState()

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    While True
    $iGMsg = GUIGetMsg()

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

    Switch $iGMsg
    Case $idButtonStart
    $bLoop = True
    Case $GUI_EVENT_CLOSE, $idButtonAus
    If $iGMsg = $idButtonAus Then Sleep(2000) ; Gleicher Effekt wie die Funktion aus()
    Exit
    EndSwitch

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

    If $iNumber >= 9 And $bLoop Then
    $hTimer = TimerInit() ; Timer initialisieren
    $iNumber = 0
    EndIf

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

    If Not TimerDiff($hTimer) Or TimerDiff($hTimer) >= 20000 And $bLoop Then
    MsgBox(0, '', $iNumber)
    $iNumber += 1
    EndIf
    WEnd

    [/autoit]

    Gleiches Skript nur im OnEventMode: (Hier kann der Timer beruhigt weggelassen werden)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Global $hGUI, $idButtonStart, $idButtonExit, $bLoop, $iNumber

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

    Opt('GUIOnEventMode', 1)
    Opt('GUICloseOnESC', 0)

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    $hGUI = GUICreate('Example', 600, 400)
    $idButtonStart = GUICtrlCreateButton('Start', 0, 367, 150, 33)
    $idButtonAus = GUICtrlCreateButton('Aus', 450, 367, 150, 33)

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

    GUICtrlSetOnEvent($idButtonStart, '_Start')
    GUICtrlSetOnEvent($idButtonAus, '_Aus')
    GUISetOnEvent($GUI_EVENT_CLOSE, 'GUI_EVENT_CLOSE')
    GUISetState()

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    While Sleep(10)
    If $iNumber >= 9 And $bLoop Then
    Sleep(20000)
    $iNumber = 0
    EndIf

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

    If $bLoop Then
    MsgBox(0, '', $iNumber)
    $iNumber += 1
    EndIf
    WEnd

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    Func _Start()
    $bLoop = True
    EndFunc

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

    Func _Aus()
    Sleep(2000)
    Exit
    EndFunc

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

    Func GUI_EVENT_CLOSE()
    Exit
    EndFunc

    [/autoit]


    €dit: Hab mir wohl ein bischen zu viel Zeit gelassen beim tippen... :D

    Einmal editiert, zuletzt von Yjuq (30. Mai 2013 um 23:50)

  • vielen dank ich versuch was draus zu lernen ;)
    und so ausfürliche antworten sind super da man am meisten draus lernt ;)