⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loginfm.pas

📁 TSecurity提供登陆/注销/修改口令的控件。(有源代码)工作在:D1 D2 D3 D4 D5。作者:Ma Jun
💻 PAS
字号:
unit loginfm;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
     Buttons, ExtCtrls, Db, DBTables, Dialogs, Security;

type
  TSecurityLoginDialog = class(TForm)
    OKBtn: TButton;
    CancelBtn: TButton;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    EditPassword: TEdit;
    LabelTitle: TLabel;
    User: TComboBox;
    procedure FormCreate(Sender: TObject);
    procedure OKBtnClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    InputTimes : Integer;
    FUserID, FUserName : String;

    function ComparePassword:Boolean;

    procedure DoParserIDName;
    function GetUserID:String;
    function GetUserName:String;
  public

    NotOK : Boolean;
    InputLimits : Integer;

    property InputUserID  :String read GetUserID;
    property InputUserName:String read GetUserName;
  end;

var
  SecurityLoginDialog: TSecurityLoginDialog;

implementation

{$R *.DFM}

function TSecurityLoginDialog.ComparePassword:Boolean;
var
  mID, mPass:String;
begin
  DoParserIDName;
  Result := (Owner as TSecurity).ValidatePassword(FUserID, EditPassword.Text);
end;

procedure TSecurityLoginDialog.FormCreate(Sender: TObject);
begin
  NotOK := True;
  InputTimes := 0;
end;

procedure TSecurityLoginDialog.OKBtnClick(Sender: TObject);
begin
  Inc(InputTimes);
  if ComparePassword then
  begin
    Close;
    ModalResult := mrOk;
  end
  else
  begin
    EditPassword.Text := '';
    MessageDlg('Password error, try again',mtError,[mbOk],0);
    EditPassword.SetFocus;
    if InputTimes=InputLimits then Close;
  end;
end;

procedure TSecurityLoginDialog.FormActivate(Sender: TObject);
begin
  if User.Items.Count>0 then User.ItemIndex := 0;
  EditPassword.SetFocus;
end;

procedure TSecurityLoginDialog.DoParserIDName;
var
  I : Integer;
  blID, blName : Boolean;
begin
  // Parser the User.Text, You can improve it to meet your own needs
  // 1. if there '[]' in text, eg. '[001] Ma Jun'
  // 2. if there ' '(blank) in text, '001 Ma Jun'
  // 3. if none of above, then ID = User.Text
  FUserID   := '';
  FUserName := '';
  blID := False;
  blName := False;

  if (Pos(']',User.Text)>1) or (Pos(')',User.Text)>1) then
  begin
  // {
  for I:=1 to length(User.Text) do
  begin
    if (User.Text[I]='[') or (User.Text[I]='(') then
    begin
      blID:=True;
      continue;
    end;
    if (User.Text[I]=']') or (User.Text[I]=')') then
    begin
      blID:=False;
      blName := True;
      continue;
    end;
    if blID   then FUserID  := FUserID +User.Text[I];
    if blName then FUserName := FUserName+User.Text[I];
  end;
  // }
  end
  else
  begin
    if Pos(' ',User.Text)>1 then
    begin
      I := Pos(' ',User.Text);
      FUserID := Copy(User.Text,1,I);
      FUserName:= Copy(User.Text,I+1, Length(User.Text));
    end
    else FUserID := User.Text;
  end;
  FUserID   := TrimLeft(FUserID);
  FUserName := TrimLeft(FUserName);
end;

function TSecurityLoginDialog.GetUserID:String;
begin
  DoParserIDName;
  Result := FUserID;
end;

function TSecurityLoginDialog.GetUserName:String;
begin
  DoParserIDName;
  Result := FUserName;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -