home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 September / Chip_2001-09_cd1.bin / zkuste / delphi / kolekce / d6 / RX275D6.ZIP / Units / CHPSWDLG.PAS < prev    next >
Pascal/Delphi Source File  |  1999-10-12  |  6KB  |  200 lines

  1. {*******************************************************}
  2. {                                                       }
  3. {         Delphi VCL Extensions (RX)                    }
  4. {                                                       }
  5. {         Copyright (c) 1995, 1996 AO ROSNO             }
  6. {                                                       }
  7. {*******************************************************}
  8.  
  9. unit ChPswDlg;
  10.  
  11. {$I RX.INC}
  12.  
  13. interface
  14.  
  15. uses
  16.   SysUtils, {$IFDEF WIN32} Windows, {$ELSE} WinTypes, WinProcs, {$ENDIF}
  17.   Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons,
  18.   DBTables, DB;
  19.  
  20. type
  21.   TChangePasswordEvent = function(UsersTable: TTable;
  22.     const OldPassword, NewPassword: string): Boolean of object;
  23.  
  24.   TChPswdForm = class(TForm)
  25.     OldPswdLabel: TLabel;
  26.     OldPswd: TEdit;
  27.     NewPswdLabel: TLabel;
  28.     NewPswd: TEdit;
  29.     ConfirmLabel: TLabel;
  30.     ConfirmNewPswd: TEdit;
  31.     OkBtn: TButton;
  32.     CancelBtn: TButton;
  33.     procedure OkBtnClick(Sender: TObject);
  34.     procedure FormShow(Sender: TObject);
  35.     procedure FormCreate(Sender: TObject);
  36.     procedure PswdChange(Sender: TObject);
  37.   private
  38.     { Private declarations }
  39.     FAttempt: Integer;
  40.     FEnableEmpty: Boolean;
  41.     procedure ClearEdits;
  42.     procedure OkEnabled;
  43.   protected
  44.     procedure CreateParams(var Params: TCreateParams); override;
  45.   public
  46.     { Public declarations }
  47.     Database: TDatabase;
  48.     AttemptNumber: Integer;
  49.     UsersTableName: string;
  50.     UserNameField: string;
  51.     LoginName: string;
  52.     OnChangePassword: TChangePasswordEvent;
  53.   end;
  54.  
  55. function ChangePasswordDialog(Database: TDatabase; AttemptNumber: Integer;
  56.   const UsersTableName, UserNameField, LoginName: string;
  57.   MaxPwdLen: Integer; EnableEmptyPassword: Boolean;
  58.   ChangePasswordEvent: TChangePasswordEvent): Boolean;
  59.  
  60. implementation
  61.  
  62. uses Consts, RXDConst, VCLUtils;
  63.  
  64. {$R *.DFM}
  65.  
  66. function ChangePasswordDialog(Database: TDatabase; AttemptNumber: Integer;
  67.   const UsersTableName, UserNameField, LoginName: string;
  68.   MaxPwdLen: Integer; EnableEmptyPassword: Boolean;
  69.   ChangePasswordEvent: TChangePasswordEvent): Boolean;
  70. var
  71.   Form: TChPswdForm;
  72.   SaveCursor: TCursor;
  73. begin
  74.   SaveCursor := Screen.Cursor;
  75.   Screen.Cursor := crDefault;
  76.   try
  77.     Form := TChPswdForm.Create(Application);
  78.     try
  79.       Form.Database := Database;
  80.       Form.AttemptNumber := AttemptNumber;
  81.       Form.UsersTableName := UsersTableName;
  82.       Form.UserNameField := UserNameField;
  83.       Form.LoginName := LoginName;
  84.       Form.OldPswd.MaxLength := MaxPwdLen;
  85.       Form.NewPswd.MaxLength := MaxPwdLen;
  86.       Form.ConfirmNewPswd.MaxLength := MaxPwdLen;
  87.       Form.FEnableEmpty := EnableEmptyPassword;
  88.       Form.OnChangePassword := ChangePasswordEvent;
  89.       Result := (Form.ShowModal = mrOk);
  90.     finally
  91.       Form.Free;
  92.     end;
  93.   finally
  94.     Screen.Cursor := SaveCursor;
  95.   end;
  96. end;
  97.  
  98. { TChPswdForm }
  99.  
  100. procedure TChPswdForm.CreateParams(var Params: TCreateParams);
  101. begin
  102.   inherited CreateParams(Params);
  103. end;
  104.  
  105. procedure TChPswdForm.FormCreate(Sender: TObject);
  106. begin
  107.   Caption := LoadStr(SChangePassword);
  108.   OldPswdLabel.Caption := LoadStr(SOldPasswordLabel);
  109.   NewPswdLabel.Caption := LoadStr(SNewPasswordLabel);
  110.   ConfirmLabel.Caption := LoadStr(SConfirmPasswordLabel);
  111.   OkBtn.Caption := ResStr(SOKButton);
  112.   CancelBtn.Caption := ResStr(SCancelButton);
  113. end;
  114.  
  115. procedure TChPswdForm.ClearEdits;
  116. begin
  117.   OldPswd.Text := '';
  118.   NewPswd.Text := '';
  119.   ConfirmNewPswd.Text := '';
  120.   OkBtn.Enabled := FEnableEmpty;
  121. end;
  122.  
  123. procedure TChPswdForm.OkEnabled;
  124. begin
  125.   OkBtn.Enabled := FEnableEmpty or ((OldPswd.Text <> '') and (NewPswd.Text <> '')
  126.     and (ConfirmNewPswd.Text <> ''));
  127. end;
  128.  
  129. procedure TChPswdForm.OkBtnClick(Sender: TObject);
  130. type
  131.   TChangePasswordError = (peMismatch, peOther);
  132. var
  133.   Table: TTable;
  134.   Ok: Boolean;
  135.   Error: TChangePasswordError;
  136. begin
  137.   Ok := False;
  138.   Inc(FAttempt);
  139.   try
  140.     if not (FAttempt > AttemptNumber) then begin
  141.       if UsersTableName <> '' then Table := TTable.Create(Self)
  142.       else Table := nil;
  143.       try
  144.         Error := peOther;
  145.         if Table <> nil then begin
  146.           Table.DatabaseName := Database.DatabaseName;
  147. {$IFDEF WIN32}
  148.           Table.SessionName := Database.SessionName;
  149. {$ENDIF}
  150.           Table.TableName := UsersTableName;
  151.           Table.IndexFieldNames := UserNameField;
  152.           Table.Open;
  153.           if Table.FindKey([LoginName]) then begin
  154.             if NewPswd.Text <> ConfirmNewPswd.Text then
  155.               Error := peMismatch
  156.             else begin
  157.               if Assigned(OnChangePassword) then
  158.                 Ok := OnChangePassword(Table, OldPswd.Text, NewPswd.Text);
  159.             end;
  160.           end;
  161.         end
  162.         else begin
  163.           if NewPswd.Text <> ConfirmNewPswd.Text then
  164.             Error := peMismatch
  165.           else begin
  166.             if Assigned(OnChangePassword) then
  167.               Ok := OnChangePassword(Table, OldPswd.Text, NewPswd.Text);
  168.           end;
  169.         end;
  170.         if Ok then
  171.           MessageDlg(LoadStr(SPasswordChanged), mtInformation, [mbOk], 0)
  172.         else
  173.           if Error = peMismatch then
  174.             MessageDlg(LoadStr(SPasswordsMismatch), mtError, [mbOk], 0)
  175.           else MessageDlg(LoadStr(SPasswordNotChanged), mtError, [mbOk], 0);
  176.       finally
  177.         if Table <> nil then Table.Free;
  178.       end;
  179.     end;
  180.   finally
  181.     if Ok then ModalResult := mrOk
  182.     else begin
  183.       if FAttempt > AttemptNumber then ModalResult := mrCancel
  184.       else ModalResult := mrNone;
  185.     end;
  186.   end;
  187. end;
  188.  
  189. procedure TChPswdForm.FormShow(Sender: TObject);
  190. begin
  191.   ClearEdits;
  192. end;
  193.  
  194. procedure TChPswdForm.PswdChange(Sender: TObject);
  195. begin
  196.   OkEnabled;
  197. end;
  198.  
  199. end.
  200.