Delphi. UniGUI. Делаем систему регистрации / авторизации на сайте | >Digital-flame

Delphi. unigui. делаем систему регистрации / авторизации на сайте | >digital-flame

unitMain;

interface

uses

  Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,

  Dialogs,uniGUITypes,uniGUIAbstractClasses,uniGUIClasses,uniGUIRegClasses,

  uniGUIForm,uniGUIBaseClasses,uniPanel,uniButton,uniBitBtn,uniImage,

  uniLabel,uniScrollBox,uPageTemplate,uniGUIJSForm,uPagesDM,uLoginForm;

type

  TMainForm=class(TUniForm)

    ScrollBox:TUniScrollBox;

    pTop:TUniPanel;

    pLoginRegistration:TUniPanel;

    lLogin:TUniLabel;

    lRegistration:TUniLabel;

    pEmail:TUniPanel;

    lEmail:TUniLabel;

    pExit:TUniPanel;

    lExit:TUniLabel;

    procedureUniFormCreate(Sender:TObject);

    procedurepTopAjaxEvent(Sender:TComponent;EventName:string;Params:TUniStrings);

    procedureUniFormAjaxEvent(Sender:TComponent;EventName:string;Params:TUniStrings);

    procedureUniFormAfterShow(Sender:TObject);

    procedureUniFormShow(Sender:TObject);

    procedurelLoginClick(Sender:TObject);

    procedurelExitClick(Sender:TObject);

    procedurelRegistrationClick(Sender:TObject);

    procedurelEmailClick(Sender:TObject);

  private

    {Privatedeclarations}

    FPagesDM:TPagesDM;

    FCurrPage:TPageTemplate;

  public

    {Publicdeclarations}

  end;

functionMainForm:TMainForm;

implementation

{$R*.dfm}

uses

  uniGUIVars,MainModule,uniGUIApplication,uRegistrationForm,uUserProfileForm;

functionMainForm:TMainForm;

begin

  Result:=TMainForm(UniMainModule.GetFormInstance(TMainForm));

end;

procedureTMainForm.lEmailClick(Sender:TObject);

var

  f:TUserProfileForm;

begin

  f:=TUserProfileForm.Create(UniApplication);

  try

    iff.ShowModal=mrOk then

    begin

     //

    end;

  finally

    f.Free;

  end;

end;

procedureTMainForm.lExitClick(Sender:TObject);

var

  minutes:Integer;

begin

  minutes:=60*72;// setting cookies for 72 hours

  UniApplication.Cookies.SetCookie(‘idUser’,,Now (minutes/1440.0));

  UniApplication.Restart();

end;

procedureTMainForm.lLoginClick(Sender:TObject);

var

  f:TLoginForm;

  minutes:Integer;

begin

  f:=TLoginForm.Create(UniApplication);

  try

    iff.ShowModal=mrOK then

    begin

      pLoginRegistration.Visible:=false;

      pExit.Visible:=true;

      pEmail.Visible:=true;

      // set CookieLogged

      minutes:=60*72;// setting cookies for 72 hours

      UniApplication.Cookies.SetCookie(‘idUser’,‘123’,Now (Minutes/1440.0));

    end;

  finally

    f.Free;

  end;

end;

procedureTMainForm.lRegistrationClick(Sender:TObject);

var

  f:TRegistrationForm;

begin

  f:=TRegistrationForm.Create(UniApplication);

  iff.ShowModal=mrOk then

  begin

     //

  end;

end;

procedureTMainForm.pTopAjaxEvent(Sender:TComponent;EventName:string;Params:TUniStrings);

begin

  ifSameText(EventName,‘pTopResize’)then

  begin

    ifParams.Values[‘height’]<>then

    begin

  //    ScrollBox.Height := Params.Values[‘height’].ToInteger(); // browser height

      {

      pTop.Top:=0;

      pTop.Left:=0;

      pTop.Width:=Params.Values[‘width’].ToInteger()20;

      }

    //  pTop.Caption := Params.Values[‘width’] ‘x’ Params.Values[‘height’];

      //

      {

      FMainPage.Top:=pTop.Height;

      FMainPage.Left:=0;

      FMainPage.Width:=Params.Values[‘width’].ToInteger()20;

      }

    end;

  end;

end;

procedureTMainForm.UniFormAfterShow(Sender:TObject);

begin

// read cookie

end;

procedureTMainForm.UniFormAjaxEvent(Sender:TComponent;EventName:string;Params:TUniStrings);

  functiongetWidthOrHeightValue(aParamValue:string):integer;

  begin

    result:=1;

    ifaParamValue=‘undefined’then

      result:=1

    else

      result:=aParamValue.ToInteger();

  end;

var

  browserWidth:string;

begin

//formResize

  ifSameText(EventName,‘formResize’)then

  begin

    ifParams.Values[‘height’]<>then

    begin

      pTop.Top:=0;

      pTop.Left:=0;

      pTop.Width:=Params.Values[‘width’].ToInteger();

      //ajaxRequest(sender, ‘formResize’, [ ‘width=’ width,’height=’ height,’oldWidth=’ oldWidth,’oldHeight=’ oldHeight]);

      pTop.Caption:=‘new WxH:’ Params.Values[‘width’] ‘x’ Params.Values[‘height’] ‘;’//

         ‘old WxH:’ Params.Values[‘oldWidth’] ‘x’ Params.Values[‘oldHeight’];

      //

      ScrollBox.Left:=0;

      ScrollBox.Top:=pTop.Height;

      ScrollBox.Width:=Params.Values[‘width’].ToInteger();

      ScrollBox.Height:=Params.Values[‘height’].ToInteger()20;// browser height

      //TopMenu

      FCurrPage.TopMenu.OnAfterRender(//

        getWidthOrHeightValue(Params.Values[‘width’]),//

        getWidthOrHeightValue(Params.Values[‘height’])//

      );

      // CurrentPage

      FCurrPage.Top:=0;

      FCurrPage.Left:=0;

      FCurrPage.Width:=Params.Values[‘width’].ToInteger()20;

      //

      FCurrPage.OnBrowserResize(//

        getWidthOrHeightValue(Params.Values[‘width’]),//

        getWidthOrHeightValue(Params.Values[‘height’]),//

        getWidthOrHeightValue(Params.Values[‘oldWidth’]),//

        getWidthOrHeightValue(Params.Values[‘oldHeight’])//

      );

      //

      FPagesDM.OnBrowserResize(//

        getWidthOrHeightValue(Params.Values[‘width’]),//

        getWidthOrHeightValue(Params.Values[‘height’]),//

        getWidthOrHeightValue(Params.Values[‘oldWidth’]),//

        getWidthOrHeightValue(Params.Values[‘oldHeight’])//

      );

    end;

  end;

  ifSameText(EventName,‘formAfterRender’)then

  begin

    ScrollBox.Left:=0;

    ScrollBox.Top:=pTop.Height;

    ScrollBox.Width:=Params.Values[‘width’].ToInteger();

    ScrollBox.Height:=Params.Values[‘height’].ToInteger()20;// browser height

    //

    browserWidth:=Params.Values[‘width’];

    //

    FCurrPage.TopMenu.OnAfterRender(//

      getWidthOrHeightValue(Params.Values[‘width’]),//

      getWidthOrHeightValue(Params.Values[‘height’])//

    );

    //

    FCurrPage.Top:=0;

    FCurrPage.Left:=0;

    FCurrPage.Width:=Params.Values[‘width’].ToInteger()20;

    FCurrPage.OnAfterRender(//

      getWidthOrHeightValue(Params.Values[‘width’]),//

      getWidthOrHeightValue(Params.Values[‘height’])//

    );

    //

    FPagesDM.OnAfterRender(//

      getWidthOrHeightValue(Params.Values[‘width’]),//

      getWidthOrHeightValue(Params.Values[‘height’])//

    );

  end;

end;

procedureTMainForm.UniFormCreate(Sender:TObject);

var

  pageID:integer;

begin

  FPagesDM:=TPagesDM.Create(Self);

  FPagesDM.PageParent:=ScrollBox;

end;

procedureTMainForm.UniFormShow(Sender:TObject);

var

  pageID:Integer;

  id:Integer;

begin

  ifUniApplication.Parameters.Values[‘pageID’]<>then

  begin

    pageID:=UniApplication.Parameters.Values[‘pageID’].ToInteger;

    FCurrPage:=FPagesDM.GetPage(pageID);

  end

  else

    FCurrPage:=FPagesDM.GetPage(0);

  ifUniApplication.Cookies.GetCookie(‘idUser’)<>then

  begin

    id:=UniApplication.Cookies.GetCookie(‘idUser’).ToInteger;

      // do smth

    pLoginRegistration.Visible:=false;

    pExit.Visible:=true;

    pEmail.Visible:=true;

  end;

end;

initialization

  RegisterAppFormClass(TMainForm);

end.

Глава 10 вход в систему / delphi. учимся на примерах

  • Постановка задачи
  • Разработка формы
  • Разработка программного кода
  • Полный исходный код модуля
  • Разработать программу, которая осуществляет вход в систему. Интерфейс входа в систему сначала скрывает все от пользователя, а затем просит ввести пароль. Если пароль верный, то разблокируем систему и выходим из программы. В противном случае, продолжаем требовать ввод пароля.

    Создайте новый проект Delphi и измените свойства формы согласно табл. 10.1.

    Таблица 10.1. Свойства формы программы входа в систему

    СвойствоЗначениеПояснение
    CaptionОчистить заголовок
    AlignalCustomЗапрет на перемещение окна
    ВorderStylebsNoneУбираем границу и заголовок окна
    FormStylefsStayOnTopОкно программы будет всегда расположено поверх других окон
    PositionpoDesktopCenter
    Height130Высота
    Width130Ширина

    Разместите на форме компонент Label категории Standard и измените его свойства согласно табл. 10.2.

    Таблица 10.2. Свойства компонента

    СвойствоЗначениеПояснение
    CaptionLogonНадпись метки
    Font.ColorclNavyЦвет текста — темно-синий
    Font.Size20Размер шрифта
    Font.Style[fsBold]Начертание шрифта — полужирное
    Left16Отступ слева
    Тор0Отступ сверху

    Разместите под меткой компонент Edit категории Standard и присвойте его свойству Name значение pass. Для того чтобы скрыть ввод текста (то есть, вводимый пользователем пароль), следует указать в свойстве PasswordChar символ, который будет отображаться вместо вводимого текста. Можно указать здесь символ “*” или, например, знак доллара “$”.

    Под полем pass разместите кнопку (компонент Button категории Standard) и присвойте ее свойству Caption значение Enter. По нажатию этой кнопки будет выполняться проверка корректности пароля.

    Еще нам потребуется два компонента Timer категории System. Для первого таймера необходимо изменить значение свойства Interval на 10, для второго никаких свойств изменять не нужно.

    Результат оформления формы должен соответствовать рис. 10.1.

    Delphi. UniGUI. Делаем систему регистрации / авторизации на сайте | >Digital-flame

    Рис. 10.1. Форма для программы входа в систему

    Объявим в качестве закрытых членов класса формы переменную типа HWND и две процедуры, которые разработаем чуть позже:

    type TForm1 = class(TForm) …private { Private declarations } h1: HWND; //переменная, содержащая идентификатор окна procedure logon(); //блокирует все, пока пароль не будет  //введен верно procedure_check(); //проверка корректности пароля public { Public declarations } end;

    Теперь в разделе implementation создадим сами процедуры. Сначала процедура check:

    procedure TForm1.check();begin if pass.Text = ‘password’ then //если пароль верный begin  //узнаем идентификатор Рабочего стола  h1:= FindWindow(‘Progman’,nil);  //разрешаем работу с Рабочим столом  ShowWindow(h1, sw_show);  // узнаем идентификатор панели задач  h1:= FindWindow(‘Shell_traywnd‘,nil);  //разрешаем работу с панелью задач  ShowWindow(h1, sw_show);  halt; //закрываем программу end // иначе, выводим сообщение о неверном пароле else ShowMessage(‘Wrong password!‘); end;

    Процедура check проверяет корректность пароля. В данном случае в качестве пароля используется слово “password”. Если в поле pass введено именно это слово, то разблокируем Рабочий стол и панель задач. После этого доступ ко всему открыт, и мы завершаем работу программы. Если же введенный пользователем текст не совпадает с корректным паролем, то мы продолжаем требовать ввод пароля.

    Теперь очередь процедуры logon:

    procedure TForm1.logon();begin //узнаем идентификатор Рабочего стола h1:= FindWindow(‘Progman’, nil); ShowWindow(h1, sw_hide); //прячем Рабочий стол //находим панель задач h1:= FindWindow(‘Shell_traywnd’, nil); ShowWindow(h1, sw_hide); //прячем панель задач {проверяем, не запущен ли диспетчер задач} h1:= FindWindow(nil, ‘Диспетчер задачWindows’); {если да, то закрываем окно диспетчера задач} if (h1 <> 0) then PostMessage(h1, WM_QUIT, 1, 0);end;

    Здесь мы блокируем Рабочий стол и панель задач, а затем проверяем, не пытается ли пользователь отключить нашу программу с помощью диспетчера задач. Если окно диспетчера задач открыто, то закрываем его.

    Теперь нам почти не придется программировать — мы просто будем вызывать процедуры check и logon. При нажатии кнопки Enter вызывается процедура check:

    procedure TForm1.Button1Click(Sender: TObject); begin check;end;

    Для того чтобы не утруждать пользователя нажатиями кнопки на форме, имитируем эту операцию по нажатию в поле pass клавиши <Enter>. Для этого создайте обработчик события pass.OnKeyРгеss:

    procedure TForm1.passKeyPress(Sender: TObject; var Key:Char); begin if key = #13 then // если нажата клавиша <Enter>  check; //вызываем процедуру check end;

    #13 —это код клавиши <Enter>.

    Коды символов и клавиш клавиатуры перечислены в приложении А.

    Для первого таймера событие OnTimer будет содержать только вызов процедуры logon:

    procedure TForm1.Timer1Timer(Sender: TObject); begin logon; end;

    Для второго таймера (у которого свойство Interval имеет значение 1000) добавьте в обработчик события OnTimer следующий код:

    procedure TForm1.Timer2Timer(Sender: TObject);begin h1:= FindWindow(‘Progman’,nil); //поиск Рабочего стола ShowWindow(h1, sw_hide); //прячем Рабочий стол CloseWindow(h1); //сворачиваем окно Рабочего стола pass.SetFocus; //переводим курсор в текстовое полеend;

    Сворачивание окна Рабочего стола приводит к закрытию системного меню Пуск, если оно открыто. В конечном итоге пользователь не имеет доступа к Рабочему столу, к панели задач, к меню Пуск и диспетчеру задач, однако, несмотря на то, что наша программа не имеет заголовка, ее можно закрыть с помощью комбинации клавиш <Alt F4>. Для того чтобы отключить эту возможность, создайте обработчик события главной формы OnCloseQuery и добавьте в него следующий код:

    procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose:= False;end;

    Единственное, что осталось сделать, — обеспечить программе автозагрузку, указав путь к ней в системном реестре. Для работы с реестром необходимо добавить в раздел uses ссылку на модуль Registry, а за тем создать следующий обработчик события формы OnCreate:

    procedure TForm1.FormCreate(Sender; TObject); var Reg: TRegistry;//переменная для работы с реестром begin Reg:= TRegistry.Create; Reg.RootKey:= HKEY_CURRENT_USER; //только для текущего пользователя Reg.OpenKey(‘SoftwareMicrosoftWindowsCurrentVersionRun’, true); //открываем раздел автозагрузки в реестре  //и записываем название и полный путь к нашей программе Reg.WriteString(‘Logon’, Application.ExeName); Reg.CloseKey; //закрываем реестр Reg.Free; //освобождаем память end;

    Теперь наша программа будет загружаться для текущего пользователя вместе с системой и требовать ввод пароля. Программа в действии показана на рис. 10.2.

    Delphi. UniGUI. Делаем систему регистрации / авторизации на сайте | >Digital-flame

    Рис. 10.2. Программа Вход в систему в действии

    Полный исходный код модуля программы Вход в систему представлен в листинге 10.1.

    Листинг 10.1. Модуль программы Вход в системуunit Unit1;
    interface
    uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Registry;
    type TForm1 = class(TForm) pass: TEdit; Label1: TLabel; Timer1: TTimer; Button1: TButton; Timer2: TTimer; procedure Button1Click(Sender: TObject); procedure passKeyPress(Sender: TObject; var Key: Char); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Timer2Timer(Sender: TObject); private { Private declarations } h1: HWND; //переменная, содержащая идентификатор окна procedure logon(); //блокирует все, пока пароль не будет введен верно procedure check(); //проверка корректности пароляpublic { Public declarations }end;
    var Form1: TForm1;
    implementation {$R *.dfm}
    procedure TForm1.check();begin if pass.Text = ‘password’ then //если пароль верный begin  //узнаем идентификатор Рабочего стола  h1:= FindWindow(‘Progman’,nil);  //разрешаем работу с Рабочим столом  ShowWindow(h1, sw_show);  // узнаем идентификатор панели задач  h1:= FindWindow(‘Shell_traywnd’,nil);  //разрешаем работу с панелью задач  ShowWindow(h1, sw_show);  halt; //закрываем программу end // иначе, выводим сообщение о неверном пароле else ShowMessage(‘Wrong password!’); end;
    procedure TForm1.logon();begin //узнаем идентификатор Рабочего стола h1:= FindWindow(‘Progman’, nil); ShowWindow(h1, sw_hide); //прячем Рабочий стол // находим панель задач h1:= FindWindow(‘Shell_traywnd’, nil); ShowWindow(h1, sw_hide); //прячем панель задач {проверяем, не запущен ли диспетчер задач} h1:= FindWindow(nil, ‘Диспетчер задачWindows’); {если да, то закрываем окно диспетчера задач} if (h1 <> 0) then PostMessage(h1, WM_QUIT, 1, 0);end;
    procedure TForm1.Timer1Timer(Sender: TObject); begin logon; end;
    procedure TForm1.Button1Click(Sender: TObject); begin check;end;
    procedure TForm1.passKeyPress(Sender: TObject; var Key:Char); begin if key = #13 then // если нажата клавиша <Enter>  check; //вызываем процедуру check end;
    procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose:= False;end;
    procedure TForm1.FormCreate(Sender; TObject); var Reg: TRegistry;//переменная для работы с реестром begin Reg:= TRegistry.Create; Reg.RootKey:= HKEY_CURRENT_USER; //только для текущего пользователя Reg.OpenKey(‘SoftwareMicrosoftWindowsCurrentVersionRun’, true); //открываем раздел автозагрузки в реестре  //и записываем название и полный путь к нашей программе Reg.WriteString(‘Logon’, Application.ExeName); Reg.CloseKey; //закрываем реестр Reg.Free; //освобождаем память end;
    procedure TForm1.Timer2Timer(Sender: TObject);begin h1:= FindWindow(‘Progman’, nil); //поиск Рабочего стола ShowWindow(h1, sw_hide); //прячем Рабочий стол CloseWindow(h1); //сворачиваем окно Рабочего стола pass.SetFocus; //переводим курсор в текстовое полеend;
    end.

    ⊚ Все файлы проекта и исполняемый файл рассмотренной программы находятся на прилагаемом к книге компакт-диске в папке Chapter 10.


    Главная |
    В избранное |
    Наш E-MAIL |
    Добавить материал |
    Нашёл ошибку |
    Наверх

    Похожее:  ? Высокоскоростное подключение PPPoE на Windows 7, 10, Ubuntu

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

    Ваш адрес email не будет опубликован. Обязательные поля помечены *