UpDown-Control für ListView

  • Da ich über etliche Suchen nichts gefunden habe (dieses und englisches Board, Google), weil ich wahrscheinlich viel zu wenig Ahnung hab, bettel' ich hier jetzt mal nach einer Antwort, nachdem mir hier schon sehr viele Threads geholfen haben. :P

    Nun aber zur Frage: Gibt es eine Möglichkeit ein UpDown-Control mit ListView zu verbinden oder eine ähnliche Lösung?
    (So erklärt, dass auch ich es versteh': Kann ich mir irgendein Ding in meine GUI einbauen, bei der durch Klick auf ↑ und ↓ das Ausgewählte !nicht verschoben! (dafür hab ich einige UDFs gefunden), sondern einfach das darüber bzw. darunter ausgewählt wird?)

    Was ich auch noch gerne wissen würde: Kann man in einem ListView-Control mehrere Items auswählen? (Komm bisher nicht soweit es selbst auszuprobieren, da ich da nichtmal irgendwelche Items reinbekomme. :( )

    Vielen Dank schonmal für die hoffentlich bald eintrudelnde Hilfe und freundliche Grüße von

    insane Sardine

    PS: Hab vor 2 Tagen mit AutoIT angefangen, bastel aber jetzt, nachdem ich Syntax, Grundlagen usw. verstanden habe, an etwas rum, was ich eig. noch gar nicht kann, wurschtel mich da aber mit diesem und dem englischen Forum, der Hilfe und einigen UDFs durch; wäre also sehr gut möglich, das demnächst öfters Fragen von mir hier auftauchen.

    PPS: Love AutoIT! :love: (Wollt's nurmal loswerden.) Hab zuerst überlegt, ob ich AutoHotkey ausprobier', aber hier bin ich.

    Einmal editiert, zuletzt von insane Sardine (8. März 2011 um 17:34)

    • Offizieller Beitrag

    Hier mal ein Beispiel:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>

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

    $hGui = GUICreate('ListView-Beispiel', 600, 400)
    $hListView = GUICtrlCreateListView('A|B|C', 10, 10, 580, 300, $LVS_SHOWSELALWAYS)
    GUICtrlSetBkColor(-1, 0xAAAAAA)
    For $i = 0 To 9
    GUICtrlCreateListViewItem(StringFormat('%s|%s|%s', Random(0, 9, 1), Random(0, 9, 1), Random(0, 9, 1)), $hListView)
    Next
    $hUp = GUICtrlCreateButton('/\', 10, 320, 24, 20)
    GUICtrlSetFont(-1, 8, 600, 0, 'Lucida Console')
    $hDn = GUICtrlCreateButton('\/', 10, 340, 24, 20)
    GUICtrlSetFont(-1, 8, 600, 0, 'Lucida Console')
    GUISetState()
    ControlListView($hGui, '', $hListView, 'Select', 2, 4)
    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $hUp
    $iSelectCount = ControlListView($hGui, '', $hListView, 'GetSelectedCount')
    If $iSelectCount = 0 Then
    ControlListView($hGui, '', $hListView, 'Select', 0)
    Else
    $iFirstSelected = ControlListView($hGui, '', $hListView, 'GetSelected')
    $iItemCount = ControlListView($hGui, '', $hListView, 'GetItemCount')
    If $iFirstSelected > 0 Then
    ControlListView($hGui, '', $hListView, 'SelectClear')
    ControlListView($hGui, '', $hListView, 'Select', $iFirstSelected - 1, $iFirstSelected - 2 + $iSelectCount)
    EndIf
    EndIf
    Case $hDn
    $iSelectCount = ControlListView($hGui, '', $hListView, 'GetSelectedCount')
    If $iSelectCount = 0 Then
    ControlListView($hGui, '', $hListView, 'Select', 0)
    Else
    $iFirstSelected = ControlListView($hGui, '', $hListView, 'GetSelected')
    $iItemCount = ControlListView($hGui, '', $hListView, 'GetItemCount')
    If $iFirstSelected + $iSelectCount < $iItemCount Then
    ControlListView($hGui, '', $hListView, 'SelectClear')
    ControlListView($hGui, '', $hListView, 'Select', $iFirstSelected + 1, $iFirstSelected + $iSelectCount)
    EndIf
    EndIf
    EndSwitch
    WEnd

    [/autoit]
    • Offizieller Beitrag

    Naja, en bischen Spät, das kommt davon wenn man eine Stunde mit der Freundig quatscht. :D

    Hier noch ein Beispiel.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiEdit.au3>
    #include <GUIListView.au3>
    Global $msg
    Global $hGui = GUICreate("Test", 300, 300, -1, -1, $WS_SIZEBOX)
    Global $listview = GUICtrlCreateListView("col1 |col2|col3 ", 10, 10, 268, 260);,$LVS_SORTDESCENDING)
    $item1 = GUICtrlCreateListViewItem("item2|col22|col23", $listview)
    $item2 = GUICtrlCreateListViewItem("item1|col12|col13", $listview)
    $item3 = GUICtrlCreateListViewItem("item3|col32|col33", $listview)
    $item1 = GUICtrlCreateListViewItem("item2|col22|col23", $listview)
    $item2 = GUICtrlCreateListViewItem("item1|col12|col13", $listview)
    $item3 = GUICtrlCreateListViewItem("item3|col32|col33", $listview)
    $item1 = GUICtrlCreateListViewItem("item2|col22|col23", $listview)
    $item2 = GUICtrlCreateListViewItem("item1|col12|col13", $listview)
    $item3 = GUICtrlCreateListViewItem("item3|col32|col33", $listview)
    Global $hEdit = GUICtrlCreateInput("0", 280, 230, 16, 40); Dummycontrol für das UpDown Control
    Global $updown = GUICtrlCreateUpdown($hEdit)
    GUICtrlSetLimit($updown, 1, _GUICtrlListView_GetItemCount($listview)); Dieser Befehl muß nach jedem hinzugügen oder entfernen von Listviewelementen ausgeführt werden.
    GUISetState()
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    While 1
    $msg = GUIGetMsg()

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

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    Local Static $iCount
    #forceref $hWnd, $iMsg
    Local $hWndFrom, $iIDFrom, $iCode, $hWndEdit
    If Not IsHWnd($hEdit) Then $hWndEdit = GUICtrlGetHandle($hEdit)
    $hWndFrom = $ilParam
    $iIDFrom = _WinAPI_LoWord($iwParam)
    $iCode = _WinAPI_HiWord($iwParam)
    Switch $hWndFrom
    Case $hEdit, $hWndEdit
    Switch $iCode
    Case $EN_UPDATE
    _GUICtrlListView_SetItemFocused(GUICtrlGetHandle($listview), GUICtrlRead($hEdit) - 1)
    _GUICtrlListView_SetItemSelected(GUICtrlGetHandle($listview), GUICtrlRead($hEdit) - 1)
    ControlFocus($hGui, "", "SysListView321")
    $iCount += 1
    EndSwitch

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

    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hUpdown, $tInfo, $hListview
    $hUpdown = GUICtrlGetHandle($updown)
    $hListview = GUICtrlGetHandle($listview)
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hUpdown
    Switch $iCode
    Case -722
    ControlFocus($hGui, "", "SysListView321")
    EndSwitch
    Case $hListview
    Switch $iCode
    Case $NM_DBLCLK ; Sent by a list-view control when the user clicks an item with the left mouse button
    Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    _GUICtrlListView_SetItemFocused(GUICtrlGetHandle($listview), DllStructGetData($tInfo, "Index"))
    GUICtrlSetData($hEdit, DllStructGetData($tInfo, "Index") + 1)
    EndSwitch

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

    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]