DeltaRocked Posted May 17, 2018 Posted May 17, 2018 (edited) Hi All, I have been breaking my head over this : When the cell it clicked , I need to get the underlying text and Row no. but it simply doesnt happen when I click the Cell, I have to click the Header of the ListView . Where have I messed up ? Or What have I missed ? expandcollapse popup#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <WindowsConstants.au3> #include <array.au3> #include <MsgBoxConstants.au3> Opt("GUIOnEventMode", 1) Local $aItems[10][2] For $iI = 0 To UBound($aItems) - 1 $aItems[$iI][0] = "Row " & $iI $aItems[$iI][1] = "Item " & $iI Next $Form1 = GUICreate("Form1", 850, 830, -1, -1) $ListView1 = GUICtrlCreateListView("Type|From ID", 13, 180, 826, 325, BitOR($GUI_SS_DEFAULT_LISTVIEW, $LVS_SINGLESEL, $WS_HSCROLL, $WS_VSCROLL, $WS_BORDER)) GUICtrlSetOnEvent(-1, "ListView1") _GUICtrlListView_SetExtendedListViewStyle($ListView1, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_HEADERDRAGDROP)) GUISetOnEvent($GUI_EVENT_CLOSE, "Form2Close") _GUICtrlListView_AddArray($ListView1, $aItems) GUISetState(@SW_SHOW) While 1 Sleep(100) WEnd Func ListView1() ConsoleWrite('1: ' & _GUICtrlListView_GetItem($ListView1, 0) & @CRLF) ConsoleWrite('1: ' & _GUICtrlListView_GetItemText($ListView1, 0) & @CRLF) ConsoleWrite('2: ' & GUICtrlRead(GUICtrlRead($ListView1)) & @CRLF) ConsoleWrite('3: ' & _GUICtrlListView_GetSelectedIndices($ListView1,FALSE) & @CRLF) EndFunc ;==>ListView1 Func Form2Close() Exit EndFunc ;==>Form2Close Thanks and regards DR [UPDATE] Found the solution , although not elegant. expandcollapse popup#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <WindowsConstants.au3> #include <array.au3> #include <MsgBoxConstants.au3> Opt("GUIOnEventMode", 1) Local $aItems[10][2] For $iI = 0 To UBound($aItems) - 1 $aItems[$iI][0] = "Row " & $iI $aItems[$iI][1] = "Item " & $iI Next $Form1 = GUICreate("Form1", 850, 830, -1, -1) $ListView1 = GUICtrlCreateListView("Type|From ID", 13, 180, 826, 325, BitOR($LVS_SINGLESEL, $WS_HSCROLL, $WS_VSCROLL, $WS_BORDER)) _GUICtrlListView_SetExtendedListViewStyle($ListView1, BitOR($LVS_EX_ONECLICKACTIVATE, $LVS_EX_TRACKSELECT, $LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_HEADERDRAGDROP)) GUISetOnEvent($GUI_EVENT_CLOSE, "Form2Close") _GUICtrlListView_AddArray($ListView1, $aItems) GUISetState() GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY") GUISetState(@SW_SHOW) While 1 Sleep(100) WEnd Func Form2Close() Exit EndFunc ;==>Form2Close Func _WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo $hWndListView = $ListView1 If Not IsHWnd($ListView1) Then $hWndListView = GUICtrlGetHandle($ListView1) $tNMHDR = DllStructCreate($tagNMHDR, $lParam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) $iIDFrom = DllStructGetData($tNMHDR, "IDFrom") $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $hWndListView Switch $iCode Case $LVN_COLUMNCLICK ; A column was clicked $tInfo = DllStructCreate($tagNMLISTVIEW, $lParam) _DebugPrint("$LVN_COLUMNCLICK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _ "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _ "-->Code:" & @TAB & $iCode & @CRLF & _ "-->Item:" & @TAB & DllStructGetData($tInfo, "Item") & @CRLF & _ "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @CRLF & _ "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @CRLF & _ "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @CRLF & _ "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @CRLF & _ "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @CRLF & _ "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @CRLF & _ "-->Param:" & @TAB & DllStructGetData($tInfo, "Param")) ; No return value Case $LVN_DELETEITEM ; An item is about to be deleted $tInfo = DllStructCreate($tagNMLISTVIEW, $lParam) _DebugPrint("$LVN_DELETEITEM" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _ "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _ "-->Code:" & @TAB & $iCode & @CRLF & _ "-->Item:" & @TAB & DllStructGetData($tInfo, "Item") & @CRLF & _ "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @CRLF & _ "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @CRLF & _ "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @CRLF & _ "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @CRLF & _ "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @CRLF & _ "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @CRLF & _ "-->Param:" & @TAB & DllStructGetData($tInfo, "Param")) ; No return value Case $LVN_HOTTRACK ; Sent by a list-view control when the user moves the mouse over an item $tInfo = DllStructCreate($tagNMLISTVIEW, $lParam) ListView_HOTTRACK(DllStructGetData($tInfo, "SubItem")) ; _DebugPrint("$LVN_HOTTRACK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _ ; "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _ ; "-->Code:" & @TAB & $iCode & @CRLF & _ ; "-->Item:" & @TAB & DllStructGetData($tInfo, "Item") & @CRLF & _ ; "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @CRLF & _ ; "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @CRLF & _ ; "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @CRLF & _ ; "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @CRLF & _ ; "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @CRLF & _ ; "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @CRLF & _ ; "-->Param:" & @TAB & DllStructGetData($tInfo, "Param")) Return 0 ; allow the list view to perform its normal track select processing. ;Return 1 ; the item will not be selected. Case $LVN_KEYDOWN ; A key has been pressed $tInfo = DllStructCreate($tagNMLVKEYDOWN, $lParam) _DebugPrint("$LVN_KEYDOWN" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _ "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _ "-->Code:" & @TAB & $iCode & @CRLF & _ "-->VKey:" & @TAB & DllStructGetData($tInfo, "VKey") & @CRLF & _ "-->Flags:" & @TAB & DllStructGetData($tInfo, "Flags")) ; No return value Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam) ;~ ConsoleWrite(">>>>>>>>>>> " & _GUICtrlListView_GetSelectedIndices($ListView1) & @CRLF) Local $aListItem = _GUICtrlListView_GetItemTextArray($ListView1, -1) ;~ ConsoleWrite(">>>>>>>>>>> " & _ArrayToString($aListItem) & @CRLF) ConsoleWrite(">>>>>>>>>>> " & $aListItem[DllStructGetData($tInfo, "SubItem") + 1] & @CRLF) ;~ _GUICtrlListView_GetItemTextString() ;~ _DebugPrint("$NM_CLICK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _ ;~ "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _ ;~ "-->Code:" & @TAB & $iCode & @CRLF & _ ;~ "-->Index:" & @TAB & DllStructGetData($tInfo, "Index") & @CRLF & _ ;~ "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @CRLF & _ ;~ "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @CRLF & _ ;~ "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @CRLF & _ ;~ "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @CRLF & _ ;~ "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @CRLF & _ ;~ "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @CRLF & _ ;~ "-->lParam:" & @TAB & DllStructGetData($tInfo, "lParam") & @CRLF & _ ;~ "-->KeyFlags:" & @TAB & DllStructGetData($tInfo, "KeyFlags")) ; No return value Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam) _DebugPrint("$NM_DBLCLK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _ "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _ "-->Code:" & @TAB & $iCode & @CRLF & _ "-->Index:" & @TAB & DllStructGetData($tInfo, "Index") & @CRLF & _ "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @CRLF & _ "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @CRLF & _ "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @CRLF & _ "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @CRLF & _ "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @CRLF & _ "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @CRLF & _ "-->lParam:" & @TAB & DllStructGetData($tInfo, "lParam") & @CRLF & _ "-->KeyFlags:" & @TAB & DllStructGetData($tInfo, "KeyFlags")) ; No return value Case $NM_KILLFOCUS ; The control has lost the input focus _DebugPrint("$NM_KILLFOCUS" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _ "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _ "-->Code:" & @TAB & $iCode) ; No return value Case $NM_RCLICK ; Sent by a list-view control when the user clicks an item with the right mouse button $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam) _DebugPrint("$NM_RCLICK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _ "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _ "-->Code:" & @TAB & $iCode & @CRLF & _ "-->Index:" & @TAB & DllStructGetData($tInfo, "Index") & @CRLF & _ "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @CRLF & _ "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @CRLF & _ "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @CRLF & _ "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @CRLF & _ "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @CRLF & _ "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @CRLF & _ "-->lParam:" & @TAB & DllStructGetData($tInfo, "lParam") & @CRLF & _ "-->KeyFlags:" & @TAB & DllStructGetData($tInfo, "KeyFlags")) ;Return 1 ; not to allow the default processing Return 0 ; allow the default processing Case $NM_RDBLCLK ; Sent by a list-view control when the user double-clicks an item with the right mouse button $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam) _DebugPrint("$NM_RDBLCLK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _ "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _ "-->Code:" & @TAB & $iCode & @CRLF & _ "-->Index:" & @TAB & DllStructGetData($tInfo, "Index") & @CRLF & _ "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @CRLF & _ "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @CRLF & _ "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @CRLF & _ "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @CRLF & _ "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @CRLF & _ "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @CRLF & _ "-->lParam:" & @TAB & DllStructGetData($tInfo, "lParam") & @CRLF & _ "-->KeyFlags:" & @TAB & DllStructGetData($tInfo, "KeyFlags")) ; No return value Case $NM_RETURN ; The control has the input focus and that the user has pressed the ENTER key _DebugPrint("$NM_RETURN" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _ "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _ "-->Code:" & @TAB & $iCode) ; No return value Case $NM_SETFOCUS ; The control has received the input focus _DebugPrint("$NM_SETFOCUS" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _ "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _ "-->Code:" & @TAB & $iCode) ; No return value EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>_WM_NOTIFY Func _DebugPrint($s_Text, $sLine = @ScriptLineNumber) ;~ ConsoleWrite( _ ;~ "!===========================================================" & @CRLF & _ ;~ "+======================================================" & @CRLF & _ ;~ "-->Line(" & StringFormat("%04d", $sLine) & "):" & @TAB & $s_Text & @CRLF & _ ;~ "+======================================================" & @CRLF) EndFunc ;==>_DebugPrint Func ListView_HOTTRACK($iSubItem) Local $iHotItem = _GUICtrlListView_GetHotItem($ListView1) If $iHotItem <> -1 Then ;~ ConsoleWrite("Hot Item: " & $iHotItem & " SubItem: " & $iSubItem & @CRLF) EndIf EndFunc ;==>ListView_HOTTRACK Edited May 17, 2018 by DeltaRocked
Zedna Posted May 17, 2018 Posted May 17, 2018 Here is only needed code, stripped unnecessary code + ConsoleWrite(">>>>>>>>>>> " & _GUICtrlListView_GetItemText($ListView1, $index, $SubItem) & @CRLF) expandcollapse popup#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <WindowsConstants.au3> #include <array.au3> #include <MsgBoxConstants.au3> Opt("GUIOnEventMode", 1) Local $aItems[10][2] For $iI = 0 To UBound($aItems) - 1 $aItems[$iI][0] = "Row " & $iI $aItems[$iI][1] = "Item " & $iI Next $Form1 = GUICreate("Form1", 850, 830, -1, -1) $ListView1 = GUICtrlCreateListView("Type|From ID", 13, 180, 826, 325, BitOR($LVS_SINGLESEL, $WS_HSCROLL, $WS_VSCROLL, $WS_BORDER)) _GUICtrlListView_SetExtendedListViewStyle($ListView1, BitOR($LVS_EX_ONECLICKACTIVATE, $LVS_EX_TRACKSELECT, $LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_HEADERDRAGDROP)) GUISetOnEvent($GUI_EVENT_CLOSE, "Form2Close") _GUICtrlListView_AddArray($ListView1, $aItems) GUISetState() GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY") GUISetState(@SW_SHOW) While 1 Sleep(100) WEnd Func Form2Close() Exit EndFunc ;==>Form2Close Func _WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam $tNMHDR = DllStructCreate($tagNMHDR, $lParam) $event = DllStructGetData($tNMHDR, 'Code') If $wParam = $ListView1 And $event = $NM_CLICK Then $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam) $index = DllStructGetData($tInfo, "Index") $SubItem = DllStructGetData($tInfo, "SubItem") ConsoleWrite(">>>>>>>>>>> " & _GUICtrlListView_GetItemText($ListView1, $index, $SubItem) & @CRLF) EndIf Return $GUI_RUNDEFMSG EndFunc ;==>_WM_NOTIFY Deathdn 1 Resources UDF ResourcesEx UDF AutoIt Forum Search
qwert Posted May 19, 2018 Posted May 19, 2018 (edited) @Zedna: that's a nice and clear demonstration. Thanks. A question, though (since I haven't worked with ListViews all that much): Is there a way to inhibit the highlighting that occurs when the mouse hovers over a row? (I'll add that just removing the selection params only works for the first column, but not for the second.) $LVS_EX_TRACKSELECT, $LVS_EX_FULLROWSELECT Edited May 19, 2018 by qwert
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now