goss34 Posted April 24, 2015 Posted April 24, 2015 Hi Guys, I am writing an app that involves a list view with for example 100 rows. I have added an input box and search button to search the list view for whatever was in the input box. I found this function on the forum: Button2() Func Button2() ;MsgBox(0, "Button2", GUICtrlRead($Input)) $value = GUICtrlRead($Input) ; Search for target item $iI = _GUICtrlListView_FindInText($ListView1, $value, -1) _GUICtrlListView_EnsureVisible($ListView1, $iI) EndFunc This works to a degree but only jumps to a matching string and not in every case even though the string is definitely in the list view. What i want to do is redraw the listview with any results matching or part matching the string in the input box. Im sure someone will of already done this if so could i see the code as i do not know where to begin. Thanks, Dan
Malkey Posted April 26, 2015 Posted April 26, 2015 Here is an example for filtering a LlistViewexpandcollapse popup#include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <MsgBoxConstants.au3> #include <Array.au3> #include <WindowsConstants.au3> Example() Func Example() Local $idListview, $idListview1, $aArr, $iNoCols = 10, $iNoItems = 100, $iDataLimit_0To = 5, $sFind, $aArrData[$iNoItems][$iNoCols] Local $sCols = "col0" GUICreate("ListView Original", 500, 350, 0, 0, $WS_SIZEBOX) GUICtrlCreateLabel("Filter", 4, 302) Local $idInput = GUICtrlCreateInput("2", 40, 302, 355, 25) Local $FilterBut = GUICtrlCreateButton("Go", 400, 302, 30, 25) For $m = 1 To $iNoCols - 1 $sCols &= "|col" & $m Next $idListview = GUICtrlCreateListView($sCols, 0, 0, 500, 300) ; ------- Create data in array for ListView ------------------ For $j = 0 To $iNoItems - 1 $sData = "index " & $j $aArrData[$j][0] = $sData For $k = 1 To $iNoCols - 1 $aArrData[$j][$k] = Random(0, $iDataLimit_0To, 1) & Random(0, $iDataLimit_0To, 1) & _ Random(0, $iDataLimit_0To, 1) & Random(0, $iDataLimit_0To, 1) & Random(0, $iDataLimit_0To, 1) Next Next _GUICtrlListView_AddArray($idListview, $aArrData) _GUICtrlListView_SetColumnWidth($idListview, 0, 55) GUISetState(@SW_SHOW) ; ------- Create 2nd GUI and ListView and fill with same data. --------------- GUICreate("ListView Filtered", 500, 330, @DesktopWidth / 2, 0, $WS_SIZEBOX) $idListview1 = GUICtrlCreateListView($sCols, 0, 0, 500, 300) _GUICtrlListView_AddArray($idListview1, $aArrData) _GUICtrlListView_SetColumnWidth($idListview1, 0, 55) GUISetState(@SW_SHOW) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exitloop Case $FilterBut $sFind = GUICtrlRead($idInput) If $sFind <> "" Then _GUICtrlListView_DeleteAllItems($idListview1) For $i = 0 To _GUICtrlListView_GetItemCount($idListview) - 1 $aArr = _GUICtrlListView_GetItemTextArray($idListview, $i) $sData1 = "" For $n = 1 To UBound($aArr) - 1 If StringInStr($aArr[$n], $sFind) = 0 Then $aArr[$n] = "---" ; <<<< Apply filter $sData1 &= $aArr[$n] & "|" Next GUICtrlCreateListViewItem($sData1, $idListview1) Next Else ; When no filter present. _GUICtrlListView_DeleteAllItems($idListview1) _GUICtrlListView_AddArray($idListview1, $aArrData) EndIf EndSwitch WEnd GUIDelete() EndFunc ;==>Example
LarsJ Posted April 26, 2015 Posted April 26, 2015 (edited) goss34, You can find an example with a search field and a virtual listview here. Initially the listview is filled out with 1000 rows of random strings with a length between 10 and 30 characters.When you type in a search string in the search field (edit control), the listview is updated with the rows, that matches the search string. The listview is updated dynamically while the search string is typed in. The search string can be a regular expression. Edited April 26, 2015 by LarsJ Controls, File Explorer, ROT objects, UI Automation, Windows Message MonitorCompiled code: Accessing AutoIt variables, DotNet.au3 UDF, Using C# and VB codeShell menus: The Context menu, The Favorites menu. Shell related: Control Panel, System Image ListsGraphics related: Rubik's Cube, OpenGL without external libraries, Navigating in an image, Non-rectangular selectionsListView controls: Colors and fonts, Multi-line header, Multi-line items, Checkboxes and icons, Incremental searchListView controls: Virtual ListViews, Editing cells, Data display functions
goss34 Posted April 27, 2015 Author Posted April 27, 2015 Woah, thanks for the replies guys, i have just picked up the examples and trying to figure out what i need to amend my list view.Be back once i have had time to work through them.ThanksDan
goss34 Posted April 27, 2015 Author Posted April 27, 2015 Hi Guys,I am trying to follow LarsJ example but its going way over my skill level at the moment. Any chance someone could slim it down or comment it so i can try to understand what is actually going on.I just made this reproducer quickly (haha not as quick as you might think) but its doing the same as i am doing in my script at the moment although the search works better with the simple strings it currently has! Maybe you could merge the 2 so i can grasp whats going on in the big example? (I do struggle to understand whats happening when arrays are involved).expandcollapse popup#include <GUIConstants.au3> #include <GuiListView.au3> #include <Array.au3> #include <File.au3> #include <ButtonConstants.au3> Global $Fill = @ScriptDir & "\sample.ini" IniWriteSection(@ScriptDir & "\sample.ini", "ITEM1", "1=2") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM2", "1=3") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM3", "1=4") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM4", "1=5") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM5", "1=6") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM6", "1=7") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM7", "1=8") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM8", "1=9") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM9", "1=10") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM10", "1=11") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM11", "1=12") $Gui = GUICreate("Gui", 300, 250) $LV = GUICtrlCreateListView("Item|Value", 18, 40, 260, 200) _GUICtrlListView_SetExtendedListViewStyle($LV, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES)) GUICtrlSendMsg(-1, 0x101E, 0, 130) GUICtrlSendMsg(-1, 0x101E, 1, 125) ;GUICtrlCreateTabItem("") ; This ends the tab item creation $Button2 = GUICtrlCreateButton("Search", 180, 10, 100, 22, 0) $Input = GUICtrlCreateInput("Enter Search Term...", 20, 10, 150, 22) Populate() GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE FileDelete($Fill) Exit Case $Button2 Search() EndSwitch WEnd Func Populate() Local $aArray = IniReadSectionNames($Fill) If Not @error Then ; Enumerate through the array displaying the section names. For $i = 1 To $aArray[0] $Value = IniRead($Fill, $aArray[$i], "1", "") GUICtrlCreateListViewItem($aArray[$i] & "|" & $Value, $LV) ;_GUICtrlListView_SimpleSort($ListView1, $Sort, 0, False) ;<<<<<<<<<<<<<< Works but slows down load time. Next EndIf EndFunc Func Search() $value = GUICtrlRead($Input) $iI = _GUICtrlListView_FindInText($LV, $value, -1) _GUICtrlListView_EnsureVisible($LV, $iI) EndFuncThanks for your help so far.Dan
LarsJ Posted April 28, 2015 Posted April 28, 2015 (edited) Try this. The search is in the Item field. Press 1 to get all items with "1" in the item field.expandcollapse popup#include <GUIConstants.au3> #include <WindowsConstants.au3> #include <GuiListView.au3> Opt( "MustDeclareVars", 1 ) Global $hGui, $hEdit, $idEditSearch, $hLV, $iItems = 1000, $aItems[$iItems][2], $aSearch[$iItems], $iSearch = 0, $Fill Example() Func Example() $Fill = @ScriptDir & "\sample.ini" IniWriteSection(@ScriptDir & "\sample.ini", "ITEM1", "1=2") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM2", "1=3") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM3", "1=4") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM4", "1=5") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM5", "1=6") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM6", "1=7") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM7", "1=8") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM8", "1=9") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM9", "1=10") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM10", "1=11") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM11", "1=12") ; Create GUI $hGui = GUICreate( "Gui", 300, 230 ) ; Create Edit control Local $idEdit = GUICtrlCreateEdit( "", 10, 10, 300-20, 20, BitXOR( $GUI_SS_DEFAULT_EDIT, $WS_HSCROLL, $WS_VSCROLL ) ) $hEdit = GUICtrlGetHandle( $idEdit ) $idEditSearch = GUICtrlCreateDummy() ; Handle $WM_COMMAND messages from Edit control ; To be able to read the search string dynamically while it's typed in GUIRegisterMsg( $WM_COMMAND, "WM_COMMAND" ) ; Create ListView Virtual listview Local $idLV = GUICtrlCreateListView( "", 10, 40, 300-20, 200-20, $LVS_OWNERDATA ) $hLV = GUICtrlGetHandle( $idLV ) _GUICtrlListView_SetExtendedListViewStyle( $hLV, BitOR( $LVS_EX_DOUBLEBUFFER, $LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES ) ) _GUICtrlListView_AddColumn( $hLV, "Item", 130 ) _GUICtrlListView_AddColumn( $hLV, "Value", 125 ) ; Handle $WM_NOTIFY messages from ListView ; Necessary to display the rows in a virtual ListView GUIRegisterMsg( $WM_NOTIFY, "WM_NOTIFY" ) ; Show GUI GUISetState( @SW_SHOW ) ; Fill array Local $aArray = IniReadSectionNames($Fill), $Value If Not @error Then ; Enumerate through the array displaying the section names. For $i = 1 To $aArray[0] $Value = IniRead($Fill, $aArray[$i], "1", "") $aItems[$i-1][0] = $aArray[$i] $aItems[$i-1][1] = $Value Next $iItems = $aArray[0] EndIf ; Set search array to include all items For $i = 0 To $iItems - 1 $aSearch[$i] = $i Next $iSearch = $iItems ; Display items GUICtrlSendMsg( $idLV, $LVM_SETITEMCOUNT, $iSearch, 0 ) ; Message loop While 1 Switch GUIGetMsg() Case $idEditSearch Local $sSearch = GUICtrlRead( $idEdit ) If $sSearch = "" Then ; Empty search string, display all rows For $i = 0 To $iItems - 1 $aSearch[$i] = $i Next $iSearch = $iItems Else ; Find rows matching the search string $iSearch = 0 For $i = 0 To $iItems - 1 If StringInStr( $aItems[$i][0], $sSearch ) Then ; Normal search ;If StringRegExp( $aItems[$i][0], $sSearch ) Then ; Reg. exp. search $aSearch[$iSearch] = $i $iSearch += 1 EndIf Next EndIf ; Display items GUICtrlSendMsg( $idLV, $LVM_SETITEMCOUNT, $iSearch, 0 ) ConsoleWrite( StringFormat( "%4d", $iSearch ) & " rows matching """ & $sSearch & """" & @CRLF ) Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd GUIDelete() EndFunc Func WM_COMMAND( $hWnd, $iMsg, $wParam, $lParam ) Local $hWndFrom = $lParam Local $iCode = BitShift( $wParam, 16 ) ; High word Switch $hWndFrom Case $hEdit Switch $iCode Case $EN_CHANGE GUICtrlSendToDummy( $idEditSearch ) EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc Func WM_NOTIFY( $hWnd, $iMsg, $wParam, $lParam ) Local Static $tText = DllStructCreate( "wchar[50]" ) Local Static $pText = DllStructGetPtr( $tText ) Local $tNMHDR, $hWndFrom, $iCode $tNMHDR = DllStructCreate( $tagNMHDR, $lParam ) $hWndFrom = HWnd( DllStructGetData( $tNMHDR, "hWndFrom" ) ) $iCode = DllStructGetData( $tNMHDR, "Code" ) Switch $hWndFrom Case $hLV Switch $iCode Case $LVN_GETDISPINFOW Local $tNMLVDISPINFO = DllStructCreate( $tagNMLVDISPINFO, $lParam ) If BitAND( DllStructGetData( $tNMLVDISPINFO, "Mask" ), $LVIF_TEXT ) Then Local $sItem = $aItems[$aSearch[DllStructGetData($tNMLVDISPINFO,"Item")]][DllStructGetData($tNMLVDISPINFO,"SubItem")] DllStructSetData( $tText, 1, $sItem ) DllStructSetData( $tNMLVDISPINFO, "Text", $pText ) DllStructSetData( $tNMLVDISPINFO, "TextMax", StringLen( $sItem ) ) EndIf EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc Edited April 28, 2015 by LarsJ Controls, File Explorer, ROT objects, UI Automation, Windows Message MonitorCompiled code: Accessing AutoIt variables, DotNet.au3 UDF, Using C# and VB codeShell menus: The Context menu, The Favorites menu. Shell related: Control Panel, System Image ListsGraphics related: Rubik's Cube, OpenGL without external libraries, Navigating in an image, Non-rectangular selectionsListView controls: Colors and fonts, Multi-line header, Multi-line items, Checkboxes and icons, Incremental searchListView controls: Virtual ListViews, Editing cells, Data display functions
goss34 Posted April 28, 2015 Author Posted April 28, 2015 That works great Lars, I am working on implementing that into my code now. I have to say its some clever stuff! It seems this particular function is a lot harder to achieve that i first thought it would be. I started with 3 lines of code and almost had it doing what i wanted and now i have 144 lines Got to admit i still do not understand it but I am going to give it a shot!CheersDan
Malkey Posted April 28, 2015 Posted April 28, 2015 Here is another example of filtering a LlistView.expandcollapse popup#include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <WindowsConstants.au3> #include <EditConstants.au3> Global $idListview, $iNoCols = 2, $iNoItems = 1000, $aArrData[$iNoItems][$iNoCols], $idInput Example() Func Example() Local $sCols = "col0" GUICreate("ListView Original", 500, 350, -1, -1, $WS_SIZEBOX) GUICtrlCreateLabel("Filter", 4, 302) GUICtrlSetResizing(-1, $GUI_DOCKBOTTOM + $GUI_DOCKHEIGHT + $GUI_DOCKLEFT + $GUI_DOCKWIDTH) $idInput = GUICtrlCreateInput("", 40, 302, 355, 25) GUICtrlSetResizing($idInput, $GUI_DOCKBOTTOM + $GUI_DOCKHEIGHT + $GUI_DOCKLEFT) For $m = 1 To $iNoCols - 1 $sCols &= "|col" & $m Next $idListview = GUICtrlCreateListView($sCols, 0, 0, 500, 300) GUICtrlSetResizing($idListview, $GUI_DOCKBOTTOM + $GUI_DOCKTOP) ; ------- Create data in array for ListView ------------------ $Fill = @ScriptDir & "\sample.ini" For $i = 1 To $iNoItems IniWrite(@ScriptDir & "\sample.ini", "ITEM", "ITEM " & $i, $i + 1) Next $aArrData = IniReadSection(@ScriptDir & "\sample.ini", "ITEM") _ArrayDelete($aArrData, 0) ; Remove number of elements from array _GUICtrlListView_AddArray($idListview, $aArrData) _GUICtrlListView_SetColumnWidth($idListview, 0, 80) GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND") GUISetState(@SW_SHOW) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd GUIDelete() EndFunc ;==>Example Func MY_WM_COMMAND($hWnd, $iMsg, $wParam, $lParam) Local $iIDFrom = BitAND($wParam, 0xFFFF);LoWord Local $iCode = BitShift($wParam, 16) ;HiWord If $iIDFrom = $idInput And $iCode = $EN_CHANGE Then _GUICtrlListView_DeleteAllItems($idListview) _GUICtrlListView_AddArray($idListview, $aArrData) $sFind = GUICtrlRead($idInput) If $sFind <> "" Then For $i = _GUICtrlListView_GetItemCount($idListview) To 0 Step -1 $sText = _GUICtrlListView_GetItemText($idListview, $i) If StringInStr($sText, $sFind) = 0 Then _GUICtrlListView_DeleteItem($idListview, $i); <<<< Apply filter Next EndIf EndIf EndFunc ;==>MY_WM_COMMAND
LarsJ Posted June 27, 2015 Posted June 27, 2015 goss34, Yesterday you reported a problem about extracting data from a virtual listview on double click. It seems as if your thread got lost because of the failed upgrade of the forum software and the subsequent restore of the backup from friday morning.In your thread from yesterday you were referring to an old case. I have found the old case and added the answer here.You were using this code in the WM_NOTIFY function to extract data on double click:Local $sSelected = _GUICtrlListView_GetItemTextString( $hLV, -1 ) ConsoleWrite( "Double Click" & @CR & $sSelected & @CR )_GUICtrlListView_GetItemTextString does not work for a virtual listview. Instead, you need to extract data directly from the array that feeds your listview:expandcollapse popup#include <GUIConstants.au3> #include <WindowsConstants.au3> #include <GuiListView.au3> Opt( "MustDeclareVars", 1 ) Global $hGui, $hEdit, $idEditSearch, $hLV, $iItems = 1000, $aItems[$iItems][2], $aSearch[$iItems], $iSearch = 0, $Fill Example() Func Example() $Fill = @ScriptDir & "\sample.ini" IniWriteSection(@ScriptDir & "\sample.ini", "ITEM1", "1=2") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM2", "1=3") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM3", "1=4") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM4", "1=5") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM5", "1=6") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM6", "1=7") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM7", "1=8") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM8", "1=9") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM9", "1=10") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM10", "1=11") IniWriteSection(@ScriptDir & "\sample.ini", "ITEM11", "1=12") ; Create GUI $hGui = GUICreate( "Gui", 300, 230 ) ; Create Edit control Local $idEdit = GUICtrlCreateEdit( "", 10, 10, 300-20, 20, BitXOR( $GUI_SS_DEFAULT_EDIT, $WS_HSCROLL, $WS_VSCROLL ) ) $hEdit = GUICtrlGetHandle( $idEdit ) $idEditSearch = GUICtrlCreateDummy() ; Handle $WM_COMMAND messages from Edit control ; To be able to read the search string dynamically while it's typed in GUIRegisterMsg( $WM_COMMAND, "WM_COMMAND" ) ; Create ListView Virtual listview Local $idLV = GUICtrlCreateListView( "", 10, 40, 300-20, 200-20, $LVS_OWNERDATA ) $hLV = GUICtrlGetHandle( $idLV ) _GUICtrlListView_SetExtendedListViewStyle( $hLV, BitOR( $LVS_EX_DOUBLEBUFFER, $LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES ) ) _GUICtrlListView_AddColumn( $hLV, "Item", 130 ) _GUICtrlListView_AddColumn( $hLV, "Value", 125 ) ; Handle $WM_NOTIFY messages from ListView ; Necessary to display the rows in a virtual ListView GUIRegisterMsg( $WM_NOTIFY, "WM_NOTIFY" ) ; Show GUI GUISetState( @SW_SHOW ) ; Fill array Local $aArray = IniReadSectionNames($Fill), $Value If Not @error Then ; Enumerate through the array displaying the section names. For $i = 1 To $aArray[0] $Value = IniRead($Fill, $aArray[$i], "1", "") $aItems[$i-1][0] = $aArray[$i] $aItems[$i-1][1] = $Value Next $iItems = $aArray[0] EndIf ; Set search array to include all items For $i = 0 To $iItems - 1 $aSearch[$i] = $i Next $iSearch = $iItems ; Display items GUICtrlSendMsg( $idLV, $LVM_SETITEMCOUNT, $iSearch, 0 ) ; Message loop While 1 Switch GUIGetMsg() Case $idEditSearch Local $sSearch = GUICtrlRead( $idEdit ) If $sSearch = "" Then ; Empty search string, display all rows For $i = 0 To $iItems - 1 $aSearch[$i] = $i Next $iSearch = $iItems Else ; Find rows matching the search string $iSearch = 0 For $i = 0 To $iItems - 1 If StringInStr( $aItems[$i][0], $sSearch ) Then ; Normal search ;If StringRegExp( $aItems[$i][0], $sSearch ) Then ; Reg. exp. search $aSearch[$iSearch] = $i $iSearch += 1 EndIf Next EndIf ; Display items GUICtrlSendMsg( $idLV, $LVM_SETITEMCOUNT, $iSearch, 0 ) ConsoleWrite( StringFormat( "%4d", $iSearch ) & " rows matching """ & $sSearch & """" & @CRLF ) Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd GUIDelete() EndFunc Func WM_COMMAND( $hWnd, $iMsg, $wParam, $lParam ) Local $hWndFrom = $lParam Local $iCode = BitShift( $wParam, 16 ) ; High word Switch $hWndFrom Case $hEdit Switch $iCode Case $EN_CHANGE GUICtrlSendToDummy( $idEditSearch ) EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc Func WM_NOTIFY( $hWnd, $iMsg, $wParam, $lParam ) Local Static $tText = DllStructCreate( "wchar[50]" ) Local Static $pText = DllStructGetPtr( $tText ) Local $tNMHDR, $hWndFrom, $iCode $tNMHDR = DllStructCreate( $tagNMHDR, $lParam ) $hWndFrom = HWnd( DllStructGetData( $tNMHDR, "hWndFrom" ) ) $iCode = DllStructGetData( $tNMHDR, "Code" ) Switch $hWndFrom Case $hLV Switch $iCode Case $LVN_GETDISPINFOW Local $tNMLVDISPINFO = DllStructCreate( $tagNMLVDISPINFO, $lParam ) If BitAND( DllStructGetData( $tNMLVDISPINFO, "Mask" ), $LVIF_TEXT ) Then Local $sItem = $aItems[$aSearch[DllStructGetData($tNMLVDISPINFO,"Item")]][DllStructGetData($tNMLVDISPINFO,"SubItem")] DllStructSetData( $tText, 1, $sItem ) DllStructSetData( $tNMLVDISPINFO, "Text", $pText ) DllStructSetData( $tNMLVDISPINFO, "TextMax", StringLen( $sItem ) ) EndIf Case $NM_DBLCLK ;Local $sSelected = _GUICtrlListView_GetItemTextString( $hLV, -1 ) Local $tNMITEMACTIVATE = DllStructCreate( $tagNMITEMACTIVATE, $lParam ) Local $iIndex = DllStructGetData( $tNMITEMACTIVATE, "Index" ) Local $sSelected = $aItems[$aSearch[$iIndex]][0] & "|" & _ ; Column 0 $aItems[$aSearch[$iIndex]][1] ; Column 1 ConsoleWrite( "Double Click" & @CR & $sSelected & @CR ) EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc Controls, File Explorer, ROT objects, UI Automation, Windows Message MonitorCompiled code: Accessing AutoIt variables, DotNet.au3 UDF, Using C# and VB codeShell menus: The Context menu, The Favorites menu. Shell related: Control Panel, System Image ListsGraphics related: Rubik's Cube, OpenGL without external libraries, Navigating in an image, Non-rectangular selectionsListView controls: Colors and fonts, Multi-line header, Multi-line items, Checkboxes and icons, Incremental searchListView controls: Virtual ListViews, Editing cells, Data display functions
goss34 Posted June 30, 2015 Author Posted June 30, 2015 Hi Lars,Thank you so much for replying even though the new thread disappeared, much appreciated.I have managed to implement the double click using the example above but i am struggling to come up with a way to launch a function after the doubleclick without hanging the listview, it still produces the blanked out row.I have worked around it so it does what i want but it does hang the listview and i need to scroll after the function finishes in order to get it to redraw the entries. I am pretty sure i am missing something simple but could use a pointer CheersDan
goss34 Posted June 30, 2015 Author Posted June 30, 2015 Nevermind Lars,Got there in the end, i knew why it was hanging but didnt know how to get what i wanted to action.Re-read the tutorial - https://www.autoitscript.com/wiki/Tutorial_GUIRegisterMsg and a post of Melbas and sorted the code accordingly so i now set a value to true after the double click and process an action under the while so it no longer hangs the GUI.Thanks for all your help as usual.Dan
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