delphi登录表

时间:2013-01-21 21:15:29

标签: forms delphi login

在我的Delphi程序中,我有一个登录表单,它在创建主表单之前显示,但我面临的问题是我想登录检查以主表单处理,这意味着登录表格将使用主表格进行检查和继续,

请阅读以下评论:

  

过程LogInButtonClick(Sender:TObject);

这是TLoginForm代码(from delphi.about.com):

    unit login;

 interface

 uses
   Windows, Messages, SysUtils, Variants, Classes,
   Graphics, Controls, Forms, Dialogs, StdCtrls;

 type
   TLoginForm = class(TForm)
     LogInButton: TButton;
     pwdLabel: TLabel;
     passwordEdit: TEdit;
     procedure LogInButtonClick(Sender: TObject) ;
   public
     class function Execute : boolean;
   end;

 implementation
 {$R *.dfm}

 class function TLoginForm.Execute: boolean;
 begin
   with TLoginForm.Create(nil) do
   try
     Result := ShowModal = mrOk;
   finally
     Free;
   end;
 end;

 procedure TLoginForm.LogInButtonClick(Sender: TObject) ;
 begin
   if passwordEdit.Text = 'delphi' then
   {
   Here how it's possible to use :
    if MainForm.text=passwordEdit.Text then 
    ModalResult := mrOK
    }

     ModalResult := mrOK
   else
     ModalResult := mrAbort;
 end;

 end. 

这是主程序初始化流程:

program PasswordApp;

 uses
   Forms,
   main in 'main.pas' {MainForm},
   login in 'login.pas' {LoginForm};

 {$R *.res}

 begin
   if TLoginForm.Execute then
   begin
     Application.Initialize;
     Application.CreateForm(TMainForm, MainForm) ;
     Application.Run;
   end
   else
   begin
     Application.MessageBox('You are not authorized to use the application. The password is "delphi".', 'Password Protected Delphi application') ;
   end;
 end.

谢谢

3 个答案:

答案 0 :(得分:10)

如果您需要首先创建主表单,请先创建它:

begin
  Application.Initialize;
  Application.CreateForm(TMainForm, MainForm);//created, but not shown
  if TLoginForm.Execute then//now the login form can refer to the main form
    Application.Run//this shows the main form
  else
    Application.MessageBox('....');
end;

这是你提出的问题的直接和天真的答案。更广泛地思考,我鼓励您将登录测试移出主表单。把它放在任何更高级代码需要使用的地方。您目前正在努力的设计具有不健康的耦合。

答案 1 :(得分:4)

我通常是从OnCreate的{​​{1}}执行此操作;或者来自MainForm的{​​{1}},如果有的话。例如:

OnCreate

我不喜欢过多地弄乱DataModule文件。这样做,以正确的顺序显示表单,如果TMainForm.OnCreate(Sender: TObject); var F: TLoginForm; begin F := TLoginForm.Create(Self); try F.ShowModal; finally F.Free; end; end; 是由Delphi自动创建的,则DPR变量已经分配,​​并且在TMainForm触发时可以使用;

PS:访问MainForm变量实际上是糟糕的设计,但如果你需要它就可以了。

答案 2 :(得分:0)

David's answer类似,但行为略有不同,我之前回答this solution,它能够在应用程序的生命周期内重用。