Как закрыть окно, не закрывая всю программу? - PullRequest
0 голосов
/ 09 января 2012

в моем приложении у меня есть две формы, скажем, 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;

Thankyou

Ответы [ 2 ]

10 голосов
/ 09 января 2012

Не делайте 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.

Вы также можете создать свой собственный главный цикл приложения, который проверяет, открываются ли определенные формы, но это немного сложнее и немногоболее хрупкий, чем решение выше.

6 голосов
/ 09 января 2012

Вы можете получить здесь исходный код превосходной статьи Показать диалог входа в систему / пароль перед созданием основной формы с помощью 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.
...