Карта сайтаСсылкиКонтакты

Хостинг


Отображение окна ввода пароля перед запуском главной формы

PDF Печать
Статьи

MainForm приложения Delphi - форма, которая создается первой в главном теле приложения.

Если Вам нужно организовать допуск к Вашему приложению, Вы могли бы отобразить форму ввода пароля для входа в приложение.

Короче говоря, идея состоит в том, чтобы создать, отобразить и уничтожить диалоговое окно "Вход в Систему" перед созданием Главной формы.

MainForm Delphi

Когда создается новый проект Delphi, Form1 автоматически становится MainForm (глобальный объект Application). Чтобы назначить другую форму для свойства MainForm, используйте вкладку Формы диалогового окна Project | Options во время проектирования.

Когда Главная форма закрывается, приложение заканчивает свою работу.

Диалоговое Окно Ввода Пароля

Давайте сначала создадим Главную форму приложения. Создайте новый проект Delphi, который содержит одну форму. Эта форма в соответствии с проектом - Главная форма.

Если Вы измените имя формы на TMainForm и сохраните модуль как main.pas, исходный текст будет таким (проект был сохранен как PasswordApp):


program PasswordApp;

uses
  Forms,
  main in 'main.pas' {MainForm};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TMainForm, MainForm) ;
  Application.Run;
end.

Теперь добавим вторую форму в проект.

В соответствии с проектом, когда вторая форма будет добавлена, она будет присутствовать в списке Auto-Create Forms в диалоговом окне Project Options.

Назовите вторую форму как TLoginForm и удалите ее из списка автоматически создаваемых форм. Сохраните этот модуль под именем login.pas.

Добавьте компоненты Label, Edit и Button на форму.

Добавьте метод класса для создания, отображения и закрытия диалогового окна ввода пароля. Метод Execute возвращает True, если Пользователь ввел правильный пароль в окне ввода пароля.

Вот полный исходный код:


unit login;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes,
  Graphics, Controls, Forms, Dialogs, StdCtrls;

type
  TLoginForm = class(TForm)
    LogInButton: TButton;
    pwdLabel: TLabel;
    passwordEdit: TEdit;
    procedure LogInButtonClick(Sender: TObject) ;
    procedure FormCreate(Sender: TObject) ;
  public
    class function Execute : boolean;
  end;

implementation
{$R *.dfm}

class function TLoginForm.Execute: boolean;
begin
  with TLoginForm.Create(nil) do
  try
    Result := ShowModal = mrOk;
  finally
    Free;
  end;
end;

procedure TLoginForm.LogInButtonClick(Sender: TObject) ;
begin
  if passwordEdit.Text = 'delphi' then
    ModalResult := mrOK
  else
    ModalResult := mrAbort;
end;

end.

Метод Execute динамически создает экземпляр TLoginForm и модально отображает его, используя метод ShowModal.

ShowModal не возвращается, пока форма не будет закрыта. Когда форма закрывается, она возвращает свойство ModalResult.

Обработчик события OnClick для LogInButton назначает mrOk свойству ModalResult, если Пользователь ввел правильный пароль (delphi в вышеупомянутом примере). Если Пользователь ввел неправильный пароль, ModalResult устанавливается в mrAbort (или что-нибудь вроде mrNone).

Установив значение ModalResult, форма закрывается. Execute возвращает True, если ModalResult равен mrOk, т.е. Пользователь ввел правильный пароль.

Не Создаем MainForm Перед Входом в Систему

Теперь, Вы должны удостовериться, что главная форма не была создана, если Пользователь ввел неправильный пароль.

Исходный код проекта выглядит так:


program PasswordApp;

uses
  Forms,
  main in 'main.pas' {MainForm},
  login in 'login.pas' {LoginForm};

{$R *.res}

begin
  if TLoginForm.Execute then
  begin
    Application.Initialize;
    Application.CreateForm(TMainForm, MainForm) ;
    Application.Run;
  end
  else
  begin
    Application.MessageBox('Вы не авторизованы в этом приложении. 
        Правильный пароль "delphi".', 'Приложение защищинное паролем') ;
  end;
end.

Обратите внимание на использование, чтобы определить, была ли главная форма создана. Если Execute возвращает False, MainForm не создается, а приложение закрывается, даже не запустившись.

Вот и все!!!


 

Комментарии   

 
0 #1 Georg 15.03.2014 15:57
Примечание:
Код функции TLoginForm.Exec ute должен располагаться сразу после {$R *.dfm}, иначе программа будет ругаться. :-)
Цитировать
 
 
0 #2 Anatoliy 20.03.2015 09:32
здравствуйте, как быть в случае с БД? т.е. нужно использовать данные пользователя в программе.
Цитировать
 
 
0 #3 Serge 20.03.2015 19:20
SQL-запрос.
Цитировать
 
 
0 #4 Anatoliy 22.03.2015 08:17
Цитирую Serge:
SQL-запрос.

Вопрос в том, как передать данные пользователя в форму которая еще не создана?
Цитировать
 
 
0 #5 Anatoliy 22.03.2015 09:36
Цитирую Serge:
SQL-запрос.

Проблему решил.
В файле проекта написал:
Application.Ini tialize;
Application.Cre ateForm(TF_main , F_main);
if TF_login.Execut e then
begin
//создание остальных форм
Application.Run ;
end
else
begin
F_main.Database .Close;
Application.Ter minate;
end;
Форма авторизации использует подключение к БД с главной формы. Т.о. данные об авторизованном пользователе остаются на главной форме.
Цитировать
 
 
0 #6 Алексей 17.04.2016 11:22
Добрый день.
Не кого такого не было, что при выходе из программы окно программы пару раз моргает и потом программа полностью завершает свою работу?
Цитировать
 
 
0 #7 Anatoliy 19.04.2016 06:42
Цитирую Алексей:
Добрый день.
Не кого такого не было, что при выходе из программы окно программы пару раз моргает и потом программа полностью завершает свою работу?

Как завершаешь работу программы?
Цитировать
 
 
0 #8 BHW 23.04.2017 04:26
Woah! I'm really loving the template/theme of this site.
It's simple, yet effective. A lot of times it's
hard to get that "perfect balance" between user friendliness and visual appeal.
I must say you've done a fantastic job with this.
Also, the blog loads extremely quick for me on Opera.
Exceptional Blog!
Цитировать
 

Добавить комментарий


Защитный код
Обновить