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

📄 loginunit.pas

📁 一个用delphi 开发的商场销售系统 涵盖很多功能
💻 PAS
字号:
unit LoginUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, DB, DBTables, Registry, DBCtrls;

type
  TLoginForm = class(TForm)
    PanelBkGnd: TPanel;
    Label2: TLabel;
    Label1: TLabel;
    Label3: TLabel;
    L_name: TLabel;
    Panel_button: TPanel;
    Bevel_button: TBevel;
    OKBtn: TButton;
    CancelBtn: TButton;
    E_ID: TEdit;
    E_PassWord: TEdit;
    query_pass: TQuery;
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure OKBtnClick(Sender: TObject);
    procedure E_IDChange(Sender: TObject);
    procedure E_IDKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure CancelBtnClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    B_halt: bool;
    I_logo: integer;
    { Private declarations }
  public

    { Public declarations }
  end;

var
  LoginForm: TLoginForm;

implementation

uses MainUnit, LogoUnit;

{$R *.dfm}

procedure TLoginForm.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
var
  S_temppass: string;
begin
  inherited;
  if b_halt then
  begin
    query_pass.Close;
    query_pass.Free;
    application.Terminate;
    exit;
  end
  else b_halt := true;
  S_temppass := E_password.text;
  USERNAME := L_name.Caption;
  if (E_id.Text = '') or (L_name.Caption = '未知用户') then //用户名为空
  begin
    messagedlg('用户错误', mterror, [mbok], 0);
    E_id.SetFocus;
    canclose := false;
    exit;
  end //end if
  else //用户名非空
  begin
    with query_pass do
    begin
      first;
      while not eof do //检查用户名与密码
      begin
        if (USERNAME = fieldbyname('USERname').asstring) and
          (S_tempPass = fieldbyname('Psd').asstring) then
        begin
          USERRIGHTSNAME := fieldbyname('rightsname').AsString;
          USERRIGHTS := fieldbyname('rights').AsString;
          break;
        end;
        next;
      end; //end while
      if eof then //用户名与密码不符
      begin
        inc(I_logo);
        if I_logo >= 3 then
        begin
          messagedlg('您已尝试超过 3 次,系统将停止运行!', mterror, [mbok], 0);
          query_pass.Close;
          query_pass.Free;
          application.Terminate;
        end
        else
        begin
          messagedlg('用户名与密码不符,请检查后重新输入。' + #13 + #13
            + '你还有 ' + inttostr(3 - I_logo) + ' 次机会!', mterror, [mbok], 0);
          e_password.SetFocus;
          e_password.SelectAll;
          canclose := false;
          exit;
        end;
      end; //end if
    end; //end with
  end; //end else if;
  MainForm.StatusBar_main.Panels.Items[3].Text := '操作员:【' + USERNAME + '】 权限:〖' + USERRIGHTSNAME + '〗';
  query_pass.Free;
  canclose := true;
end;


procedure TLoginForm.OKBtnClick(Sender: TObject);
begin
  b_halt := false;
  self.Close;
end;

procedure TLoginForm.E_IDChange(Sender: TObject);
begin
  with query_pass do
  begin
    first;
    while not eof do
    begin
      if E_id.Text = fieldbyname('ID').AsString then
      begin
        L_name.Caption := fieldbyname('USERName').AsString;
        exit;
      end
      else
        L_name.Caption := '未知用户';
      next;
    end;
  end;
end;

procedure TLoginForm.E_IDKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key = 27 then
  begin
    cancelbtn.Click;
    exit;
  end;
  if (key = 13) or (key = 40) then { 判断是按执行键}
  begin
    key := 0;
    perform(WM_NEXTDLGCTL, 0, 0); {移动到下一个控件}
  end;
end;

procedure TLoginForm.CancelBtnClick(Sender: TObject);
begin
  halt;
end;

procedure TLoginForm.FormCreate(Sender: TObject);
var
  reg: TRegistry;
begin
  self.Caption := application.Title + ' - ';
  self.Caption := self.Caption + '用户登录';
  I_logo := 0;
  query_pass.DatabaseName := 'CPXSGL';
  B_halt := true;
  reg := TRegistry.Create;
  Reg.RootKey := HKEY_CURRENT_USER;
  with query_pass do
  begin
    sql.text := 'SELECT Sysuser.ID, Sysuser.NAME USERNAME, Sysuser.PASS Psd,'
      + ' SysUserRights.NAME RIGHTSNAME, SysUserRights.RIGHTS RIGHTS FROM Sysuser '
      + ' INNER JOIN SysUserRights ON  (Sysuser.RIGHTS = SysUserRights.NAME)'
      + ' ORDER BY Sysuser.ID';
    try
      open;
    except
      if LogoForm.Showing then
        LogoForm.Destroy;
      messagedlg('数据库打开错误,可能指定的系统数据库文件不存在!' + #13 + #13
        + '系统将终止运行,请重新尝试打开本程序。'
        + #13 + #13 + '如果依然出现本信息,请与程序供应商联系。', mtError, [mbok], 0);
      close;
      try
        reg.DeleteKey(S_RegTree);
      finally
        reg.CloseKey;
        reg.free;
      end;
      application.Terminate;
    end;
  end;
end;


end.

⌨️ 快捷键说明

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