Klassische Progressbar (ohne Flackern)

    • 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
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    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')

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

    #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

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

    GUICtrlCreateButton('Delete Progressbar', 160, 150, 120, 25)
    GUICtrlSetOnEvent(-1, '_TestDelete')

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

    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

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

    Func _End()
    Exit
    EndFunc

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

    Func _TestDelete()
    _ColorProgressDelete($aProgress3)
    EndFunc

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

    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

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

    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

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

    Func _ColorProgressDelete(ByRef $ProgressArray)
    GUICtrlDelete($ProgressArray[0])
    GUICtrlDelete($ProgressArray[1])
    EndFunc

    [/autoit]

    Screenshot:
    autoit.de/wcf/attachment/2440/


    Vielleicht kann es ja noch jemand gebrauchen...

  • Hallo,

    eine "Oscar-Reife" Leistung ! :thumbup:

    Ich habe mir ein Beispiel "MultiColor" umgebaut:

    Spoiler anzeigen
    [autoit]


    ; Author: by ? => multicolor
    ; Solution: by Ritzelrocker04 - no live Progress :(

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

    #include<GUIConstants.au3>
    #include<StaticConstants.au3>

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

    Opt("GuiOnEventMode", 1)

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

    Dim $LW = StringLeft(@ScriptDir, 3)
    Dim $Progress

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

    $hGUI = GUICreate("Test", 400, 200)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Quit")
    $ctrlLabel = GUICtrlCreateLabel("", 10, 10, 380, 20, $SS_Center)
    $ctrlProgBkgrnd = GUICtrlCreateGraphic(10, 40, 380, 30)
    GUICtrlSetBkColor(-1, 0x00FF00) ; gruen background
    $ctrlProgress = GUICtrlCreateGraphic(10, 40, 1, 30)
    GUICtrlSetBkColor(-1, 0xFF0000) ; Red progress bar

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

    GUISetState()

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

    While 1
    ; Update progress
    Sleep(250)
    $Progress = Round((DriveSpaceTotal($LW) - DriveSpaceFree($LW)) / (DriveSpaceTotal($LW) / 100), 0)
    If $Progress > 100 Then ExitLoop
    GUICtrlSetData($ctrlLabel, "Progress: " & $Progress & " %")
    $iProg = ($Progress / 100) * 380
    GUICtrlSetPos($ctrlProgress, 10, 40, $iProg, 30)
    WEnd

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

    Sleep(1000)

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

    Func _Quit()
    Exit
    EndFunc ;==>_Quit

    [/autoit]


    oder mein eigenes SimplyColorProgress:

    Spoiler anzeigen
    [autoit]


    ; Author : Ritzelrocker04 ==> SimplyColorProgress_1.2
    #include<EditConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<StaticConstants.au3>
    #include<String.au3>

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

    $LW = StringLeft(@ScriptDir, 3)
    $srcLW = Round((DriveSpaceTotal($LW) - DriveSpaceFree($LW)) / (DriveSpaceTotal($LW) / 100), 0)

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

    #Region ### START SimplyColorProgress GUI section ###
    $GUI = GUICreate("SimplyColorProgress by Ritzelrocker04", 400, 300)
    $lb = GUICtrlCreateLabel("Festplatte " & $LW, 50, 20, 100, 17)
    $implyColorProgressF = GUICtrlCreateInput("II " & 100 - $srcLW & " % frei " & _StringRepeat("I", 100 - $srcLW - 13), 45, 40, 310, 17, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    GUICtrlSetBkColor(-1, 0xFFFBF0)
    GUICtrlSetColor(-1, 0x008000); dunkelgruen
    $implyColorProgressB = GUICtrlCreateInput("II " & $srcLW & " % belegt " & _StringRepeat("I", $srcLW - 15), 45, 80, 310, 17, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    GUICtrlSetBkColor(-1, 0xFFFBF0)
    GUICtrlSetColor(-1, 0xFF0000) ; rot
    $lbB1 = GUICtrlCreateLabel(")) " & $srcLW & " % " & _StringRepeat(")", $srcLW - 8), 45, 120, 310, 14)
    GUICtrlSetBkColor(-1, 0x00FF00) ; gruen background
    GUICtrlSetColor(-1, 0xFF0000) ; rot
    $lbF1 = GUICtrlCreateLabel(")) " & 100 - $srcLW & " % " & _StringRepeat(")", 100 - $srcLW - 8), 45, 145, 310, 17)
    GUICtrlSetColor(-1, 0x008000); dunkelgruen
    $lbB2 = GUICtrlCreateLabel(_StringRepeat("I", $srcLW), 45, 180, 155, 20, $SS_RIGHT)
    GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xFF0000) ; rot
    $lbF2 = GUICtrlCreateLabel(_StringRepeat("I", 100 - $srcLW), 200, 180, 155, 20)
    GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0x008000); dunkelgruen
    $implyColorProgressB = GUICtrlCreateInput(_StringRepeat("I", $srcLW / 2 - 7) & " " & $srcLW & "% belegt " & _StringRepeat("I", $srcLW / 2 - 7), 45, 220, 310, 17, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    GUICtrlSetBkColor(-1, 0xFFFBF0)
    GUICtrlSetColor(-1, 0xFF0000) ; rot
    $ButtonOk = GUICtrlCreateButton("&OK", 122, 265, 75, 22, 0)
    $ButtonCancel = GUICtrlCreateButton("&Cancel", 203, 265, 75, 22, 0)

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

    GUISetState(@SW_SHOW)
    #EndRegion ### START SimplyColorProgress GUI section ###

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

    While 1
    $msg = GUIGetMsg()

    Select
    Case $msg = $GUI_EVENT_CLOSE Or $msg = $ButtonCancel
    ExitLoop

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

    Case $msg = $ButtonOk
    MsgBox(0, "Info über", "SimplyColorProgress by Ritzelrocker04", 5)
    ExitLoop
    EndSelect
    WEnd

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


    Viel Spaß ! ;)