需要实现:
先出现登窗体,登录正确后主窗体才可用。其他的窗体等登录完以后需要时才创建。
问题:
现在的问题是在登录窗体时输入错误的密码以后,登录窗体就消失了,主窗体就可用了,请问怎么控制???登录窗体文件========================================
unit FormLogin;
.........
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form_login: TForm_login;
  Li_Login:integer;
implementation
  Uses FormMain;
{$R *.dfm}procedure TForm_login.BitBtn1Click(Sender: TObject);
var
Js:string;
begin
if not query1.Locate('用户名;密码',vararrayof([combobox_name.Text,password.Text]),[]) then
begin
  showmessage('对不起,密码不正确,请重新输入!');
  Li_Login:=Li_Login+1;
  Password.SetFocus;
  Password.SelectAll;
  if Li_Login>=3 then
  Begin
    showmessage('尝试三次不能成功,系统自动退出!');
    close;
    application.Terminate;
    end;
 end
 else
 begin
 case query1.FieldByName('类型').AsInteger of
     0:js:='系统管理员';
     1:js:='一般用户';
     2:js:='操作员';
 end;
 Form_main.StatusBar1.Panels[0].Text:='当前用户: '+query1.fieldbyname('用户名').AsString;
 Form_main.StatusBar1.Panels[1].Text:='用户角色: '+js;
 close;
 end
         end;procedure TForm_login.FormCreate(Sender: TObject);
begin
  with query1 do begin
   close;
   sql.Clear;
   sql.Add('select * from 用户库');
   open;
   Try
     while not Eof do
     begin
      combobox_name.Items.Add(fieldbyname('用户名').AsString);
      next;
   end;
   combobox_name.ItemIndex:=0;
  finally;
    end;
   end;
  Li_Login:=0; 
end;procedure TForm_login.BitBtn2Click(Sender: TObject);
begin
  query1.Close;
  application.Terminate;
end;
procedure TForm_login.FormClose(sender:TObject; var action:TcloseAction);
begin
 action:=cafree;
 end;
procedure TForm_login.FormShow(sender:Tobject);
 begin
 password.SetFocus;
 End;end.
主窗体创建事件 ===================================
procedure TForm_main.FormCreate(Sender: TObject);
begin
  show();
  if not assigned(Form_login) then
  begin
  Form_login:=tForm_login.Create(Application);  end;
  Form_login.showmodal;
  Form_login.Free;
  Form_login:=nilend;工程文件==============================================program IEBookMIS;......{$R *.res}begin
  Application.Initialize;
  Application.CreateForm(TForm_main, Form_main);
  Application.CreateForm(TForm_login, Form_login);
  Application.Run;
end.

解决方案 »

  1.   

    直接从数据库里验证不就好了。
     end
     else
     begin
     case query1.FieldByName('类型').AsInteger of
         0:js:='系统管理员';
         1:js:='一般用户';
         2:js:='操作员';
     end;
     Form_main.StatusBar1.Panels[0].Text:='当前用户: '+query1.fieldbyname('用户名').AsString;
     Form_main.StatusBar1.Panels[1].Text:='用户角色: '+js;
     close;
     end
    那里有判断用户的密码
      

  2.   

    with DM.tbInput do
    begin
      if active then close;
      sql.clear;
      sql.text:='select UserID,username from login where (Userid='''+trim(edtuserid.text)+''')and(username='''+trim(username.text)+''')';
      open;
      if isempty then
      begin
        inc(iTimes);
        if iTimes=3 then
        begin
          MyError('您进行系统身份确认程序错误已经超过3次,本系统即将停止执行!');
          Application.Terminate;
        end;
        username.setfouce;
      end
      else
      begin
        进入主窗体!
      end;
    end;
    仅供参考!
      

  3.   

    Js:string;
    begin
    if not query1.Locate('用户名;密码',vararrayof([combobox_name.Text,password.Text]),[]) then
    begin
      showmessage('对不起,密码不正确,请重新输入!');
      Li_Login:=Li_Login+1;
      

  4.   

    用halt啊
    在project1中使用
    如果密码错误就halt;
    注意:如果用到datamodule的话先datamodule.free再halt;
      

  5.   

    登录窗体设ModalResult然后。主窗体创建事件 ===================================
    procedure TForm_main.FormCreate(Sender: TObject);
    begin
      show();
      if not assigned(Form_login) then
        Form_login:=tForm_login.Create(Application);  try
      if Form_login.showmodal<> mrOk then application.Terminate;//  Form_login.showmodal;
    finally
      Form_login.Free;
      Form_login:=nil
    end;
    end;
      

  6.   

    你的登入窗体设置成mdi子窗体了吧,procedure TForm_login.FormClose(sender:TObject; var action:TcloseAction);
    begin
     action:=cafree;
     end;
    当你密码不对时是不能阻止主窗体的创建的,因为你的登入窗口是在主窗口建立之后才出现的,所以当你关闭登入窗口时,就相当于是在mdi主窗口中关闭了一个有主窗口建立的字窗口,他自然会进入主窗体,所以你必须把登入窗体设置成普通的form模式,然后在工程文件中创建他,但是创建顺序是县创建mdi主窗体,然后在创建登入窗体,但是mdi先不要显示,在等入窗体中用户正确之后再把登入窗口关闭,mdi主窗口显示,就可以,这个问题我也弄了老长时间,你可以从网上艘以下,会找到解决办法的。。
      

  7.   

    begin
      Application.Initialize;
       Application.CreateForm(TForm1, Form1);//mdi主窗口
      Application.CreateForm(TDataModule8, DataModule8);
      Application.ShowMainForm:=false;
       form10 := Tform10.create(application);//登入窗口
       form10.Show;
       form10.edit1.SetFocus;  
      application.Run;
      end.在form10的判断用户正确中:
     Application.ShowMainForm:=true;
    form1.ShowModal;
    这样就可以了。。
      

  8.   

    工程文件中的先生成登陆窗体,然后判断登陆成功后
    将 登陆窗体.FREE 就可以了
      

  9.   

    你在判断密码输入不正确的代码段中加上EXIT;这样就不执行后面的代码了,窗体还是登陆窗体。
      

  10.   

    我们先来分析你的代码 ,找出原因,
    问题1,你的project文件中,是先创建了主窗体main。但是main的create事件里又创建了登录窗体login,接着又在project里用application创建了登录form, 重复创建
    问题2:代码本身没问题,关键是,你的登录窗口不是主窗口,你退出登录窗口之后,主窗口必然会运行,唯一的办法,就是在登录验证代码里加入一个标志,例如用登录窗口的tag值来做标志,0表示未能通过登录验证,1表示通过,这样你可以在登录窗口的close事件里写
    if tag=0 then application.terminate;修改意见,建议你把主窗体CReate事件里的代码删除,
    然后修改project项目文件
    program IEBookMIS;......{$R *.res}begin
      Application.Initialize;
      Application.CreateForm(TForm_main, Form_main);
      Application.CreateForm(TForm_login, Form_login);
      Form_login.showmodal;
      Application.Run;
    end.验证代码
    procedure TForm_login.BitBtn1Click(Sender: TObject);
    var
    Js:string;
    begin
    if not query1.Locate('用户名;密码',vararrayof([combobox_name.Text,password.Text]),[]) then
    begin
      showmessage('对不起,密码不正确,请重新输入!');
      //这个表示登录未通过 失败了
      tag:=0;
      Li_Login:=Li_Login+1;
      Password.SetFocus;
      Password.SelectAll;
      if Li_Login>=3 then
      Begin
        showmessage('尝试三次不能成功,系统自动退出!');
        close;
        application.Terminate;
        end;
     end
     else
     begin
     case query1.FieldByName('类型').AsInteger of
         0:js:='系统管理员';
         1:js:='一般用户';
         2:js:='操作员';
     end;
     //这个表示登录未通过 失败了
      tag:=1;
     Form_main.StatusBar1.Panels[0].Text:='当前用户: '+query1.fieldbyname('用户名').AsString;
     Form_main.StatusBar1.Panels[1].Text:='用户角色: '+js;
     close;
     end
             end;登录窗口的Close事件里:
    if tag=0 then Application.terminate
    else self.free;
      

  11.   

    先创建登陆窗体 如果登陆成功在创建主窗体 这是思路 具体代码如下
    Application.Initialize;
      try
        FrmLog:=TFrmLog.Create(Application);
        FrmLog.ShowModal ;
        if FrmLog.ModalResult =mrok then(登陆成功)
        begin
          Application.CreateForm(TFrmMain, FrmMain);
          FrmMain.LoadForm ;
          Application.Run;
        end
        else begin
          Application.Terminate ;
        end;
      finally
        FrmLog.Free;
        FrmLog:= nil;
      end;