Slider mit std und min

  • Hallo,


    ich will mir eine Slider Gui basteln, mit der ich eine Zeit einstellen kann. Wenn das zweite Feld größder 60 min, soll die volle Stunde in erste Feld und so weiter, Habt ihr auf die Schnelle ne Idee wie ich das mache, bevor ich da wieder den ganzen Abénd dmit verbringe.


    Spoiler anzeigen

    #include <EditConstants.au3>
    GUICreate("...", 200, 70)
    $slider = GUICtrlCreateSlider(10, 10, 150, 20)
    $input = GUICtrlCreateInput("", 10, 40, 50, 20, $ES_NUMBER)
    $input2 = GUICtrlCreateInput("", 80, 40, 50, 20, $ES_NUMBER)
    GUISetState()
    While True
    $msg = GUIGetMsg()
    If $msg = -3 Then Exit
    If $msg = $slider Then GUICtrlSetData($input2, GUICtrlRead($slider))
    If $msg = $input2 Then GUICtrlSetData($slider, GUICtrlRead($input2))
    WEnd

  • Meinst du so ?

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>

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

    GUICreate("...", 200, 70)
    $slider = GUICtrlCreateSlider(10, 10, 150, 20)
    $input = GUICtrlCreateInput("", 10, 40, 50, 20, $ES_NUMBER)
    $input2 = GUICtrlCreateInput("", 80, 40, 50, 20, $ES_NUMBER)
    GUISetState()

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

    While True
    $msg = GUIGetMsg()
    If $msg = -3 Then Exit
    If $msg = $slider Then
    $sinput = GUICtrlRead($slider)
    If $sinput > 60 Then
    GUICtrlSetData($input,1)
    $sinput -= 60
    EndIf
    GUICtrlSetData($input2,$sinput)
    EndIf
    If $msg = $input2 Then GUICtrlSetData($slider, GUICtrlRead($input2))
    WEnd

    [/autoit]
    • Offizieller Beitrag

    oder so:

    Spoiler anzeigen
    [autoit]


    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    GUICreate("...", 200, 70)
    $slider = GUICtrlCreateSlider(10, 10, 150, 20)
    GUICtrlSetLimit(-1, 1440)
    $input = GUICtrlCreateInput("", 10, 40, 50, 20, $ES_NUMBER)
    $input2 = GUICtrlCreateInput("", 80, 40, 50, 20, $ES_NUMBER)
    GUISetState()
    GUIRegisterMsg($WM_HSCROLL, '_WM_HSCROLL')
    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _WM_HSCROLL($hWnd, $Msg, $wParam, $lParam)
    $time = GUICtrlRead($slider)
    GUICtrlSetData($input, StringFormat('%02i', Int($time / 60)))
    GUICtrlSetData($input2, StringFormat('%02i', Mod($time, 60)))
    EndFunc

    [/autoit]
  • Jo die zweite Lösung ist perfekt, Kann ich da noch ein Input Feld erzeugen, in dem man die Zeit eingibt. BSP 145 min. und ich kann dann it demSlider einstellen, wie viel ich von den 145 min brauche. Versteht ihr was ich meine. ????

  • bin gerade dabei. Will mir ein drittes Input feld machen, indem ich die Zeit, dann eintragen kann und die dann irgendwie auf den Slider übertargen. Da sich die Zeit immer ändert, kann ich nicht mit festen Größen arbeiten.

  • Wenn ich den Wert in Input Feld gebe, lässt sich der Slider nicht merh aktualisieren


    Spoiler anzeigen
    [autoit]

    GUICreate("...", 500, 300)
    $time=GUICtrlCreateInput("", 10, 10, 50, 20, $ES_NUMBER)
    $time2= Guictrlread($time)
    $slider = GUICtrlCreateSlider(10, 60, 350, 20)
    GUICtrlSetLimit(-1, $time2)
    $input = GUICtrlCreateInput("", 10, 80, 50, 20, $ES_NUMBER)
    $input2 = GUICtrlCreateInput("", 80, 80, 50, 20, $ES_NUMBER)
    GUISetState()
    GUIRegisterMsg($WM_HSCROLL, '_WM_HSCROLL')
    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _WM_HSCROLL($hWnd, $Msg, $wParam, $lParam)
    $time = GUICtrlRead($slider)
    GUICtrlSetData($input, StringFormat('%02i', Int($time / 60)))
    GUICtrlSetData($input2, StringFormat('%02i', Mod($time, 60)))
    EndFunc

    [/autoit]

    Edit Oscar: Bitte zusätzlich zum Spoiler noch die AutoIt-Tags benutzen. Hab's jetzt mal eingefügt.

    Einmal editiert, zuletzt von Oscar (24. April 2010 um 20:12)

    • Offizieller Beitrag

    versuch's mal so:

    Spoiler anzeigen
    [autoit]


    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    GUICreate("...", 500, 300)
    $max = GUICtrlCreateInput("240", 10, 10, 50, 20, $ES_NUMBER)
    $slider = GUICtrlCreateSlider(10, 60, 350, 20)
    GUICtrlSetLimit(-1, GUICtrlRead($max))
    $input = GUICtrlCreateInput("", 10, 80, 50, 20, $ES_NUMBER)
    $input2 = GUICtrlCreateInput("", 80, 80, 50, 20, $ES_NUMBER)
    GUISetState()
    GUIRegisterMsg($WM_HSCROLL, '_WM_HSCROLL')
    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _WM_HSCROLL($hWnd, $Msg, $wParam, $lParam)
    Local $iMax, $time
    $iMax = GUICtrlRead($max)
    GUICtrlSetLimit($slider, $iMax)
    $time = GUICtrlRead($slider)
    GUICtrlSetData($input, StringFormat('%02i', Int($time / 60)))
    GUICtrlSetData($input2, StringFormat('%02i', Mod($time, 60)))
    EndFunc ;==>_WM_HSCROLL

    [/autoit]
  • Brauch nochmal eure Hilfe, kann man auch die Zeit die man mit dem Slider eingibt, von der eingetragen Zeit wieder abziehen?

    • Offizieller Beitrag

    Verstehe die Frage jetzt nicht so ganz. ?(
    Slider-Richtung umdrehen?
    So:

    Spoiler anzeigen
    [autoit]


    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    GUICreate("...", 500, 300)
    $max = GUICtrlCreateInput("240", 10, 10, 50, 20, $ES_NUMBER)
    $slider = GUICtrlCreateSlider(10, 60, 350, 20)
    GUICtrlSetLimit(-1, GUICtrlRead($max))
    $input = GUICtrlCreateInput("", 10, 80, 50, 20, $ES_NUMBER)
    $input2 = GUICtrlCreateInput("", 80, 80, 50, 20, $ES_NUMBER)
    GUISetState()
    GUIRegisterMsg($WM_HSCROLL, '_WM_HSCROLL')
    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _WM_HSCROLL($hWnd, $Msg, $wParam, $lParam)
    Local $iMax, $time
    $iMax = GUICtrlRead($max)
    GUICtrlSetLimit($slider, $iMax)
    $time = $iMax - GUICtrlRead($slider)
    GUICtrlSetData($input, StringFormat('%02i', Int($time / 60)))
    GUICtrlSetData($input2, StringFormat('%02i', Mod($time, 60)))
    EndFunc ;==>_WM_HSCROLL

    [/autoit]
  • Jaist ein wenig blöd von mir fomuliert. ich meine eine func, die die Zeit in dem Beispiel 240 um jeden Punkt auf dem Slider reduziert. Also wenn ich 240 min im Oberen Input habe, und ich de Slider auf 120 stelle, dass dann oben nur noch 120 stehen.

  • So?

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    GUICreate("...", 500, 300)
    $max = GUICtrlCreateInput("240", 10, 10, 50, 20, $ES_NUMBER)
    $diff = GUICtrlCreateLabel("240", 70, 12, 50, 17)
    $slider = GUICtrlCreateSlider(10, 60, 350, 20)
    GUICtrlSetLimit(-1, GUICtrlRead($max))
    $input = GUICtrlCreateInput("", 10, 80, 50, 20, $ES_NUMBER)
    $input2 = GUICtrlCreateInput("", 80, 80, 50, 20, $ES_NUMBER)
    GUISetState()
    GUIRegisterMsg($WM_HSCROLL, '_WM_HSCROLL')
    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _WM_HSCROLL($hWnd, $Msg, $wParam, $lParam)
    Local $iMax, $time
    $iMax = GUICtrlRead($max)
    GUICtrlSetLimit($slider, $iMax)
    $time = GUICtrlRead($slider)
    GUICtrlSetData($diff, $iMax - $time)
    GUICtrlSetData($input, StringFormat('%02i', Int($time / 60)))
    GUICtrlSetData($input2, StringFormat('%02i', Mod($time, 60)))
    EndFunc ;==>_WM_HSCROLL

    [/autoit]

    Ich würds in einem Label anzeigen lassen.

    Oder so wie du es wolltest:

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    GUICreate("...", 500, 300)
    $max = GUICtrlCreateInput("240", 10, 10, 50, 20, $ES_NUMBER)
    $slider = GUICtrlCreateSlider(10, 60, 350, 20)
    GUICtrlSetLimit(-1, GUICtrlRead($max))
    $input = GUICtrlCreateInput("", 10, 80, 50, 20, $ES_NUMBER)
    $input2 = GUICtrlCreateInput("", 80, 80, 50, 20, $ES_NUMBER)
    GUISetState()
    GUIRegisterMsg($WM_HSCROLL, '_WM_HSCROLL')

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

    $iMax = GUICtrlRead($max)

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

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $max
    $iMax = GUICtrlRead($max)
    EndSwitch
    WEnd

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

    Func _WM_HSCROLL($hWnd, $Msg, $wParam, $lParam)
    Local $time
    GUICtrlSetLimit($slider, $iMax)
    $time = GUICtrlRead($slider)
    GUICtrlSetData($max, $iMax - $time)
    GUICtrlSetData($input, StringFormat('%02i', Int($time / 60)))
    GUICtrlSetData($input2, StringFormat('%02i', Mod($time, 60)))
    EndFunc ;==>_WM_HSCROLL

    [/autoit]