我是这么做的:
制作一个用于登陆的窗体,然后将它从工程的自启动中去掉,并在mainform中uses这个登陆窗口的文件,然后在mainform的create中调用该登陆窗口,如下:
uses
   LoginForm;procedure TFormMain.OnCreate(...)
var
   FormLogin:TFormLogin
begin
   FormLogin:=TFormLogin.Create(Application);//或者是
                            //Application.Handle,记不清了。
   FormLogin.ShowModal;
   if FormLogin.ModalResult<>mrOK then begin
      Application.Terminate;
      exit;
   end;
   //以下正常登陆。
end;

解决方案 »

  1.   

    补充一下,具体的登陆口令判断等,在formlogin中做,比如读注册表等,一旦口令正确,就用命令ModalResult=mrOK;Hide;来关闭本窗口。
      

  2.   

    我是这样做的,不知道对不对,在mainform的onactive事件中写代码
    但要加一个标志位,如果是第一次显示mainform的话,启动login,
    但如果是第二次以上的话,就不显示(因为onactive会经常被触发)
      

  3.   

    我是这么做的,也不知道合不合理
     工程文件: 
     Application.Initialize;
      SplashForm:=TSplashForm.Create(Application);
      SplashForm.Show;
      SplashForm.Update;
      while  SplashForm.Timer1.Enabled do
      Application.ProcessMessages;
      Application.CreateForm(TMainForm, MainForm);
      Application.CreateForm(TAboutBox, AboutBox);
      Application.CreateForm(TLoginForm, LoginForm); 
      SplashForm.Hide;
      SplashForm.Close;
      Application.Run;
    在启动时会先启动画面,然后启动登录框,但首先要设置MainForm中的各种按钮,菜单的Enable:=False.
    登录成功后在Enable:=True;
      

  4.   

    在主窗体的create事件中用showmodal显示登陆窗口,在主窗体中设置全局变量,用来记录是否正确登陆。在登陆窗口中判断好是否正确登陆,给主窗体的全局变量赋值,如果是“取消”也赋成假。在主窗体中获得全局变量的值,如果是假就使用Application.terminate结束程序。
      

  5.   

    Application.Initialize();
    Application.CreateForm(TForm1,  Form1);
    Application.ShowMainForm:=false;//在此加一条语句
    Application.CreateForm(TForm2,  Form2);
    Application.Run();
     
    注意:
    主Form为:Form1
    登录Form为:Form2
    确保主Form的Visible属性为false,登录Form的Visible为true.
      

  6.   

    在工程文件中: 
     Application.Initialize;
      DataForm:=TDataForm.Create(application);
      LoginForm:=TLoginForm.Create(application);
      if LoginForm.ShowModal<>2 then
      begin
        Application.CreateForm(TMainForm, MainForm);
        Application.CreateForm(TAboutBoxForm, AboutBoxForm);
      end
      else
      begin
        LoginForm.Free;
        DataForm.Free;
        application.Terminate;
      end;  在LoginForm中判断,干脆都给你写出来吧procedure TLoginForm.BtnOkClick(Sender: TObject);
    var
        AAdminUser,AUserPwd:string;
    begin
        AAdminUser:=ComUser.Text;
        AUserPwd:=trim(EdtPwd.Text);
        if (AAdminUser='') or (AUserPwd='') then
            application.MessageBox('用户名和密码不能为空','出错信息',
                MB_OK+MB_ICONERROR)
        else if DataForm.AdminUser.Locate('AdminUser',AAdminUser,[]) then
            if AUserPwd=DataForm.AdminUser.FieldByName('UserPwd').AsString then
                ModalResult:=mrOK
            else
            begin
                application.MessageBox('密码错误!','出错提示',MB_OK+MB_ICONERROR);
                EdtPwd.Text:='';
            end
        else
            application.MessageBox('用户不存在','出错提示',MB_OK+MB_ICONERROR);
    end;
      

  7.   

    直接在主窗体的onactive事件中编写调用登陆窗体的代码不就ok了!
      

  8.   

    在主窗体的formshow事件中
    logonfrm:=Tlogonfrm.create(application);
    logonfrm.showmodal;
    if not (ModalResult=mrok)  then exit;
    logonfrm.free;
    logonfrm:=nil;
    我就是这么做的
      

  9.   

    我是这么做的:首先将登录窗体从自动创建中去掉,先在项目单元中创建主创体,然后是登录窗体,登录为模态窗体,在登录窗体中设置标志位,当用户关闭或确认是,在项目单元(.dpr)对标志位进行判断,决定程序运行还是退出
      

  10.   

    先在主窗体的OnCreate事件中设置一变量值,然后在OnActive事件中显示注册窗口;实现如下:var
      LoginFlag: Boolean;
    .......TForm1.OnCreate(Sender: TObject);
    begin
      LoginFlag := true;
    end;TForm1.OnActive(Sender: TObject);
    begin
      if LoginFlag then begin
        LoginFlag := false;
        Form2 := TForm2.Create(Self);
        //这里在注册窗口中进行验证的方法
        if Form2.ShowModal <> mrOk then begin
          Form2.free; 
          halt; //如果不正确,退出程序     
        end else
          Form2.free; //正确则释放注册窗口
      end;
    end;好了,给我分吧
      

  11.   

    如大家所说当你的窗体显示后直接调用登陆窗口的ShowModal