Input/UpDown Control abfangen und Inhalt prüfen

  • Hi Leute,
    ich hab ein Problem mit einem UpDown Control, welches in einem Input control eingebettet wurde. Zwar nicht beim abfangen des updown controls sondern bei dem was es anschließend machen soll
    Hier der Code:

    [autoit]

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

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

    $hGUI = GUICreate("Test", 500, 500)

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

    $hInput = GUICtrlCreateInput("5000", 10, 10, 100, 20)
    $hUpDown = GUICtrlCreateUpdown($hInput, BitOR($UDS_WRAP, $UDS_NOTHOUSANDS))
    GUICtrlSetLimit($hUpDown, 6000, 5000)

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

    GUISetState()

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

    GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY")

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

    While 1

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

    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch

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

    WEnd

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

    Func _WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)

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

    ; Is it from the UpDown?
    If BitAND($wParam, 0xFFFF) = $hUpDown Then
    ; Create NMUPDOWN structure
    Local $tStruct = DllStructCreate("hwnd;long;int;long;long", $lParam)
    $imgIndex = DllStructGetData($tStruct, 4) ; Input auslesen
    MsgBox(0, "fdsf", $imgIndex)
    EndIf
    EndIf

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

    EndFunc

    [/autoit]

    Dies ist nicht mein Code, habe es nur zum aufzeigen verwendet, wie man das updown control abfängt. Ich möchte den Inhalt auslesen, allerdings ist es so, wenn ich up oder down klicke liest er den aktuellen inhalt aus, während er danach erst inkrementiert. Es ist also alles immer um 1 verschoben. Wenn ich 1 ausgelesen habe, steht im control 2, dann liest er 2 aus und dort steht 3. Jetzt hab ich noch ein Label welches mit GUICTRLSetData angepasst werden soll und zwar mit dem Inhalt eines Arrays was von [0] - [3] geht. Wenn ich mit dem updown control hochgehe ist es noch machbar, indem ich $imgIndex -1 setze, aber da ich nicht prüfen kann ob nun up oder down geklickt wurde, klappt es nicht beim runtergehen. Wenn im control 4 steht und ich down klicke hab ich 3, mein array hat dann [3], da $imgIndex -1, obwohl das array ja [2] haben sollte, da nach dem down klick der Inhalt 3 ist ?(

    Hoffe ihr könnt folgen, sonst muss ich weiter ausholen!

    Hat jemand eine idee, wie ich das nun umsetzen kann?

    Danke Leute!

    Einmal editiert, zuletzt von Trolleule1337 (28. Dezember 2012 um 15:24)

  • Warum nicht so?

    Spoiler anzeigen
    [autoit]

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

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

    $hGUI = GUICreate("Test", 500, 500)

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

    $hInput = GUICtrlCreateInput("5000", 10, 10, 100, 20)
    $hUpDown = GUICtrlCreateUpdown($hInput, BitOR($UDS_WRAP, $UDS_NOTHOUSANDS))
    GUICtrlSetLimit($hUpDown, 6000, 5000)
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $hUpDown
    MsgBox(0, "fdsf", GUICtrlRead($hInput))
    EndSwitch
    WEnd

    [/autoit]
    • Offizieller Beitrag
    [autoit]

    #Region - Timestamp
    ; 2012-12-28 08:10:00
    #EndRegion

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

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

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

    Global $aArray[4] = ["Test1", "Test2", "Test3", "Test4"]

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

    $hGUI = GUICreate("Test", 500, 500)

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

    $hInput = GUICtrlCreateInput("1", 10, 10, 100, 20, $ES_READONLY)
    $hUpDown = GUICtrlCreateUpdown($hInput, BitOR($UDS_WRAP, $UDS_NOTHOUSANDS))
    GUICtrlSetLimit($hUpDown, 1, 4)
    $hLabel = GUICtrlCreateLabel($aArray[0], 10, 40, 50, 17)
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $hUpDown
    GUICtrlSetData($hLabel, $aArray[GUICtrlRead($hInput) - 1])
    EndSwitch
    WEnd

    [/autoit]

    Für die Message Freaks :D :

    Spoiler anzeigen
    [autoit]

    #Region - Timestamp
    ; 2012-12-28 08:12:21
    #EndRegion

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

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

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

    Global $aArray[4] = ["Test1", "Test2", "Test3", "Test4"]
    $hGUI = GUICreate("Test", 500, 500)
    $hInput = GUICtrlCreateInput("1", 10, 10, 100, 20, $ES_READONLY)
    $hUpDown = GUICtrlCreateUpdown($hInput, BitOR($UDS_WRAP, $UDS_NOTHOUSANDS))
    GUICtrlSetLimit($hUpDown, 1, 4)
    $hLabel = GUICtrlCreateLabel($aArray[0], 10, 40, 50, 17)
    GUISetState()

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

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    While 1

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

    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch

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

    WEnd

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg
    Local $hWndFrom, $iIDFrom, $iCode, $hWndEdit
    If Not IsHWnd($hInput) Then $hWndEdit = GUICtrlGetHandle($hInput)
    $hWndFrom = $ilParam
    $iIDFrom = _WinAPI_LoWord($iwParam)
    $iCode = _WinAPI_HiWord($iwParam)
    Switch $hWndFrom
    Case $hInput, $hWndEdit
    Switch $iCode

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

    Case $EN_CHANGE ; Gesendet, wenn der Benutzer eine Aktion ausgeführt hat, die möglicherweise Text im Input-Control geändert hat
    GUICtrlSetData($hLabel, $aArray[GUICtrlRead($hInput) - 1])
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

    [/autoit]
    • Offizieller Beitrag

    Wegen den OnEventMode muß man die Messageauswertung aber nicht benutzen.

    [autoit]

    #region - Timestamp
    ; 2012-12-28 08:10:00
    #endregion - Timestamp
    Opt("GUIOnEventMode", 1)
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <UpDownConstants.au3>

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

    Global $aArray[4] = ["Test1", "Test2", "Test3", "Test4"]

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

    $hGUI = GUICreate("Test", 500, 500)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    $hInput = GUICtrlCreateInput("1", 10, 10, 100, 20, $ES_READONLY)
    $hUpDown = GUICtrlCreateUpdown($hInput, BitOR($UDS_WRAP, $UDS_NOTHOUSANDS))
    GUICtrlSetOnEvent(-1, "_UpDown")
    GUICtrlSetLimit($hUpDown, 1, 4)
    $hLabel = GUICtrlCreateLabel($aArray[0], 10, 40, 50, 17)
    GUISetState()

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

    While 1
    Sleep(50)
    WEnd

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

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

    Func _UpDown()
    GUICtrlSetData($hLabel, $aArray[GUICtrlRead($hInput) - 1])
    EndFunc ;==>_UpDown

    [/autoit]