Изначально открывается форма с вводом логина, пароля и пути к БД. Нужно при нажатии на кнопочку открыть новую форму и закрыть эту убрав из памяти. Получется только следующим образом:
procedure TForm1.ButtonOKClick(Sender: TObject);
begin
Form2.ShowModal;
Form1.Close;
end;
но здесь я полагаю форма из памяти не убирается.
Пробовал так:
procedure TForm1.ButtonOKClick(Sender: TObject);
begin
Form2.ShowModal;
Form1.Free;
end;
но потом при закрытии Form2 вылазит ошибка, наверное из-за того что не найдена форма вызвавшая процедуру Form2.ShowModal т.е. Form1.
Как победить грамотно?
Очень похоже на попытку удаления гланд через анус.
Из написанного не понятно из какой формы какая вызывается и какую форму следует разрушить.
Во-первых, нужно убедиться что форма не создается автоматически при старте приложения.
Во-вторых, очень сильно рекомендую забыть о глобальных переменных Form1 и Form2 -- это зло.
В-третьих, самый простой способ вызова и разрушения формы
program Project1;
uses
Forms,
Controls,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.RES}
begin
Application.Initialize;
with TForm2.Create(Application) do
try
if ShowModal = mrOK then
// делаем полезную работу, например
begin
Application.CreateForm(TForm1, Form1);
Application.Run;
end
else
// делаем работу при других ModalResult, например
Application.Terminate
finally
Free
end;
end.
На форме Form2 нужно при нажатии кнопки OK выполнить необходимую работу, например, проверить правильность имени и пароля, путей и т.д. и вернуть ModalResult := mrOK, для для кнопки отмена можно сразу установить ModalResult в mrCancel.
Можно так же создать обработчик OnClose
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree
end;
В указанном случае форма будет разрушаться после вызова Close;