请各位帮忙!!
  我想做一个登录界面,Form1为主窗体,login为登录窗体,我是不是在主窗体的FormCreate事件中动态创建Login登录窗口? 用ShowModal显示它,成功登录后,不能关闭登录窗口!
 请帮忙较正!!!! 或请另给方法!!

解决方案 »

  1.   

    比较常规的做法应该是在工程文件中直接添加,好象Splash窗口那样!首先在工程文件中如下编写....
    var
      vError:String;
      vIsExit:Boolean;
    ....
      //登录验证
      vErrorStr:=LoginFrm.CheckUserLogin(vIsExit);  //假设登陆窗体单元为LoginFrm,并且在登陆窗体单元中定义一个例程CheckUserLogin方法
      if vErrorStr<>'' then  //vErrorStr为空表明调用登陆窗体成功!
      begin
        Application.MessageBox(PChar(vErrorStr),'错误',$00000010 + $00000000);
        Application.Terminate ;
      end;
      if vIsExit then  //vIsExit为True表示用户关闭了登陆窗体
        Application.Terminate
      else
      begin
        Application.CreateForm(TMainForm, MainForm);
        Application.Run;
      end;  
    ....在登陆窗体单元中定义的CheckUserLogin例程:function CheckUserLogin(var oIsExit:Boolean):String;  //带一变参
    var
      vErrStr:String;
    begin
      vErrStr:='';
      oIsExit:=False;
      try
        with TLoginForm.Create(Application) do
          try
            if IsAbortResult(ShowModal) then  //判断关闭方式
              oIsExit:=True;  
          finally
            Free;
          end;
      except
        vErrStr:='调用身份验证错误.';
      end;
      Result:=vErrStr;
    end;------------------------------------------------------------------------
    这种使用前后台函数的方法的唯一好处就是功能划分严格!
      

  2.   

    program ProjectName;  //假设你的项目文件名为ProjectNameuses
      ....
      LoginFrm in '..\LoginFrm.pas' {LoginForm},  //这里的路径自己指定!
      ....
      

  3.   

    谢谢你的回复,
    按你的做了,但在项目文件中系统不能找到登录窗口中的Form7.CheckUserLogin(vIsExit); 事件,请问该如何在项目文件中声明这个事件?---------------------------------------------------------------------我第一个回复中说了,CheckUserLogin这个函数是不属于任何类的(是个例程,Delphi中不属于任何类的单独过程或函数统称为例程!),可以在LoginFrm单元的类型申明中进行,例如放到TLoginForm的类申明之后,如下:unit LoginFrm;interfaceuses
      Windows, Messages, SysUtils, ....;type
      TLoginForm = class(TForm)
        ....
      private
        { Private declarations }
      public
        { Public declarations }
      end;  function CheckUserLogin(var oIsExit:Boolean):String;  //在这里申明........
      

  4.   

    你可以在主工程单元文件中(通过project 的 view source 中打开)  application.run前创建登陆窗体,然后释放窗体。
      

  5.   

    我在工程文件中application.run之前创建、显示登录窗体
    也有一种是在主窗体的onshow中写,我两种都用,适时而定
      

  6.   

    我是按照你的要求做的,但在编译时有问题:请你查错:问题标记////////////
    program HKSJ_SMS;
    uses  Forms,
      terminater in 'terminater.pas' {Form1}, 
      login in 'login.pas' {Form7};    
    var
      vErrorStr:String;
      vIsExit:Boolean;
    {$R *.res}
    begin
      Application.Initialize;
      Application.Title := '平台';
      vErrorStr:=Form7.CheckUserLogin(vIsExit); 
     ////////////此为登录窗口并在登录窗口中已声明了Form7.CheckUserLogin(vIsExit);但系统编译时出现这样的错误:[Error] HKSJ_SMS.dpr(40): Undeclared identifier: 'CheckUserLogin' 就这一句!是不是要在这声明。请指教!  if vErrorStr<>'' then  //vErrorStr为空表明调用登陆窗体成功!
      begin
        Application.MessageBox(PChar(vErrorStr),'错误',$00000010 + $00000000);
        Application.Terminate ;
      end;   if vIsExit then  //vIsExit为True表示用户关闭了登陆窗体
        Application.Terminate
      else
      begin 
         Application.CreateForm(TForm1, Form1);//主窗口
        Application.Run;
      end;    end.
      

  7.   

    我说了,函数CheckUserLogin不是登陆窗体类的方法,你没有看我的登陆窗体单元的申明吗?那是个单独的函数!
      

  8.   

    vErrorStr:=Form7.CheckUserLogin(vIsExit); 改成vErrorStr:=Login.CheckUserLogin(vIsExit);   //既然我说了这个函数是个例程,所以它不属于任何类,而你这里却用类限定它,肯定是要出错的。我的源程序可不是用类限定的,而是用单元文件名来限定的哦!呵呵.........
      

  9.   

    FrameSniper老兄,按你的改了,还是不行,请烦劳给我一个完整的例子吧!!
    感激不尽!!
      

  10.   

    工程文件代码:program Project1;uses
      Forms,
      MainFrm in 'MainFrm.pas' {MainForm},
      LoginFrm in '..\LoginFrm.pas' {LoginForm},{$R *.res}var
      vErrorStr:String;
      vIsExit:Boolean;begin
      Application.Initialize;
      //登录验证
      vErrorStr:=LoginFrm.CheckUserLogin(vIsExit);
      if vErrorStr<>'' then
      begin
        Application.MessageBox(PChar(vErrorStr),'错误',$00000010 + $00000000);
        Application.Terminate ;
      end;
      if vIsExit then
        Application.Terminate
      else
      begin
        Application.CreateForm(TMainForm, MainForm);
        Application.Run;
      end;  
    end.----------------------------------------------------------------------登陆窗体单元文件代码:unit LoginFrm;interfaceuses
      ....type
      TLoginForm = class(TForm)
        Image1: TImage;
        Label1: TLabel;
        Label2: TLabel;
        Bevel1: TBevel;
        Button1: TButton;
        Edit1: TEdit;
        Edit2: TEdit;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;  function CheckUserLogin(var oIsExit:Boolean):String;var
      LoginForm: TLoginForm;implementation{$R *.dfm}function CheckUserLogin(var oIsExit:Boolean):String;
    var
      vErrStr:String;
    begin
      vErrStr:='';
      oIsExit:=False;
      try
        with TLoginForm.Create(Application) do
          try
            if IsAbortResult(ShowModal) then
              oIsExit:=True;
          finally
            Free;
          end;
      except
        vErrStr:='调用登陆窗体错误.';
      end;
      Result:=vErrStr;
    end;procedure TLoginForm.Button1Click(Sender: TObject);
    begin
      ModalResult:=mrOk;
    end;end.--------------------------------------------------------------------最后将LoginForm从你的自创建列表中去掉!
      

  11.   

    program Project1;uses
      Forms,
      Unit1 in 'Unit1.pas' {Form1},
      Unit2 in 'Unit2.pas' {Form2};{$R *.RES}begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Form2:=TForm2.create(Application);
      try
        if Form2.ShowModal = 1 then      // form2为登陆窗口
        begin
          Application.Run;
        end
        else
         Application.Terminate;
      finally
        Form2.free;
      end;
    end.