我的程序有4个form, form2创建时,需要加载大量的数据显示在其树上,需要时间太长了。这样,打开程序时,要等好久才能显示出来,所以,我想加个启动页。请问:
如何制作启动页,就是显示一form在加载数据,判断加载完了后,自己消失,主窗体打开。我没搞过这个,查了好多资料也不行,谁能给个代码看看啊?

解决方案 »

  1.   

    呵呵,不知道lz要的效果。
    你可以在加载数据前先调用你的启动页,加载完后,关闭启动页就可以了。比如在form1显示前先显示form2(form2就可以作启动页,在上面放一个label控件,和一个进度条)
    procedure TForm1.FormShow(Sender: TObject);
    var
      i,j:Integer;
    begin
        Application.CreateForm(TForm2, Form2);
        Form2.pb1.Min:=0;
        Form2.pb1.Max:=20;
        Form2.pb1.Position:=0;
        Form2.Show;
        Application.ProcessMessages;
        j:=1;
        for i:=0 to 20 do
        begin
          Sleep(1000);
          Form2.pb1.Position:=Form2.pb1.Position+1;
        end;
        Form2.Free;
        Form2:=nil;
    end;
      

  2.   

    方便简单的方法,在开始加载前,show出一个窗体,里面写入等待等提示信息,让它始终处于TOP,鼠标变成等待状态,在加载完成后,把这个窗体关掉。
      

  3.   

    我想用bluestar说的方法,可是这个顺序不管怎么试都有问题,我的程序打开时,form1.form2.form3都会show,可以当启动窗体splashform放在什么位置都不行,都是先执行自己,完了再按顺序下去,就是无法象楼上说的一样显示
      

  4.   

    我是楼主,请帮我看一看,改一下吧program Project1;uses
      Forms, SysUtils,
      Unit1 in 'Unit1.pas' {Form1},
      Unit2 in 'Unit2.pas' {Form2},
      Unit3 in 'Unit3.pas' {Form3},
      UDMDATA in 'UDMDATA.pas' {DMDATA: TDataModule},
      Unit4 in 'Unit4.pas' {Form4},
      Splash in 'Splash.pas' {SplashForm};{$R *.res}
     var time1:TDateTime;
     begin
      Application.Initialize;
      Application.CreateForm(TDMDATA, DMDATA);
      Application.CreateForm(TForm1, Form1);
      Application.CreateForm(TForm2, Form2);
      Application.CreateForm(TForm3, Form3);
      Application.CreateForm(TForm4, Form4);
      SplashForm:=TSplashForm.Create(Application);
      SplashForm.Show;
      SplashForm.Refresh;
      time1:=now;
      repeat
      until time1+StrtoTime('00:00:02')<=now;
      SplashForm.Visible :=false;
      Application.Run;
    end.
      

  5.   

    Application.Initialize;
      Application.CreateForm(TDMDATA, DMDATA);
      Application.CreateForm(TForm1, Form1);
      Application.CreateForm(TForm2, Form2);
      Application.CreateForm(TForm3, Form3);
      Application.CreateForm(TForm4, Form4);
      SplashForm:=TSplashForm.Create(Application);
      SplashForm.Show;
      SplashForm.Refresh;
      time1:=now;
      repeat
      until time1+StrtoTime('00:00:02')<=now;
      SplashForm.Visible :=false;
      Application.Run;
    以上有问题!
    可以改为:
     Application.Initialize;
      SplashForm:=TSplashForm.Create(Application);
      SplashForm.Show;
      SplashForm.Refresh;
      Application.CreateForm(TDMDATA, DMDATA);
      Application.CreateForm(TForm1, Form1);
      Application.CreateForm(TForm2, Form2);
      Application.CreateForm(TForm3, Form3);
      Application.CreateForm(TForm4, Form4);
      SplashForm.close
      Application.Run;
      

  6.   

    楼上的,我知道有问题,如果改成你这样的话,splashform显示到最后其它FORM信息都加载完了,splashform还不会消失,不行啊