![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Добрый день
Возникла проблема с закрытием модальной формы авторизации Файл проекта Код:
program WorkShop;
uses
Vcl.Forms,
MainUnit in 'MainUnit.pas' {MainForm},
LoginUnit in 'LoginUnit.pas' {LoginForm},
DModuleUnit in 'DModuleUnit.pas' {DMForm: TDataModule};
{$R *.res}
label
rer;
begin
CheckUserPaswd:
Application.CreateForm(TDMForm, DMForm);
if TLoginForm.Execute then
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end
else
Application.MessageBox('Проверьте имя пользователя и пароль!', 'Ошибка авторизации',(MB_ICONWARNING));
goto CheckUserPaswd;
end.Функция вызова формы авторизации Код:
class function TLoginForm.Execute: boolean; begin with TLoginForm.Create(nil) do try Result := ShowModal = mrOk; finally Free; end; end; На форме авторизации две кнопки ОК и Отмена Кнопка ОК Код:
//Проверка логина и пароля если true
ModalResult := mrOk end
else
ModalResult := mrAbort;
На кнопку отмена и OnClose формы Код:
Application.Terminate; Так вот при нажатии кнопка отмена или закрытие формы Форма авторизации закрывается, а на экран вылазит сообщение Проверьте имя пользователя и пароль! в бесконечном цикле. Подскажите что я делаю не так? Последний раз редактировалось geniusbsd, 16.01.2015 в 03:06. |
|
#2
|
|||
|
|||
|
Угу, потому что у тебя на самом деле у тебя 3 значения, а не 2.
Пусть форма возвращает - True- в случае, если пользователь ввел логин/пароль и нажал OK - False -в случае, когда пользователь нажал Cancel Тогда код должен выглядеть примерно так: Код:
While True Do
Begin
if Not TLoginForm.Execute then Halt(0)
Else
If Login({пытаемся логиниться]) Then
Begin
// Успешный логин, создаем формы и работаем
// Exit - для выхода из бесконечного цикла
Exit;
End;
End; |
|
#3
|
|||
|
|||
|
Используя такой код
Код:
program WorkShop;
uses
Vcl.Forms,
Winapi.Windows,
MainUnit in 'MainUnit.pas' {MainForm},
LoginUnit in 'LoginUnit.pas' {LoginForm},
DModuleUnit in 'DModuleUnit.pas' {DMForm: TDataModule},
SettingsUnit in 'SettingsUnit.pas' {SettingsForm};
{$R *.res}
begin
Application.CreateForm(TDMForm, DMForm);
While True Do
Begin
if Not TLoginForm.Execute then
begin
Application.MessageBox('Проверьте имя пользователя и пароль!', 'Ошибка авторизации',(MB_ICONWARNING));
//Halt(0)
end
Else
if (DMForm.ADOQueryFase.RecordCount>0)Then
Begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
Exit;
End;
End;
end.Результат точно такой же как и в моем коде А мне требуется что бы при не правильном пароле выдавалось сообщение об ошибке и происходила следующая попытка пока пароль не будет правильный. А если нажимаю на кнопку отмена или закрыть происходило закрытие программы без вывода сообщений |
|
#4
|
|||
|
|||
|
Конечно, ты сообщение нетуда вставил.
Оставь Halt(0) в покое. Это ветка, когда юзер сказал "Отмена". Твое сообщение надо вставить в Else последнего If'а. |
|
#5
|
|||
|
|||
|
Я так пробовал при неправильном пароле форма закрывается без выдачи сообщение и нет возможности повторно ввести пароль
Код:
if (DMForm.ADOQueryFase.RecordCount>0)Then
Begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
End
else
Application.MessageBox('Проверьте имя пользователя и пароль!', 'Ошибка авторизации',(MB_ICONWARNING));
end; |
|
#6
|
|||
|
|||
|
Ха! Знаю почему!!!
Потому что DataModule надо создавать не так, а по старинке: Код:
DMForm := TDMForm.Create(Application); |