一个主窗体,一个副窗体。
主窗体Show出副窗体,这两个窗体在任务栏有两个标题:
这个的做法是,在副窗体中重载CreateParams,并实现如下:
procedure Form2.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.wndParent := GetDesktopWindow;
end;但现在有一个问题,即主窗体最小化后,点击任务栏的标题让它回复,它竟然跑到副窗体的后面去了。
各位试试,看看有什么解决的办法呀。

解决方案 »

  1.   

    把application隐藏,把主窗体也用副窗体一样的方法,让它显示在任务栏上,自己处理最小化/关闭消息
      

  2.   

    //   procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
    procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
    begin
    if (Msg.CmdType = SC_MINIMIZE)  then
    begin
      ShowMessage('min');
      // 你的代码...
    end;
    if (Msg.CmdType = SC_MAXIMIZE) then
      ShowMessage('max');
    DefaultHandler(Msg);
    end;
    // 截获最大化和最小化消息更奇怪.
    // 点击任务栏的主窗体两次就可以正常显示主窗体.你用程序试下模拟两次点击,应该有其它方法.但我想不到.sorry.Good Luck
      

  3.   

    To: ysai(所有真的都是假的真,所有假的都是真的假)
    你的解决方法似乎也不行,不知是不是我试得不对,你如果测试成功可以把代码贴一下出来吗。To: hsgrass37301(零点)
    我再试着用另一种方法试试看吧。各位试试看啊,这个可是一个大问题啊。
      

  4.   

    为什么不行?不行就是你搞错了,全部代码如下.....主窗体的,副窗体不要动 unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, StrUtils;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
      public
        procedure CreateParams(var Params: TCreateParams);override;
      end;var
      Form1: TForm1;implementationuses
      unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      Form2.show;
    end;procedure TForm1.CreateParams(var Params: TCreateParams);
    begin
      inherited;
      with Application do
        SetWindowLong(Handle, GWL_EXSTYLE,
        GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
      params.WndParent := 0;
    end;procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
    begin
      case message.CmdType of
        SC_MINIMIZE :
          DefWindowProc(Handle, message.Msg,TMessage(message).wParam,TMessage(message).lParam);
        else
          inherited;
      end;
    end;end.
      

  5.   

    哈太谢谢  ysai了,
    马上结贴
     :)