Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.09.2018, 01:00   #1
Aleksandr94
Пользователь
 
Регистрация: 26.03.2018
Сообщений: 14
По умолчанию Закрытие формы авторизации при нажатии mrOk

Как открыть форму авторизации например Form3, с помощью ShowModal ввести логин и пароль и если они совпадают, то при нажатии ok, форма автоматически закрывалась. Вот примерный код, при совпадении логина и пароля и нажатии клавиши ok закрытие формы не происходит, она продолжает постоянно быть открытой?
Код:
procedure TForm1.CheckLogin;
var
  f:TForm3;
  r:TModalResult;
begin
  f:=TForm3.Create(Self);
  try
    repeat
      r:=f.ShowModal; 
      if r=mrOk then
      begin
        
        if LoginCorrect(f.Edit1.text, f.Edit2.text) then
        begin
           login:=f.Edit1.Text;
           password:=f.Edit2.Text;
          
        end
        else
          ShowMessage('Неверный логин пароль');
      end;
    until r=mrCancel;
    if r=mrCancel then
    begin
      ShowMessage('Отказ от авторизации. Программа завершает свою работу.');
     
    end;
    finally
      f.free;
    end;
end;
Aleksandr94 вне форума Ответить с цитированием
Старый 02.09.2018, 07:25   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Код:
    until r=mrCancel;
здесь написано

Код:
закончить ЦИКЛ при нажатии Сancel(или повторять пока не нажмем cancel)
то есть при нажатии ok мы снова и снова ВОЗВРАЩАЕМСЯ к показу
Код:
repeat
f.ShowModal;
  1. r:=mrCancel;
  2. break;
ОДНО из двух в нужное время и в нужном месте

P.S. да еще можно сменить условие выхода из цикла (это будет третий вариант)
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 02.09.2018 в 07:31.
evg_m вне форума Ответить с цитированием
Старый 02.09.2018, 12:32   #3
Aleksandr94
Пользователь
 
Регистрация: 26.03.2018
Сообщений: 14
По умолчанию

Я переписал код вызова формы, только теперь форма закрывается в любом случае, если введен правильный или неправильный логин, пароль. При неправильном логине пароли форма должна оставаться открытой, а она закрывается, в чём может быть проблема?
Код:
var
  f:TForm3;
  r:TModalResult;
begin
  f := TForm3.Create(Self);
    f.ShowModal; 
    if f.ModalResult = mrOK then
    begin
      if LoginCorrect(f.Edit1.text, f.Edit2.text) then
        begin
           login:=f.Edit1.Text;
           password:=f.Edit2.Text;
           f.Free;
        end
        else
        ShowMessage('Неверный логин пароль');
        end;
end;
Aleksandr94 вне форума Ответить с цитированием
Старый 02.09.2018, 12:41   #4
Aleksandr94
Пользователь
 
Регистрация: 26.03.2018
Сообщений: 14
По умолчанию

Функция LoginCorrect
База данных: библиотека sqlite и два файла SQLite3.pas, SQLiteTable3.pas
Код:
function TForm1.LoginCorrect(login, pass: String): Boolean;
var sltb:TSQLiteTable;
begin
sltb := sldb.GetTable('select id, user_name, user_pass from accaunt where user_name="'+login+'" and user_pass="'+pass+'"');
result := not sltb.EOF;
if result then
  begin
    
  end;
  sltb.Free;
end;
Aleksandr94 вне форума Ответить с цитированием
Старый 02.09.2018, 17:16   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

модальный показ формы закрывается при любом нажатии
чтобы "не закрывать" надо показать ее СНОВА. (repeat until)
(первый вариант кода)
+ как сказано добавить в НУЖНОЕ место код "принудительного" завершения цикла (break)
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 02.09.2018, 19:32   #6
Aleksandr94
Пользователь
 
Регистрация: 26.03.2018
Сообщений: 14
По умолчанию

Спасибо за подсказку, поставил break теперь работает.
Код:
if LoginCorrect(f.Edit1.text, f.Edit2.text) then
        begin
           login:=f.Edit1.Text;
           password:=f.Edit2.Text;
           break;
        end
        else
          ShowMessage('Неверный логин пароль');
Aleksandr94 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Закрытие модальной формы при выполняющимся цикле garuna Общие вопросы Delphi 7 08.02.2015 15:22
Вызов формы при нажатии клавиши Veryn4ik1993 C# (си шарп) 2 11.03.2013 12:41
Закрытие формы при потере фокуса werrey Общие вопросы Delphi 11 19.11.2011 14:08
Закрытие окна при нажатии опр. клавиши на клавиатуре. Borgond Общие вопросы Delphi 6 25.08.2010 01:14
Закрытие формы при работе с SelectDirectory Shouldercannon Общие вопросы Delphi 5 14.07.2010 19:51