Farbige Progressbar mit ActiveX

  • Für alle, die eine farbige Progressbar haben wollen. Um die Schriftart zu ändern muss glaube ich die VB-Runtime installiert sein.

    Spoiler anzeigen
    [autoit]

    ; Code by Prog@ndy
    ;Does it need VB-Runtime???
    ;Progressbar OCX from http://www.recursosvisualbasic.com.ar/htm/ocx-compon…r-xp-varios.htm
    ;Paintx.dll from http://www.paintlib.de/paintlib/
    #include <GUIConstants.au3>

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

    Dim $ocx

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

    Func OnAutoItExit ( )
    _GuiCtrlOCXProgressUnregister($ocx)
    EndFunc

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

    $ocx = _GuiCtrlOCXProgressRegister()

    ;$progress = ObjCreate("Proyecto2.XP_ProgressBar")

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

    ;Global Const $WM_LBUTTONDOWN = 0x0201
    ;Const $WM_SYSCOMMAND = 0x112
    ;Global $aNDrive = DriveGetDrive('FIXED'), $aProgress[$aNDrive[0]], $aName[$aNDrive[0]], $msg = 0, $aVol = 0
    Global $GUI = GUICreate('SpaceBar v 2.0', 248, 500, @DesktopWidth - 250, 27, -1, $WS_EX_TOPMOST)
    ;GUICtrlCreateObj($progress,0,0,100,20)

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

    $progar = _GuiCtrlCreateOCXProgress(2,2,200,20)

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

    _GuiCtrlOCXProgressShowText($progar)
    _GuiCtrlOCXProgressSetScrolling($progar,9)
    _GuiCtrlOCXProgressSetImage($progar,@ScriptDir & "\Progress.png")
    _GuiCtrlOCXProgressSetColor($progar,0xFF0000)
    _GuiCtrlOCXProgressSetMinMax($progar,0,100)
    _GuiCtrlOCXProgressSetValue($progar,50)
    _GuiCtrlOCXProgressShowOrientation($progar,0)
    _GuiCtrlOCXProgressSetFont($progar,"", _
    10, True, _
    False, True, _
    False, 800)


    $progar2 = _GuiCtrlCreateOCXProgress(2,50,50,200)
    $label = GUICtrlCreateLabel("This is a LABEL",2,125,50,75,$SS_CENTER)
    GUICtrlSetBkColor(-1,$GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetColor(-1,0x0000FF)
    GUICtrlSetFont(-1,12,700,-1,"Arial")

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

    _GuiCtrlOCXProgressShowText($progar2,0) ;Text verstecken
    _GuiCtrlOCXProgressSetScrolling($progar2,9)
    _GuiCtrlOCXProgressSetImage($progar2,@ScriptDir & "\progress.png")
    _GuiCtrlOCXProgressSetColor($progar2,0xFF0000)
    _GuiCtrlOCXProgressSetMinMax($progar2,0,100)
    _GuiCtrlOCXProgressSetValue($progar2,50)
    _GuiCtrlOCXProgressShowOrientation($progar2,1)
    _GuiCtrlOCXProgressSetFont($progar2,"Courier", _
    10, True, _
    False, True, _
    False, 800)

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

    GUISetState()

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

    ;Sleep(1000)
    ;_GuiCtrlDeleteOCXProgress($progar)

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

    For $i = 0 To 10
    _GuiCtrlOCXProgressSetScrolling($progar,$i)
    _GuiCtrlOCXProgressSetScrolling($progar2,$i)

    For $j = 0 To 100
    _GuiCtrlOCXProgressSetValue($progar,$j)
    _GuiCtrlOCXProgressSetValue($progar2,$j)
    GUICtrlSetStyle($label,-1)
    Sleep(20)
    Next

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

    Sleep(500)
    Next

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

    While 1
    $msg = GUIGetMsg()
    If $msg = -3 Or $msg = -1 Then ExitLoop
    WEnd

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

    Exit

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

    Func _GuiCtrlOCXProgressSetFont(ByRef $ProgressArray,$FontName = "", _
    $Size = 0, $Bold = False, _
    $Underline = False, $Italic = False, _
    $Strikethrough = False, $Weight = -1)

    If Not IsObj($ProgressArray[0]) Then Return SetError(1,0,0)
    $Tfont = ObjCreate("StdFont")
    If Not IsObj($Tfont) Then Return SetError(2,0,0)
    If Not $FontName = "" Then $Tfont.Name = $FontName
    If Not $Size = 0 Then $Tfont.Size = $Size
    $Tfont.Bold = $Bold ;true/false
    $Tfont.Underline = $Underline ;true/false
    $Tfont.Italic = $Italic ;true/false
    $Tfont.Strikethrough = $Strikethrough ;true/false
    $Tfont.Charset(4576) ;true/false
    If Not $Weight = -1 Then $Tfont.Weight = $Weight ; min: 0 /max: 1000
    $ProgressArray[0].Font = $Tfont
    $Tfont = 0
    EndFunc

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

    Func _GuiCtrlOCXProgressSetValue(ByRef $ProgressArray,$value)
    If Not IsObj($ProgressArray[0]) Then Return SetError(1,0,0)
    If Not IsNumber($value) Then Return SetError(2,0,0)
    $ProgressArray[0].Value = $value
    EndFunc

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

    Func _GuiCtrlOCXProgressSetMinMax(ByRef $ProgressArray,$min = -1, $max = -1)
    If Not IsObj($ProgressArray[0]) Then Return SetError(1,0,0)
    If Not IsNumber($min) Or Not IsNumber($max) Then Return SetError(2,0,0)
    If $min > -1 Then $ProgressArray[0].min = $min
    If $max > -1 Then $ProgressArray[0].max = $max
    EndFunc

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

    Func _GuiCtrlOCXProgressShowText(ByRef $ProgressArray,$value = True)
    If Not IsObj($ProgressArray[0]) Then Return SetError(1,0,0)
    If Not $value = 1 And Not $value = 0 Or IsString($value) Then Return SetError(2,0,0)
    $ProgressArray[0].ShowText = $value
    EndFunc

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

    Func _GuiCtrlOCXProgressShowOrientation(ByRef $ProgressArray,$value = 0)
    If Not IsObj($ProgressArray[0]) Then Return SetError(1,0,0)
    If Not $value = 1 And Not $value = 0 Or IsString($value) Then Return SetError(2,0,0)
    $ProgressArray[0].Orientation = $value
    EndFunc

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

    Func _GuiCtrlOCXProgressSetScrolling(ByRef $ProgressArray,$value)
    If Not IsObj($ProgressArray[0]) Then Return SetError(1,0,0)
    If $value >= 0 And $value <= 10 Then
    $ProgressArray[0].Scrolling = $value
    Return 1
    EndIf
    Return 0
    EndFunc

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

    Func _GuiCtrlOCXProgressSetColor(ByRef $ProgressArray,$value, $RGB = 1)
    If Not IsObj($ProgressArray[0]) Then Return SetError(1,0,0)
    If $RGB Then
    $hex = Hex($value,6)
    $value = Execute("0x" & StringRight($hex,2) & StringMid($hex,3,2) & StringLeft($hex,2))
    EndIf
    $ProgressArray[0].Color = $value
    EndFunc

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

    Func _GuiCtrlOCXProgressSetImage(ByRef $ProgressArray,$value)
    If Not IsObj($ProgressArray[0]) Then Return SetError(1,0,0)
    If Not FileExists($value) Then Return SetError(2,0,0)
    $TPictureLoad = ObjCreate("PaintX.PictureDecoder")
    $ProgressArray[0].Image = $TPictureLoad.LoadPicture($value)
    $TPictureLoad = 0
    EndFunc

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

    Func _GuiCtrlCreateOCXProgress($x, $y, $width, $height, $Scrolling = 0, $Orientation = 0)
    Dim $ar[2]
    $ar[0] = ObjCreate("Proyecto2.XP_ProgressBar")
    If @error Then Return SetError(1,0,0)
    $ar[0].Scrolling = $scrolling
    $ar[0].Orientation = $Orientation
    $ar[1] = GUICtrlCreateObj($ar[0],$x,$y,$width,$height)
    Return $ar
    EndFunc

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

    Func _GuiCtrlOCXProgressRegister()
    $return = 0
    If RegRead("HKCR\CLSID\{4A5E5E35-91F4-46B1-B62F-78148132EF93}","") = "Proyecto2.XP_ProgressBar" Then

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

    Else
    If Not FileExists(@ScriptDir & "\progressbar-xp.ocx") Then FileInstall("progressbar-xp.ocx",@ScriptDir & "\progressbar-xp.ocx")
    RunWait("regsvr32.exe /s progressbar-xp.ocx",@ScriptDir)
    $return = 1
    EndIf
    If RegRead("HKCR\CLSID\{B69FE5D3-9F53-11D2-B13F-444553540000}","") = "PictureDecoder Class" Then

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

    Else
    If Not FileExists(@ScriptDir & "\paintx.dll") Then FileInstall("paintx.dll",@ScriptDir & "\paintx.dll")
    RunWait("regsvr32.exe /s paintx.dll",@ScriptDir)
    $return += 2
    EndIf
    Return $return
    EndFunc

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

    Func _GuiCtrlOCXProgressUnregister($Install)
    If $Install >= 1 Then
    RunWait("regsvr32.exe /s /u progressbar-xp.ocx",@ScriptDir)
    FileDelete(@ScriptDir & "\progressbar-xp.ocx")
    EndIf
    If $Install >= 2 Then
    RunWait("regsvr32.exe /s /u paintx.dll",@ScriptDir)
    FileDelete(@ScriptDir & "\paintx.dll")
    EndIf
    EndFunc

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

    Func _GuiCtrlDeleteOCXProgress(ByRef $ProgressArray)
    If Not IsObj($ProgressArray[0]) Then Return SetError(1,0,0)
    GUICtrlDelete($ProgressArray[1])
    $ProgressArray[0] = 0
    Return 1
    EndFunc

    [/autoit]
  • Ich habe hier noch eine andere Progressbar, die aber sehr langsam beim Update ist :(

    Spoiler anzeigen
    [autoit]

    ;-------------------------------------------------------------------
    #region Gradient
    ;===============================================================================
    ;
    ; Function Name: _Gradient($RGB_Color1 ,$RGB_Color2, $Count)
    ; Description:: Returns an Array of Gradient Colors
    ; Parameter(s): $RGB_Color1 : The Start-Color in RGB Hexadecimal
    ; $RGB_Color2 : The End-Color in RGB Hexadecimal
    ; $Count : The number of Colors in the Gradient
    ; Requirement(s):
    ; Return Value(s): An Array with the Colors
    ; Author(s): Prog@ndy
    ;
    ;===============================================================================
    ;

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

    Func _Gradient($RGB_Color1 ,$RGB_Color2, $Count)
    Dim $Color1_R, $Color1_G, $Color1_B, $Color2_R, $Color2_G, $Color2_B, $NeuCol_R, $NeuCol_G, $NeuCol_B

    $Color1_R = BitAND( BitShift($RGB_Color1, 16), 0xff)
    $Color1_G = BitAND( BitShift($RGB_Color1, 8), 0xff)
    $Color1_B = BitAND($RGB_Color1, 0xff)

    $Color2_R = BitAND( BitShift($RGB_Color2, 16), 0xff)
    $Color2_G = BitAND( BitShift($RGB_Color2, 8), 0xff)
    $Color2_B = BitAND($RGB_Color2, 0xff)

    $Count -= 1 ; 0-basiert !
    Dim $arColors[$Count+1], $pos1

    For $i = 0 To $Count
    $pos1 = $Count - $i
    $NeuCol_R = ($Color1_R * $pos1 + $Color2_R * $i) / ($Count)
    $NeuCol_G = ($Color1_G * $pos1 + $Color2_G * $i) / ($Count)
    $NeuCol_B = ($Color1_B * $pos1 + $Color2_B * $i) / ($Count)
    $arColors[$i] = Execute('0x' & Hex($NeuCol_R,2) & Hex($NeuCol_G,2) & Hex($NeuCol_B,2))
    Next
    Return $arColors
    EndFunc
    #endregion
    ;-------------------------------------------------------------------

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

    ;-------------------------------------------------------------------
    #region Colored Progressbar

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

    ;Hilfsfunktion für doppelten Verlauf
    ; Author(s): Prog@ndy
    Func _ZwischenGrad($RGB_c)
    Local $c_R = BitAND( BitShift($RGB_c, 16), 0xff)
    Local $c_G = BitAND( BitShift($RGB_c, 8), 0xff)
    Local $c_B = BitAND($RGB_c, 0xff)
    $c_R = _MyMax(0,$c_R-99)
    $c_G = _MyMax(0,$c_G-99)
    $c_B = _MyMax(0,$c_B-99)
    Return Dec(Hex($c_R,2) & Hex($c_G,2) & Hex($c_B,2))
    EndFunc

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

    ; Author(s): Prog@ndy
    Func _ProgressCreate($x, $y,$w = 204, $h = 24,$Col=0xFFFF00,$GradCol=0x00FF00,$BG=0xAAAA00,$GradBG=0xFF0000)
    Local $ID[8]
    $ID[0] = GUICtrlCreateGraphic($x,$y,$w,$h)
    Local $error = @error
    Local $extended = @extended
    $ID[1] = $w
    $ID[2] = $h
    If $Col = -1 Then $Col=0xFFFF00
    If $BG = -1 Then $BG=0xAAAA00
    If $GradCol = -1 Then $GradCol=0x00FF00
    If $GradBG = -1 Then $GradBG=0xFF0000
    $ID[3] = $Col
    $ID[4] = $BG
    $ID[5] = $GradCol
    $ID[6] = $GradBG
    _ProgressSet($ID,0)
    Return SetError($error,$extended,$ID)
    EndFunc

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

    ; Author(s): Prog@ndy
    Func _ProgressDelete(ByRef $ID)
    If Not IsArray($ID) Or UBound($ID) <> 8 Then Return SetError(1,0,0)
    $ID[1] = -1
    $ID[2] = -1
    $ID[3] = -1
    $ID[4] = -1
    $ID[5] = -1
    $ID[6] = -1
    $ID[7] = -1
    Dim $temp = GUICtrlDelete($ID[0])
    Return SetError(@error,0,$temp)
    EndFunc

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

    ; Author(s): Prog@ndy
    Func _ProgressSetColors(ByRef $ID,$Col,$BG=-1,$GradCol=-1,$GradBG=-1)
    If Not IsArray($ID) Or UBound($ID) <> 8 Then Return SetError(1,0,0)
    $ID[3] = $Col
    If $BG <> -1 Then $ID[4] = $BG
    If $GradCol <> -1 Then $ID[5] = $GradCol
    If $GradBG <> -1 Then $ID[6] = $GradBG
    MsgBox(0,$ID[6],$ID[7])
    _ProgressSet($ID,$ID[7])
    Return SetError(@error,0,@error)
    EndFunc

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

    ; Author(s): Prog@ndy
    Func _ProgressSet(ByRef $ID, $value)
    Local $Wechsel = Round((9/20)*$ID[2]-4)
    Local $Hoehe = $ID[2]-4
    Local $Breite = $ID[1]-4

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


    If $value <= $ID[7] Then
    GUICtrlSetBkColor($ID[0],0xAAAAAA)
    GUICtrlSetColor($ID[0],0x777777)
    $ID[7] = $value
    Local $temp = _ZwischenGrad($ID[6])
    Local $Gradient = _Gradient($ID[4],$temp, $Wechsel)
    Local $Gradient2 = _Gradient($temp,$ID[6], $Hoehe-$Wechsel)
    For $i = 2 To $Wechsel+1
    GUICtrlSetGraphic($ID[0],$GUI_GR_COLOR,$Gradient[$i-2])
    GUICtrlSetGraphic($ID[0],$GUI_GR_RECT, 2,$i,$Breite,1)
    Next
    For $i = $Wechsel+2 To $Hoehe+1
    GUICtrlSetGraphic($ID[0],$GUI_GR_COLOR,$Gradient2[$i-$Wechsel-2])
    GUICtrlSetGraphic($ID[0],$GUI_GR_RECT, 2,$i,$Breite,1)
    Next
    Local $start = 2
    Else
    Local $start = $ID[7]+2
    $ID[7] = $value
    EndIf

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

    Local $Faktor = $Breite/100
    $value *= $Faktor
    If Round($value) >= $Breite Then $value = $Breite
    Local $temp = _ZwischenGrad($ID[5])
    Local $Gradient = _Gradient($ID[3],$temp, $Wechsel)
    Local $Gradient2 = _Gradient($temp,$ID[5], $Hoehe-$Wechsel)
    ;Local $Gradient = _Gradient(0xFFFF00,0x00AA00, $Wechsel)
    ;Local $Gradient2 = _Gradient(0x00AA00,0x00FF00, $Hoehe-$Wechsel)
    For $i = 2 To $Wechsel+1
    GUICtrlSetGraphic($ID[0],$GUI_GR_COLOR,$Gradient[$i-2])
    GUICtrlSetGraphic($ID[0],$GUI_GR_RECT, $start,$i,$value-$start+2,1)
    Next
    For $i = $Wechsel+2 To $Hoehe+1
    GUICtrlSetGraphic($ID[0],$GUI_GR_COLOR,$Gradient2[$i-$Wechsel-2])
    GUICtrlSetGraphic($ID[0],$GUI_GR_RECT, $start,$i,$value-$start+2,1)
    Next

    GUICtrlSetGraphic($ID[0],$GUI_GR_COLOR,0xCCCCCC)
    GUICtrlSetGraphic($ID[0],$GUI_GR_PIXEL, 2,2)
    GUICtrlSetGraphic($ID[0],$GUI_GR_PIXEL, 2,$Hoehe+1);19)
    GUICtrlSetGraphic($ID[0],$GUI_GR_PIXEL, $Breite+1,2)
    GUICtrlSetGraphic($ID[0],$GUI_GR_PIXEL, $Breite+1,$Hoehe+1)
    GUICtrlSetGraphic($ID[0],$GUI_GR_COLOR,0xEEEEEE)
    GUICtrlSetGraphic($ID[0],$GUI_GR_PIXEL, 0,$Hoehe+3)
    GUICtrlSetGraphic($ID[0],$GUI_GR_PIXEL, 0,0)
    GUICtrlSetGraphic($ID[0],$GUI_GR_PIXEL, $Breite+3,$Hoehe+3)
    GUICtrlSetGraphic($ID[0],$GUI_GR_PIXEL, $Breite+3,0)

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

    GUICtrlSetGraphic($ID[0],$GUI_GR_REFRESH)

    EndFunc

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

    ; Original _Max() Function, directly included
    ; Author(s): Jeremy Landes <jlandes at landeserve dot com>
    Func _MyMax($nNum1, $nNum2)
    ; Check to see if the parameters are indeed numbers of some sort.
    If (Not IsNumber($nNum1)) Then
    SetError(1)
    Return (0)
    EndIf
    If (Not IsNumber($nNum2)) Then
    SetError(2)
    Return (0)
    EndIf

    If $nNum1 > $nNum2 Then
    Return $nNum1
    Else
    Return $nNum2
    EndIf
    EndFunc ;==>_Max

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

    #endregion
    ;-------------------------------------------------------------------

    [/autoit]

    Einmal editiert, zuletzt von progandy (21. Februar 2008 um 16:56)

  • sry das ich so blöd frage, aber welchen teil genau muss ich denn für die progress bar jetz in mein script einfügen?

    so wie ich das sehe sind das ja mehrere verschidene...

    wäre supa wenn du ne kurze erklärung für die "nicht so erfahrenen" von uns schreiben könntest

    danke mfg nova

  • Gut, ich versuchs:

    Farbige Progressbar mit ActiveX aus Psot #1:
    Sollte verwendet werden, wenn man ActiveX-Komponenten auf dem Computer installieren kann und schnelle Updates benötigt werden.

    Colored Progressbar aus Post #3:
    Sollte vwerwendet werden, wenn man keine externen Komponenten verwenden kann / will. Dafür flackert diese beim Update -> Nur für Anwendungen mit seltenem Update verwenden, z.B. SpaceMeter für Festplatten

    //Edit: Du musst jeweils das ganze Script einfügen. Bei Farbige Progressbar mit ActiveX wird auch der Anhang benötigt, bei Post #3 nicht.
    Genauere Erklärungen versuch ich morgen mal zu machen :) Hab heut keine Zeit mehr

    Einmal editiert, zuletzt von progandy (21. Februar 2008 um 18:39)