在dpr单元中 
  Application.Initialize;  frmSplash:=TfrmSplash.Create(Application);
  frmSplash.Show;
  frmSplash.Update;  LoginForm := TLoginForm.Create(Application);
  LoginForm.Show;
  frmSplash.Hide;
  frmSplash.Free;  Application.Run;

解决方案 »

  1.   

    中 
      Application.Initialize;  frmSplash:=TfrmSplash.Create(Application);
      frmSplash.Show;
      frmSplash.Update;  LoginForm := TLoginForm.Create(Application);
      LoginForm.Show;
      frmSplash.Hide;
      frmSplash.Free;  Application.Run;
      

  2.   

    Application.Initialize;  frmSplash:=TfrmSplash.Create(Application);
      frmSplash.Show;
      frmSplash.Update;  LoginForm := TLoginForm.Create(Application);
      LoginForm.Show;
      frmSplash.Hide;
      frmSplash.Free;  Application.Run;
    可以的
     你可一让一个From响应另一个事件,
    提前调用另一个From,不就解决了吗?
      

  3.   

    //在工程中
     Application.Initialize;
     Application.CreateForm(TfrmLogin, frmLogin);
     frmLogin.showmodal;
     if frmLogin.ModalResult=1 then
     begin
       frmLogin.Free;
       Application.CreateForm(Tfrmmain, frmmain);
     end
     else
        frmLogin.Free;
     Application.Run;
      

  4.   

    1、主窗体是另外的东西,它是用户进行操作的那个界面。
    2、在主窗体的OnShow事件中写代码。
    3、显示Login窗口的代码应写(口令输入窗体应该使用模态方式打开)
       if Loging.ShowModal = mrOk then
         //用户名和口令已通过校验,进入主窗体
       else begin
         Close; //用户按取消或口令输入不正确
         Application.Trimalate;
       end;
    4、TLogin窗口的“确定”按钮中检测用户名和口令,如正确返回mrOk;
       “取消”按钮返回 ModalResult := mrCancel;
       或者直接设置它的Kind = mrCancel
      

  5.   

    program Project1;uses
      Forms,
      UnitDM in 'UnitDM.pas' {DM};
      Unit2 in 'Unit2.pas' {Formlogin};
      Unit1 in 'Unit1.pas' {Form1};{$R *.res}begin
      Application.Initialize;
      Application.CreateForm(TDM, DM);//CreateLogin是显示登录筐的函数,在登录筐的unit中定义
    //语句是
    //Result := false;
    //Formlogin := TFormLogin.Create(nil);
    //FormLogin.ShowModel;
    //Result := FormLogin.LoginSucc;
    //FormLogin.free;
    ////////////////////////////////////////  if CreateLogin then   
      begin
      Application.CreateForm(TForm1, Form1);
      Application.Run   else
      Application.close;
    end.
      

  6.   

    呵呵,以下代码在你在可能是不能直接运行的,但你可以从中发现我所使用的方法, 即:
    1.单独的登录窗体, 完成登录功能, 其对外只提供一个接口函数:
      function Login(var aUserID: String) : Boolean;
      外部只要调用此函数即可完成登录2.应用程序的DPR文件中调用这个函数,完成登录,成功则进入主循环,否则,退出.3.如果觉得方法还不错,就给分吧!!
    unit uLogin;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Buttons, uPublic_Rights;type
      TfrmLogin = class(TForm)
        Label1: TLabel;
        Label2: TLabel;
        edUserID: TEdit;
        edPassword: TEdit;
        btnOK: TBitBtn;
        btnCancel: TBitBtn;
        procedure edUserIDKeyPress(Sender: TObject; var Key: Char);
        procedure edPasswordKeyPress(Sender: TObject; var Key: Char);
        procedure btnOKClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        m_RetryNum : Integer;
        { Private declarations }
      public
        { Public declarations }
      end;function Login(var aUserID: String) : Boolean;implementation{$R *.DFM}function Login(var aUserID: String) : Boolean;
    var
      frmLogin: TfrmLogin;
    begin
      Result := False;
      aUserID := '';
      frmLogin := TfrmLogin.Create(nil);
      try
        if frmLogin.ShowModal = mrOk then
        begin
          Result := True;
          aUserID := frmLogin.edUserID.Text;
        end;
      finally
        FreeAndNil(frmLogin);
      end;
    end;procedure TfrmLogin.FormCreate(Sender: TObject);
    begin
      m_RetryNum := 1;
    end;procedure TfrmLogin.edUserIDKeyPress(Sender: TObject; var Key: Char);
    begin
      if Key = #13 then edPassword.SetFocus();
    end;procedure TfrmLogin.edPasswordKeyPress(Sender: TObject; var Key: Char);
    begin
      if Key = #13 then btnOK.Click;
    end;procedure TfrmLogin.btnOKClick(Sender: TObject);
    var
      aUserRights: TUserRights;
    begin
      ModalResult := mrNone;
      if edUserID.Text = '' then
      begin
        Application.MessageBox('您没有输入用户代号,请你输入后再试!','提示',mb_OK + MB_ICONINFORMATION);
        edUserID.SetFocus();
        exit;
      end;
      aUserRights := TUserRights.Create(edUserID.Text);
      try
        if not aUserRights.IsValidUser(edPassword.Text) then
        begin
          Inc(m_RetryNum);
          if m_RetryNum > 3 then
          begin
             ModalResult := mrNo;
             Application.MessageBox('对不起,您已三次输错用户代号或密码.系统将退出.','提示',mb_OK + MB_ICONSTOP);
          end  else
          begin
            Application.MessageBox('对不起,您输入的用户代号或密码有误,请您重新输入.','提示',mb_OK + MB_ICONWARNING);
            edUserID.SetFocus();
          end;
        end else  ModalResult := mrOK;
      finally
        FreeAndNil(aUserRights);
      end;
    end;//DPR文件
    program RecordClient;uses
      Windows,
      Forms,
      uMain in 'uMain.pas' {frmMain},
      uLogin in 'QXGL\uLogin.pas' {frmLogin},
      .......var
      aUserID: String;
      bLogined: Boolean;
    begin  Application.Initialize;
      Application.Title := 'XXXX';
      bLogined := False;  if InitADOConnection() then  //如果连接数据库成功则登录,否则退出
      begin
         bLogined := Login(aUserID);
      end else
      begin
        Application.MessageBox('无法连接到数据库,请与管理员联系. 系统将退出.', '提示', MB_OK+MB_ICONSTOP);
      end;  //如果登录成功,则进入系统,否则程序结束
      if bLogined then
      begin
        ;
        // 1.建立主窗体
        Application.CreateForm(TfrmMain, frmMain);
        
        ........    // 6.进入消息循环
        Application.Run;
      end;end.
      

  7.   

    weizhi(行者):不错,但是我还有两个问题,
    首先你这个工程有没有设置mainform?如果说设置了,那么这个主form在验证完成后你怎么处理?(请你注意,我这里需要实现的是一个form分流问题,就是说在验证完成后我也不知道会进入哪个form,比如如果权限是"超级管理员"进入form1,“管理员”进入form2,“一般用户”进入from3,而不是单纯的说验证通过后就继续主form).另外
     Application.Initialize;
      Application.Title := 'XXXX';
      bLogined := False;
    这里的两个变量,是否就是全局变量?
      

  8.   

    zx_wang(wzx)ggdw(我是高老师) 你们给的方法我先试过,其实也是那个问题---到底谁是main form,如果能事先确定,那我也不用问这个问题了!因为我就这几天看了看delphi,也不知道有没有可能动态的指定某个窗体为main form?
      

  9.   

    主窗体是第一个用Application.CreateForm创建的窗体,创建出来之后就不能更改主窗体了。
      

  10.   

    在工程文件中
    var 
      s :string
      b :boolean;
    begin
      s :='password';
      b  := InputQuery('Input Box', 'Prompt', s) 
      if b then
      begin
        Application.CreateForm(TfrmMain, frmMain);
        .....
       ......run  end;
    end;
      

  11.   

    主窗体是第一个用Application.Create 创建的窗体类,
    DM都不能作为主窗体。你在Application.Create 之前可以用 TFrom.Create
    创建窗体,而不作为主窗体。
      

  12.   

    呵呵,其实技巧是在这里: 你可以改成如下形式://如果登录成功,则进入系统,否则程序结束
      if bLogined then
      begin
        ;
       
        // 1.建立主窗体
        if aUserID= 'AAA' then  Application.CreateForm(TfrmMain_AAA, frmMain)
       else if aUserID = 'BBB' then Application.CreateForm(TfrmMain_BBB, frmMain) 
       else if aUserID = 'CCC' then .......    ........    // 6.进入消息循环
        Application.Run;
      end;end.
    也就是说,你用Application.CreateForm()创建的第一个窗体将成为主窗体,你可以不用管Project Options中设定的主窗体!Delphi以你的Dpr程序为准!另外,如果执行了Application.Run;程序才会进入主线程的消息循环中,如果不执行这个,程序就会直接结束!呵呵,祝你进步!!