1)一个启动画面(这里暂表示为FORM1)
2)如果是第一次启动一般在启动画面显示结束后进行环境设置,比如设置连接数据库的数据库名,用户名和口令等,这里应该包括测试是否连接数据库服务器成功.(FORM2)
3)用户名和口令校验,如果成功,进行第四步(FORM3)
4)进行主窗体.(MDIMAIN)
只有第4步才是多文档.其它几步要求:
每一个窗体完成任务后就要释放自己,在显示一个窗体时不要有其它窗体显示出来.(各个窗体加载最好采用动态加载).
谁能够完成这几个步骤?

解决方案 »

  1.   

    Application.Initialize;  // splash show
      FormSplash := TFormSplash.Create(Application);
      FormSplash.Show;
      FormSplash.Update;
       Application.Title := '理系统';
      //dm create    Application.CreateForm(TFormDMEquip, FormDMEquip);
        Application.CreateForm(TFormDMUser, FormDMUser);
        Application.CreateForm(TFormDMWork, FormDMWork);
      // login show
      FormLogin := TFormLogin.Create(Application);
      FormLogin.ShowModal;
      FormLogin.Hide;
      FormLogin.Update;  FormSPlash.Update;  //check user
      if  FormLogin.gIsInvalidUser then
      begin
        Application.CreateForm(TFormMain, FormMain);
      end;  FormLogin.free;  FormSplash.Hide;
      FormSplash.Free;
      Application.Run;
      

  2.   

    我暂时没有启动画面,其他我都做到了,
    登录和登录不成功显示的数据库配置窗体我用的都LoadLibrary(当然要FreeLibrary).
      

  3.   

    我是说程序的实现,比如像 hotzhu(非洲白脸)写的那样,不过 hotzhu(非洲白脸)只做了3步,缺少环境设置一步,而且最好采用我上面给出的窗体名做例程.
      

  4.   

    program Project1;uses
      Forms,
      Unit1 in 'Unit1.pas' {Form1},
      Unit2 in 'Unit2.pas' {Form2};{$R *.res}begin
      Form1:=TForm1.Create(Application);
      try
        Form1.ShowModal;//密码窗体
      finally
        Form1.Free;
      end;
      if exit=false then
        begin
          Application.CreateForm(TForm2, Form2);//主窗体
          Application.Run;
        end;
    end.procedure TForm1.FormShow(Sender: TObject);
    begin
      exit:=true;
    end;Exit是在主窗体中设的全局变量。
    通过变量来一层层控制就行了。
      

  5.   

    要了你的分!
    1: Frmflash:=Tfrmflash.Create(application);
      
      frmflash.Show;
      frmflash.Update;
      Application.Initialize;
      Application.CreateForm(TFrmMain, FrmMain);
      frmflash.Hide;
      frmflash.Free;
      Application.CreateForm(Tfrmlogin, frmlogin);
      frmlogin.showmodal;
      frmlogin.Update;
      Application.Run;
    2:begin
      t1 := TTable.create(self);
      with t1 do begin
       databasename:=edit2.text;
        tablename:= 'student';
        tabletype := ttparadox; //确定数据表名称
        with fielddefs do begin
           add('id',ftstring,6,true);
           add('name',ftstring,20,true);
           add('sex',ftstring,1,true);
           add('class',ftstring,4,false);
           add('department',ftsmallint,0,false);
           add('birthday',ftdate,0,false);
           add('native_place',ftstring,50,false);
       end;
        with IndexDefs do begin
          Clear;
          with AddIndexDef do begin
            Name := '';
            Fields := 'id';
            Options := [ixPrimary,ixunique];
          end;
        end;
       createtable;
      end;
      t1.Free;
    3:效验就不多说了!
    4:创建--
       inherited;
      if not assigned(frmclass) then
      frmclass:=Tfrmclass.Create(self);
       with frmclass do
       begin
      formstyle:=fsMDIchild;
      Show;
       end;
       最后在FREE就可以了
      

  6.   

    最关键的问题就是我不想在显示环境设置和校验用户名和口密时将MDImain主窗体显示出来,(并且不加载到内存)而是一切校验通过后再动态加载主窗体,这其中就有一个问题,我感觉只有设置MDImain以前的某个窗体为主窗体就比较好办好,但那个窗体一旦被设置为主窗体,那么就不能释放自己,只能通过Hide隐藏起来,在MDImain的退出事件中一起释放这个隐藏窗体,我就是不想这样做,让一个窗体占用资料到这个程序关闭这么长的时间.不知道大家是怎么处理的.
    对了,如果采用ADO连接sqlserver数据库和ACCESS数据,怎么让程序来获得连接成功或是失败了?
      

  7.   

    我不想做用try来返回连接失败信息,而是通过一个返回值,来自己写连接失败的例程.
      

  8.   

    如果问题回答不错,就明天早上10:00结帐.欢迎大家给我指点.
    也可以将我的论坛回答这个问题.
    http://www.51mcd.com/sanjianxia/dispbbs.asp?boardID=3&ID=285
    分同样会加上的.谢谢.