GUIListView Problem

  • Hallo,

    wie kann ich feststellen, ob ein ListViewitem angeklickt wurde?

    [autoit]

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

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

    $Form1 = GUICreate("Form1", 379, 448)
    $ListView1 = GUICtrlCreateListView("Prozess", 0, 0, 378, 446)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 357)

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

    $List = ProcessList()

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

    For $For = 1 To $List[0][0]
    _GUICtrlListView_AddItem($ListView1, $List[$For][0])
    Next

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]
  • Bei sowelchen Sachen einfach in der Helpfile unter _GuiCtrl.... nachsehen ;)

    [autoit]

    For $i = 1 To _GUICtrlListView_GetItemCount($listView1)
    If _GUICtrlListView_GetItemSelected($listView1, $i) = 1 Then MsgBox(0,"","")
    Next

    [/autoit]
  • Auch kein Problem...

    [autoit]

    While 1
    For $i = 1 To _GUICtrlListView_GetItemCount($listView1)
    If _GUICtrlListView_GetItemSelected($listView1, $i) = 1 Then ExitLoop 2
    Next
    WEnd

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

    MsgBox(0,"",_GUICtrlListView_GetItemText($listview1, $i))

    [/autoit]
  • Glaube aber das hätteste auch rausbekommen ;)

    Spoiler anzeigen
    [autoit]

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

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

    Opt("GuiOnEventMode", 1)

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

    Global $LastID

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

    $Form1 = GUICreate("Form1", 379, 448)
    GuiSetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    $ListView1 = GUICtrlCreateListView("Prozess", 0, 0, 378, 446)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 357)
    $List = ProcessList()

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

    For $For = 1 To $List[0][0]
    _GUICtrlListView_AddItem($ListView1, $List[$For][0])
    Next
    GUISetState(@SW_SHOW)

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

    While 1
    For $i = 1 To _GUICtrlListView_GetItemCount($listView1)
    If _GUICtrlListView_GetItemSelected($listView1, $i) = 1 And $i <> $LastID Then
    MsgBox(4160,"Info!",'Sie haben "' & _GUICtrlListView_GetItemText($ListView1, $i) & '" angeklickt!')
    $LastID = $i
    ExitLoop
    Endif
    Next
    WEnd

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]
  • [autoit]


    GUIRegisterMsg($WM_NOTIFY, "_DoubleClickOnListView")
    ; usw.

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

    Func _DoubleClickOnListView($hWnd, $Msg, $wParam, $lParam);Die Eigentliche Funktion
    Local $tagNMHDR, $event, $hwndFrom, $code
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    If @error Then Return
    $event = DllStructGetData($tagNMHDR, 3); Checkt wie das EVENT aussieht
    If $wParam = $hListView Then;Wenn der Klick auf das ListView ging..
    If $event = $N_DBLCLK Then;.. Wenn es ein DoppelKlick war
    ; deine Funktion wie oben beschrieben mit _GUICtrlListView_GetItemSelected
    EndIf
    EndIf
    $tagNMHDR = 0
    $event = 0
    $lParam = 0
    EndFunc ;==>_DoubleClickOnListView

    [/autoit]

    oder meinst du sowas? ist jetzt für einen Doppelklick, lässt sich aber auch für einen normalen Klick umbauen (IF $event = ..... (steht hier drin: <WindowsConstants.au3>)

  • Ja das ist Absicht weil das sozusagen nur der header in deinem script ist (-> also kein system prozess)...

    Also setzt du $LastID = Zahl < 0 und schreibst in der For-Schleife statt der 1 eine 0!

    Voilla, dir wird auch auch Eintrag Nummer >0< angezeigt ;)