angeklickte ListView Einträge demarkieren

  • Wie lassen sich markierte Zeilen in einer ListView deaktivieren?
    Im folgenden Script aus der Hilfedatei (leicht abgeändert) klappt das markieren einer Zeile bzw. den Focus setzen, aber nicht andersherum.

    2 Mal editiert, zuletzt von Axel (7. Dezember 2011 um 16:21)

  • Soweit ich weiß geht das nicht.
    Einen workaround aus dem englischen Forum habe ich mal genutzt.
    Mit

    [autoit]

    _GUICtrlListView_GetItemRect($hWnd, $iIndex[, $iPart = 3])

    [/autoit]

    Die größe des Items herausfinden und dann mit

    [autoit]

    GUICtrlCreateLabel

    [/autoit]

    ein durchsichtiges Label drüberlegen, dann kann es nicht mehr durch direktes klicken ausgewählt werden.

    Hier der Link zum Forum

  • Sorry, deaktivieren ist nicht der richtige Ausdruck. Ich möchte markierte oder selektierte Einträge demarkieren, also die Liste soll jungfräulich dargestellt werden. Kein Eintrag soll markiert sein oder den Focus haben.
    Mit _GUICtrlListView_SetItemState lassen sich Listeneinträge unter anderem markieren oder den Focus drauf setzen. Wenn ich den Hilfetext zum Befehl richtig verstehe soll man auch demarkieren können, aber klappt irgendwie nicht.

    Ne Idee die ich hätte wäre die Liste komplett löschen und neu aufbauen.

    • Offizieller Beitrag

    Dann schau Dir doch mal _GUICtrlListView_SetItemSelected an. ;)

    Spoiler anzeigen
    [autoit]


    #include <GuiConstantsEx.au3>
    #include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ListBoxConstants.au3>
    #include <WinAPI.au3>
    #include <GuiListBox.au3>
    #include <GuiListView.au3>
    #include <Misc.au3>

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

    Opt('MustDeclareVars', 1)

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

    $Debug_LV = False ; Prüft den Klassennamen (ClassName), der an die ListView-Funktion übergeben wird. Setze dies versuchsweise auf True und verwende dann ein Handle zu einem anderen Control, um die Funktionsweise zu verstehen.

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

    _Main()

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

    Func _Main()
    Local $hListView

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

    GUICreate("ListView: Item für eine verschieben Operation markieren", 500, 300)
    $hListView = GUICtrlCreateListView("", 2, 2, 394, 268, BitOR($WS_VSCROLL, $LBS_SORT, $LVS_SHOWSELALWAYS), $WS_EX_STATICEDGE)
    GUISetState()

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

    ; Fügt die Spalten hinzu
    _GUICtrlListView_AddColumn($hListView, "Spalte 1", 100)
    _GUICtrlListView_AddColumn($hListView, "Spalte 2", 100)
    _GUICtrlListView_AddColumn($hListView, "Spalte 3", 100)

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

    ; Fügt die Items hinzu
    _GUICtrlListView_AddItem($hListView, "Zeile 1: Spalte 1", 0)
    _GUICtrlListView_AddSubItem($hListView, 0, "Zeile 1: Spalte 2", 1)
    _GUICtrlListView_AddSubItem($hListView, 0, "Zeile 1: Spalte 3", 2)
    _GUICtrlListView_AddItem($hListView, "Zeile 2: Spalte 1", 1)
    _GUICtrlListView_AddSubItem($hListView, 1, "Zeile 2: Spalte 2", 1)
    _GUICtrlListView_AddItem($hListView, "Zeile 3: Spalte 1", 2)

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

    ; Item 2 für eine verschieben Operation markieren
    Sleep(5000)
    _GUICtrlListView_SetItemSelected($hListView, 1, True, True)
    Sleep(1000)
    _GUICtrlListView_SetItemSelected($hListView, -1, False, False)
    MsgBox(4160, "Information", "Item 2: " & _GUICtrlListView_GetItemSelected($hListView, 1))

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

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
    EndFunc ;==>_Main

    [/autoit]