Jump to content
Sign in to follow this  
ZwinnyRolnik

(solved)2x WM_NOTIFY

Recommended Posts

ZwinnyRolnik

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 by ZwinnyRolnik

Share this post


Link to post
Share on other sites
zorphnog

Why do you need two? You can combine everything into one function.

Share this post


Link to post
Share on other sites
ZwinnyRolnik

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

Share this post


Link to post
Share on other sites
KaFu

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

Share this post


Link to post
Share on other sites
ZwinnyRolnik

I can not understand how it works, how to attach it to my WM_NOTIFY. If you know please help:

;===============================================================================
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

Share this post


Link to post
Share on other sites
KaFu

Hard to test with only a snippet of code :mellow:, give this a try:

Global $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

Share this post


Link to post
Share on other sites
ZwinnyRolnik

Yes it's working GREAT... THANKS for Your reply :mellow::P:party:

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.