Ich habe mir eine Funktion für eine ProgressBar erstellt die mit einer Schleife auf Zeit abläuft:
[autoit]
;GUI Fortschritt
$gui_progressbar = GUICreate("Lesen/Schreiben", 300, 100)
GUICtrlCreateLabel("Vorgang läuft ...", 12, 10, 300, 18)
GUICtrlSetFont(-1, 9, 600, 0)
$progressbar = GUICtrlCreateProgress(10, 40, 280, 20)
$label_progressbar = GUICtrlCreateLabel("", 12, 70, 40, 18)
Func _getDOSOutput($command, $zeitende)
Local $text, $Pid = Run('"' & @ComSpec & '" /c ' & $command, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
_ProgressBar($zeitende)
While 1
$text &= StdoutRead($Pid)
If @error Then ExitLoop
GUICtrlSetData($edit_dir, GUICtrlRead($edit_dir) & $text)
Sleep(10)
WEnd
Return $text
EndFunc
Func _ReadIECOK()
_ReadIECClose()
Local $ext, $progress, $ordnername = GUICtrlRead($input_ordnername)
If GUICtrlRead($radio1) = $GUI_CHECKED Then
$ext = ".d64"
$progress = 750
$lesen = "d64copy.exe -t auto -d " & GUICtrlRead($combo_laufwerktyp) & " " & GUICtrlRead($combo_laufwerkid) & ' "' & $ordnername & GUICtrlRead($input_dateinameimage) & $ext & '" '
ElseIf GUICtrlRead($radio2) = $GUI_CHECKED Then
$ext = ".d64"
$progress = 4590
$lesen = "d64copy.exe -t original -d " & GUICtrlRead($combo_laufwerktyp) & " " & GUICtrlRead($combo_laufwerkid) & ' "' & $ordnername & GUICtrlRead($input_dateinameimage) & $ext & '" '
ElseIf GUICtrlRead($radio3) = $GUI_CHECKED Then
$ext = ".d64"
$progress = 1460
$lesen = "d64copy.exe -t serial1 -d " & GUICtrlRead($combo_laufwerktyp) & " " & GUICtrlRead($combo_laufwerkid) & ' "' & $ordnername & GUICtrlRead($input_dateinameimage) & $ext & '" '
ElseIf GUICtrlRead($radio4) = $GUI_CHECKED Then
$ext = ".d64"
$progress = 750
$lesen = "d64copy.exe -t serial2 -d " & GUICtrlRead($combo_laufwerktyp) & " " & GUICtrlRead($combo_laufwerkid) & ' "' & $ordnername & GUICtrlRead($input_dateinameimage) & $ext & '" '
ElseIf GUICtrlRead($radio5) = $GUI_CHECKED Then
$ext = ".nbz"
$progress = 300
$lesen = "nibread.exe -D" & GUICtrlRead($combo_laufwerkid) & ' "' & $ordnername & GUICtrlRead($input_dateinameimage) & $ext & '" '
EndIf
If FileExists($ordnername & GUICtrlRead($input_dateinameimage) & $ext) Then
If MsgBox(52, "Hinweis", "Datei existiert bereits. Überschreiben?") = 6 Then
FileDelete ($ordnername & GUICtrlRead($input_dateinameimage) & $ext)
Else
_ReadIEC()
Return 0
EndIf
EndIf
$dir = _getDOSOutput($lesen, $progress)
GUICtrlSetData($edit_dir, $dir)
EndFunc
Func _ProgressBarStart()
GUISetState(@SW_DISABLE, $gui_main)
GUISetState(@SW_SHOW, $gui_progressbar)
EndFunc
Func _ProgressBarStop()
GUISetState(@SW_ENABLE, $gui_main)
GUISetState(@SW_HIDE, $gui_progressbar)
EndFunc
Func _ProgressBar($zeit)
_ProgressBarStart()
Sleep(3000) ;3 Sekunde warten
For $i = 0 To 100
GUICtrlSetData($progressbar, $i)
GUICtrlSetData($label_progressbar, $i & "%")
Sleep($zeit)
Next
GUICtrlSetData($label_progressbar, "Fertig!")
Sleep(1000) ;1 Sekunde warten
_ProgressBarStop()
EndFunc
Das Unschöne dabei ist allerdings, wenn man das Fenster mit der Bar mit der Maus gedrückt hält, wird die Bar angehalten sollange man die Maus gedrückt hält und setzt dann bei der letzten Stelle fort. Der Vorgang meiner Funktion läuft natürlich im Hintergrund weiter und ist dann beendet wärend die Bar noch läuft.
Hat da jemand vielleicht eine Idee dazu?