Запрос пароль перед загрузкой основной формы
Хэш пароля хранится в db, пароль и имя пользователя необходимо запросить до (именно) создания основной формы. К.о. это сделать корректно? Развернутые ответы приветствуются
OnFormCreate выводим стандартный диалог ввода логина/пароля или делаем свой диалог и на тот же OnFormCreate делаем его модально. Если неправильно введены данные, то можно TApplication::Terminate() вызвать.
ишешу строчку вроде
Код:
Application.CreateForm(TForm1, Form1);
она создает главную форму, ставишь впереди условие.
Цитата: .:at0m:.
Хэш пароля хранится в db, пароль и имя пользователя необходимо запросить до (именно) создания основной формы. К.о. это сделать корректно? Развернутые ответы приветствуются
Мона сделать 2 формы =).
1) форма будет запрашивать логин и пароль. Если все ништяк пройдет, то мона создавать вторую форму =).
File->New-> Form так вроде.
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Application->CreateForm(__classid(TForm2), &Form2);
Form2->ShowModal(); //или Form2->ShowModal() , это как вам надо
}
{
Application->CreateForm(__classid(TForm2), &Form2);
Form2->ShowModal(); //или Form2->ShowModal() , это как вам надо
}
Че-нить в этом духе... Погугли потипу Builder работа с несколькими формами =)
BTW, как правильно закрыть форму запроса пароля? Пробовал
Код:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Form2->Close();
{
Form2->Close();
Но это приводит к закрытию всего приложения.
зы: Form1 и Form2 - формы основной программы и запроса пароля соответственно.
можно просто спрятать форму логина (TForm::Hide()), предварительно очистив поле с паролем (ибо нефиг :) )
Тогда при закрытии Form1 Form2 всё ещё будет жить...
TForm1::OnClose, Application::Terminate()
Цитата: VerZer
TForm1::OnClose, Application::Terminate()
Это очевидно, но, имхо, некорректно: в памяти всегда держутся 2 формы
Затем в обработчике создания главной формы пишем нечто похожее на:
Код:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
try
{
TForm2 *f = new TForm2(this);
f->ShowModal();
}
__finally
{
if (прошел_авторизацию)
{
delete f;
return;
}
Application->Terminate();
}
}
{
try
{
TForm2 *f = new TForm2(this);
f->ShowModal();
}
__finally
{
if (прошел_авторизацию)
{
delete f;
return;
}
Application->Terminate();
}
}
Писал на скорую руку, но идея такая...
А чем собственно не устраивает вариант, предложенный Onni?
Цитата: nikitozz
А чем собственно не устраивает вариант, предложенный Onni?
Отличный вариант :)
Я отвечал на последний пост, про две формы в памяти...
Форму авторизации надо создавать обязательно создавать динамически. Это раз. Во вторых - не используйте событие Create - используйте конструктор.