Click auf ein Listeneintrag

  • Hallo zusammen,

    ich möchte bei einem Klick auf einen Eintrag in der Liste eine Funktion ausführen.
    Wie frage ich ab, wann der Eintrag angeklickt wurde?

    Hier mein Mustercode:

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>

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

    Local $qst = GUICreate("Muster", 800, 502, -1, -1, BitOR($WS_SYSMENU, $WS_MINIMIZEBOX))

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

    Global $logdateien = GUICtrlCreateListView("Dateiname", 2, 60, 250, 365, BitOR($LVS_REPORT, $LVS_NOCOLUMNHEADER, $LVS_SINGLESEL, $LVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
    _GUICtrlListViewSetColumnWidth($logdateien, 0, 228)
    GUICtrlCreateListViewItem('Item 1', $logdateien)
    GUICtrlCreateListViewItem('Item 2', $logdateien)
    GUICtrlCreateListViewItem('Item 3', $logdateien)

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

    $EditLOGFile = GUICtrlCreateEdit("", 256, 60, 536, 365, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL))
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then
    Ende()
    EndIf
    WEnd

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

    Func Ende()
    Exit
    EndFunc ;==>Ende

    [/autoit]


    Bin für jede Hilfe dankbar.

  • moin,
    da gibt es zwei möglichkeiten...
    entweder du bastelst nen extra button ein der dann die funktion aufruft und fragt was zurzeit im listview drinsteht(das denk ich mal willste nicht haben trotzdem mal die lösung aus der hilfe...)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    GUICreate("listview items",220,250, 100,200,-1,$WS_EX_ACCEPTFILES)
    GUISetBkColor (0x00E0FFFF) ; will change background color

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

    $listview = GUICtrlCreateListView ("col1 |col2|col3 ",10,10,200,150);,$LVS_SORTDESCENDING)
    $button = GUICtrlCreateButton ("Value?",75,170,70,20)
    $item1=GUICtrlCreateListViewItem("item2|col22|col23",$listview)
    $item2=GUICtrlCreateListViewItem("item1|col12|col13",$listview)
    $item3=GUICtrlCreateListViewItem("item3|col32|col33",$listview)
    $input1=GUICtrlCreateInput("",20,200, 150)
    GUICtrlSetState(-1,$GUI_DROPACCEPTED) ; to allow drag and dropping
    GUISetState()
    GUICtrlSetData($item2,"ITEM1")
    GUICtrlSetData($item3,"||COL33")
    GUICtrlDelete($item1)

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

    Do
    $msg = GUIGetMsg ()

    Select
    Case $msg = $button
    MsgBox(0,"listview item",GUICtrlRead(GUICtrlRead($listview)),2)
    Case $msg = $listview
    MsgBox(0,"listview", "clicked="& GUICtrlGetState($listview),2)
    EndSelect
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]

    wenn du das ganze jedoch nicht mit buttons machen willst sondern direkt bei klick oder doppelklick eine funktion aufrufen willst brauchst du sogenannte "Notify Events" was das genau ist weiß ich leider nicht so recht da müsstest du irgendwo nachlesen oder andere hier im forum fragen ;)
    aber hier die lösung aus dem englischen forum wies gemacht wird....den link habe ich leider nicht mehr...:/:

    Spoiler anzeigen
    [autoit]

    Events - ListView
    #include <GuiConstants.au3>;Inclusion file for the GUI interface controls
    #include <GuiListView.au3>

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

    Global $ListView
    Global Const $WM_NOTIFY = 0x004E
    Global Const $DebugIt = 1

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

    ;ListView Events
    Global Const $NM_FIRST = 0
    Global Const $NM_LAST = (-99)
    ;Global Const $NM_OUTOFMEMORY = ($NM_FIRST - 1)
    Global Const $NM_CLICK = ($NM_FIRST - 2)
    Global Const $NM_DBLCLK = ($NM_FIRST - 3)

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

    #endregion End Global variables

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

    Opt("WinTitleMatchMode", 2)

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

    $main_GUI = GUICreate("GuiRegisterMsg Test", 225, 400, 300, 10, BitOR($WS_THICKFRAME, $WS_SIZEBOX))

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

    $ListView = GUICtrlCreateListView("Entry Name|Category", 5, 75, 195, 280, BitOR($LVS_SORTASCENDING, $LVS_SINGLESEL))
    _GUICtrlListViewSetColumnWidth ($ListView, 0, 100)
    _GUICtrlListViewSetColumnWidth ($ListView, 1, 100)
    GUICtrlSendMsg($ListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
    GUICtrlSendMsg($ListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
    GUICtrlCreateListViewItem("Name 1|Category 1", $ListView)
    GUICtrlCreateListViewItem("Name 2|Category 2", $ListView)
    GUISetState()
    $label = GUICtrlCreateLabel("Info",10,360,150,20)

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

    ;Register WM_NOTIFY events
    GUIRegisterMsg($WM_NOTIFY, "WM_Notify_Events")

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

    While 1

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

    $msg = GuiGetMsg()

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

    Switch $msg
    ;-----------------------------------------------------------------------------------------
    ;This case statement exits and updates code if needed
    Case $GUI_EVENT_CLOSE
    Exit
    ;-----------------------------------------------------------------------------------------
    ;put all the misc. stuff here
    Case Else
    ;;;
    EndSwitch
    WEnd

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

    Func ListView_Ldown()
    ;----------------------------------------------------------------------------------------------
    If $DebugIt Then ConsoleWrite (_DebugHeader ("$NM_LDown"))
    ;----------------------------------------------------------------------------------------------
    EndFunc ;==>ListView_Click

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

    Func ListView_Click()
    ;----------------------------------------------------------------------------------------------
    If $DebugIt Then ConsoleWrite (_DebugHeader ("$NM_CLICK"))
    ;----------------------------------------------------------------------------------------------
    EndFunc ;==>ListView_Click

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

    Func ListView_DoubleClick()
    ;----------------------------------------------------------------------------------------------
    If $DebugIt Then ConsoleWrite (_DebugHeader ("$NM_DBLCLK"))
    ;----------------------------------------------------------------------------------------------
    MsgBox(0,"Double Clicked", _GUICtrlListViewGetItemText ($ListView, _GUICtrlListViewGetSelectedIndices($ListView)))
    EndFunc ;==>ListView_DoubleClick

    ;
    ; WM_NOTIFY event handler
    Func WM_Notify_Events($hWndGUI, $MsgID, $wParam, $lParam)
    ;#forceref $hWndGUI, $MsgID, $wParam
    Local $tagNMHDR, $event, $hwndFrom, $code
    $tagNMHDR = DllStructCreate("int;int;int", $lParam);NMHDR (hwndFrom, idFrom, code)
    If @error Then Return
    $event = DllStructGetData($tagNMHDR, 3)
    Select

    Case $wParam = $ListView

    Select
    case $event = -100
    $CursInf = GUIGetCursorInfo()
    if $cursinf[2] = 1 then
    GUICtrlSetData($label,"LDown - is pressed")
    ListView_Ldown()
    endif

    Case $event = $NM_CLICK
    GUICtrlSetData($label,"$NMClick")
    ListView_Click ()

    Case $event = $NM_DBLCLK
    GUICtrlSetData($label,"$NMDoubleClick")
    ListView_DoubleClick ()
    EndSelect
    EndSelect
    $tagNMHDR = 0
    $event = 0
    $lParam = 0
    EndFunc ;==>WM_Notify_Events

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

    Func _DebugHeader($s_text)
    Return _
    "!===========================================================" & @LF & _
    "+===========================================================" & @LF & _
    "-->" & $s_text & @LF & _
    "+===========================================================" & @LF
    EndFunc ;==>_DebugHeader

    [/autoit]


    der code müsste dann dementsprechend verändert werden aber ich denke mit den lösungsansätzen kannste was anfangen ;)

    snoxat0r