- Offizieller Beitrag
Ich brauchte gerade eine Progressbar. Allerdings im klassischen Stil ohne Balken. Noch dazu durfte sie nicht flackern.
Da ich sowas nicht gefunden habe, musste ich das halt selbst machen:
Edit: Jetzt funktioniert sie auch so wie ich mir das vorgestellt habe.
Spoiler anzeigen
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt('GUIOnEventMode', 1)
[/autoit] [autoit][/autoit] [autoit]Global $percent = 0
[/autoit] [autoit][/autoit] [autoit]Global $aProgress1[1], $aProgress2[1], $aProgress3[1], $aProgress4[1], $aProgress5[1]
[/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate('ColorProgress', 400, 360)
GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
#cs
_ColorProgressCreate ( GUI-ID, Array, Left, Top, Width, Height, Progresscolor, Backgroundcolor, Direction )
#ce
_ColorProgressCreate($hGUI, $aProgress1, 10, 10, 380, 32, 0xFF0000, Default, 'h') ; horizontal
_ColorProgressCreate($hGUI, $aProgress2, 10, 50, 300, 12, 0x00FF00, 0xFFFF00, 'h') ; horizontal
_ColorProgressCreate($hGUI, $aProgress3, 10, 70, 380, 48, 0x0000FF, 0x00FF00, 'h') ; horizontal
_ColorProgressCreate($hGUI, $aProgress4, 10, 140, 48, 200, Default, Default, 'v') ; vertical
_ColorProgressCreate($hGUI, $aProgress5, 100, 140, 16, 200, 0x00FF00, 0xFF0000, 'v') ; vertical
GUICtrlCreateButton('Delete Progressbar', 160, 150, 120, 25)
GUICtrlSetOnEvent(-1, '_TestDelete')
GUISetState()
[/autoit] [autoit][/autoit] [autoit]While 1
_ColorProgressSetData($aProgress1, $percent) ; Set percent data
_ColorProgressSetData($aProgress2, $percent)
_ColorProgressSetData($aProgress3, $percent)
_ColorProgressSetData($aProgress4, $percent)
_ColorProgressSetData($aProgress5, $percent)
Sleep(100)
$percent += 1
If $percent > 100 Then $percent = 0
WEnd
Func _End()
Exit
EndFunc
Func _TestDelete()
_ColorProgressDelete($aProgress3)
EndFunc
Func _ColorProgressCreate($GUI_ID, ByRef $ProgressArray, $left, $top, $width = 100, $height = 16, $color = 0x3333FF, $bkcolor = 0xDDDDDD, $style = 'h')
If Not IsArray($ProgressArray) Then Return SetError(1)
ReDim $ProgressArray[9]
If $width = Default Or $width = -1 Then $width = 100
If $height = Default Or $height = -1 Then $height = 16
If $color = Default Or $color = -1 Then $color = 0x3333FF
If $bkcolor = Default Or $bkcolor = -1 Then $bkcolor = 0xDDDDDD
If $style = Default Or $style = -1 Then $style = 'h'
$ProgressArray[2] = $GUI_ID
$ProgressArray[3] = $left
$ProgressArray[4] = $top
$ProgressArray[5] = $width
$ProgressArray[6] = $height
$ProgressArray[7] = $style
Switch $style
Case 'h'
$ProgressArray[0] = GUICtrlCreateLabel('', $left, $top, $width, $height, Default, $WS_EX_CLIENTEDGE)
GUICtrlSetBkColor(-1, $bkcolor)
$ProgressArray[1] = GUICtrlCreateLabel('', $left+2, $top+2, 1, $height-4)
GUICtrlSetBkColor(-1, $color)
Case 'v'
$ProgressArray[0] = GUICtrlCreateLabel('', $left, $top, $width, $height, Default, $WS_EX_CLIENTEDGE)
GUICtrlSetBkColor(-1, $bkcolor)
$ProgressArray[1] = GUICtrlCreateLabel('', $left+2, $top+$height-3, $width-4, 1)
GUICtrlSetBkColor(-1, $color)
Case Else
SetError(2)
EndSwitch
EndFunc
Func _ColorProgressSetData(ByRef $ProgressArray, $percent)
If Not IsArray($ProgressArray) Then Return SetError(1)
Switch $ProgressArray[7]
Case 'h'
ControlMove($ProgressArray[2], '', $ProgressArray[1], $ProgressArray[3]+2, $ProgressArray[4]+2, Int(($ProgressArray[5]-4)/100*$percent), $ProgressArray[6]-4)
Case 'v'
ControlMove($ProgressArray[2], '', $ProgressArray[1], $ProgressArray[3]+2, $ProgressArray[4]+$ProgressArray[6]-2-Int(($ProgressArray[6]-4)/100*$percent), $ProgressArray[5]-4, Int(($ProgressArray[6]-4)/100*$percent))
EndSwitch
EndFunc
Func _ColorProgressDelete(ByRef $ProgressArray)
GUICtrlDelete($ProgressArray[0])
GUICtrlDelete($ProgressArray[1])
EndFunc
Screenshot:
autoit.de/wcf/attachment/2440/
Vielleicht kann es ja noch jemand gebrauchen...