ZwinnyRolnik Posted June 28, 2010 Share Posted June 28, 2010 (edited) Is it possible to turn on 2x WM_NOTIFY because some option in first WM is responsible for turning off and turning on the second WM Edited June 28, 2010 by ZwinnyRolnik Link to comment Share on other sites More sharing options...
zorphnog Posted June 28, 2010 Share Posted June 28, 2010 Why do you need two? You can combine everything into one function. Link to comment Share on other sites More sharing options...
ZwinnyRolnik Posted June 28, 2010 Author Share Posted June 28, 2010 I can't... I have made listview and wm_notify is responsible for: 1). all functions edit and colors and dbclick, nmclick etc 2). click on listview scroll bar, I mean $LVN_BEGINSCROLL and $LVN_ENDSCROLL The point is that function $LVN_BEGINSCROLL has to turn off wm_notify, I mean sub-clause 1) but also $LVN_ENDSCROLL is turning off and $LVN_ENDSCROLL has to turn on wm_notify Link to comment Share on other sites More sharing options...
KaFu Posted June 28, 2010 Share Posted June 28, 2010 One message, one function. Add a global variable to handle the switch within the function... something like this: Global $bWM_NOTIFY = True GUIRegisterMsg($WM_NOTIFY, "MY_WM_NOTIFY") While 1 Sleep(10) WEnd Func MY_WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam) Local $tNMHDR = DllStructCreate($tagNMHDR, $ilParam) Local $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) Local $iIDFrom = DllStructGetData($tNMHDR, "IDFrom") Local $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $hYourListview Switch $iCode Case $LVN_BEGINSCROLL $bWM_NOTIFY = False Case $LVN_ENDSCROLL $bWM_NOTIFY = True EndSwitch EndSwitch If $bWM_NOTIFY Then ; handle notifications of other controls EndIf Return $GUI_RUNDEFMSG EndFunc ;==>MY_WM_NOTIFY OS: Win10-22H2 - 64bit - German, AutoIt Version: 3.3.16.1, AutoIt Editor: SciTE, Website: https://funk.eu AMT - Auto-Movie-Thumbnailer (2022-Nov-26) BIC - Batch-Image-Cropper (2023-Apr-01) COP - Color Picker (2009-May-21) DCS - Dynamic Cursor Selector (2024-Feb-16) HMW - Hide my Windows (2018-Sep-16) HRC - HotKey Resolution Changer (2012-May-16) ICU - Icon Configuration Utility (2018-Sep-16) SMF - Search my Files (2023-Jun-03) - THE file info and duplicates search tool SSD - Set Sound Device (2017-Sep-16) Link to comment Share on other sites More sharing options...
ZwinnyRolnik Posted June 28, 2010 Author Share Posted June 28, 2010 I can not understand how it works, how to attach it to my WM_NOTIFY. If you know please help: expandcollapse popup;=============================================================================== Func WM_Notify_Events($hWndGUI, $MsgID, $wParam, $lParam) #forceref $hWndGUI, $MsgID, $wParam Global $iLastItem = -1, $iLastsubitemNR = -1 Global $hGUI_Multiline, $View_Multiline, $ColName ; Multiline cell viewer window Local $tagNMHDR, $pressed,$event, $retval = $GUI_RUNDEFMSG ;, $idFrom $tagNMHDR = DllStructCreate("int;int;int", $lParam);NMHDR (hwndFrom, idFrom, code) If @error Then $tagNMHDR =0 Return EndIf ;~ $from = DllStructGetData($tagNMHDR, 1) ;~ $idFrom = DllStructGetData($tagNMHDR,2) ;ConsoleWrite("idFrom="&$idFrom&@LF) $event = DllStructGetData($tagNMHDR, 3) Select Case ($event = $HDN_TRACK or $event = $HDN_TRACKW) ;column dragging _CancelEdit() Case $MsgID = $WM_MOVING _MoveControl() Case $wParam = $__LISTVIEWCTRL Select Case $event = $LVN_ITEMCHANGED Local $ckcount = _LvGetCheckedCount($__LISTVIEWCTRL) If $LVCHECKEDCNT <> $ckcount Then $LVCHECKEDCNT = $ckcount $bLVITEMCHECKED = True _CancelEdit() EndIf Case $event = $NM_CLICK If $bLVEDITondblclick = True Then _LVGetInfo($lParam) ;scroll column into view. Switch $LVINFO[1] Case 0 _GUICtrlListView_Scroll ( $__LISTVIEWCTRL, -$LVINFO[4], 0 ) _FillLV_Info($__LISTVIEWCTRL, $LVINFO[8], $LVINFO[9], $LVINFO,0) ;_LVGetInfo($lParam) Case Else Local $ctrlSize = ControlGetPos("","",$__LISTVIEWCTRL) If $LVINFO[2]+$LVINFO[4] > $ctrlSize[2] Then _GUICtrlListView_Scroll ( $__LISTVIEWCTRL, $LVINFO[4], 0 ) _FillLV_Info($__LISTVIEWCTRL, $LVINFO[8], $LVINFO[9], $LVINFO,0) EndIf EndSwitch if Not $bLVITEMCHECKED Then _ListView_Click() EndIf Else if $editFlag = 1 Then _CancelEdit() EndIf $Column_attribute =_GUICtrlListView_GetColumn($ListView, $LVINFO[9]) ; if no cell change return without doing anything If $iLastItem = $LVINFO[8] And $iLastsubitemNR = $LVINFO[9] Then Return 0 $iLastItem = $LVINFO[8] $iLastsubitemNR = $LVINFO[9] Local $sToolTipData = _GUICtrlListView_GetItemText($ListView, $LVINFO[8],$LVINFO[9]) $Mypos = StringInStr ( $sToolTipData, @CRLF ) $strin=_GUICtrlListView_GetStringWidth($listview, $sToolTipData) $strin = $strin + 12 $str =_GUICtrlListView_getColumnWidth($listview, $LVINFO[9]) If $Mypos = 0 Then if $str < $strin then ToolTip($sToolTipData, MouseGetPos(0) + 15, MouseGetPos(1) + 15,"",0,1) Else ToolTip("") EndIf ;ConsoleWrite("R" & $iItem & "C" & $subitemNR & " No tip" & @CR) Else ToolTip("") EndIf $bLVITEMCHECKED = False; Case $event = $NM_DBLCLK _LVGetInfo($lParam) _ListView_DoubleClick() Case $event = $NM_RCLICK _LVGetInfo($lParam) _ListView_RClick() Case $event = -180 If $editFlag = 1 Then Send("{Esc}") _CancelEdit() $retval = 0 EndIf Case $event = -181 _FillLV_Info($__LISTVIEWCTRL, $LVINFO[0], $LVINFO[1], $LVINFO,0) Case $event= -121 _LVGetInfo($lParam,1) Case Else EndSelect Case $lvDate Select Case $event = $DTN_DROPDOWN $bCanceled = False $bDATECHANGED = False Case $event = $DTN_WMKEYDOWNA $pressed = _vKeyCheck() If $pressed = 27 Then _CancelEdit() Case $event = $DTN_DATETIMECHANGE If $bDATECHANGED = False Then $bDATECHANGED = True $pressed = _vKeyCheck() if $pressed = 27 Then _CancelEdit() $bDATECHANGED = False EndIf Case $event = $DTN_CLOSEUP if $bCanceled or ($bDATECHANGED = False) Then Send("{Esc}") $bDATECHANGED = False Else ; If $bLVUPDATEonfocusCHANGE = True Then Send("{Enter}") $bDATECHANGED = True ; Else ; Send("{Esc}") ; EndIf EndIf case $event = -7 $bCanceled = False $bDATECHANGED = False if $bCanceled = True Then ;or ($bDATECHANGED = False) Then Send("{Esc}") $bDATECHANGED = False $bCanceled = False Else $bDATECHANGED = True EndIf EndSelect Case $event = -326 if $editFlag Then _CancelEdit() Case $MsgID = $WM_KEYDOWN ;---------------------------------------------------------------------------------------------- ;---------------------------------------------------------------------------------------------- Case Else ;;uncomment the following line to have the edit _LVUpdate if the mouse moves ;;off of the listview. If $editFlag And Not(_HasFocus($editCtrl)) Then _LVUpdate($editCtrl, $__LISTVIEWCTRL, $LVINFO[0], $LVINFO[1]) EndSelect $tagNMHDR = 0 $event = 0 $lParam = 0 Return $retval EndFunc ;==>WM_Notify_Events Link to comment Share on other sites More sharing options...
KaFu Posted June 28, 2010 Share Posted June 28, 2010 Hard to test with only a snippet of code , give this a try: expandcollapse popupGlobal $bWM_NOTIFY = True ;=============================================================================== Func WM_Notify_Events($hWndGUI, $MsgID, $wParam, $lParam) #forceref $hWndGUI, $MsgID, $wParam Global $iLastItem = -1, $iLastsubitemNR = -1 Global $hGUI_Multiline, $View_Multiline, $ColName ; Multiline cell viewer window Local $tagNMHDR, $pressed, $event, $retval = $GUI_RUNDEFMSG ;, $idFrom $tagNMHDR = DllStructCreate("int;int;int", $lParam);NMHDR (hwndFrom, idFrom, code) If @error Then $tagNMHDR = 0 Return EndIf ;~ $from = DllStructGetData($tagNMHDR, 1) ;~ $idFrom = DllStructGetData($tagNMHDR,2) ;ConsoleWrite("idFrom="&$idFrom&@LF) $event = DllStructGetData($tagNMHDR, 3) Select Case $wParam = $__LISTVIEWCTRL Select Case $event = $LVN_BEGINSCROLL $bWM_NOTIFY = False Case $event = $LVN_ENDSCROLL $bWM_NOTIFY = True EndSelect EndSelect If $bWM_NOTIFY Then Select Case $wParam = $__LISTVIEWCTRL Select Case $event = $LVN_ITEMCHANGED Local $ckcount = _LvGetCheckedCount($__LISTVIEWCTRL) If $LVCHECKEDCNT <> $ckcount Then $LVCHECKEDCNT = $ckcount $bLVITEMCHECKED = True _CancelEdit() EndIf Case $event = $NM_CLICK If $bLVEDITondblclick = True Then _LVGetInfo($lParam) ;scroll column into view. Switch $LVINFO[1] Case 0 _GUICtrlListView_Scroll($__LISTVIEWCTRL, -$LVINFO[4], 0) _FillLV_Info($__LISTVIEWCTRL, $LVINFO[8], $LVINFO[9], $LVINFO, 0) ;_LVGetInfo($lParam) Case Else Local $ctrlSize = ControlGetPos("", "", $__LISTVIEWCTRL) If $LVINFO[2] + $LVINFO[4] > $ctrlSize[2] Then _GUICtrlListView_Scroll($__LISTVIEWCTRL, $LVINFO[4], 0) _FillLV_Info($__LISTVIEWCTRL, $LVINFO[8], $LVINFO[9], $LVINFO, 0) EndIf EndSwitch If Not $bLVITEMCHECKED Then _ListView_Click() EndIf Else If $editFlag = 1 Then _CancelEdit() EndIf $Column_attribute = _GUICtrlListView_GetColumn($ListView, $LVINFO[9]) ; if no cell change return without doing anything If $iLastItem = $LVINFO[8] And $iLastsubitemNR = $LVINFO[9] Then Return 0 $iLastItem = $LVINFO[8] $iLastsubitemNR = $LVINFO[9] Local $sToolTipData = _GUICtrlListView_GetItemText($ListView, $LVINFO[8], $LVINFO[9]) $Mypos = StringInStr($sToolTipData, @CRLF) $strin = _GUICtrlListView_GetStringWidth($ListView, $sToolTipData) $strin = $strin + 12 $str = _GUICtrlListView_GetColumnWidth($ListView, $LVINFO[9]) If $Mypos = 0 Then If $str < $strin Then ToolTip($sToolTipData, MouseGetPos(0) + 15, MouseGetPos(1) + 15, "", 0, 1) Else ToolTip("") EndIf ;ConsoleWrite("R" & $iItem & "C" & $subitemNR & " No tip" & @CR) Else ToolTip("") EndIf $bLVITEMCHECKED = False; Case $event = $NM_DBLCLK _LVGetInfo($lParam) _ListView_DoubleClick() Case $event = $NM_RCLICK _LVGetInfo($lParam) _ListView_RClick() Case $event = -180 If $editFlag = 1 Then Send("{Esc}") _CancelEdit() $retval = 0 EndIf Case $event = -181 _FillLV_Info($__LISTVIEWCTRL, $LVINFO[0], $LVINFO[1], $LVINFO, 0) Case $event = -121 _LVGetInfo($lParam, 1) Case Else Case ($event = $HDN_TRACK Or $event = $HDN_TRACKW) ;column dragging _CancelEdit() Case $MsgID = $WM_MOVING _MoveControl() EndSelect Case $lvDate Select Case $event = $DTN_DROPDOWN $bCanceled = False $bDATECHANGED = False Case $event = $DTN_WMKEYDOWNA $pressed = _vKeyCheck() If $pressed = 27 Then _CancelEdit() Case $event = $DTN_DATETIMECHANGE If $bDATECHANGED = False Then $bDATECHANGED = True $pressed = _vKeyCheck() If $pressed = 27 Then _CancelEdit() $bDATECHANGED = False EndIf Case $event = $DTN_CLOSEUP If $bCanceled or ($bDATECHANGED = False) Then Send("{Esc}") $bDATECHANGED = False Else ; If $bLVUPDATEonfocusCHANGE = True Then Send("{Enter}") $bDATECHANGED = True ; Else ; Send("{Esc}") ; EndIf EndIf Case $event = -7 $bCanceled = False $bDATECHANGED = False If $bCanceled = True Then ;or ($bDATECHANGED = False) Then Send("{Esc}") $bDATECHANGED = False $bCanceled = False Else $bDATECHANGED = True EndIf EndSelect Case $event = -326 If $editFlag Then _CancelEdit() Case $MsgID = $WM_KEYDOWN ;---------------------------------------------------------------------------------------------- ;---------------------------------------------------------------------------------------------- Case Else ;;uncomment the following line to have the edit _LVUpdate if the mouse moves ;;off of the listview. If $editFlag And Not (_HasFocus($editCtrl)) Then _LVUpdate($editCtrl, $__LISTVIEWCTRL, $LVINFO[0], $LVINFO[1]) EndSelect EndIf $tagNMHDR = 0 $event = 0 $lParam = 0 Return $retval EndFunc ;==>WM_Notify_Events OS: Win10-22H2 - 64bit - German, AutoIt Version: 3.3.16.1, AutoIt Editor: SciTE, Website: https://funk.eu AMT - Auto-Movie-Thumbnailer (2022-Nov-26) BIC - Batch-Image-Cropper (2023-Apr-01) COP - Color Picker (2009-May-21) DCS - Dynamic Cursor Selector (2024-Feb-16) HMW - Hide my Windows (2018-Sep-16) HRC - HotKey Resolution Changer (2012-May-16) ICU - Icon Configuration Utility (2018-Sep-16) SMF - Search my Files (2023-Jun-03) - THE file info and duplicates search tool SSD - Set Sound Device (2017-Sep-16) Link to comment Share on other sites More sharing options...
ZwinnyRolnik Posted June 28, 2010 Author Share Posted June 28, 2010 Yes it's working GREAT... THANKS for Your reply Link to comment Share on other sites More sharing options...
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