DigDeep Posted April 1, 2018 Posted April 1, 2018 (edited) 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. expandcollapse popup#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) GUISetState(@SW_SHOW) GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Get_Child_GUI2 ; This will get the ListView visible with single cell click enable Example() 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 EndIf If $ListView_Results = $R1C2_result Then ShellExecute(@DesktopDir & "\Test2\test2.txt") EndIf If $ListView_Results = $R2C1_result Then ShellExecute(@DesktopDir & "\Test3\test3.txt") ; For sampling please '12' inside test3.txt EndIf If $ListView_Results = $R2C2_result Then ShellExecute(@DesktopDir & "\Test4\test4.txt") EndIf Case $iButton2 ; This will hide the Child GUI GUICtrlSetState($Child_GUI, $GUI_HIDE) EndSwitch WEnd 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 Else $aHit[0] = -1 ; Row $aHit[1] = -1 ; Col EndIf _GUICtrlListView_RedrawItems($hListview, $iItem, $iItem) EndIf EndIf 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 EndSwitch Else ; Other rows DllStructSetData($tNMLVCUSTOMDRAW, "ClrText", 0x000000) DllStructSetData($tNMLVCUSTOMDRAW, "ClrTextBk", 0xFFFFFF) EndIf Return $CDRF_NEWFONT ; $CDRF_NEWFONT must be returned after changing font or colors EndSwitch EndSwitch EndSwitch Return $GUI_RUNDEFMSG 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 April 1, 2018 by DigDeep
DigDeep Posted April 2, 2018 Author Posted April 2, 2018 Got it fixed. Thanks. $aHit[0] ; Row $aHit[1] ; Col Earthshine 1
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