DarkBoost 0 Posted May 7, 2011 Is there a Windows Message Code I can use with GUIRegisterMsg() to execute a function when an item in a ListView is selected? I have used $WM_MOUSEACTIVE which kinda works but only with a double-click but not a single-click. #include <GUIConstantsEx.au3> #include <GUIListView.au3> #include <WindowsConstants.au3> GUICreate("", 500, 500) Dim $hList = GUICtrlCreateListView("List Items", 10, 10, 480, 450) Dim $hInput = GUICtrlCreateInput("", 10, 470, 480, 20) For $x = 0 To 20 GUICtrlCreateListViewItem("List Item No. " & $x, $hList) Next _GUICtrlListView_SetColumnWidth($hList, 0, 470) GUISetState() GUIRegisterMsg($WM_MOUSEACTIVATE, "ListSelect") Do Until GUIGetMsg() = $GUI_EVENT_CLOSE Func ListSelect() Local $hCount = _GUICtrlListView_GetItemCount($hList) For $y = 0 to $hCount If _GUICtrlListView_GetItemSelected($hList, $y) = True Then GUICtrlSetData($hInput, _GUICtrlListView_GetItemText($hList, $y)) Next EndFunc Share this post Link to post Share on other sites
UEZ 1,273 Posted May 7, 2011 Try this: expandcollapse popup#include <GUIConstantsEx.au3> #include <GUIListView.au3> #include <WindowsConstants.au3> GUICreate("", 500, 500) Global $hListView = GUICtrlCreateListView("List Items", 10, 10, 480, 450) Global $hInput = GUICtrlCreateInput("", 10, 470, 480, 20) For $x = 0 To 20 GUICtrlCreateListViewItem("List Item No. " & $x, $hListView) Next _GUICtrlListView_SetColumnWidth($hListView, 0, 470) GUISetState() GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") Do Until GUIGetMsg() = $GUI_EVENT_CLOSE Func Action($index) MsgBox(0, "Information", _GUICtrlListView_GetItemText($hListView, $index)) EndFunc Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam) #forceref $hWnd, $iMsg, $iwParam Local $hWndFrom, $iCode, $tNMHDR, $hWndListView, $tInfo $hWndListView = $hListView If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView) $tNMHDR = DllStructCreate($tagNMHDR, $ilParam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $hWndListView Switch $iCode Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam) Action(DllStructGetData($tInfo, "Index")) EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFY Br, UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Share this post Link to post Share on other sites
DarkBoost 0 Posted May 7, 2011 Thank you for the quick response and this does work well but wondering what and why is there so much code in the WM_NOTIFY function? I do not know what all this is doing but I can enter a check like: If GUICtrlGetHandle($GuiListView) <> 0 Then .... and it works just the same? Share this post Link to post Share on other sites
PsaltyDS 39 Posted May 7, 2011 It does? You should find that a control handle is <> 0 at any time, not just when it has been clicked. The check you may be looking at is just to accommodate inexperienced users that don't know the difference between a ControlID and the HWND, so they tend to pass the former where the latter is required. Most UDFs guard against this mistake in that fashion. Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law Share this post Link to post Share on other sites