我有两个窗体,主窗体是 MainWindow,非主窗体Form2是动态创建的:
procedure TMainWindow.Button12Click(Sender: TObject);
begin
  Application.CreateForm(TForm2,Form2);
  Form2.ShowModal;
  Form2.Free;
end;当需要最小化Form2时,发现窗体不是最小化到任务栏,而是缩小到桌面左下脚。
请问有何办法让Form2最小化到任务栏,以便操作方便。谢谢!

解决方案 »

  1.   

    任务栏上一般只显示Application的按钮。Form2最小化后,如果不想缩小显示在左下角,可以在Form2类的代码中加上以下代码:  TForm2 = class(TForm)
      ......
      private
        procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
      ......
      end;procedure TForm2.WMSysCommand(var Message: TWMSysCommand);
    begin
      if Message.CmdType = SC_MINIMIZE then 
        Self.Hide
      else 
        inherited;
    end;
    加上以上代码之后,Form2最小化后将不会在桌面上留下有任何东东,Form2重新显示需要使用代码来完成,即Form2.Show。
      

  2.   

    谢谢jadeluo 提示。  不过我希望Form2最小化时,显示到任务栏。
      另外,我的窗体使用了bsBusinessSkinForm控件,好象消息没有作用(Form2还是缩小到桌面左下脚)procedure TForm2.WMSysCommand(var Message: TWMSysCommand);
    begin
      if Message.CmdType = SC_MINIMIZE then 
        Self.Hide
      else 
        inherited;
    end;
      

  3.   

    procedure CreateParams(var Params: TCreateParams); override;procedure TForm2.CreateParams(var Params: TCreateParams);
    begin
      inherited;
      Params.WndParent := GetDesktopWindow();
    end;
      

  4.   

    to clasj ,     你的方法在没有用bsBusinessSkinForm控件时,可以达到目的,但是加上bsBusinessSkinForm控件后,最小化窗体Form2死活都是在桌面左下脚。(不知道这算不算是bsBusinessSkinForm的BUG).
      

  5.   

    应该是bsBusinessSkinForm控件默认属性优先执行了
      

  6.   

    跟了一下bsBusinessSkinForm最小化窗体事件,没有跟进去,不然看看他最小化窗体的时间代码,希望自己能修改一下!
    有朋友改过它的原代码吗?
      

  7.   

    procedure TForm2.FormCreate(Sender: TObject);
    begin
      bsBusinessSkinForm1.MinimizeDefault := true;
    end;具体原因你自己看看源码吧:
    procedure TbsBusinessSkinForm.DoMinimize;
      

  8.   

    谢谢clasj 的大力帮忙!
    修改了unit BusinessSkinForm;
    procedure TbsSkinStdButtonObject.DoMin;
    begin
      {if Parent.WindowState = wsMinimized
        then Parent.WindowState := wsNormal
      else Parent.WindowState := wsMinimized; }
      //2008.4.22修改:最小化窗体回到任务栏
      Parent.FForm.WindowState:= wsMinimized;
    end;
    再加上clasj 兄的方法:procedure CreateParams(var Params: TCreateParams); override; procedure TForm2.CreateParams(var Params: TCreateParams); 
    begin 
      inherited; 
      Params.WndParent := GetDesktopWindow(); 
    end;实现了需求,贴出来也许对大家有帮助哈!
    再次感谢各位的帮忙,谢谢!
      

  9.   

    我现在碰到另外一个问题,Form2显示到任务栏之后,点击任务栏的图标(不是托盘图标),FORM2不弹出来了。该怎样才能让FORM2弹出?