Einen Sliderwert per Tastendruck erhöhen, bzw. Wert per Maus vergrößern/verkleinern

  • Hi!

    In meinem kleinen Programm habe ich einen Slider, der von 0 bis 100 geht.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Include <File.au3>
    #include <StaticConstants.au3>

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

    HotKeySet("u", "_VolumeUp")
    HotKeySet("d", "_VolumeDown")

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

    GUICreate ("Favolist Editor", 700, 500, 10,10, BitOr($WS_POPUP, $DS_MODALFRAME, $WS_EX_LAYERED),$WS_EX_ACCEPTFILES)
    $Volume = GUICtrlCreateSlider(10, 10, 100, 30, 16)
    GUICtrlSetLimit(-1, 100, 0)
    GUICtrlCreateLabel("" & GUICTRLREAD($Volume), 0, 60, 50,20)
    GUICtrlSetData($Volume, 50)
    GUISetState()

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

    While 1
    $extMsg = GUIGetMsg(1)
    $msg = $extMsg[0]
    WEnd
    Func _VolumeUp()

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

    ...

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

    EndFunc

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

    Func _VolumeDown()

    ...

    EndFunc

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

    Also, das soll so funktionieren:

    Der Slider stellt eine Lautstärkeregelung dar (ist jetzt nicht mit integriert), welcher von 0% bis 100% Lautstärke geht.
    Per Tastendruck soll die Lautstärke um je 10 erhöht werden (mit Taste U um 10 erhöhen, mit Taste D um 10 verringern)
    Der Labeltext soll dabei die aktuelle Lautstärke anzeigen. Standardmäßig ist der Wert 50 eingestellt.

    Ebenso soll der Slider aber auch per Maus veränderbar sein und der Wert geändert werden. Ideal wäre es mit Scrolrad (ähnlich wie bei winamp, da geht das auch^^).
    Es ist möglich den Slider sehr genau durch das Scrolrad zu bewegen.

    Ich hatte versucht

    [autoit]

    GUICtrlSetData($Volume, +10)

    [/autoit]


    in die _VolumeUp() Funktion zu schreiben, jedoch wird dann der Slider einfach auf die Position 10 gesetzt.
    Ich bräuchte also so etwas wie:

    [autoit]

    GUICtrlSetData($Volume=$Volume+10)

    [/autoit]


    also was den aktuellen wert um 10 erhöht. Nur irgenwie hab ich da ein paar Syntax-Probleme, glaub ich ^^'

    Also meine Fragen:

    Wie kann ich den Sliderwert per Tastendruck verändern?
    Wie kann ich den Sliderwert per Mausrad/Mausklick verändern?

    mfg Henry

    2 Mal editiert, zuletzt von Henry (12. Juni 2009 um 13:25)

  • Hallo,
    dein $volume ist nur der "name" des Sliders, den eigentlichen Wert bestimmst du mit GuictrlSetdata

    [autoit]

    $lautstaerke=50 ;standard
    if $Taste="U" then $lautstaerke=$lautstaerke+10 ;lautstaerke erhöhen
    GUICtrlSetData($Volume, $lautstaerke) ;slider auf neuen Wert setzen

    [/autoit]


    also brauchst du in deine Funktion _VolumeUp nur die Erhöhung zu implementieren

    [autoit]

    Func _VolumeUp()
    If $lautstaerke<100 then $lautstaerke+=10
    GUICtrlSetData($Volume, $lautstaerke)
    EndFunc

    [/autoit]
  • Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Include <File.au3>
    #include <StaticConstants.au3>

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

    HotKeySet("u", "_VolumeUp")
    HotKeySet("d", "_VolumeDown")

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

    GUICreate ("Favolist Editor", 700, 500, 10,10, BitOr($WS_POPUP, $DS_MODALFRAME, $WS_EX_LAYERED),$WS_EX_ACCEPTFILES)
    $Volume = GUICtrlCreateSlider(10, 10, 100, 30, 16)
    GUICtrlSetLimit(-1, 100, 0)
    GUICtrlCreateLabel("" & GUICTRLREAD($Volume), 0, 60, 50,20)
    GUICtrlSetData($Volume, 50)
    GUISetState()

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

    While 1
    $extMsg = GUIGetMsg(1)
    $msg = $extMsg[0]
    WEnd
    Func _VolumeUp()
    GUICtrlSetData ($Volume,GUICtrlRead ($Volume) + 10)
    EndFunc

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

    Func _VolumeDown()
    GUICtrlSetData ($Volume,GUICtrlRead ($Volume) - 10)

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

    EndFunc

    [/autoit]

    Klar kann man den Slieder per maus verändern! Ist doch schon so, was willst du denn? Und per Scroolrad kann man ihn auch bewegen, solage er den Fokus hat!

    mfg. Jam00

  • ah!

    ja, so einfach gehts ^^

    Nur der Labeltext bleibt nach wie vor bei 50, wie kann man es machen, dass dieser automatisch aktualisiert wird?

    (muss mich wieder etwas in autoit reinarbeiten)

  • Spoiler anzeigen
    [autoit]

    Func _VolumeUp()
    GuiCtrlSetData($volume, GuiCtrlRead($volume)+10)
    GuiCtrlSetData($label, GuiCtrlRead($volume))
    EndFunc

    [/autoit]

    Und für die Mauswheel-Geschichte -> MouseEvents_UDF

  • ok, das hab ich jetzt verstanden.

    Nur mit dem mausklick/wheel funktioniert es noch nicht so richtig

    Ich hab einfach in die while-schleife dieses reingebaut:

    [autoit]

    GUICtrlSetData($Vindicator, GUICtrlRead($Volume))

    [/autoit]

    das aktualisiert das immer. Nur es flackert immer auf

    Edit:
    so habs jetzt Perfekt =D

    Hier der Code:

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Include <File.au3>
    #include <StaticConstants.au3>

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

    HotKeySet("u", "_VolumeUp")
    HotKeySet("d", "_VolumeDown")

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

    Global $lastVolume = ""

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

    GUICreate ("Favolist Editor", 700, 500, 10,10, BitOr($WS_POPUP, $DS_MODALFRAME, $WS_EX_LAYERED),$WS_EX_ACCEPTFILES)
    $Volume = GUICtrlCreateSlider(10, 10, 100, 30, 16)
    GUICtrlSetLimit(-1, 100, 0)
    $Vindicator = GUICtrlCreateLabel("" & GUICTRLREAD($Volume), 0, 60, 50,20)
    GUICtrlSetData($Volume, 50)
    GUISetState()

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

    While 1
    $extMsg = GUIGetMsg(1)
    $msg = $extMsg[0]

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

    if $LastVolume <> GUICTRLREAD($Volume) then
    $LastVolume = GUICTRLREAD($Volume)
    GUICtrlSetData($Vindicator, GUICtrlRead($Volume))

    endif

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

    WEnd
    Func _VolumeUp()

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

    GUICtrlSetData ($Volume,GUICtrlRead ($Volume) + 10)
    GUICtrlSetData($Vindicator, GUICtrlRead($Volume))

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

    EndFunc

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

    Func _VolumeDown()

    GUICtrlSetData ($Volume,GUICtrlRead ($Volume) - 10)
    GUICtrlSetData($Vindicator, GUICtrlRead($Volume))

    EndFunc

    [/autoit]


    Danke für die Hilfe =) :)

    Einmal editiert, zuletzt von Henry (12. Juni 2009 um 13:24)

  • Nur zum lernen ;):

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Include <File.au3>
    #include <StaticConstants.au3>

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

    HotKeySet("u", "_VolumeUp")
    HotKeySet("d", "_VolumeDown")

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

    Global $lastVolume = ""
    GUICreate ("Favolist Editor", 120, 60, -1,-1,$WS_CAPTION)
    $Volume = GUICtrlCreateSlider(10, 10, 100, 30, 16)
    GUICtrlSetLimit(-1, 100, 0)
    $Vindicator = GUICtrlCreateLabel("50%", 50, 45, 50,20)
    GUICtrlSetData($Volume, 50)
    GUISetState()
    GUIRegisterMsg($WM_HSCROLL, "WM_HVSCROLL")

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

    While 1
    sleep(100)
    WEnd

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

    Func _VolumeUp()
    GUICtrlSetData ($Volume,GUICtrlRead ($Volume) + 10)
    GUICtrlSetData($Vindicator, GUICtrlRead($Volume)&"%")
    EndFunc

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

    Func _VolumeDown()
    GUICtrlSetData ($Volume,GUICtrlRead ($Volume) - 10)
    GUICtrlSetData($Vindicator, GUICtrlRead($Volume)&"%")
    EndFunc

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

    Func WM_HVSCROLL($hwnd, $iMsg, $wParam, $lParam)
    Local $hWndFrom, $iCode
    If Not IsHWnd($Volume) Then $hWndCombo1 = GUICtrlGetHandle($Volume)
    $hWndFrom = $lParam
    Switch $hWndFrom
    Case $Volume, $hWndCombo1
    GUICtrlSetData($Vindicator, GUICtrlRead($Volume) & "%")
    EndSwitch
    EndFunc

    [/autoit]