name15 Posted April 23, 2010 Posted April 23, 2010 how to get if user selected item or not if user no item selected then will _GUICtrlMenu_SetItemDisabled if user selected a item then will _GUICtrlMenu_SetItemEnabled like my function Func menu($FileView,$hmenu,$Name1) $p = _GUICtrlListView_GetItemCount($FileView) For $i = 0 to $p $Name = _GUICtrlListView_GetItemSelected(GUICtrlGetHandle($FileView),$i) If $Name = False Then For $i = 1 To $Name1 _GUICtrlMenu_SetItemDisabled(GUICtrlGetHandle($hmenu), $i) Next EndIf ExitLoop If $Name = True Then For $i = 1 To $Name1 _GUICtrlMenu_SetItemEnabled(GUICtrlGetHandle($hmenu), $i) Next EndIf Next EndFunc
BugFix Posted April 24, 2010 Posted April 24, 2010 To got an event in the moment of listview item are checked/unchecked with mouse or spacebar the following code works fine. You can combine it with your menu-settings. expandcollapse popup#include <WinAPI.au3> #Include <WindowsConstants.au3> OnAutoItExitRegister('OnAutoItExit') Opt("GUIOnEventMode", 1) Global $hHookKeyboard, $pStub_KeyProc, $active = False, $ctrl2effect = 'SysListView321' $pStub_KeyProc = DllCallbackRegister("_KeyProc", "int", "int;ptr;ptr") $hHookKeyboard = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($pStub_KeyProc), _WinAPI_GetModuleHandle(0), 0) Global $hGui = GUICreate("Listview", 520, 600, -1, -1) GUISetOnEvent(-3, "_Exit") Global $hLV = GUICtrlCreateListView("Index", 10, 10, 500, 582, -1, 0x00000004) For $i = 1 To 100 GUICtrlCreateListViewItem($i, $hLV) GUICtrlSetOnEvent(-1, "_CheckState") Next GUISetState() While 1 Sleep(100) ; has only effect, if GUI is active and listview has focus (for several listview also compare hWnd of listview) If BitAND(WinGetState($hGui), 8) And ControlGetFocus($hGui) = $ctrl2Effect Then $active = True Else $active = False EndIf WEnd Func _Exit() Exit EndFunc Func _CheckState() Local $state = 'unchecked' If BitAND(GUICtrlRead(@GUI_CtrlId, 1), $GUI_CHECKED) Then $state = 'checked' ConsoleWrite(@GUI_CtrlId & " - " & $state & @CR) EndFunc Func OnAutoItExit() DllCallbackFree($pStub_KeyProc) _WinAPI_UnhookWindowsHookEx($hHookKeyboard) EndFunc ;==>OnAutoITExit Func _KeyProc($nCode, $wParam, $lParam) If $nCode < 0 Or Not $active Then Return _WinAPI_CallNextHookEx($hHookKeyboard, $nCode, $wParam, $lParam) Local $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam) Local $vkCode = DllStructGetData($tKEYHOOKS, "vkCode") If ($wParam = $WM_KEYUP) And ($vkCode = 0x20) Then _CheckStatus() EndIf Return _WinAPI_CallNextHookEx($hHookKeyboard, $nCode, $wParam, $lParam) EndFunc ;==>_KeyProc Best Regards BugFix
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