我自定义了一个WM_SYSCOMMAND消息的处理过程
procedure a(var msg:TWMSYSCOMMAND);message WM_SYSCOMMANM;if msg.cmdtype and $FFF0 =SC_CLOSE then
  hide
else
 inherited
end;我第一次点击窗体的右上角的‘关闭’时,可以隐藏窗体,但是恢复后第二次就没有反映了,请问怎么回事?

解决方案 »

  1.   

    纠正一下:
    WM_SYSCOMMANM应为WM_SYSCOMMAND
    试了一下,没问题的。
      

  2.   

    procedure a(var msg:TWMSYSCOMMAND);message WM_SYSCOMMANM;
    //以上为语误,改为
    procedure a(var msg:TWMSYSCOMMAND);message WM_SYSCOMMAND;
      

  3.   

    我在系统托盘中响应一个鼠标事件,然后SHOWINDOW(HANDLE,SW_MAXNIMIZED)/
                        sendmessage(handle,WM_SYSCOMMAND,SC_MAXNIMIZED,0)
      

  4.   

    找到原因了:
    ShowWindow(Handle, SW_SHOWMAXIMIZED);
    Visible := True;  // 加上这句这是因为前面调用Hide时,Form的Visible变为False了,如果只调用ShowWindow(Handle, SW_SHOWMAXIMIZED);的话,因为这是系统API,并不会把Visible设为True,所以再次Hide时并不会起作用(你可以看看Form源码)。
      

  5.   

    sysu(死树) :太感谢你了,你的建议和我昨天跟踪到了VCL源码一样,TControl的Visible属性真的是False,所以 HIDE并没有真执行改变Visible的过程,再次感谢