Progressbar: Fehler im Script

  • Hallo Community

    :P Habe mit Eurer Hilfe meine erste funktionierende GUI erstellt. :P
    Dafür erstmal vielen Dank. :thumbup:
    Es fehlt mir aber die genauere Kenntnis um das Script an einer bestimmten Stelle zu beenden,
    deshalb bitte ich Euch mal einen Blick darauf zu werfen.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    Opt('MustDeclareVars', 1)
    Local $outfile, $isofertig, $isoaktuell, $command, $exe, $delete ; ??? wozu dient das vordeklarieren ?
    $outfile = "D:\GRUB.iso"
    $isofertig = 504072192 ;kb
    $isoaktuell = 0
    $command = "mkisofs.exe -o " & $outfile & " ""C:\GRUB"""
    $exe = "mkisofs.exe"
    FileDelete($outfile)
    $delete = FileExists($outfile)
    ; MsgBox(0 , "Info", "" & $outfile & " existiert nicht.")
    Example()
    Func Example()
    Local $progressbar1, $button, $wait, $s, $msg, $m
    GUICreate("Stop My GUI", 500, 100, 100, 200) ; erstellt GUI-Fenster
    $progressbar1 = GUICtrlCreateProgress(10, 10, 480, 20); Fortschrittsbalken
    $button = GUICtrlCreateButton("START", 60, 50, 80, 30) ; erstellt START-Button
    GUISetState(@SW_SHOW) ; startet die GUI
    $wait = 80 ; time in msec to next progressstep
    $s = 0; progressbar-saveposition
    Do ; Anfang der Schleife (= Anfang der progresssteps ?)
    $msg = GUIGetMsg() ; fragt ob, und was geklickt wurde
    If $msg = $button Then ; wenn button-click START
    Run($command, "", @SW_MINIMIZE) ; startet "mkisofs.exe" minimiert
    GUICtrlSetData($button, "CANCEL"); ändert label des button in CANCEL
    For $i = $s To 100 ; Schritte von aktueller Saveposition bis 100
    $m = GUIGetMsg() ; fragt ob, und was geklickt wurde
    If $m = -3 Then ExitLoop ; ??? Was produziert den Wert "-3"
    If $m = $button Then ; wenn button-click CANCEL
    ProcessClose($exe) ; beendet "mkisofs.exe"
    Exit ; beendet dieses Script
    Else ; wenn button-click CANCEL nicht erfolgt
    $isoaktuell = FileGetSize($outfile) ; prüft Dateigröße
    GUICtrlSetData($progressbar1, $isoaktuell/$isofertig*100) ; gibt die Position des Balkens vor
    Sleep($wait) ; wartet vorgegebene Zeit
    EndIf ; Ende der Bedingung
    Next ; Weiter geht´s
    If $i > 100 Then ; Wenn Schritte bei 100 dann
    GUICtrlSetData($button, "FINISHED"); ändert label des button in FINISHED
    If $m = $button Then ; wenn button-click FINISHED --- -->
    Exit ; dann soll das Script beendet werden --> aber ??? CMD startet neu !!! WARUM ?
    EndIf ; Ende der Bedingung
    EndIf ; Ende der Bedingung
    EndIf ; Ende der Bedingung
    Until $msg = $GUI_EVENT_CLOSE ; bis Fenster geschlossen wird
    EndFunc ;==>Example

    [/autoit]


    Im Script hab ich Kommentare eingefügt, die möglicherweise unkorrekt sind und daher zum Fehler führen.
    Meine Frage: Wie muß ich das Script konzipieren damit es nach Ablauf der Progressbar mit dem Button "FINISHED" geschlossen werden kann.
    Außerdem: -Zeile 29: Was produziert den Wert "-3"
    -Zeile 4 und 15: wozu dient das vordeklarieren ?
    Vielleicht habt Ihr auch noch andere Vorschläge.
    Vielen Dank im Vorraus.

    Gruß M.

    3 Mal editiert, zuletzt von Macrostop (26. März 2009 um 20:30)

  • Hallo Macrostop!

    Erlaube mir mal direkt zu zitieren ;):


    Im Script hab ich Kommentare eingefügt, die möglicherweise unkorrekt sind und daher zum Fehler führen.
    Meine Frage: Wie muß ich das Script konzipieren damit es nach Ablauf der Progressbar mit dem Button "FINISHED" geschlossen werden kann.
    => Mach das doch über GUICtrlRead

    -Zeile 4 und 15: wozu dient das vordeklarieren ?
    => Weil oben Opt("MustDeclareVars", 1) angegeben ist :P

  • Hallo MatthiasG.

    Danke für Deine Antwort.
    Tut mir leid, aber ich kann mir nicht vorstellen wie "GUICtrlRead" im Script eingefügt werden müßte.
    Ich hab den Original-Script (Danke an den Autor) modifiziert damit er nachvollziehbar ist:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    Opt('MustDeclareVars', 1)
    Example()
    Func Example()
    Local $progressbar1, $button, $wait, $s, $msg, $m
    GUICreate("Stop My GUI", 500, 100, 100, 200)
    $progressbar1 = GUICtrlCreateProgress(10, 10, 480, 20); Fortschrittsbalken
    $button = GUICtrlCreateButton("Start", 60, 50, 80, 30)
    GUISetState()
    $wait = 20; wait 20ms for next progressstep
    $s = 0; progressbar-saveposition
    Do
    $msg = GUIGetMsg()
    If $msg = $button Then ; wenn button-click
    GUICtrlSetData($button, "Stop"); ändert status des button
    For $i = $s To 100
    $m = GUIGetMsg()
    If $m = -3 Then ExitLoop
    If $m = $button Then
    GUICtrlSetData($button, "Weiter")
    $s = $i;save the current bar-position to $s
    ExitLoop
    Else
    $s = 0
    GUICtrlSetData($progressbar1, $i)
    Sleep($wait)
    EndIf
    Next
    If $i > 100 Then
    GUICtrlSetData($button, "FINISHED"); ändert label des button in FINISHED
    If $m = $button Then ; wenn button-click FINISHED --- -->
    Exit ; dann soll das Script beendet werden --> aber ??? progress startet neu !!! WARUM ?
    EndIf
    EndIf
    EndIf
    Until $msg = $GUI_EVENT_CLOSE
    EndFunc ;==>Example

    [/autoit]


    Wenn es eine Möglichkeit gibt, mit Klick auf FINISH das Script zu beenden, bitte ich um Korrektur des Scripts.
    Danke
    Gruß M.

  • Hier ein Beispiel ;)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    $Form1 = GUICreate("Test", 200, 25, -1, -1)
    $Button = GUICtrlCreateButton("Start", 0, 0, 200, 25, 0)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button
    If GUICtrlRead($Button) = "Start" Then ;Wenn auf dem Button Start drauf steht, dann...
    ToolTip("Jetzt wurde gestartet")
    GUICtrlSetState($Button, $GUI_DISABLE)
    Sleep(2000)
    ToolTip("")
    GUICtrlSetData($Button, "Fertigstellen")
    GUICtrlSetState($Button, $GUI_ENABLE)
    Else
    ToolTip("Fertig!")
    GUICtrlSetState($Button, $GUI_DISABLE)
    Sleep(2000)
    Exit
    EndIf
    EndSwitch
    WEnd

    [/autoit]
    • Offizieller Beitrag

    Hier noch ein Beispiel :D

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WinAPI.au3>
    Opt('MustDeclareVars', 1)
    Example()
    Func Example()
    Local $progressbar1, $button, $wait, $s, $msg, $m
    GUICreate("Stop My GUI", 500, 100, 100, 200)
    $progressbar1 = GUICtrlCreateProgress(10, 10, 480, 20); Fortschrittsbalken
    $button = GUICtrlCreateButton("Start", 60, 50, 80, 30)

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

    GUISetState()
    $wait = 20; wait 20ms for next progressstep
    $s = 0; progressbar-saveposition
    Do
    $msg = GUIGetMsg()
    If $msg = $button And _WinAPI_GetWindowText(GUICtrlGetHandle($button)) <> "FINISHED" Then ; wenn button-click
    GUICtrlSetData($button, "Stop"); ändert status des button
    For $i = $s To 100
    $m = GUIGetMsg()
    If $m = -3 Then ExitLoop
    If $m = $button Then
    GUICtrlSetData($button, "Weiter")
    $s = $i;save the current bar-position to $s
    ExitLoop
    Else
    $s = 0
    GUICtrlSetData($progressbar1, $i)
    Sleep($wait)
    EndIf
    Next
    If $i > 100 Then
    GUICtrlSetData($button, "FINISHED"); ändert label des button in FINISHED
    EndIf
    ElseIf $msg = $button And _WinAPI_GetWindowText(GUICtrlGetHandle($button)) = "FINISHED" Then
    Exit
    EndIf
    Until $msg = $GUI_EVENT_CLOSE
    EndFunc ;==>Example

    [/autoit]


    oder

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    Opt('MustDeclareVars', 1)
    Example()
    Func Example()
    Local $progressbar1, $button, $wait, $s, $msg, $m
    GUICreate("Stop My GUI", 500, 100, 100, 200)
    $progressbar1 = GUICtrlCreateProgress(10, 10, 480, 20); Fortschrittsbalken
    $button = GUICtrlCreateButton("Start", 60, 50, 80, 30)

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

    GUISetState()
    $wait = 20; wait 20ms for next progressstep
    $s = 0; progressbar-saveposition
    Do
    $msg = GUIGetMsg()
    If $msg = $button And GUICtrlRead($Button) <> "FINISHED" Then ; wenn button-click
    GUICtrlSetData($button, "Stop"); ändert status des button
    For $i = $s To 100
    $m = GUIGetMsg()
    If $m = -3 Then ExitLoop
    If $m = $button Then
    GUICtrlSetData($button, "Weiter")
    $s = $i;save the current bar-position to $s
    ExitLoop
    Else
    $s = 0
    GUICtrlSetData($progressbar1, $i)
    Sleep($wait)
    EndIf
    Next
    If $i > 100 Then
    GUICtrlSetData($button, "FINISHED"); ändert label des button in FINISHED
    EndIf
    ElseIf $msg = $button And GUICtrlRead($Button) = "FINISHED" Then
    Exit
    EndIf
    Until $msg = $GUI_EVENT_CLOSE
    EndFunc ;==>Example

    [/autoit]