Slider und Icon

  • Hiho,

    ich habe folgendes vor (aber leider kein Plan, wie ich es umsetzen soll):

    Zur Bewertung von Filmen würde ich gerne ein Slider in mein Tool bauen, Bewertung möglich von 0 - 5.
    Als optische Unterstützung sollen dann Sterne angezeigt werden:

    0 = keine
    1 = 1
    .
    .
    5 = 5

    Wenn ich alse den Slider ziehe, sollen halt entsprechend viele Sterne erscheinen.

    Beim Start des Tools sind dies natürlich 0 ... wenn nun ein Eintrag aufgerufen wird, sollen die Sterne laut Rating aus der SQL-DB angezeigt werden.
    Beim adden/deleten von Einträgen müsste das ganze wieder auf 0 springen.

    Ich finde aber keinen Anfang, wie ich es umsetzen soll ...

    • Offizieller Beitrag

    Ich würde das in etwa so machen:

    Spoiler anzeigen
    [autoit]


    #include<GuiSlider.au3>
    GUICreate('Test', 320, 240)
    Global $aStar[5]
    For $i = 0 To 4
    $aStar[$i] = GUICtrlCreateIcon('', 0, 60+$i*42, 20, 32, 32)
    Next
    $hSlider = GUICtrlCreateSlider(20, 70, 240, 32)
    _GUICtrlSlider_SetRange($hSlider, 0, 5)
    GUISetState()
    Global $msg
    While $msg <> -3
    $msg = GUIGetMsg()
    Switch $msg
    Case $hSlider
    $iSlider = GUICtrlRead($hSlider)
    For $i = 0 To 4
    If $i < $iSlider Then
    GUICtrlSetImage($aStar[$i], @SystemDir & '\shell32.dll', -44)
    Else
    GUICtrlSetImage($aStar[$i], '')
    EndIf
    Next
    EndSwitch
    WEnd

    [/autoit]
    • Offizieller Beitrag

    Ich würde noch folgendes ändern in Zeile 7.

    [autoit]

    $hSlider = GUICtrlCreateSlider(20, 70, 240, 32,$TBS_TOOLTIPS)

    [/autoit]


    Da bekommt man auch gleich beim schieben des Sliders abgezeigt welchen Wert man auswählt.
    Ist aber reine Geschmackssache .

  • Vllt mit AdlibEnable

    Spoiler anzeigen
    [autoit]

    #include<GuiSlider.au3>

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

    GUICreate('Test', 320, 240)
    Global $aStar[5]
    For $i = 0 To 4
    $aStar[$i] = GUICtrlCreateIcon('', 0, 60+$i*42, 20, 32, 32)
    Next
    $hSlider = GUICtrlCreateSlider(20, 70, 240, 32,$TBS_TOOLTIPS)
    _GUICtrlSlider_SetRange($hSlider, 0, 5)

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

    AdlibEnable("_Stars",50)

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

    GUISetState()
    Global $msg
    While $msg <> -3
    $msg = GUIGetMsg()
    WEnd

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

    Func _Stars()
    $iSlider = GUICtrlRead($hSlider)
    For $i = 0 To 4
    If $i < $iSlider Then
    GUICtrlSetImage($aStar[$i], @SystemDir & '\shell32.dll', -44)
    Else
    GUICtrlSetImage($aStar[$i], '')
    EndIf
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]
    • Offizieller Beitrag

    Dann aber mit zusätzlicher Abfrage, sonst flackert die Anzeige:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include<GuiSlider.au3>

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

    Global $hGui = GUICreate('Test', 320, 240)
    Global $aStar[5]
    For $i = 0 To 4
    $aStar[$i] = GUICtrlCreateIcon('', 0, 60+$i*42, 20, 32, 32)
    Next
    $hSlider = GUICtrlCreateSlider(20, 70, 240, 32)
    _GUICtrlSlider_SetRange($hSlider, 0, 5)

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

    AdlibEnable("_Stars", 100)

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

    GUISetState()
    Global $oldSlider
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func _Stars()
    $iSlider = GUICtrlRead($hSlider)
    If $iSlider <> $oldSlider Then
    $oldSlider = $iSlider
    For $i = 0 To 4
    If $i < $iSlider Then
    GUICtrlSetImage($aStar[$i], @SystemDir & '\shell32.dll', -44)
    Else
    GUICtrlSetImage($aStar[$i], '')
    EndIf
    Next
    EndIf
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Eh? Da ändert sich doch kaum etwas:

    Spoiler anzeigen
    [autoit]


    #include<GUIConstantsEx.au3>
    #include<GuiSlider.au3>

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

    Opt('GUIOnEventMode', 1)
    Global $hGui = GUICreate('Test', 320, 240)
    GUISetOnEvent($GUI_EVENT_CLOSE, 'End')
    Global $aStar[5]
    For $i = 0 To 4
    $aStar[$i] = GUICtrlCreateIcon('', 0, 60+$i*42, 20, 32, 32)
    Next
    $hSlider = GUICtrlCreateSlider(20, 70, 240, 32)
    _GUICtrlSlider_SetRange($hSlider, 0, 5)

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

    AdlibEnable("_Stars", 100)

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

    GUISetState()
    Global $oldSlider
    While True
    Sleep(20)
    WEnd

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

    Func _Stars()
    $iSlider = GUICtrlRead($hSlider)
    If $iSlider <> $oldSlider Then
    $oldSlider = $iSlider
    For $i = 0 To 4
    If $i < $iSlider Then
    GUICtrlSetImage($aStar[$i], @SystemDir & '\shell32.dll', -44)
    Else
    GUICtrlSetImage($aStar[$i], '')
    EndIf
    Next
    EndIf
    EndFunc

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

    Func End()
    Exit
    EndFunc

    [/autoit]

    Das funktioniert genauso!
    Vielleicht solltest Du mal Dein Script posten. Der "Fehler" steckt evtl. woanders...

  • adlib soll ja nur an sein, wenn ich den slider bediene ... meine cpu auslastung ist sonst während des ganzen scriptes auf 50% dadruch ...

    EDIT: sorry, cpu-auslastung lag an was anderem ;)

    was wäre denn, bei klick auf den slider springe ich in die OnEventFunc, dort wird OnEvent deaktiviert und der die Sterne vom Slider in ner Schleife abgefragt.
    wenn ich den slider loslasse, wird OnEvent wieder aktiviert ... geht das?

    ausserdem flackern die sterne ... =/

  • Dann mal ganz anders

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include<GuiSlider.au3>
    Opt("GUIOnEventMode", 1)

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

    Global $hGui = GUICreate('Test', 320, 240)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Ende")

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

    Global $aStar[5]
    For $i = 0 To 4
    $aStar[$i] = GUICtrlCreateIcon('', 0, 60+$i*42, 20, 32, 32)
    Next
    $hSlider = GUICtrlCreateSlider(20, 70, 240, 32)
    _GUICtrlSlider_SetRange($hSlider, 0, 5)

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

    GUISetState()

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

    GUIRegisterMsg($WM_HSCROLL, "_Stars")

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

    While 1
    Sleep(20)
    WEnd

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

    Func _Stars()
    $iSlider = GUICtrlRead($hSlider)
    For $i = 0 To 4
    If $i < $iSlider Then
    GUICtrlSetImage($aStar[$i], @SystemDir & '\shell32.dll', -44)
    Else
    GUICtrlSetImage($aStar[$i], '')
    EndIf
    Next
    EndFunc

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

    Func Ende()
    Exit
    EndFunc

    [/autoit]