- Offizieller Beitrag
Es tauchen hier ja immer wieder mal Fragen zu einer Progressbar mit Prozentanzeige innerhalb des Progressbalkens auf.
Dazu habe ich mal ein Beispielskript erstellt. Außerdem gibt es noch ein Beispiel für eine Progressbar (mit Slider), deren Wert sich während der Sliderbewegung aktualisiert:
Spoiler anzeigen
#include<SliderConstants.au3>
#include<StaticConstants.au3>
#include<GUIConstantsEx.au3>
#include<ProgressConstants.au3>
Global $hGui = GUICreate('Klassische Progressbar', 420, 280, -1, -1)
[/autoit] [autoit][/autoit] [autoit]DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 0) ; auf den klassischen Style umschalten
Global $hProgress1 = GUICtrlCreateProgress(15, 20, 384, 20, $PBS_SMOOTH) ; obere Progressbar erstellen
GUICtrlSetColor(-1, 0x22FF22)
GUICtrlSetBkColor(-1, 0xEEEEEE)
GUICtrlCreateLabel('|', 18, 40, 20, 16) ; Anzeige von 0%
GUICtrlCreateLabel('0%', 11, 56, 25, 16, $SS_CENTER)
GUICtrlCreateLabel('|', 396, 40, 20, 16) ; Anzeige von 100%
GUICtrlCreateLabel('100%', 389, 56, 25, 16, $SS_CENTER)
Global $hLabel1 = GUICtrlCreateLabel('0%', 190, 24, 30, 14, $SS_CENTER) ; Prozentanzeige innerhalb der Progressbar
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Transparenter Hintergrund für das Label
Global $hProgress2 = GUICtrlCreateProgress(15, 160, 384, 20, $PBS_SMOOTH) ; untere Progressbar erstellen
GUICtrlSetColor(-1, 0xC83131)
GUICtrlSetBkColor(-1, 0xEEEEEE)
DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 7) ; zurück zum Standard-Windowsstyle
For $i = 0 To 100 Step 10 ; die Anzeige für die Prozentwerte der unteren Progressbar erstellen
GUICtrlCreateLabel('|', 16 + $i * 3.8, 180, 20, 16)
GUICtrlCreateLabel($i & '%', 9 + $i * 3.8, 196, 25, 16, $SS_CENTER)
Next
Global $hSlider = GUICtrlCreateSlider(5, 130, 404, 28, BitOR($TBS_TOOLTIPS, $TBS_AUTOTICKS))
GUICtrlSetData(-1, 33) ; Sliderwert auf 33% setzen (als Beispiel)
Global $hClose = GUICtrlCreateButton('Close', 180, 240, 60, 24)
GUISetState(@SW_SHOW)
Global $iAddend = 1 ; globale Variable (dient als Summand für _SetProgress)
AdlibEnable('_SetProgress', 30)
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $hClose
Exit
EndSwitch
WEnd
Func _SetProgress()
Local $iPercent = GUICtrlRead($hProgress1) ; Prozentwert der oberen Progressbar auslesen
If $iPercent = 100 Or $iPercent = 0 Then $iAddend = -$iAddend ; wenn 100 oder Null, dann den Summand negieren
GUICtrlSetData($hProgress1, $iPercent + $iAddend) ; neuen Wert der oberen Progressbar schreiben
GUICtrlSetData($hLabel1, $iPercent + $iAddend & '%') ; neuen Wert für das Label schreiben
GUICtrlSetData($hProgress2, GUICtrlRead($hSlider)) ; und den Wert vom Slider in die untere Progressbar schreiben
EndFunc ;==>_SetProgress