А зачем такие сложности с bpl?
Я эту идею реализовал примерно так: главной форме присваиваем tag:=0
и пишем:
Код:
procedure TMainForm.FormShow(Sender: TObject); //открытие главной формы
begin
if MainForm.Tag=0 then
begin
LoginForm:=TLoginForm.Create(self); //создать диалог входа пользователя
LoginForm.ShowModal; //вызвать далог входа пользователя
end;
В проект добавляем новую форму LoginForm, подключаем ее к MainForm и наоборот. Кидаем ADOQuery, в SQL которого пишем:
Код:
SELECT * FROM TableUsers WHERE Login=:Par1 AND Password=:Par2
Устанавливаем ADOQuery.Active в false
На форму LoginForm помещаем два едита и кнопку, в событии Click которой пишем:
Код:
procedure TPasswordIn.Button1Click(Sender: TObject);
begin
with ADOQuery1.Parameters do //активируем запрос с параметрами:
begin
ParamByName('Par1').Value:=Edit1.Text; //имя пользователя
ParamByName('Par2').Value:=Edit2.Text; //введенный пароль
end;
ADOQuery1.Open; //открывается запрос на существование в БД
if ADOQuery1.RecordCount>0 then // если запись существует
begin
MainForm.Tag:=1; //присваиваем главной форме Tag=1 - открываем ее
ADOQuery1.Close; //закрываем запрос
LoginForm.CLose; //закрываем диалог
exit; //выход из процедуры
end;
//иначе:
ShowMessage('В доступе отказано. Повторите ввод пароля.');
ADOQuery1.Close;
end;
Вот и все.
Добавлено через 3 минуты
Забыл сказать, что LoginForm надо убрать из автоматически создаваемых (см. Project -> Options).