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

📄 loginunit.pas

📁 简单的进销存系统,包含登陆等界面,内容丰富,各种技巧,适合初学者
💻 PAS
字号:
unit LoginUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls,  StdCtrls, DB, ADODB, Buttons, jpeg;

type
  TLoginForm = class(TForm)
    ADOQuery_Check: TADOQuery;
    Image1: TImage;
    Label3: TLabel;
    E_PassWord: TEdit;
    L_name: TLabel;
    Label2: TLabel;
    Label1: TLabel;
    E_ID: TEdit;
    btnOK: TBitBtn;
    btnExit: TBitBtn;
    procedure btnExit1Click(Sender: TObject);
    procedure btnOK1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure btnOKClick(Sender: TObject);
    procedure btnExitClick(Sender: TObject);
    procedure E_PassWordKeyPress(Sender: TObject; var Key: Char);
    procedure E_IDKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
    procedure E_IDChange(Sender: TObject);
  private
    { Private declarations }
    B_halt: bool;
    I_logo: integer;
  public
    { Public declarations }
  end;

var
  LoginForm: TLoginForm;

implementation

uses DMUnit, LogoUnit,MainUnit;

{$R *.dfm}

procedure TLoginForm.btnExit1Click(Sender: TObject);
begin
        application.Terminate;
end;

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

procedure TLoginForm.FormCreate(Sender: TObject);
begin
        self.Caption := application.Title + ' - ';
        self.Caption := self.Caption + '用户登录';
        ////////////
        I_logo := 0;
        B_halt := true;
        ////////////
        with ADOQuery_check do
        begin
                Connection:=DM.ADOCon;
                Close;
                sql.Clear;
                sql.text := 'SELECT Sysuser.用户名, Sysuser.姓名, Sysuser.密码,'
                + ' SysUserRights.角色, SysUserRights.权限 FROM Sysuser '
                + ' INNER JOIN SysUserRights ON  (Sysuser.角色 = SysUserRights.角色)'
                + ' ORDER BY Sysuser.用户名';
                try
                        active:=true;
                except
                        if LogoForm.Showing then
                                LogoForm.Destroy;
                                messagedlg('数据库打开错误,可能指定的系统数据库文件不存在!' + #13 + #13
                                + '系统将终止运行,请重新尝试打开本程序。'
                                + #13 + #13 + '如果依然出现本信息,请与程序供应商联系。', mtError, [mbok], 0);
                                close;
                                application.Terminate;
                end;
        end;
end;


procedure TLoginForm.FormCloseQuery(Sender: TObject;
var
        CanClose: Boolean);
var
        S_temppass,S_USERID:string;
begin
        if b_halt then
        begin
                ADOQuery_check.Close;
                ADOQuery_check.Free;
                application.Terminate;
                exit;
        end
        else
                b_halt := true;
  //////////////////////////////////////////
        S_temppass :=trim(E_password.text);
        S_USERID :=trim(E_ID.Text);
  
        if (E_id.Text = '') or (L_name.Caption = '未知用户') then //用户名为空
        begin
                messagedlg('用户错误', mterror, [mbok], 0);
                E_id.SetFocus;
                canclose := false;
                exit;
        end
        else //用户名非空
        begin
                with ADOQuery_check do
                begin
                        close;
                        open;
                        first;
                        while not eof do //检查用户名与密码
                        begin
                                if (S_USERID=trim(fieldbyname('用户名').asstring)) and (S_tempPass=trim(fieldbyname('密码').asstring)) then
                                begin

                                        UserID:=trim(fieldbyname('用户名').AsString);
                                        UserPassword:=trim(fieldbyname('密码').AsString);
                                        UserName:= trim(fieldbyname('姓名').AsString);
                                        UserRights:= trim(fieldbyname('权限').AsString);
                                        UserRightsName:= trim(fieldbyname('角色').AsString);

                                        {USER_add:=trim(fieldbyname('数据录入').AsString);
                                        USER_edit:=trim(fieldbyname('数据修改').AsString);
                                        USER_Del:=trim(fieldbyname('数据删除').AsString);
                                        USER_print:=trim(fieldbyname('数据打印').AsString);
                                        USER_Search:=trim(fieldbyname('查询').AsString);
                                        }

                                        break;
                                end;
                        next;
                        end;
                        //////////////////////////////
                        if eof then //用户名与密码不符
                        begin
                                inc(I_logo);
                                if I_logo >= 3 then
                                begin
                                        messagedlg('您已尝试超过 3 次,系统将停止运行!', mterror, [mbok], 0);
                                        ADOQuery_check.Close;
                                        ADOQuery_check.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;
        end;
  /////////////////////////

  /////////////
  MainForm.stabar.Panels.Items[2].Text := '操作员:【' + Username + '】 权限:〖' + Userrightsname + '〗';
  ADOQuery_check.Free;
  canclose := true;
  ///////////////
end;

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

procedure TLoginForm.btnExitClick(Sender: TObject);
begin
        application.Terminate;
end;

procedure TLoginForm.E_PassWordKeyPress(Sender: TObject; var Key: Char);
begin
        if(key=#13)then
        BtnOKClick(Sender);        
end;

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

procedure TLoginForm.E_IDChange(Sender: TObject);
begin
        with ADOQuery_check do
        begin
                close;
                open;
                first;
                while not eof do
                begin
                        if E_id.Text=trim(fieldbyname('用户名').AsString) then
                        begin
                                L_name.Caption:=trim(fieldbyname('姓名').AsString);
                                exit;
                        end
                        else
                                L_name.Caption := '未知用户';
                                next;
                        end;
        end;
end;

end.

⌨️ 快捷键说明

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