在vb6.0主窗体中插入了一个名为“F1Book1”(源于Formula One)的类似于excel的表格控件,进入某个单元格编辑状态时,此时的单元格其实就是一个文本编辑控件(其中有光标闪烁),而且可以用getfocus方法获得其句柄,试问:
偶想实时监控该单元格内容是否发生了变化并激发事件,就如Textbox的Change事件一样,该调用哪些API函数和常数,具体代码该怎样写?

解决方案 »

  1.   

    根据MSDN上的说明:The parent window of the edit control receives this notification message through the WM_COMMAND message. EN_CHANGE 应该改变地内容时,这编辑控件的父窗口会收到相应的消息
      

  2.   

    这个"文本编辑控件"没有change事件或者类似的吗,找到之后再这个事件里面判断那个单元格是否变化就可以了
      

  3.   

    回复楼上,这个控件没有Change事件,而且,这是一类问题,并非此表格控件所独有,只要是windows的编辑控件,都可能遇到此问题,还望赐教。
      

  4.   

    有没有edit, beforedit 之类的
      

  5.   

    谁会用钩子啊?钩住-->等待-->发生变化EN_CHANGE-->截获-->触发事件-->解钩
      

  6.   

    先研究一下该控件都有些什么事件。如果没有Change事件,可以在Timer事件中监测数据变化。
      

  7.   

    UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
      

  8.   

        该问题偶已自行解决,采用了API的SetWindowLong函数的截获消息通知过程来实现,适合Windows的标准Edit控件,代码如下:
    '主窗体Form1中的代码,在窗体中设置一个文本框,命名为Text1
    Option ExplicitPrivate Sub Form_Load()
        Text1.Text = "This is an edit control."
        Call Hook(Form1.hwnd) '此处应为Text1父窗体的句柄
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        Call UnHook(Form1.hwnd)
    End Sub'模块中的代码
    Option ExplicitPublic Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
        (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, _
        ByVal wParam As Long, ByVal lParam As Long) As Long
    Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
        (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public Declare Function hiword Lib "TLBINF32" (ByVal DWord As Long) As IntegerPublic Const GWL_WNDPROC = (-4)
    Public Const EN_CHANGE = &H300Public defWndProc As LongPublic Sub Hook(hwnd As Long)
        If defWndProc = 0 Then
            defWndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
        End If
    End SubPublic Sub UnHook(hwnd As Long)
        If defWndProc > 0 Then
            Call SetWindowLong(hwnd, GWL_WNDPROC, defWndProc)
            defWndProc = 0
        End If
    End SubPublic Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, _
        ByVal wParam As Long, ByVal lParam As Long) As Long
        If hiword(wParam) = EN_CHANGE Then '从wParam的高位字节中截获消息通知
            Debug.Print "The text of Text1 has changed!" '触发事件
        Else
            WindowProc = CallWindowProc(defWndProc, hwnd, uMsg, wParam, lParam)
        End If
    End Function