首先,捕捉窗体的最小化事件只能通过消息WM_SYSCOMMAND,代码如下:

在声明处:

procedure OnMinsize(var msg:twmsyscommand);message wm_syscommand;

函数的实现:

procedure TFormMain.OnMinsize(var msg: twmsyscommand);
begin
  if msg.CmdType = SC_MINIMIZE then
  begin//此处添加对最小化事件的处理过程
     Hide();
     msg.CmdType := SC_CONTEXTHELP;
  end;
  inherited;
end;

  隐藏到托盘,除了一般的使用控件TTrayIcon以外,需要注意的是,一,用hide()方法,或者SW_HIDE参数的ShowWindow;二,就是必须把CmdType修改掉,用SC_DEFAULT或者SC_CONTEXTHELP都可以,但是就不能用SC_MINIMIZE,至于SC_MAXMIZE等我就没试过了,不过想想肯定不行。

  不修改而是仍然使用SC_MINIMIZE会出现的现象是,窗体隐藏,任务栏上的标签页消失掉了(正常),然后任务栏的标签会重新冒出来,但是此时点击任务栏标签,窗体是不会出现的。原因应该是首先调用Hide()方法,所以出现了正常的情况,然后inherited调用系统对最小化的处理把标签在任务栏上给画了出来。又由于窗体已经被隐藏,所以又无法显示。

[原文在百度空间已经关闭]