angel83 Posted Thursday at 04:16 AM Posted Thursday at 04:16 AM Hello, first of all, greetings and I hope you are well. I hope you can help me. I need to know how to edit columns 1 and 2. How to double click on either column 1 or 2 and change the name, then save the changes by pressing enter Column 0 is the numbers. Column 1 is the program name. Column 2 is the program path. This is my code so far expandcollapse popup#include <GuiConstantsEx.au3> #include <GuiListView.au3> #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <GUIListBox.au3> #include <ListViewConstants.au3> #include <GuiListView.au3> #include <TabConstants.au3> #include <WindowsConstants.au3> #include <Array.au3> #include <MsgBoxConstants.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <GuiConstantsEx.au3> #include <GuiListView.au3> #include <GuiImageList.au3> #Include <WinAPI.au3> #include <TabConstants.au3> #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <ListViewConstants.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> $hGUI = GUICreate("Test", 1024, 768) $hListView = GUICtrlCreateListView("#|Program name|Program path", 10, 10, 1000, 150,BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT)) _GuiCtrlListView_SetColumnWidth($hListView,0,35) _GuiCtrlListView_SetColumnWidth($hListView,1,200) _GuiCtrlListView_SetColumnWidth($hListView,2,450) Local $iRead = FileRead(@ScriptDir & "\test.ini") Local $iRead2 = FileRead(@ScriptDir & "\test2.ini") Local $aString = StringSplit(StringStripCR($iRead), @LF) Local $aString1 = StringSplit(StringStripCR($iRead2), @LF) For $i = 1 To $aString[0] If $aString[$i] = "" Then ContinueLoop For $i = 1 To $aString1[0] If $aString1[$i] = "" Then ContinueLoop GUICtrlCreateListViewItem($i & "|" & StringRegExpReplace($aString[$i], "^.*\\", "") & "|" & StringRegExpReplace($aString1[$i], "(^.*\).*", "\1"), $hListView) Next Next $OkButton = GUICtrlCreateButton("Ok", 50, 170, 75, 23) $AddButton = GUICtrlCreateButton("Add new path", 130, 170, 75, 23) $RemButton = GUICtrlCreateButton("Remove", 210, 170, 75, 23) $Buttonname = GUICtrlCreateButton("search", 342, 249, 75, 23) $inputname = GUICtrlCreateInput("", 50, 250, 280, 20) $AddGUI = GUICreate("Add new path", 300, 100, -1, -1, -1, -1, $hGUI) $input = GUICtrlCreateInput("", 10, 20, 280, 20) $Browse_Button = GUICtrlCreateButton("Browse exe files", 10, 60, 85, 23) $AddStr_Button = GUICtrlCreateButton("OK", 130, 60, 75, 23) $Close_Button = GUICtrlCreateButton("Close", 215, 60, 75, 23) GUISetState(@SW_SHOW, $hGUI) While 1 $msg = GUIGetMsg(1) Switch $msg[0] Case $GUI_EVENT_CLOSE, $Close_Button If $msg[1] = $hGUI Then Exit Else GUISetState(@SW_ENABLE, $hGUI) GUISetState(@SW_HIDE, $AddGUI) EndIf Case $Buttonname Local $sFile = GUICtrlRead($inputname) _GUICtrlListView_SetItemSelected($hListView, -1,False,False) ; Get the text from the Input control Local $sSearchText = GUICtrlRead($inputname) ;Local $sSearchText = "Another Target" Local $iColumnToSearch = 1 For $i = 0 To _GUICtrlListView_GetItemCount($hListView) - 1 If _GUICtrlListView_GetItemText($hListView, $i,$iColumnToSearch) = $sSearchText Then GUICtrlSetState($hListView, $GUI_FOCUS) _GUICtrlListView_SetItemSelected($hListView, $i, True,True) EndIf Next Case $OkButton $sData = "" $sData2 = "" For $i = 0 To _GUICtrlListView_GetItemCount($hListView) - 1 $sData &= _GUICtrlListView_GetItemText($hListView, $i, 1) & @CRLF $sData2 &= _GUICtrlListView_GetItemText($hListView, $i, 2) & @CRLF Next $hFile = FileOpen(@ScriptDir & "\test.ini", 2) FileWrite($hFile, $sData) $hFile = FileOpen(@ScriptDir & "\test2.ini", 2) FileWrite($hFile, $sData2) FileClose($hFile) Exit Case $AddButton GUICtrlSetData($input, "") GUISetState(@SW_DISABLE, $hGUI) GUISetState(@SW_SHOW, $AddGUI) Case $RemButton _GUICtrlListView_DeleteItemsSelected($hListView) Case $Browse_Button $sFile = FileOpenDialog(@SCRIPTNAME,@WORKINGDIR,"(*.exe;*.bat)", 1, "", $AddGUI) If $sFile = "" Then ContinueCase GUICtrlSetData($input, $sFile) Case $AddStr_Button $sString = GUICtrlRead($input) If $sString = "" Then ContinueCase $sFile = StringRegExpReplace($sString, "^.*\\", "") $sPath = StringRegExpReplace($sString, "(^.*\).*", "\1") GUICtrlCreateListViewItem(_GUICtrlListView_GetItemCount($hListView) + 1 & "|" & $sFile & "|" & $sPath, $hListView) GUISetState(@SW_ENABLE, $hGUI) GUISetState(@SW_HIDE, $AddGUI) EndSwitch WEnd I will appreciate your help
Solution Nine Posted Thursday at 10:35 AM Solution Posted Thursday at 10:35 AM (edited) You can't, not with standard functionality of a list view . Only the item (first column) can be edited in place using $LVS_EDITLABELS. If you truly want it, you would need a workaround, like creating an input box when you dbl-click on a subitem. Here a simple example : expandcollapse popup#include <GUIConstants.au3> #include <GuiListView.au3> Opt("GUICloseOnESC", 0) Opt("MustDeclareVars", True) Global $hList, $idDummy Example() Func Example() Local $hMain = GUICreate("Example", 230, 170) Local $idList = GUICtrlCreateListView("Column 1|Column 2", 10, 10) GUICtrlCreateListViewItem("Item 1|Item 2", $idList) GUICtrlCreateListViewItem("Item 3|Item 4", $idList) $hList = GUICtrlGetHandle($idList) $idDummy = GUICtrlCreateDummy() GUIRegisterMsg($WM_NOTIFY, WM_NOTIFY) GUISetState() Local $iItem, $iSubItem, $aRect, $sData, $aPos = ControlGetPos($hMain, "", $idList) While True Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $idDummy $iItem = _WinAPI_LoWord(GUICtrlRead($idDummy)) $iSubItem = _WinAPI_HiWord(GUICtrlRead($idDummy)) If $iSubItem = 0 Then ContinueLoop $aRect = _GUICtrlListView_GetSubItemRect($idList, $iItem, $iSubItem) $sData = GUICreateInput($hMain, _GUICtrlListView_GetItemText($idList, $iItem, $iSubItem), $aRect[0] + $aPos[0], $aRect[1] + $aPos[1], $aRect[2] - $aRect[0], $aRect[3] - $aRect[1]) If $sData Then _GUICtrlListView_SetItemText($idList, $iItem, $sData, $iSubItem) EndSwitch WEnd EndFunc ;==>Example Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam) Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam) If $tInfo.hWndFrom = $hList And $tInfo.Code = $NM_DBLCLK Then GUICtrlSendToDummy($idDummy, _WinAPI_MakeLong($tInfo.Index, $tInfo.SubItem)) Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFY Func GUICreateInput($hWnd, $sText, $iLeft, $iTop, $iWidth, $iHeight) Local $hGUI = GUICreate("", $iWidth, $iHeight, $iLeft, $iTop + 1, $WS_POPUP, $WS_EX_MDICHILD, $hWnd) Local $idInput = GUICtrlCreateInput($sText, 0, 1, $iWidth, $iHeight - 1) Local $idOut = GUICtrlCreateDummy() GUISetState() GUISetState(@SW_DISABLE, $hWnd) Local $aAccel[2][2] = [["{ENTER}", $idInput], ["{ESC}", $idOut]], $sInput GUISetAccelerators($aAccel, $hGUI) While True Switch GUIGetMsg() Case $idInput $sInput = GUICtrlRead($idInput) ExitLoop Case $idOut ExitLoop EndSwitch WEnd GUIDelete($hGUI) GUISetState(@SW_ENABLE, $hWnd) GUISetState(@SW_RESTORE, $hWnd) Return $sInput EndFunc ;==>GUICreateInput Edited Thursday at 07:27 PM by Nine better code angel83 1 “They did not know it was impossible, so they did it” ― Mark Twain Spoiler Block all input without UAC Save/Retrieve Images to/from Text Monitor Management (VCP commands) Tool to search in text (au3) files Date Range Picker Virtual Desktop Manager Sudoku Game 2020 Overlapped Named Pipe IPC HotString 2.0 - Hot keys with string x64 Bitwise Operations Multi-keyboards HotKeySet Recursive Array Display Fast and simple WCD IPC Multiple Folders Selector Printer Manager GIF Animation (cached) Debug Messages Monitor UDF Screen Scraping Round Corner GUI UDF Multi-Threading Made Easy Interface Object based on Tag
angel83 Posted Friday at 01:13 AM Author Posted Friday at 01:13 AM Sorry for the delay, I was working. Thank you so much for your great help and your time. It's worked like a charm. I implement it in my GUI and it worked. ¿With all due respect can I tell you nine ? an apology, my English isn't very good.
Nine Posted Friday at 11:30 AM Posted Friday at 11:30 AM 10 hours ago, angel83 said: ¿With all due respect can I tell you nine ? Glad it is working for you. All the codes I provide is for public usage (unless stated otherwise). No worries. “They did not know it was impossible, so they did it” ― Mark Twain Spoiler Block all input without UAC Save/Retrieve Images to/from Text Monitor Management (VCP commands) Tool to search in text (au3) files Date Range Picker Virtual Desktop Manager Sudoku Game 2020 Overlapped Named Pipe IPC HotString 2.0 - Hot keys with string x64 Bitwise Operations Multi-keyboards HotKeySet Recursive Array Display Fast and simple WCD IPC Multiple Folders Selector Printer Manager GIF Animation (cached) Debug Messages Monitor UDF Screen Scraping Round Corner GUI UDF Multi-Threading Made Easy Interface Object based on Tag
angel83 Posted 22 hours ago Author Posted 22 hours ago (edited) Hi Nine, sorry if I'm asking another question about your script. I'm trying to left-click. Like ["{ESC}", $idOut]]. to stop editing and restore focus as if I hadn't edited anything. Do you think it's possible? so I can select another one without having to press ["{ESC}", $idOut]] I hope you understand. Have a good day or good night Edited 22 hours ago by angel83
Moderators Melba23 Posted 20 hours ago Moderators Posted 20 hours ago angel83, Take a look at my GUIListViewEx UDF - the link is in my sig - which allows you to do quite a lot to ListViews! M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
Nine Posted 18 hours ago Posted 18 hours ago 4 hours ago, angel83 said: Do you think it's possible? Of course, you just need to edit a few lines. expandcollapse popup#include <GUIConstants.au3> #include <GuiListView.au3> Opt("GUICloseOnESC", 0) Opt("MustDeclareVars", True) Global $hList, $idDummy Example() Func Example() Local $hMain = GUICreate("Example", 230, 170) Local $idList = GUICtrlCreateListView("Column 1|Column 2", 10, 10) GUICtrlCreateListViewItem("Item 1|Item 2", $idList) GUICtrlCreateListViewItem("Item 3|Item 4", $idList) $hList = GUICtrlGetHandle($idList) $idDummy = GUICtrlCreateDummy() GUIRegisterMsg($WM_NOTIFY, WM_NOTIFY) GUISetState() Local $iItem, $iSubItem, $aRect, $sData, $aPos = ControlGetPos($hMain, "", $idList) While True Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $idDummy $iItem = _WinAPI_LoWord(GUICtrlRead($idDummy)) $iSubItem = _WinAPI_HiWord(GUICtrlRead($idDummy)) If $iSubItem = 0 Then ContinueLoop $aRect = _GUICtrlListView_GetSubItemRect($idList, $iItem, $iSubItem) $sData = GUICreateInput($hMain, _GUICtrlListView_GetItemText($idList, $iItem, $iSubItem), $aRect[0] + $aPos[0], $aRect[1] + $aPos[1], $aRect[2] - $aRect[0], $aRect[3] - $aRect[1]) If $sData Then _GUICtrlListView_SetItemText($idList, $iItem, $sData, $iSubItem) EndSwitch WEnd EndFunc ;==>Example Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam) Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam) If $tInfo.hWndFrom = $hList And $tInfo.Code = $NM_DBLCLK Then GUICtrlSendToDummy($idDummy, _WinAPI_MakeLong($tInfo.Index, $tInfo.SubItem)) Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFY Func GUICreateInput($hWnd, $sText, $iLeft, $iTop, $iWidth, $iHeight) Local $hGUI = GUICreate("", $iWidth, $iHeight, $iLeft, $iTop + 1, $WS_POPUP, $WS_EX_MDICHILD, $hWnd) Local $idInput = GUICtrlCreateInput($sText, 1, 1, $iWidth - 1, $iHeight - 1) Local $idOut = GUICtrlCreateDummy() GUISetState() Local $aAccel[2][2] = [["{ENTER}", $idInput], ["{ESC}", $idOut]], $sInput GUISetAccelerators($aAccel, $hGUI) While WinActive($hGUI) Switch GUIGetMsg() Case $idInput $sInput = GUICtrlRead($idInput) ExitLoop Case $idOut ExitLoop EndSwitch WEnd GUIDelete($hGUI) GUISetState(@SW_RESTORE, $hWnd) Return $sInput EndFunc ;==>GUICreateInput angel83 1 “They did not know it was impossible, so they did it” ― Mark Twain Spoiler Block all input without UAC Save/Retrieve Images to/from Text Monitor Management (VCP commands) Tool to search in text (au3) files Date Range Picker Virtual Desktop Manager Sudoku Game 2020 Overlapped Named Pipe IPC HotString 2.0 - Hot keys with string x64 Bitwise Operations Multi-keyboards HotKeySet Recursive Array Display Fast and simple WCD IPC Multiple Folders Selector Printer Manager GIF Animation (cached) Debug Messages Monitor UDF Screen Scraping Round Corner GUI UDF Multi-Threading Made Easy Interface Object based on Tag
angel83 Posted 9 hours ago Author Posted 9 hours ago Great, thanks a lot, nine, it's working for me now. Sorry if I make mistakes, as I'm not very fluent in English and sometimes use Google Translate. I just wanted to share it. Have a nice day.
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