一个问题. 
有两个程序.A和B 
A是我做的.B是别人做的. 
A程序其中有个FrmDemo窗体.上面包含个显示数据库内容的DBGridEh控件.表格存在列IsWork.是boolean型.用户可直接在表格上面编辑. 
现在疑惑的是当我把A程序打开.然后在打开B程序. 
我在A程序FrmDemo窗体的表格上修改DBGridEh中的IsWork列为真时.B程序会自动知道.并且弹出提示.我不理解这是什么原理.这两个程序之间并没有显式的传递自定义消息.是钩子的原理吗?那它是那种钩子呢?

解决方案 »

  1.   

    我觉得:首先你编辑IsWork字段肯定触发了事件,例如控件单元格的onclick事件或是绑定数据集的字段的validate事件等等,然后可以在事件里写findwindow来查找B程序窗体的句柄,然后用sendmessage向该句柄发一个自定义消息。
    当然B程序里一定有接收到该自定义消息的事件委托,然后执行一个showmessage('IsWork被点了')弹出一个提示来。
    应该是这样的。
    建议楼主去研究下怎么在两个应用程序间传递消息- -#
      

  2.   

    楼主程序没有自定义消息的话,可能是这个控件内部捕捉了编辑那个字段的事件然后进行了处理发给B程序,建议楼主如果是商业开发的话还是不要用这个GRID控件了,太危险了哈,不知道有没有后门,不安全呵呵。
    它可能继承DBGRID,然后重写了DBGRID响应编辑事件的方法,然后打包成一个DBGRIDEH控件,给你用,如果你自己没发消息给B程序,那肯定是控件内部搞了鬼,不知道你能不能打开DGBRIDEH控件的源代码看看到底怎么了。钩子的话无外乎也是拦截事件把?比如键盘钩子,鼠标钩子什么的,也是拦截相应的KEYUP,KEYDOWN事件等等。我觉得用钩子拦截你编辑IsWork字段的事件有点旋,如果不是你自己写的这个控件,就只能说写这个控件的人图谋不轨了- -#总之如果确定你自己没写自定义消息、自己没写钩子、没有重写wndproc方法的话,还是不要用此控件了。
    我感觉cxGrid这个控件很好用的,而且功能很强大,我现在用的都是这个,楼主可以试试
      

  3.   

    恢复xiao_jun_0820 
    你所担心的GridEh控件搞鬼的.这是绝对不会的.这个GridEh控件又不是B程序的公司做的.这个表格控件是一个俄罗斯牛人写的.
      A程序是连SQL Server数据库.
      B程序是别的公司做的.
      因为B程序也连接A程序的数据库.但是不做任何操作.刚开始我以为是在数据库层面上检测出来的.后来我取消了这个想法.因为只有A和B在同一台电脑上.B程序才有作用.所以我认为还是在应用程序的层面上的技术.但是不知是何技术