Eigene Progressbar

  • Hallo,

    ich versuche momentan einen eigenen Ladebalken mit Autoi zu erstellen. Doch irgendwie ist es doch nicht so leicht wie es aussieht :D . Soweit bin ich schonmal:

    Spoiler anzeigen
    [autoit]

    $GUI_EVENT_CLOSE = -3

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

    GUICreate("Download", 200, 30)
    GUISetBkColor(0x393939)
    GUISetState()

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

    $Breite = 180
    $Hoehe = 3

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

    For $NextLoop = 1 To $Breite
    GUICtrlCreateGraphic(10 + $NextLoop, 10, 1, $Hoehe)
    GUICtrlSetBkColor(-1, 0x99FF00)
    Sleep(10)
    Next

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

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

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

    EndSwitch
    WEnd

    [/autoit]

    Das Problem damit ist, dass es viel zu langsam ist. Es dauert beinahe 1 Sekunde bis es auf 100 geht. Das ist viel zuviel an Zeit :( .

    Jetzt meine Farge. Wie kann ich einen Ladebalken wie hier auf dem Bild erstellen? Mit GDI+ lieber nicht, da man es sozusagen vom GUI wegwischen kann.

    autoit.de/wcf/attachment/4971/

  • Mit Step die Geschwindigkeit einstellen

    [autoit]

    $GUI_EVENT_CLOSE = -3

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

    GUICreate("Download", 200, 30)
    GUISetBkColor(0x393939)
    GUISetState()

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

    $Breite = 180
    $Hoehe = 3

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

    GUICtrlCreateLabel("", 10, 10, $Hoehe)
    GUICtrlSetBkColor(-1, 0x99FF00)

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

    For $NextLoop = 1 To $Breite Step 5
    GUICtrlSetPos(-1, -1, -1, $NextLoop)
    GUICtrlSetBkColor(-1, 0x99FF00)
    Sleep(10)
    Next

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

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

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

    EndSwitch
    WEnd

    [/autoit]
    • Offizieller Beitrag

    TimerInit benutzen und ein Label:

    Spoiler anzeigen
    [autoit]


    $GUI_EVENT_CLOSE = -3
    $Breite = 180
    $Hoehe = 3

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

    GUICreate("Download", 200, 30)
    GUISetBkColor(0x393939)
    $hProgr = GUICtrlCreateLabel('', 10, 10, 1, $Hoehe)
    GUICtrlSetBkColor(-1, 0x99FF00)
    GUISetState()

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

    $Timer = TimerInit()
    For $NextLoop = 1 To $Breite
    GUICtrlSetPos($hProgr, 10, 10, $NextLoop, $Hoehe)
    Do
    Until TimerDiff($Timer) > 4
    $Timer = TimerInit()
    Next

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • oder so:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>

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

    GUICreate("Download", 200, 30)
    GUISetBkColor(0x393939)

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

    GUISetState()

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

    $Breite = 180
    $Hoehe = 3

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

    $gProgress = GUICtrlCreateGraphic(10, 10, $Breite, $Hoehe)
    GUICtrlSetBkColor(-1, 0x393939)

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

    GUICtrlSetGraphic($gProgress, $GUI_GR_COLOR, 0x99FF00, 0x99FF00)
    For $NextLoop = 1 To 100
    $Schritt = $Breite/100
    GUICtrlSetGraphic($gProgress,$GUI_GR_RECT, Floor($Schritt*($NextLoop-1)),0, Ceiling($Schritt), $Hoehe)
    GUICtrlSetGraphic($gProgress,$GUI_GR_REFRESH)
    Sleep(100)
    Next

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

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

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

    EndSwitch
    WEnd

    [/autoit]


    oder mit GDI+

  • Also erstmal muss ich sagen die Idee finde ich super :),
    doch leider ergeben sich 2 "Probleme"...
    1. Wenn man das Fenster schließen will geht es erst nachdem die For schleife durchgelaufen ist (gut das könnte man sicherlich in die while Schleife mit einbauen..)
    aber wichtiger ist mir :
    2. Wenn man während der For Schleife (in der sich der Balken füllt) die Titelleiste gedrückt anklickt (Drag),
    dann bleibt der Fortschrittsbalken stehen und setzt an der selben Stelle fort,
    an der er aufgehört hat nachdem man die Maus wieder losgelassen hat..
    (ich hoffe ihr versteht was ich meine ^^)

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • Hallo!
    Weil ich mich auch für dieses Thema interessiere, habe ich auch mal 3 verschiedene Progressbar Methoden erstellt; vllt gefällt dir ja eine davon :)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("", 270, 25, 192, 124, BitOR($WS_POPUP, $WS_BORDER, $WS_CLIPSIBLINGS))
    Global $Pictures[26]
    GUISetBkColor(0x282828)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    $Method = 1
    While 1
    Switch $Method
    Case 1
    $left = 10
    For $i = 1 To 25
    $Pictures[$i] = GUICtrlCreatePic("balken.jpg", $left, 10, 5, 5, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
    $left += 10
    Sleep(150) ; Mit Sleep die Geschwindigkeit steuern.
    Next
    $Method = 2
    _DeleteBar()
    Case 2
    $Pic1 = GUICtrlCreatePic("balken.jpg", 10, 10, 0, 0, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
    For $i = 1 To 250
    GUICtrlSetPos($Pic1, 10, 10, $i)
    Sleep(10) ; Mit Sleep die Geschwindigkeit steuern.
    Next
    $Method = 3
    GUICtrlDelete($Pic1)
    Case 3
    $left = 10
    For $i = 1 To 25
    $Pictures[$i] = GUICtrlCreatePic("balken.jpg", $left, 10, 5, 5, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
    $left += 10
    Sleep(150) ; Mit Sleep die Geschwindigkeit steuern.
    Next
    $Pic1 = GUICtrlCreatePic("balken.jpg", 10, 10, 0, 0, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
    For $i = 1 To 250
    GUICtrlSetPos($Pic1, 10, 10, $i)
    Sleep(10) ; Mit Sleep die Geschwindigkeit steuern.
    Next
    $Method = 4
    EndSwitch
    WEnd

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

    Func _DeleteBar()
    For $i = 1 To 25
    GUICtrlDelete($Pictures[$i])
    Next
    EndFunc ;==>_DeleteBar

    [/autoit]

    balken.jpg habe ich mit gepostet.

    Viel Spaß & vielen Dank fürs Testen.

    lG,

    Lenny

    Jaja, Moo does the Cow!