Jump to content

Get Selected Row Number in ListView

Recommended Posts


I am looking for a way to get the Row Number when a cell is selected.

The problem with the below code is, if 2 or more than 2 Cells contain the same number, all the later cells tend to open the same file reading from the 1st cell instead of the selected row. I think after the line 'Local $ListView_Results = ....', I will have to put a check 'If $ListView_Results = $R1C1_result AND selected Row = 'Row number' then Open the specific file.

#include <GUIConstantsEx.au3>
#include <GuiImageList.au3>
#include <GuiListView.au3>
#include <GuiStatusBar.au3>
#include <GuiConstants.au3>;Inclusion file for the GUI interface controls
#include <WinAPI.au3>
#include <FontConstants.au3>

Global Const $WM_LV_CLICK = $WM_USER + 1

Global $Child_GUI, $R1C1_result, $R1C2_result, $R2C1_result, $R2C2_result, $GUI, $hListview, $StatusBar1, $aHit[2] = [-1, -1] ; $aHit contains row & col of marked cell
Global $iButton1 = 9999
Global $iButton2 = 9999
Global $Get_Child_GUI2 = 9999
Global $files[3][3]

$files[1][1] = @DesktopDir & "\Test1\test1.txt"
$files[1][2] = @DesktopDir & "\Test2\test2.txt"
$files[2][1] = @DesktopDir & "\Test3\test3.txt"
$files[2][2] = @DesktopDir & "\Test4\test4.txt"

$Parent_GUI = GUICreate("Parent GUI", 640, 665, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU))
Local $Get_Default_Label_ForAll_Controls = GUICtrlCreateLabel("", 8, 16, 620, 400, $WS_BORDER)
GUICtrlSetState(-1, $GUI_DISABLE)

    Local $R1C1 = FileRead($files[1][1])
    Local $R1C1_result = $R1C1

    Local $R1C2 = FileRead($files[1][2])
    Local $R1C2_result = $R1C2

    Local $R2C1 = FileRead($files[2][1])
    Local $R2C1_result = $R2C1

    Local $R2C2 = FileRead($files[2][2])
    Local $R2C2_result = $R2C2

    $Child_GUI = GUICtrlCreateListView("| Column 1| Column 2|", 80, 56, 498, 350, -1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT)) ; Compliance Incidents Header Label
    $hListview = GUICtrlGetHandle($Child_GUI)

    ; Add items
    _GUICtrlListView_AddItem($Child_GUI, "Row 1", 0)
    _GUICtrlListView_AddSubItem($Child_GUI, 0, 12, 1) ; The data comes from $R1C1_result
    _GUICtrlListView_AddSubItem($Child_GUI, 0, 48, 2) ; The data comes from $R1C2_result

    _GUICtrlListView_AddItem($Child_GUI, "Row 2", 1)
    _GUICtrlListView_AddSubItem($Child_GUI, 1, 12, 1) ; The data comes from $R2C1_result
    _GUICtrlListView_AddSubItem($Child_GUI, 1, 120, 2) ; The data comes from $R2C2_result

Local $Get_Child_GUI2 = GUICtrlCreateButton("Get GUI 2", 100, 608, 75, 25, $BS_DEFPUSHBUTTON)
GUICtrlSetState($Child_GUI, $GUI_HIDE)

    Local $iButton1 = GUICtrlCreateButton("Open Files", 376, 608, 75, 25, $BS_DEFPUSHBUTTON)
GUICtrlSetState(-1, $GUI_HIDE)

Local $iButton2 = GUICtrlCreateButton("Hide Child GUI", 472, 608, 75, 25, $BS_DEFPUSHBUTTON)
GUICtrlSetState(-1, $GUI_HIDE)



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

        Case $Get_Child_GUI2 ; This will get the ListView visible with single cell click enable

        Case $iButton1 ; This will allow the dir to open when single cells are clicked
                Local $ListView_Results = _GUICtrlListView_GetItemText($hListview, $aHit[0], $aHit[1])
                If $ListView_Results = $R1C1_result Then
                    ShellExecute(@DesktopDir & "\Test1\test1.txt") ; For sampling please '12' inside test1.txt

                If $ListView_Results = $R1C2_result Then
                ShellExecute(@DesktopDir & "\Test2\test2.txt")

                If $ListView_Results = $R2C1_result Then
                ShellExecute(@DesktopDir & "\Test3\test3.txt") ; For sampling please '12' inside test3.txt

                If $ListView_Results = $R2C2_result Then
                ShellExecute(@DesktopDir & "\Test4\test4.txt")

        Case $iButton2 ; This will hide the Child GUI
            GUICtrlSetState($Child_GUI, $GUI_HIDE)


Func Example()

; Do required actions here...

GUICtrlSetState($Child_GUI, $GUI_SHOW)

GUICtrlSetState($iButton1, $GUI_SHOW)

GUICtrlSetState($iButton2, $GUI_SHOW)

EndFunc   ;==>Example

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $wParam
    Local $tNMHDR, $hWndFrom, $iCode
    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
        Case $hListview
            Switch $iCode
                Case $LVN_ITEMCHANGED
                    Local $tNMLISTVIEW, $iItem, $sInfo
                    $tNMLISTVIEW = DllStructCreate($tagNMLISTVIEW, $lParam)
                    $iItem = DllStructGetData($tNMLISTVIEW, "Item")
                    _GUICtrlListView_SetItemSelected($hListview, $iItem, False)
                    _GUICtrlListView_SetItemState($hListview, $iItem, 0, $LVIS_FOCUSED)
                    Local $sInfo = GUIGetCursorInfo($Parent_GUI)
                    If $sInfo[2] Then
                        $sInfo = _GUICtrlListView_SubItemHitTest($hListview, $sInfo[0] - 80, $sInfo[1] - 56) ; Upper left = ( 200, 310 )
                        If $sInfo[0] > -1 And $sInfo[1] > -1 And $sInfo[0] = $iItem Then
                            If $aHit[0] > -1 Then _GUICtrlListView_RedrawItems($hListview, $aHit[0], $aHit[0])
                            If $aHit[0] <> $sInfo[0] Or $aHit[1] <> $sInfo[1] Then
                                $aHit[0] = $sInfo[0] ; Row
                                $aHit[1] = $sInfo[1] ; Col
                                $aHit[0] = -1 ; Row
                                $aHit[1] = -1 ; Col
                            _GUICtrlListView_RedrawItems($hListview, $iItem, $iItem)

                Case $NM_CUSTOMDRAW
                    Local $tNMLVCUSTOMDRAW = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
                    Local $dwDrawStage = DllStructGetData($tNMLVCUSTOMDRAW, "dwDrawStage")
                    Switch $dwDrawStage ; Holds a value that specifies the drawing stage
                        Case $CDDS_PREPAINT ; Before the paint cycle begins
                            Return $CDRF_NOTIFYITEMDRAW ; Notify the parent window of any ITEM-related drawing operations
                        Case $CDDS_ITEMPREPAINT ; Before painting an item
                            Return $CDRF_NOTIFYSUBITEMDRAW ; Notify the parent window of any SUBITEM-related drawing operations
                        Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM) ; Before painting a subitem
                            Local $dwItemSpec = DllStructGetData($tNMLVCUSTOMDRAW, "dwItemSpec") ; Item index
                            Local $iSubItem = DllStructGetData($tNMLVCUSTOMDRAW, "iSubItem") ; Subitem index
                            Local $uItemState = DllStructGetData($tNMLVCUSTOMDRAW, "uItemState") ; Item state
                            If $dwItemSpec = $aHit[0] Then ; Marked row
                                Switch $iSubItem
                                    Case $aHit[1] ; Marked column
                                        DllStructSetData($tNMLVCUSTOMDRAW, "ClrText", 0xFFFFFF) ; Forecolor white
                                        DllStructSetData($tNMLVCUSTOMDRAW, "clrTextBk", 0xCC6600) ; Backcolor dark blue, BGR

                                    Case Else ; Other columns
                                        DllStructSetData($tNMLVCUSTOMDRAW, "ClrText", 0x000000) ; Forecolor black
                                        DllStructSetData($tNMLVCUSTOMDRAW, "ClrTextBk", 0xFFFFFF) ; Backcolor white
                            Else ; Other rows
                                DllStructSetData($tNMLVCUSTOMDRAW, "ClrText", 0x000000)
                                DllStructSetData($tNMLVCUSTOMDRAW, "ClrTextBk", 0xFFFFFF)
                            Return $CDRF_NEWFONT ; $CDRF_NEWFONT must be returned after changing font or colors
EndFunc   ;==>WM_NOTIFY
#EndRegion - Declare Non-Compliant Incidents Variables

I looked at the below page but it always gives the selected cell as '-27'.


Can someone please help.

Edited by DigDeep

Share this post

Link to post
Share on other sites

Got it fixed. Thanks.

  $aHit[0] ; Row
  $aHit[1] ; Col
  • Like 1

Share this post

Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now


Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.