我自己做了一个DBGrid控件,需要在其所在的窗体显示(show)和关闭的时候(close)处理一些事情,
所以我在里面使用WM_CLOSE和WM_SHOWWINDOW时事件来截获消息,可是结果是DBGrid里面的两个方
法根本没有执行!
请问是怎么回事?
该如何处理?
这是WM_CLOSE的声明:
procedure WMCLOSE(var message: TWMClose);message WM_CLOSE;

解决方案 »

  1.   

    我不知道你为什么一定要把消息截获写在 DBGrid 里。难道,Form在show或者close的时候,FormShow和FormCLose事件也不行吗??为什么不在FormShow和FormCLose事件时间里写DBGrid..........(若干关于DBGrid的操作)
      

  2.   

    如果非要这么作,HOOK消息可以达到这个目的。
    如楼上所说,怀疑楼主的这个思路是否有一点点问题?
      

  3.   

    我是在做一个控件,不是在写程序,怎么能要求每个用此控件的人都在FormShow和FormClose中写代码呢?
    我只不过是要处理DBGrid关心的问题而已,不是窗体关心的问题
      

  4.   

    是啊,你要在show和close的时候处理一些事情,那就放在form的FormShow和FormCLose里处理吧?不知楼主到底是想要实现什么呢?
      

  5.   

    procedure WMCLOSE(var message: TWMClose);message WM_CLOSE;
    改为
    procedure On_WmClose(var message: TMessage);message WM_CLOSE;
      

  6.   

    如果不能转换在Grid内部处理可以使用消息子类化。
      newProc := MakeObjectInstance(OwnerWndProc);
      oldProc := Pointer(SetWindowLong(TWinControl(aOwner).handle, GWL_WNDPROC, integer(newProc)));
    可以搜索更详细的例子