很多程序都是这样,点最小化时就是正常最小化,点关闭时则是最小化后再隐藏任务栏,比如迅雷,请问如何做到呢?关闭过程的代码是什么,谢谢

解决方案 »

  1.   

    补充一下,我现在用的方法是在FormCloseQuery中加入CanClose:=false; 但是这样做的问题是 如果不先关闭程序,就无法关闭操作系统,关闭操作系统的时候会因为此程序而卡住了,不知道迅雷是如何避免这一点的呢?大家可以试一下我说的这个情况,谢谢。
      

  2.   

    -_-!总是要有一个退出程序的“出口”的
    迅雷是通过托盘右键菜单和桌面图标的弹出菜单  里面有“退出”一项下面是前几天你问过一贴,里面有我的回答,就已经实现这个功能了http://topic.csdn.net/u/20080331/20/4e9ef8fd-60e6-4d12-a8c4-8638b2c7e8cf.html
      

  3.   

    如果想在窗体隐藏前,先最小化,可以在Self.Hide这一句前,加一句:SendMessage(Self.Handle, WM_SysCommand, SC_MiniMize, 0);
      

  4.   


      private
        procedure FormMin(var Msg: TWMSYSCOMMAND); message WM_SYSCOMMAND; //截取窗口右上角的关闭按钮事件
    implementation{$R *.dfm}//截取窗口右上角的关闭按钮事件
    procedure TMainForm.FormMin(var Msg: TWMSYSCOMMAND);
    begin
      if (Msg.CmdType=SC_CLOSE) then
        Msg.CmdType:=SC_MINIMIZE;  //使其最小化
      Inherited;
    end;
      

  5.   

    有一个组件CoolTrayIcon,轻松设置托盘图标与主程序的显示.
      

  6.   

    谢2楼的朋友,但我用的是CoolTrayIcon控件,所以用4楼朋友的方法比较合适,不过要加个else否则最小化最大化不能用。把代码贴一下,以便其他朋友参考。谢谢两位,结贴。
    procedure TMainForm.FormMin(var Msg: TWMSYSCOMMAND);
    begin  if (Msg.CmdType=SC_CLOSE) then
      begin
         CoolTrayIcon1.HideMainForm;
      end
      else
      inheritedend;