想实现以下效果:
 
    有一个主窗体Form1,和一个子窗体Form2,form2不是自动创建的。
现在的要求是,程序启动时动态创建子窗体Form2,并使得Form2显示在
最前面而且要获得焦点。

解决方案 »

  1.   

    可以在第一个窗体的SHOW事件里创建第二个窗体,并设置第二个窗体formstyle:=fsStayOnTop;
      

  2.   

    大家先试试再回答好不好。要是这么简单就能解决问题,我就不会问了。formstyle:=fsStayOnTop只能保证Form2会出现在前面,但是不能获得焦点。
    还有,我并不想让Form2总是在前面,所以这句话不能要。
      

  3.   

    为什么不用一个 Panel 呢?
      

  4.   

    //为什么不用一个 Panel 呢?我需要的是两个窗体,不是一个窗体上的panel,
    没人知道么?
      

  5.   

    为什么 不把Form2作为主窗体呢?在Show里加Form1呢??
      

  6.   

    var
      Form1: TForm1;
       MM:Boolean;  //定义一个全局变量
    implementation
    ...
    procedure TForm1.FormActivate(Sender: TObject);
    begin              
      if MM then
      begin
         Form2.Show;
         MM:=false;
      end;end;Initialization
      MM:=true;    //初始化
    ...
    散分吧~~
      

  7.   

    呵呵,楼上的方法我早就考虑过了,还有一个变通的方法就是用time控件,
    这些我都试过,不然我也不会问“又没有比较好的方法”了。你也知道,FormActivate这个事件会经常调用的。所以我不想这么做。再等等看,实在不行,可能要修改vcl的源代码了。
      

  8.   

    在form1的onshow事件中 
      showwindow(handle,sw_normal);
      f2:=tform2.Create(self);
      f2.Show;
      

  9.   

    呵呵,我怎么就没想到在form1上做文章呢,接受答案。