Progressbar mit einem Label darüber - und der Konkurrenzkampf wer oben ist ....

  • Moin,

    Ich bastle mir gerade einen kleinen Uploader. Unter anderem verwende ich darin eine Progressbar mit einem Label darüber.
    Während des Uploads wird die Progressbar und der Text regelmäßig aktualisiert.

    Das klappt auch alles - nur leider verschwindet der Text regelmäßig hinter der Progressbar bzw. wenn ich fertig bin sogar ganz.

    Hier ein Beispielprogramm an dem Ihr sehen könnt was ich meine:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    $Form2 = GUICreate("Test Label über Progressbar", 405, 99, 598, 391)
    $Progress1 = GUICtrlCreateProgress(8, 8, 385, 49)
    $Label1 = GUICtrlCreateLabel("Label1", 8, 24, 385, 17, $SS_CENTER)
    GUICtrlSetFont(-1, 12, 800, 0, "Courier New")
    $Button1 = GUICtrlCreateButton("Start", 8, 64, 385, 33)
    GUISetState(@SW_SHOW)

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

    GUICtrlSetBkColor($Label1,$GUI_BKCOLOR_TRANSPARENT)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    For $i = 0 To 100 Step 1
    GUICtrlSetData($Progress1,$i)
    GUICtrlSetData($Label1,$i & "%")
    Sleep(100)
    Next
    EndSwitch
    WEnd

    [/autoit]

    Das Problem habe ich unter Windows 7 (64Bit), ob es unter anderen Windows Versionen auch so ist weis ich nicht

    Also, was kann ich tun? oder muss ich damit leben?

    BLinz

    • Offizieller Beitrag

    Dieses flackern hat mich auch schon einige Male beschäftigt. Ich kenne auch keine echte Abhilfe.
    Bei mir habe ich es dadurch "gelöst", dass ich den klassischen Style für die Progressbar benutzt habe.
    Dort tritt das flackern nicht auf:

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    $Form2 = GUICreate("Test Label über Progressbar", 405, 99, 598, 391)
    DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 0) ; auf den klassischen Style umschalten
    $Progress1 = GUICtrlCreateProgress(8, 8, 385, 49)
    DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 7) ; zurück zum Standard-Windowsstyle
    $Label1 = GUICtrlCreateLabel("Label1", 8, 24, 385, 17, $SS_CENTER)
    GUICtrlSetFont(-1, 12, 800, 0, "Courier New")
    $Button1 = GUICtrlCreateButton("Start", 8, 64, 385, 33)
    GUISetState(@SW_SHOW)

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

    GUICtrlSetBkColor($Label1, $GUI_BKCOLOR_TRANSPARENT)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    For $i = 0 To 100 Step 1
    GUICtrlSetData($Progress1, $i)
    GUICtrlSetData($Label1, $i & "%")
    Sleep(100)
    Next
    EndSwitch
    WEnd

    [/autoit]


    Alternativ müsstest Du das Label über/neben die Progressbar setzen.
    Wenn aber noch irgend jemand eine "echte" Lösung für das Problem hat, dann wäre ich auch interessiert. :D

  • Stimmt Oscar,

    mit dem alten Stil gibt es das Problem nicht. Mir ist auch aufgefallen, das wenn das Skript fertig, also bei 100% angelangt ist, die Progressbar im neuen Stil "nachschwingt" - der letzte Rutsch kommt erst mit kurzer Verzögerung.

    BLinz