注意,这里说的不是MDI,也不是模态对话框,而是指一个进程中要显示超过一个标准窗体。自从DELPHI2007版里默认增加了
Application.MainFormOnTaskbar := True;
控制,给用户增加了一个可以去掉强制的任务栏上对应TApplication的窗口按钮之后,其实这方面的麻烦并没减少多少。
一是,Form类还是没有ShowInTaskbar这样的常用属性,整个进程在任务栏上还是只能对应一个按钮
二是,现在在主窗体里调用类似如下的代码显示别的窗体时,那个窗体竟然就一直傻傻地浮动在主窗体上面,强制把主窗体当作他的所有者窗体了,也没参数控制可让主窗体切换到他上面来显示。除了类似编辑程序中显示查找对话框这样的情况,有很多需求并不需要这样浮动的。唉,真是“压下葫芦浮起瓢”。

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Form2.Show;
    end;
      

  2.   

    第一个:没有那个属性,但是可以通过子类化窗口实现,在要创建的窗体的OnCreate事件中写上
      SetWindowLong(Handle,GWL_HWNDPARENT,0);第二个,不知道你怎样写的
      

  3.   

    嗯,实在不行的话还是得试SetWindowLong这种老办法。
    就是Form2.Show这样写啊。
      

  4.   

    注:VCL的这方面设计是有难以完全弥补的问题的,这次就先讨论到这吧,单纯SetWindowLong在有些时候够用了。