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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2009, 17:06   #1
Brook
Пользователь
 
Регистрация: 24.04.2009
Сообщений: 16
По умолчанию Пароль для входа в программу

Здравствуйте всем!
В программе, используя PasswordDlg, хочу сделать проверку на правильность ввода пароля. Подскажите пожалуйста, где и как нужно организовать код, чтобы в случае ввода неверного пароля, выводилось сообщение об этом, а само окно продолжало бы "висеть". А то у меня получается, что либо сразу главная форма появляется, либо, наоборот, программа целиком закрывается.

Вот, что сделано:
Код:
procedure TMainForm.FormCreate(Sender: TObject);
begin
  PasswordDlg := TPasswordDlg.Create(Self);
end;

procedure TPasswordDlg.OKBtnClick(Sender: TObject);
var
  passw: string;
begin
  if Password.Text <> passw then
    begin
      MessageDlg('   Пароль не верен! '+#13+#10
                 +'Попробуйте еще раз.', mtWarning, [mbOK], 0);

    end
    else
      begin
        MainForm.Show;
      end;
end;

Последний раз редактировалось KORN; 29.05.2009 в 05:13.
Brook вне форума Ответить с цитированием
Старый 28.05.2009, 17:19   #2
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Можно сделать перестановку в исходнике проекта
Нажмите Project\View Source... в меню
Код:
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TPasswordDlg, PasswordDlg);  //Тут следующая и эта строчка были поменены местами
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
В кнопке ОК диалога:
Код:
procedure TPasswordDlg.OKBtnClick(Sender: TObject);
begin
 if Password.Text = '123' then
 begin
  Form1.Show;
  Hide;
 end
 else
 begin
  MessageDlg(' Пароль не верен! '+#13+#10
    +'Попробуйте еще раз.', mtWarning, [mbOK], 0);
 end;
end;
Только теперь главная форма приложения окно с диалогом, так что в onClose первой формы нужно писать:
Код:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Application.Terminate;
end;
Это только как вариант.


Еще лучше, без перестановок(если уже сделали, то поменяйте местами обратно), просто в событии onShow формы прописать:
Код:
 PasswordDlg.ShowModal;
Код кнопки тот же оставить что и вверху.
в onClose не надо писать Application.Terminate
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.

Последний раз редактировалось Neeter; 28.05.2009 в 17:24.
Neeter вне форума Ответить с цитированием
Старый 28.05.2009, 17:26   #3
Brook
Пользователь
 
Регистрация: 24.04.2009
Сообщений: 16
По умолчанию

уже сделала с перестановкой - все работает как часы)))) Спасибо. Сейчас для расширения кругозора попробую второй вариант
Brook вне форума Ответить с цитированием
Старый 28.05.2009, 17:27   #4
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Второй лучше, там главная форма остается главной
Просто додумался поздно)
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 28.05.2009, 17:29   #5
Brook
Пользователь
 
Регистрация: 24.04.2009
Сообщений: 16
По умолчанию

Без перестановки получается, что при вводе неверного пароля выводится сообщение об этом, и потом сразу же открывается главная форма.
Brook вне форума Ответить с цитированием
Старый 28.05.2009, 17:31   #6
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

У кнопок OK и Cancel свойство ModalResult перемените в mrNone
Просто если это свойство равно чему нибудь другому, то форма автоматически закрывается

Еще создайте переменную в секции private диалога
Код:
  private
    { Private declarations }
    ok: boolean;
  public
    { Public declarations }
  end;
В onCreate присвойте ей false
Код:
procedure TPasswordDlg.FormCreate(Sender: TObject);
begin
 ok := false;
end;
Измените код нажатия на кнопку OK:
Код:
procedure TPasswordDlg.OKBtnClick(Sender: TObject);
begin
 if Password.Text = '123' then
 begin
  Form1.Show;
  ok := true;
  Close;
 end
 else
 begin
  MessageDlg(' Пароль не верен! '+#13+#10
    +'Попробуйте еще раз.', mtWarning, [mbOK], 0);
 end;
end;
И в onClose диалога напишите:
Код:
procedure TPasswordDlg.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 if not ok then
  Application.Terminate;
end;
Это надо писать, чтобы нельзя было просто выключить диалог на крестик и перейти к главной форме
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.

Последний раз редактировалось Neeter; 28.05.2009 в 17:47.
Neeter вне форума Ответить с цитированием
Старый 28.05.2009, 17:40   #7
Brook
Пользователь
 
Регистрация: 24.04.2009
Сообщений: 16
По умолчанию

Супер! Работает, как задумывалось.
Спасибо большое))))
Brook вне форума Ответить с цитированием
Старый 28.05.2009, 17:45   #8
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Незачто, удачи в программировании!
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 28.05.2009, 19:08   #9
EugeneIsmatulin
Пользователь
 
Аватар для EugeneIsmatulin
 
Регистрация: 24.05.2009
Сообщений: 64
По умолчанию

Хороший пример спасибо!
EugeneIsmatulin вне форума Ответить с цитированием
Старый 12.03.2010, 12:57   #10
foxes
Пользователь
 
Регистрация: 14.11.2008
Сообщений: 94
По умолчанию

Neeter
Я в роди всё сделаю как вы писали, ну у меня ничего не вышла, пишет что там ошибка, я думаю не в коде ошибка, а у меня руки кривые, помогите разобраться.

Код:
unit PASSWORD;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, 
  Buttons;

type
  TPasswordDlg = class(TForm)
    Label1: TLabel;
    Password: TEdit;
    OKBtn: TButton;
    CancelBtn: TButton;
    procedure FormCreate(Sender: TObject);
    procedure OKBtnClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);

  private
      { Private declarations }
      ok: boolean;

  public
    { Public declarations }

  end;

var
  PasswordDlg: TPasswordDlg;

implementation

uses Unit1;

{$R *.dfm}

procedure TPasswordDlg.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 if not ok then
  Application.Terminate;
end;

procedure TPasswordDlg.FormCreate(Sender: TObject);
begin
ok := false;
end;
  procedure TPasswordDlg.OKBtnClick(Sender: TObject);
begin
  if Password.Text = '123' then
 begin
  Form1.Show;
  ok := true;
  Close;
 end
 else
 begin
  MessageDlg(' Пароль не верен! '+#13+#10
    +'Попробуйте еще раз.', mtWarning , [mbOK], 0);
end;



end.
foxes вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составить программу, которая запрашивает пароль Olesya2406 Помощь студентам 5 28.04.2015 17:20
Сессии + форма входа spein PHP 13 27.03.2009 18:18
Как создать пароль на программу? Rahim1993 Общие вопросы Delphi 3 11.07.2008 06:25
Не работает форма входа. vvsh PHP 12 10.06.2008 17:00
Как ввести пароль для БД Paradox программным путем ? zetrix БД в Delphi 2 07.04.2007 21:50