GUICtrlCreateUpdown() mit 10er sprünge

  • Hallo liebe AutoIt Freunde,

    ich weiß das man mit GUICtrlCreateUpdown() auch in 10er schritten springen kann. sprich einmal auf den pfeil nach oben 10 mehr nach unten 10 weniger..
    hab vergessen wie das ging... hab hier das Forum durchsucht und nichts gefunden.. bin fast am verzweifeln.. wahrscheinlich ist es so einfach.. aber ich komm nicht darauf :(

    LG Inferior

    Einmal editiert, zuletzt von Inferior (21. August 2011 um 16:00)

    • Offizieller Beitrag

    Oscar hat mal was dazu geschrieben, um das Limit eines Up/Down zu ändern.
    Habe es ein wenig modifiziert und jetzt sollte das Beispiel machen was du willst ;)
    Edit: Ich denke es ist von Oscar, bin mir aber nicht sicher. Sollte es von jemand anderes sein, bescheid geben.

    Spoiler anzeigen
    [autoit]

    #Region - Timestamp
    ; 2011-08-20 13:38:57
    #EndRegion
    ;Beispiel von Oscar
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $hGUI = GUICreate('Test', 220, 100, -1, -1)

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

    $hInput = GUICtrlCreateInput('10', 5, 50, 210, 22)
    $hUpDown = GUICtrlCreateUpdown($hInput)

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

    GUISetState()
    GUIRegisterMsg($WM_NOTIFY, 'MY_WM_NOTIFY')

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

    Do
    Until GUIGetMsg() = -3

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

    Func MY_WM_NOTIFY($hWnd, $msg, $wParam, $lParam)
    Local $nID = BitAND($wParam, 0x0000FFFF)
    Switch $nID
    Case $hUpDown
    Local $aContrPos = ControlGetPos($hGUI, '', $hUpDown)
    If Not IsArray($aContrPos) Then Return 1
    Local $aMousePos = GUIGetCursorInfo($hGUI)
    If Not IsArray($aMousePos) Then Return 1
    If $aMousePos[1] > $aContrPos[1] + $aContrPos[3]/2 Then
    GUICtrlSetData($hInput, GUICtrlRead($hInput) - 10)
    Else
    GUICtrlSetData($hInput, GUICtrlRead($hInput) + 10)
    EndIf
    Return 1
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]
  • Vielen Dank Raupi,
    genau das hab ich gesucht.
    hab bemerkt das dann GuiCtrlSetLimit() nicht mehr funktioniert.

    so hab ich mir dann ausgeholfen:

    Spoiler anzeigen
    [autoit]


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

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

    $hGUI = GUICreate('Test', 220, 100, -1, -1)

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

    $hInput = GUICtrlCreateInput('50', 25, 25, 48, 22, $ES_READONLY)
    $hUpDown = GUICtrlCreateUpdown($hInput)

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

    GUISetState()
    GUIRegisterMsg($WM_NOTIFY, 'Combo_Schrittfunktion')

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

    Do
    Until GUIGetMsg() = -3

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

    Func Combo_Schrittfunktion($hWnd, $msg, $wParam, $lParam)
    Local $nID = BitAND($wParam, 0x0000FFFF)
    Switch $nID
    Case $hUpDown
    Local $aContrPos = ControlGetPos($hGUI, '', $hUpDown)
    If Not IsArray($aContrPos) Then Return 1
    Local $aMousePos = GUIGetCursorInfo($hGUI)
    If Not IsArray($aMousePos) Then Return 1
    If $aMousePos[1] > $aContrPos[1] + $aContrPos[3]/2 Then
    GUICtrlSetData($hInput, GUICtrlRead($hInput) - 50)
    Else
    GUICtrlSetData($hInput, GUICtrlRead($hInput) + 50)
    EndIf
    If GUICtrlRead($hInput) < 0 Then GUICtrlSetData($hInput, 0)
    If GUICtrlRead($hInput) > 500 Then GUICtrlSetData($hInput, 500)
    Return 1
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Dann kannst du ja den Thread auch auf gelöst setzen. ;)

  • Hallo,

    das geht auch anders:

    Spoiler anzeigen
    [autoit]

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

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

    $UDM_SETACCEL = 1131
    $UDM_SETRANGE32 = 1135
    $UDACCEL = DllStructCreate("UINT nSec; UINT nInc")
    $pUDACCEL = DllStructGetPtr($UDACCEL)
    DllStructSetData($UDACCEL, "nSec", 0)
    DllStructSetData($UDACCEL, "nInc", 10) ; Sprungweite 10

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

    $hGUI = GUICreate('Test', 220, 100, -1, -1)
    $hInput = GUICtrlCreateInput('50', 25, 25, 48, 22, $ES_READONLY)
    $hUpDown = GUICtrlCreateUpdown($hInput)
    GUICtrlSendMsg(-1, $UDM_SETRANGE32, 0, 200) ; Wertebereich 0 - 200
    GUICtrlSendMsg(-1, $UDM_SETACCEL, 1, $pUDACCEL)

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

    GUISetState()

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Exit

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Ebenfalls WOW!! Das ist super!! :thumbup:

    Spoiler anzeigen
    [autoit]

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

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

    $UDM_SETACCEL = 1131
    $UDM_SETRANGE32 = 1135
    $UDACCEL = DllStructCreate("UINT nSec1; UINT nInc1;UINT nSec2; UINT nInc2;UINT nSec3; UINT nInc3")
    $pUDACCEL = DllStructGetPtr($UDACCEL)
    DllStructSetData($UDACCEL, "nSec1", 0)
    DllStructSetData($UDACCEL, "nInc1", 1) ; Sprungweite 1
    DllStructSetData($UDACCEL, "nSec2", 3)
    DllStructSetData($UDACCEL, "nInc2", 10) ; Sprungweite 10
    DllStructSetData($UDACCEL, "nSec3", 6)
    DllStructSetData($UDACCEL, "nInc3", 100) ; Sprungweite 100

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

    $hGUI = GUICreate('Test', 220, 100, -1, -1)
    $hInput = GUICtrlCreateInput('50', 25, 25, 60, 22);, $ES_READONLY)
    $hUpDown = GUICtrlCreateUpdown($hInput)
    GUICtrlSendMsg(-1, $UDM_SETRANGE32, 0, 20000) ; Wertebereich 0 - 20000
    GUICtrlSendMsg(-1, $UDM_SETACCEL, 3, $pUDACCEL)

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

    GUISetState()

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Exit

    [/autoit]