我有两个窗体form1 ,form2.form2是主窗体,form1是登录窗体在工程启动的时候我把两个同时运行并设FORM2为主窗体
并在application.createform(Tform2,form2);
application.createform(Tform1,form1);
login_fm.ShowModal;
application.run;
可运行form1时,就算密码错误还是启动主窗体!!!form1如下
procedure TLogin_fr.BitBtn1Click(Sender: TObject);
begin
       db_main.Table_login.open;
    try      if trim(edit1.Text)='' then
        begin
           application.MessageBox('请输入账号!','提示',mb_ok);
           edit1.SetFocus;
           exit;
        end;       if db_main.Table_login.Locate('loginName',edit1.Text, [loCaseInsensitive])=false then
          begin
           application.MessageBox('你的账号不正确,请重新登录!!!','错误',mb_ok);
           edit1.SetFocus;
           exit;
          end;       if db_main.Table_login.FieldByName('pwd').AsString<>trim(edit2.text) then
         begin
            application.MessageBox('你的密码不正确,请重新登录!!!','错误',mb_ok);
            edit2.SetFocus;
            exit;
         end
       else
         begin
             Application.CreateForm(TMain_fr, main_fr);
             //enablewindow(handle,false);//窗口一不可用
             main_fr.Show;         end;
       db_main.Table_login.Close;
    finally
       db_main.Table_login.Close;
       //application.MessageBox('数据出错,系统将关闭!','错误',mb_ok);
       //application.Terminate;
    end;
end;

解决方案 »

  1.   

    if login_fm.ShowModal= idok then
    begin
     application.createform(Tform2,form2);
     application.createform(Tform1,form1);
    end;
    application.run;
      

  2.   


    搜搜贴子多了.Dpr :Application.Initialize;
      Application.CreateForm(TfrmMain, frmMain);
      Sleep(500);
      with TfrmLogin.Create(Application) do
      begin // 校验成功返回  ModalResult := 1;否则 ModalResult := 2;
        ShowModal;
        if ModalResult = 2 then 
        begin
          Halt;
        end
        else if ModalResult = 1 then
        begin
          Close;
          Application.Run;
        end;
      end; 
    end.
      

  3.   

    呵呵,楼上的代码没有错,但贴主的登陆窗体的代码还要修改一下,并且要返回modalresult的值,否则,嘿嘿.
      

  4.   

    在登录窗体里写
    procedure TFormpassword.FormCloseQuery(Sender: TObject;
      var CanClose: Boolean);
    begin
      if ynjcpass='y' then
         Canclose:=true else
         Application.Terminate;
    end;
      

  5.   

    其实你应该换一种方式更好一些
    你定义一个变量来记录用户最多只能试三次密码不正确就关掉程序
    如果正确你就close登录界面就ok
    三次不正确就
    Application.Terminate;
    如果是三次以下你就
    abort
    注意,是abort一个过程
      

  6.   

    : sundayboys(sunboy) 我的窗体中的代码要如何改呢请帮我改一下行吗?
      

  7.   

    其实要改在Dpr中并不需要多大的改动;要不你试试先加载 Form1 ,然后在 Form1中条件加载 Form2(Options 中Form1设为主窗体)
    -------------------------------------------------------form2是主窗体,form1是登录窗体//application.createform(Tform2,form2);
    application.createform(Tform1,form1);
    Form1.Show;
    application.run;form1如下procedure TLogin_fr.BitBtn1Click(Sender: TObject);
    begin
           db_main.Table_login.open;
        try
          if trim(edit1.Text)='' then
            begin
               application.MessageBox('请输入账号!','提示',mb_ok);
               edit1.SetFocus;
               exit;
            end;       if db_main.Table_login.Locate('loginName',edit1.Text, [loCaseInsensitive])=false then
              begin
               application.MessageBox('你的账号不正确,请重新登录!!!','错误',mb_ok);
               edit1.SetFocus;
               exit;
              end;       if db_main.Table_login.FieldByName('pwd').AsString<>trim(edit2.text) then
             begin
                application.MessageBox('你的密码不正确,请重新登录!!!','错误',mb_ok);
                edit2.SetFocus;
                exit;
             end
           else
             begin
                 Application.CreateForm(TMain_fr, main_fr); // main_fr : Form2 ?
                 main_fr.Show;
                 Form1.Hide ;
             end;
           db_main.Table_login.Close;
        Finally
           db_main.Table_login.Close;
        end;
    end;
      

  8.   

    我行不行就在工程中设!以form1为主窗体的话就会,出现在FORM1。FREE后,FORM2不能关闭  ,窗体关了程序还是没退出!!!
      

  9.   

    :) 生这么大气 :) OnClose 中 Application.Terminate ;可以吗 ?强制关闭一个进程可以吗 ?----------------------------
    其实要改在Dpr中并不需要多大的改动; // 觉得下面的就可以了 (Form2 主窗体)application.createform(Tform2,form2);
    with TfrmLogin.Create(Application) do
      begin // 校验成功返回  ModalResult := 1;否则 ModalResult := 2;
        ShowModal;
        if ModalResult = 2 then 
        begin
          Halt;
        end
        else if ModalResult = 1 then
        begin
          Close;
          Application.Run;
        end;
      end; form1如下procedure TLogin_fr.BitBtn1Click(Sender: TObject);
    begin
           db_main.Table_login.open;
        try
          if trim(edit1.Text)='' then
            begin
               application.MessageBox('请输入账号!','提示',mb_ok);
               edit1.SetFocus;
               exit;
            end;       if db_main.Table_login.Locate('loginName',edit1.Text, [loCaseInsensitive])=false then
              begin
               application.MessageBox('你的账号不正确,请重新登录!!!','错误',mb_ok);
               edit1.SetFocus;
               exit;
              end;       if db_main.Table_login.FieldByName('pwd').AsString<>trim(edit2.text) then
             begin
                application.MessageBox('你的密码不正确,请重新登录!!!','错误',mb_ok);
                edit2.SetFocus;
                exit;
             end
           else
             begin
               ModalResult := 1 ;
             end;
           db_main.Table_login.Close;
        Finally
           db_main.Table_login.Close;
        end;
    end;Login中:取消\退出 按钮 OnClick :  ModalResult := 2 ; 
      

  10.   

    program TelClient;uses
      Forms,
      windows,
      about in 'about.pas' {AboutForm},
      Clientvar in 'Clientvar.pas',
      FindMan in 'FindMan.pas' {FormFindMan},
      GroupMan in 'GroupMan.pas' {FormGroupMan},
      Load in 'Load.pas' {LoadForm},
      Main in 'Main.pas' {MainForm};
    {$R *.res}Var
    handle,handle1,handle2:THandle;begin
     handle1:=findwindow('TloadForm','登陆');
     handle2:=FindWindow('Tmainform','显示');
     //Application.Terminate;
     if handle1<>0 then handle:=handle1
     else handle:=handle2;
     if handle=0 then
     begin
      Application.Initialize;
      Application.Title := 'TelClient';
      LoadForm:=TLoadForm.Create(Application);
      LoadForm.ShowModal;
       if LoadForm.Loadif then
      begin
      LoadForm.Free;
      Application.CreateForm(TMainForm, MainForm);
      Application.Run;
      end;
     end
      else
      begin
       messagebox(handle,'此程序已经运行了!','提示',MB_ICONASTERISK);
       end;
    end.
      

  11.   

    注意,如果密码正确就把loadform.loadif设为true;
      

  12.   


    //drp文件
    Var
    handle,handle1,handle2:THandle;begin
     handle1:=findwindow('Tlogin_fr','登陆');
     handle2:=FindWindow('Tmain_fr','显示');
      Application.CreateForm(TDB_Main, DB_Main);
     if handle1<>0 then handle:=handle1
     else handle:=handle2;
     if handle=0 then
     begin
      Application.Initialize;
      Application.Title := 'TelClient';
      login_fr:=Tlogin_fr.Create(Application);
      login_fr.ShowModal;
       if login_fr.Loadif then
      begin
      login_fr.Free;
      Application.CreateForm(Tmain_fr, Main_fr);
      Application.Run;
      end;
     end
      else
      begin
       messagebox(handle,'此程序已经运行了!','提示',MB_ICONASTERISK);
       end;
    end.
    //login窗体
     if db_main.Table_login.Locate('loginName',edit1.Text, [loCaseInsensitive])=false then
              begin
               application.MessageBox('你的账号不正确,请重新登录!!!','错误',mb_ok);
               edit1.SetFocus;
                loadif:=false;
               exit;
              end;       if db_main.Table_login.FieldByName('pwd').AsString<>trim(edit2.text) then
             begin
                application.MessageBox('你的密码不正确,请重新登录!!!','错误',mb_ok);
                edit2.SetFocus;
                 loadif:=false;
                exit;
             end
           else
             begin
                 loadif:=true;
                 Application.CreateForm(TMain_fr, main_fr);
                 //enablewindow(handle,false);//窗口一不可用
                 main_fr.Show;         end;楼上的兄弟我按你的方法改了一下可是错误的话就直接退出了!!
    你帮我看看我的程序
      

  13.   

    对了
           if db_main.Table_login.FieldByName('pwd').AsString<>trim(edit2.text) then
             begin
                application.MessageBox('你的密码不正确,请重新登录!!!','错误',mb_ok);
                edit2.SetFocus;
                 loadif:=false;
                exit;
             end
           else
             begin
                 loadif:=true;
                 login_fr.close; 就可以了         end;
      

  14.   

    application.createform(Tform1,form1);
    application.createform(Tform2,form2);
    应该是这个顺序