你可以在工程文件里动态创建一个启动画面的窗体,创建过程在主窗体创建之前,等所有自动创建窗体创建完毕的时候,把启动画面窗体关闭并free即可

解决方案 »

  1.   

    delphi的formcreate中的确是不能打开另一个form的,因为在CREATE主窗口时,其他
    的所有窗口均没有创建,所以不能SHOW另一个窗口,不妨看一下工程的源代码。但如果一定要这么做,可以在FORMSHOW事件SHOW另一个窗口。但这不是你的本意,如果希望做个启动画面,可以参考以下出自工程文件的源代码。
    但劝你一句,这种代码最好不要在集成环境中运行,否则运行几次就会搞死你的瘟逗屎.Begin
    Try
      SplashForm:=TSplashForm.Create(Application); // 启动画面窗口
      SplashForm.Show;
      SplashForm.Update;  Application.CreateForm(TMainForm, MainForm); // main form
    finally
      SplashForm.Hide;
      SplashForm.Free;
    end;
      Application.Run;
    End;
      

  2.   

    在project\option的Auto-Create Forms中把你的Splashform拉到主窗体的上面,
    一般情况应该把datamodule和登陆窗体AutoCreate,进入后释放登陆窗体,退出前先释放datamodule单元
      

  3.   

    同意stone99(stone(100-1))老兄的做法!
      

  4.   

    为什么一定要在Create里呢?在Show里不是也很好的吗?
    TForm1.Show(Sender:Tobject);
    begin
        try
           Form2:=TForm2.Create(Self);
           Form2.Show;
         except
          form2.Free;
       end;end;
      

  5.   

    为什么一定要在Create里呢?在Show里不是也很好的吗?
    TForm1.Show(Sender:Tobject);
    begin
        try
           Form2:=TForm2.Create(Self);
           Form2.Show;
         except
          form2.Free;
       end;end;
      

  6.   

    为什么一定要在Create里呢?在Show里不是也很好的吗?
    TForm1.Show(Sender:Tobject);
    begin
        try
           Form2:=TForm2.Create(Self);
           Form2.Show;
         except
          form2.Free;
       end;end;
      

  7.   

    都错,是应该在程序的Project部分
    program Project1;uses
      Forms,
      Dialogs,
      Controls,
      MainFrm in 'MainFrm.pas' {MainForm};{$R *.RES}var
      Password: String;
    begin
      if InputQuery('Password', 'Enter your password', PassWord) then
        if Password = 'D5DG' then
        begin
          // Other initialization routines can go here.
          Application.CreateForm(TMainForm, MainForm);
        Application.Run;
        end
        else
          MessageDlg('Incorrect Password, terminating program', mtError, [mbok], 0);
    end.
      

  8.   

    stone99(stone(100-1)) 的方法完全正确嘛
      

  9.   

    stone99(stone(100-1)) 的方法完全正确
      

  10.   

    program TJY;uses
      Forms,
      Main in 'Main.pas' {MainForm},
      Login in 'Login.pas' {LoginForm},
      DataModule in 'DataModule.pas' {DRCOMDataModule: TDataModule},
      About in 'About.pas' {FrmforAbout},
      StartFlash in 'StartFlash.pas' {flashform},
      DeleteDay in 'DeleteDay.pas' {FrmforDeleteDate},
      DeleteObj in 'DeleteObj.pas' {FrmforDeleteObj},
      ExportData in 'ExportData.pas' {FrmforExport},
      ChangePW in 'ChangePW.pas' {ChangePassword},
      BankCheck in 'BankCheck.pas' {FrmforCheck},
      Customized in 'Customized.pas' {FrmforCustom},
      SelectTime in 'SelectTime.pas' {SelectDateTime},
      DBClickData in 'DBClickData.pas' {FrmforDBClick},
      Single in 'Single.pas' {FrmforSingle},
      OtherQuery in 'OtherQuery.pas' {FindForm},
      SubCtrlQuery in 'SubCtrlQuery.pas' {FrmforSubCtrlQuery},
      UserQuery in 'UserQuery.pas' {frmSelectStyle};{$R *.RES}begin
      Application.Initialize;
      Form2:=TForm2.Create(Application);{Create创建启动画面窗口}
      Form2.Show;
      Application.CreateForm(TForm1, Form1);
      Form2.Hide;
      Form2.free;
      Application.Run;
    end.
      

  11.   

    program Project1;
    uses Forms, Unit1 in 'Unit1.pas';
    {$R *.res}
    begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end.unit Unit1;
    interface
    uses
      Forms;
    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      end;
    var Form1: TForm1;
    implementation
    {$R *.dfm}
    procedure TForm1.FormCreate(Sender: TObject);
    var Form2: TForm;
    begin
      Form2 := TForm.Create(nil);
      Form2.ShowModal;
      Form2.Free;
    end;
    end.
      

  12.   

    错了,从来program TJY;uses
      Forms,
      Form1 in 'Unit1.pas' {Form1},
      Form2 in 'Unit2.pas' {Form2},{$R *.RES}begin
      Application.Initialize;
      Form2:=TForm2.Create(Application);{Create创建启动画面窗口}
      Form2.Show;
      Application.CreateForm(TForm1, Form1);
      Form2.Hide;
      Form2.free;
      Application.Run;
    end.
     
    //补充:Form2为 Available form
      

  13.   

    把对话框变成你想用的窗体不就可以了吗?你建的这个启动窗体和建别的窗体是一样的建法,在你的启动画面的窗体上放一Timer,就可以设定显示的时间了。
    begin
      Application.Initialize;
      Form2:=TForm2.Create(Application);{Create创建启动画面窗口}
      Form2.Show;
      Application.CreateForm(TForm1, Form1);
      Form2.free;
      Application.Run;
    end.
      

  14.   

    在project\option的Auto-Create Forms中把你的Splashform拉到右边
      

  15.   

    在工程文件中创建:var
     frmSplash:TfrmSplash;begin
     application.Initialize;
         frmSplash:=TfrmSplash.Create(application);
          frmSplash.Show;
          frmSplash.Update;
           Application.CreateForm(TFormMain, FormMain);
               FormMain.Show;
               Application.Run;
            //   end
           end
           else
             begin
             Application.Terminate;
             end;
         //end;
     //end;
    end.
      

  16.   

    这种问题随便翻一本参考书都可以找的到,有必要如此大张旗鼓么?
    stone99(stone(100-1))的方法才是DELPHI中创建启动画面的正确方法 
      

  17.   

    方法一:调用Showmodal函数来实现。Showmodal方式使一个窗口为激活窗口, 和Show相似,但它令窗口模式化。现举一例说明:
    ⒈开始一个新工程。给表格起名为MainForm,MainForm的单元起名为Main, 工程文件起名为Test。
    ⒉在MainForm中插入一个Button部件,将其Caption属性设为“关闭”,为该部件的OnClick事件创建一个过程,并在过程的begin和end之间插入Close语句。
    ⒊在应用程序添加一个表格,将这个表格起名为MoveForm,MoveForm 的单元起名为Move。
    ⒋为便于演示,在MoveForm中插入一个Label部件,设置其Caption 属性为“欢迎进入本系统”。
    ⒌建立两个表格之间的关联。在Unit Main的 implementation 中加入语句 uses move;
    再为MainForm创建OnActivate事件。
    procedure TMainForm.FormActivate(sender:TObject);
    begin
    MoveForm.Showmodal;
    end;
    ⒍从Component模板的System类别中选择一个计时器(Timer),添加入 MoveForm 表格中,设置其Interval属性为3000(可根据需要自定义),再为其OnTimer事件添加语句
    close;
    加入一个Timer部件目的是用以控制闪现窗口显示时间。在此,MoveForm显示了3秒钟后关闭,主窗口MainForm自动被激活。
    ⒎编译、运行程序,就能得到延迟为3秒的闪现窗口。
    方法二:你可通过修改工程文件中的源代码来实现,这在Delphi 的编程中是很少见的。现举一例具体说明:
    前四步同方法一。
    ⒌选择View/Project Manager,击Option按钮,选择结果Project Option 对话底部的Forms页栏目。注意,MainForm和MoveForm是在Auto-create forms 列表中。选择MoveForm并击右键头按钮,把这个表格移到 Available forms 。 所有的
    Delphi表格通过缺省方式自动在内存中建立, 因此它们要消耗内存和系统资源。在类似这里(程序运行时创建一个表格)的情况下, 你应该将表格从自动创建列表格中去掉。
    ⒍下一步修改工程的源代码。选择View/Project Source,修改begin和end之间的
    语句如下:
    程序清单Test.Dpr
    program Test
    uses
    forms,
    Main in ’MAIN.PAS’{MainForm},
    Move in ’Move.PAS’{MoveForm}{$R *.RES}begin
    MoveForm:=TMoveForm.Create(Application);{Create创建闪现窗口对象}
    MoveForm.Show;
    MoveForm.Update;
    Application.CreateForm(TMainForm,MainForm);
    MoveForm.Hide;
    MoveForm.Free;{Free从内存中释放对象}
    Application.Run;
    end.
      第一条语句创建了对象,该对象存在内存中,但还不能看见, 为了让它出现并更 新它的内容,调用对象的Show和Update成员函数:Show和Update。当闪现窗口使用完后,用Hide函数将它隐藏起来,然后用Free函数释放它所占据的内存。