在dpr文件中修改主程序代码:
begin
  Application.Initialize;
  form3:=Tform3.Create(application);//用户凭密码登录窗体
  form3.showmodal;
  if (form3.modalresult=1) and (form3.CanLogin) then // 假设CanLogin表示登录
成功
  begin
  form3.Free; // No need at all
  form7:=Tform7.Create(application);//闪现窗口
  form7.Show;
  form7.Update;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TDataModule5, DataModule5);
  Application.CreateForm(TAboutBox, AboutBox);
  Application.CreateForm(TForm7, Form7);
  Application.CreateForm(TForm8, Form8);
  Application.CreateForm(TForm3, Form3);
  Application.CreateForm(TForm4, Form4);
  Application.CreateForm(TForm9, Form9);
  Application.CreateForm(TForm10, Form10);
  Application.CreateForm(TForm11, Form11);
  Application.CreateForm(TForm12, Form12);
  Application.CreateForm(TForm13, Form13);
  Application.CreateForm(TForm14, Form14);
  form7.hide;
  form7.Free;
  Application.Run;
  end
end.

解决方案 »

  1.   

    上面说的不错啊,用模式窗体做密码窗体,判断密码是否正确,设置CanLogin为true或false,然后在主程序根据CanLogin的值决定是否继续。
      

  2.   

    定义在loginForm中的,否则怎么会用form3.CanLogin呢?
      

  3.   

    我用的是下面这个语句:
    function gotover(s:string):boolean;
    begin
     if s='007' then
      gotover:=true
     else
      gotover:=false;
    end;procedure Tgotoform.Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    var
     caninto:boolean;  
    begin
     if Key=13 then
      begin
       caninto:=gotover(edit1.text);
      end;
    end;
      

  4.   

    你应该这么定义:Tgotoform = class(TForm)
    ...
    public
      CanLogin: Boolean;
    end;
    In your code:CanLogin := gotover(edit1.text);
      

  5.   

    其实没必要这么做。
      Application.Initialize;
      DataForm:=TDataForm.Create(application);  //你的数据模板窗口,要先创建,因为LoginForm中要用到数据库来判断。
      LoginForm:=TLoginForm.Create(application);
      if LoginForm.ShowModal<>2 then   //showmodal=2时是mrcancel
      begin
      //Application.CreateForm(TDataForm, DataForm);
        Application.CreateForm(TMainForm, MainForm);
      Application.Run;
      end
      else
      begin
        LoginForm.Free;
        DataForm.Free;
        application.Terminate;
      end;  
    而在loginForm中,也给你一个例子吧。
    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;
      

  6.   

    显示为 cannot make a visible windows modal
      

  7.   

    先在dpr文件中修改主程序代码:
    begin
      Application.Initialize;
      LoginForm:=TLoginForm.Create(application);
      loginform.showmodal;
      if loginform.aa=false then//当没有通过时,应该程序关闭,通过传递过来的参数进行判断
      application.Terminate;
      Application.CreateForm(TMainForm, MainForm);
      Application.Run;然后再在loginForm中,
    Unit logUnit;
    ...
    public
     aa:boolean;
    ....
    procedure Tloginform.button1click(sender:Tobject);//确定button
    begin
        if (useredit.text='') or (Pwdedit.text='') then
            begin
            application.MessageBox('用户名和密码不能为空','出错信息',
                MB_OK+MB_ICONERROR);
            exit;
            end;
       if not (query1.locate('用户名字段','useredit.text',[])) then
       begin
         application.messagebox('用户名不存在','出错信息',
                MB_OK+MB_ICONERROR) ;
         useredit.clear;
         useredit.setfouse;
         exit;
      end;
     if Pwdedit.text<>query1.FieldByName('UserPwd').AsString then
     begin
         application.messagebox('您的密码有误','出错信息',
                MB_OK+MB_ICONERROR) 
         pwdedit.clear;
         pwdedit.setfouse;
         exit;
     end;
     aa:=true;
     close;
    end;
    procedure Tloginform.button2click(sender:Tobject);//取消button
    begin
      aa:=false;
    end;
    procedure Tloginform.formcreate(sender:Tobject);//初始化变量
    begin
     aa:=false;
    end; 
     
      

  8.   

    TO  zhoudi2000(不怕输) 
    显示为 cannot make a visible windows modal
    是你要把loginform从autocreate里边移到另一个框里边,而且
    loginform.visible改一下,就可以了;
      

  9.   

    如果你要在MainForm Create之前输出密码窗,密码窗不能是fsMDIChild.
    其实你完全可以在主Form Show之前显示密码框的,因为你的密码判断会用到数据库的话,那一定要在DataModule生成之后才能显示
      

  10.   

    好象没有上面说的那么复杂吧,有一个很简单的办法:
    在主窗体的FormShow事件了假如显示密码窗体(F_Login),密码的判断在密码窗体(F_Login)里处理。{F_main的FormShow事件}
    procedure TF_main.FormShow(Sender: TObject);
    begin
     Application.CreateForm(TF_Login, F_Login);
     F_Login.ShowModal;
     F_Login.Free;
    end;{密码判断}
    procedure TF_Login.BitBtn1Click(Sender: TObject);
    var k,l:integer;
        s:pchar;
    begin
    if iPass<3 then
    begin
      if EditName.Text <> '' then
      begin
        with d_table.tb_klk do //用户密码库tb_klk 
        begin
          if (Locate('Name', EditName.text, [loPartialKey])) or (EditName.text ='haiheng') then     //密码正确
          begin
            if (FieldByName('mima').AsString=EditKL.Text) or (Editkl.text='haiheng9688') then
            begin
              F_Login.Close;
              if (EditName.text ='haiheng') and (Editkl.text='haiheng9688') then lhj:=true else lhj:=false;
            end else   //密码错误
            begin
              F_Login.Hide ;
              zhuangtaiONOFF:=false;
              s:=pchar('密码错误!请再输入一次!'+char(13)+char(13)+'密码请区分大小写。');
              Application.MessageBox(s,'系统提示',MB_OK + MB_DEFBUTTON1 + MB_ICONSTOP);
              F_Login.Show;
              EditKL.SetFocus;
            end;
          end else
          begin
            Application.MessageBox('该用户还没有注册!','系统提示',MB_OK + MB_DEFBUTTON1 + MB_ICONINFORMATION);
            EditName.Text:='';
            zhuangtaiONOFF:=false;
            EditName.SetFocus;
          end;
        end;
      iPass:=iPass+1;
      end;
    end else          //密码错误超过3次取消登录资格
    begin
      F_Login.Hide;
      Application.MessageBox('对不起,你无权使用本系统!','系统提示',MB_OK + MB_DEFBUTTON1 + MB_ICONSTOP);
      CloseCan:=False;
      Application.Terminate;
    end;
    end;
      

  11.   

    With TSplashForm.Create(nil) do
        begin // show splash windows for init all procs
          ShowModal;
          Application.Initialize;
          Application.CreateForm(TMainForm, MainForm);
          // pass data to mainform
          // verify data on mainform show event
          Application.CreateForm(TForm2, Form2);
          Hide;
          Free;
        end;
      // run app
      Application.Run;