Problem mit bunten Progressbars

  • Ich wollte mir mal die bunten ProgressBars seit Vista/7 mit AutoIt angucken und bin mit meinem derzeitigen Ergebniss auch fast zufrieden, allerdings gibt es dort noch 2 Probleme.
    So sieht es derzeit aus:
    [Blockierte Grafik: http://xxluke.de/Download/Bilder/Zwischenablage85.jpg]

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <SendMessage.au3>
    #include <ProgressConstants.au3>
    #Include <WinAPI.au3>

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

    $Form1 = GUICreate("Progress Bars", 263, 286)
    ;--Bar1--
    $Label1 = GUICtrlCreateLabel("Bar 1:", 8, 8)
    $Progress1 = GUICtrlCreateProgress(8, 24, 246, 25)
    ;--Bar2--
    $Label2 = GUICtrlCreateLabel("Bar 2:", 8, 64)
    $Progress2 = GUICtrlCreateProgress(8, 80, 246, 25)
    _SendMessage(GUICtrlGetHandle($Progress2),$PBM_SETSTATE, 2)
    ;--Bar3--
    $Label3 = GUICtrlCreateLabel("Bar 3:", 8, 120)
    $Progress3 = GUICtrlCreateProgress(8, 136, 246, 25)
    _SendMessage(GUICtrlGetHandle($Progress3),$PBM_SETSTATE, 3)
    ;--Bar4--
    $Label4 = GUICtrlCreateLabel("Bar 4:", 8, 176)
    $Progress4 = GUICtrlCreateProgress(8, 192, 246, 25,$PBS_MARQUEE)
    _SendMessage(GUICtrlGetHandle($Progress4),$PBM_SETMARQUEE, True, 30)
    ;----
    $Slider1 = GUICtrlCreateSlider(8, 240, 246, 37)
    GUICtrlSetData(-1,50)
    GUISetState(@SW_SHOW)

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

    $OldPercent=0
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch

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

    $NewPercent=GUICtrlRead($Slider1)
    If $NewPercent<>$OldPercent Then
    $OldPercent=$NewPercent
    GUICtrlSetData($Progress1,$NewPercent)
    GUICtrlSetData($Progress2,$NewPercent)
    GUICtrlSetData($Progress3,$NewPercent)
    EndIf
    WEnd

    [/autoit]


    Probleme:
    1.: Die gelbe und die rote Progressbar sieht man erst, wenn man den Slider bewegt hat
    2.: Bei 0%-1% und 99%-100% stimmt was mit den bunten Bars nicht, sie sind immer andersrum (also bei 99% zeigen sie 100%, bei 100% 99% usw.; am besten selber mal angucken)

  • Zu deinem ersten Problem.

    Frag den Slider einfach nach dem erstellen ab und setzte die Bars dementsprechend :

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <SendMessage.au3>
    #include <ProgressConstants.au3>
    #Include <WinAPI.au3>

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

    $Form1 = GUICreate("Progress Bars", 263, 286)
    ;--Bar1--
    $Label1 = GUICtrlCreateLabel("Bar 1:", 8, 8)
    $Progress1 = GUICtrlCreateProgress(8, 24, 246, 25)
    ;--Bar2--
    $Label2 = GUICtrlCreateLabel("Bar 2:", 8, 64)
    $Progress2 = GUICtrlCreateProgress(8, 80, 246, 25)
    _SendMessage(GUICtrlGetHandle($Progress2),$PBM_SETSTATE, 2)
    ;--Bar3--
    $Label3 = GUICtrlCreateLabel("Bar 3:", 8, 120)
    $Progress3 = GUICtrlCreateProgress(8, 136, 246, 25)
    _SendMessage(GUICtrlGetHandle($Progress3),$PBM_SETSTATE, 3)
    ;--Bar4--
    $Label4 = GUICtrlCreateLabel("Bar 4:", 8, 176)
    $Progress4 = GUICtrlCreateProgress(8, 192, 246, 25,$PBS_MARQUEE)
    _SendMessage(GUICtrlGetHandle($Progress4),$PBM_SETMARQUEE, True, 30)
    ;----
    $Slider1 = GUICtrlCreateSlider(8, 240, 246, 37)
    GUICtrlSetLimit($Slider1, 100, 0)
    GUICtrlSetData($Slider1, 50)
    GUISetState(@SW_SHOW)
    $OldPercent=0

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

    GUICtrlSetData($Progress1,GUICtrlRead($Slider1))
    GUICtrlSetData($Progress2,GUICtrlRead($Slider1))
    GUICtrlSetData($Progress3,GUICtrlRead($Slider1))

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch

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

    $NewPercent=GUICtrlRead($Slider1)
    If $NewPercent<>$OldPercent Then
    $OldPercent=$NewPercent
    GUICtrlSetData($Progress1,$NewPercent)
    GUICtrlSetData($Progress2,$NewPercent)
    GUICtrlSetData($Progress3,$NewPercent)
    EndIf
    WEnd

    [/autoit]