ListViewItems deaktivieren

  • Hallo zusammen,

    mich quält schon seit Tagen des Testens und Suchens die Frage, ob es möglich ist, einzelne ListViewItems zu deaktivieren oder nicht. In der Hilfe steht das nicht genau drin, lediglich bei GUICtrlSetState steht, daß ein ListViewItem veränderbar ist, wenn man beim ListView $LVS_EX_CHECKBOXES verwendet. Davon abgesehen, daß ich keine CheckBoxen möchte, funktioniert das aber auch nicht.

    Folgend ein stark eingekürzter Code mit dem Versuch, $item3 zu deaktivieren.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <GUIListView.au3>
    #include <WindowsConstants.au3>

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

    Func GuiExit()
    Exit
    EndFunc

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

    Func WM_Notify_DoubleClick($hWndGUI, $MsgID, $wParam, $lParam)
    Local $tagNMHDR, $event
    $tagNMHDR = DllStructCreate('int;int;int', $lParam)
    If @error Then Return
    $event = DllStructGetData($tagNMHDR, 3)
    If $event = $NM_DBLCLK AND $wParam = $listview AND _GUICtrlListView_GetSelectedCount($listview) = 1 Then
    MsgBox(64, 'Info', '-> ' & _GUICtrlListView_GetItemText($listview, _GUICtrlListView_GetSelectionMark($listview)))
    EndIf
    EndFunc

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

    Opt('GUIOnEventMode', 1)
    Opt('GUICloseOnESC', 0)

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

    GUICreate('listview', 220, 170)

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

    Local $listview = GUICtrlCreateListView('value1', 10, 10, 200, 150, -1) ;, $LVS_EX_CHECKBOXES)
    Local $item1 = GUICtrlCreateListViewItem('item1', $listview)
    Local $item2 = GUICtrlCreateListViewItem('item2', $listview)
    Local $item3 = GUICtrlCreateListViewItem('item3', $listview)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    GUISetOnEvent($GUI_EVENT_CLOSE, 'GuiExit')
    GUISetState(@SW_SHOW)

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

    GUIRegisterMsg($WM_NOTIFY, 'WM_Notify_DoubleClick')

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

    While 1
    Sleep(20)
    WEnd

    [/autoit]

    Es würde mich freuen, wenn mir einer von Euch einen Tip geben kann, oder zumindestens bestätigt, daß sowas nicht möglich ist.

    Gruß
    vurman

    Einmal editiert, zuletzt von vurman (22. Mai 2011 um 17:25)

  • Hallo vurman,

    hier eine Möglichkeit damit die MsgBox nur bei gewünschten Items erscheint:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GUIListView.au3>
    #include <WindowsConstants.au3>

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

    Opt('GUIOnEventMode', 1)
    Opt('GUICloseOnESC', 0)

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

    GUICreate('listview', 220, 170)

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

    Local $listview = GUICtrlCreateListView('value1|Eabled', 10, 10, 200, 150, -1) ;, $LVS_EX_CHECKBOXES)
    Local $item1 = GUICtrlCreateListViewItem('item1|YES', $listview)
    Local $item2 = GUICtrlCreateListViewItem('item2|NO', $listview)
    Local $item3 = GUICtrlCreateListViewItem('item3', $listview)
    GUICtrlSetState(-1, $GUI_DISABLE)
    _GUICtrlListView_SetColumnWidth($listview,1,0)

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

    GUISetOnEvent($GUI_EVENT_CLOSE, 'GuiExit')
    GUISetState(@SW_SHOW)

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

    GUIRegisterMsg($WM_NOTIFY, 'WM_Notify_DoubleClick')

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

    While 1
    Sleep(20)
    WEnd

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

    Func GuiExit()
    Exit
    EndFunc

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

    Func WM_Notify_DoubleClick($hWndGUI, $MsgID, $wParam, $lParam)
    Local $tagNMHDR, $event
    $tagNMHDR = DllStructCreate('int;int;int', $lParam)
    If @error Then Return
    $event = DllStructGetData($tagNMHDR, 3)
    If $event = $NM_DBLCLK AND $wParam = $listview AND _GUICtrlListView_GetSelectedCount($listview) = 1 Then
    $aItem = _GUICtrlListView_GetItemTextArray($listview)
    if $aItem[2] = "YES" Then MsgBox(64, 'Info', '-> ' & $aItem[1])
    EndIf
    EndFunc

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

    @victor: genau so hatte es vurman ja probiert

    mfg autoBert

  • Ich denke mal er will in einem Listview einzelne Einträge deaktivieren, nicht das Listview selber...

    Gruß
    kara2010

  • Hallo vurman,

    hier eine 2. Mögflichkeit:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GUIListView.au3>
    #include <WindowsConstants.au3>

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

    Opt('GUIOnEventMode', 1)
    Opt('GUICloseOnESC', 0)

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

    GUICreate('listview', 220, 170)

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

    Local $listview = GUICtrlCreateListView('value1', 10, 10, 200, 150, -1) ;, $LVS_EX_CHECKBOXES)
    Local $item1 = GUICtrlCreateListViewItem('item1', $listview)
    Local $item2 = GUICtrlCreateListViewItem('item2', $listview)
    Local $item3 = GUICtrlCreateListViewItem('item3', $listview)
    _GUICtrlListView_SetItemParam($listview,0,1)

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

    GUISetOnEvent($GUI_EVENT_CLOSE, 'GuiExit')
    GUISetState(@SW_SHOW)

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

    GUIRegisterMsg($WM_NOTIFY, 'WM_Notify_DoubleClick')

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

    While 1
    Sleep(20)
    WEnd

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

    Func GuiExit()
    Exit
    EndFunc

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

    Func WM_Notify_DoubleClick($hWndGUI, $MsgID, $wParam, $lParam)
    Local $tagNMHDR, $event
    $tagNMHDR = DllStructCreate('int;int;int', $lParam)
    If @error Then Return
    $event = DllStructGetData($tagNMHDR, 3)
    If $event = $NM_DBLCLK AND $wParam = $listview AND _GUICtrlListView_GetSelectedCount($listview) = 1 Then
    $iItem = _GUICtrlListView_GetSelectionMark($listview)
    $iOK = _GUICtrlListView_GetItemParam($listview,$iItem)
    ConsoleWrite($iOK & @CRLF)
    if $iOK = 1 Then MsgBox(64, 'Info', '-> ' & _GUICtrlListView_GetItemText($listview, $iItem))
    EndIf
    EndFunc

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

    @kara2010: das dürfte allen Lesern klar sein

    mfg autoBert

  • Hallo zusammen,

    ja richtig, ich versuche einen einzelnen, bestimmten Eintrag zu deaktivieren, sodaß er erst gar nicht anwählbar ist, so wie ein ausgegrauter Button.

    autoBert
    Danke, sowas ähnliches habe ich schon, da ich im richtigen, vollständigen Script auf ein entsprechendes Array zurückgreife, benutze ich dafür ein separaten Eintrag, ob das Item "aktiv" ist oder nicht. Funktioniert gut und werde mich wohl damit abfinden müssen, daß es so wie erhofft nicht funktioniert. Ein deaktivierter, ausgegrauter Eintrag würde mir nämlich viel besser gefallen.. ;)


    Gruß
    vurman