0

在我的应用程序中,我有两种形式,比如说 LoginForm 和 AccountForm

LoginForm 被设置为主表单,它是用户能够登录到他的帐户时的表单(两个 TEdits 和登录按钮)。当用户键入他的登录详细信息并连接时,将打开一个新表单,即 AccountForm。

如何在不关闭整个应用程序的情况下在登录成功时关闭 LoginForm?或者在这种语言中如何使用下面的代码只关闭登录表单而不关闭应用程序。

if (not IncludeForm.sqlquery1.IsEmpty) and (isblacklisted='0') and (isactivated='1')  then
begin // Login Successful *** Show the account window
AccountForm.Show;
LoginFrom.Close; // <----The problem is in this line, using this line causes the whole application to close***}
end;

谢谢

4

2 回答 2

10

不要让 LoginForm 成为主要表单。如果您使用 LoginForm := TLoginForm.Create而不是创建登录Application.CreateForm表单,该表单将不会被设置为应用程序主表单。使用 Application.CreateForm 创建的第一个表单将是主表单。您可以编辑您的项目文件 (.dpr) 来更改它,如下所示:

program YourApp;

uses
  Forms,
  fLoginForm in 'fLoginForm.pas' {LoginForm},
  fMainForm in 'fMainForm.pas' {MainForm};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  with TLoginForm.Create(nil) do
  try
    ShowModal;
  finally
    Free;
  end;
  Application.CreateForm(TMainForm, MainForm);
  Application.Run;
end.

您还可以创建自己的应用程序主循环来检查正在打开的特定表单,但这比上面的解决方案更难,更脆弱。

于 2012-01-09T17:59:49.070 回答
6

您可以在此处获取Zarko Gajic 创建主窗体之前显示登录/密码对话框的优秀文章的源代码。

摘抄:

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.
于 2012-01-09T18:49:47.223 回答