📄 login.pas
字号:
unit Login;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Buttons, StdCtrls,IniFiles, XPMenu;
type
Tfrm_Login = class(TForm)
Panel1: TPanel;
Cmd_Cancel: TSpeedButton;
GroupBox1: TGroupBox;
Cmd_OK: TSpeedButton;
UserType: TComboBox;
UserName: TComboBox;
UserPwd: TLabeledEdit;
Label1: TLabel;
Label2: TLabel;
GroupBox2: TGroupBox;
Label5: TLabel;
Label6: TLabel;
Edit_Time: TEdit;
Edit_Date: TEdit;
Lab_Error: TLabel;
XPMenu1: TXPMenu;
CheckBox1: TCheckBox;
Cmd_Read_INI: TSpeedButton;
procedure Cmd_CancelClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Cmd_OKClick(Sender: TObject);
procedure UserTypeKeyPress(Sender: TObject; var Key: Char);
procedure UserNameKeyPress(Sender: TObject; var Key: Char);
procedure UserPwdKeyPress(Sender: TObject; var Key: Char);
procedure UserTypeChange(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure Cmd_Read_INIClick(Sender: TObject);
private
{ Private declarations }
PassTime:Byte;
tempPwd:string;
public
{ Public declarations }
end;
var
frm_Login: Tfrm_Login;
f: TIniFile;
implementation
uses Data, Main, func;
{$R *.dfm}
procedure Tfrm_Login.Cmd_CancelClick(Sender: TObject);
begin
system.Halt(0);
end;
procedure Tfrm_Login.FormShow(Sender: TObject);
begin
UserType.ItemIndex:=0;
UserName.ItemIndex:=0;
UserType.Items.Add('system');
with frm_data.Query_Login do
begin
Close;
Sql.Clear;
Sql.Add('SELECT Distinct User_Type FROM [Login]');
Try
Prepared;
Open;
While Not Eof do
begin
UserType.Items.Add(frm_data.Query_Login.FieldByName('User_Type').AsString);
Next;
end;
Except
Application.MessageBox('系统错误!系统在打开数据表【Login】时与远程服务器连接错误!请确认!',Pchar(Application.Title),MB_ICONWARNing);
Exit;
End;
end;
end;
procedure Tfrm_Login.FormClose(Sender: TObject; var Action: TCloseAction);
begin
system.Halt;
end;
procedure Tfrm_Login.Cmd_OKClick(Sender: TObject);
begin
inc(PassTime);
//
//**************************************************************************
//运用开发用户的密码
if CheckBox1.Checked=True then
begin
if ((trim(UserType.Text)='system') and (Trim(UserName.Text)='system') and (Trim(UserPwd.Text)='system')) then
begin
f:=TIniFile.Create(ExtractFileDir(application.Exename)+'\Login.ini');
f.WriteString('NetSetting','User_Type','超级用户');
f.WriteString('NetSetting','User_Name',trim(userName.Text));
f.WriteString('NetSetting','User_Date',trim(Edit_Date.Text));
f.WriteString('NetSetting','User_Time',trim(Edit_Time.Text));
f.Free;
func.Pub_Right:='';
func.Login_Name:=Trim(UserName.Text);//调用INI文件的登陆人员的名称的过程
Cmd_Read_INIClick(Sender); //调用INI文件的单位信息的过程
//显示主窗体
frm_main:=Tfrm_Main.Create(self);
frm_main.Cmd_UserType.Enabled:=true;
frm_main.Cmd_Cancel.Enabled:=True;
frm_main.Cmd_Right.Enabled:=True;
frm_main.Cmd_Change.Enabled:=True;
frm_main.Cmd_User.Enabled:=True;
frm_Main.StatusBar1.Panels[0].Text:='当前操作员为:超级用户';
frm_Main.ShowModal;
frm_Login.close;
frm_main.Free;
end
else
begin
Lab_Error.Caption:=Format('密码错误第%d次,请重新输入:',[PassTime]);
if PassTime>=3 then
begin
MessageBox(Handle,'连续输入错误密码超过3次,程序退出!','信息',MB_OK);
system.Halt(0);
end
else
begin
application.MessageBox('[连续输入错误密码超过3次,程序退出]!'+#13#10#13+'用户名和密码不符合!请确认后再输入!',Pchar(Application.Title),mb_Iconwarning);
UserPwd.Text:='';
UserPwd.SetFocus;
end;
UserPwd.SetFocus;
UserPwd.SelectAll;
exit;
end;
end;
//**************************************************************************
//
//--------------------------------------------------------------------------
//不运用开发用户密码
if CheckBox1.Checked=False then
begin
tempPwd:=Decrypt(trim(UserPwd.Text),'luersoft'); //解开密码
with frm_data.Query_Login do
begin
Close;
Sql.Clear;
Sql.Add('Select * from [Login] where User_Type='''+Trim(UserType.Text)+''' and user_Name='''+trim(userName.Text)+''' and User_Pwd='''+Trim(tempPwd)+'''');
open;
if frm_data.Query_Login.RecordCount<1 then
begin
Lab_Error.Caption:=Format('密码错误第%d次,请重新输入:',[PassTime]);
if PassTime>=3 then
begin
MessageBox(Handle,'连续输入错误密码超过3次,程序退出!','信息',MB_OK);
system.Halt(0);
end
else
begin
application.MessageBox('[连续输入错误密码超过3次,程序退出]!'+#13#10#13+'用户名和密码不符合!请确认后再输入!',Pchar(Application.Title),mb_Iconwarning);
UserPwd.Text:='';
UserPwd.SetFocus;
end;
end
else if frm_data.Query_Login.RecordCount=1 then
begin
f:=TIniFile.Create(ExtractFileDir(application.Exename)+'\Login.ini');
f.WriteString('NetSetting','User_Type',trim(userType.Text));
f.WriteString('NetSetting','User_Name',trim(userName.Text));
f.WriteString('NetSetting','User_Date',trim(Edit_Date.Text));
f.WriteString('NetSetting','User_Time',trim(Edit_Time.Text));
f.Free;
func.Login_Name:=Trim(UserName.Text); //调用INI文件的登陆人员的名称的过程
Cmd_Read_INIClick(Sender);//调用INI文件的单位信息的过程
//提取操作权限
with frm_Data.Query_Stored do
begin
Close;
Sql.Clear;
Sql.Add('SELECT * FROM [User_Right_View] where User_Type='''+trim(UserType.Text)+''' and User_Name='''+Trim(UserName.Text)+'''');
Open;
func.Pub_Right:='';
if frm_Data.Query_Stored.RecordCount>0 then
begin
First;
while not Eof do
begin
func.Pub_Right:=func.Pub_Right+frm_data.Query_Stored.FieldByName('Right_Name').asstring+',';
Next ;
end;
//显示主窗体
frm_main:=Tfrm_Main.Create(self);
frm_Main.StatusBar1.Panels[0].Text:='当前操作员为:'+trim(UserName.Text);
frm_Main.ShowModal;
frm_Login.close;
frm_main.Free;
end
else
begin
Application.MessageBox('由于你还没有获得任何管理权限!'+#13#10#13+'不能使用系统!'+#13#10#13+'请与系统管理员取得联系!',Pchar(Application.Title),MB_ICONWARNING);
Exit;
end;
end;
end;
end;
end;
//--------------------------------------------------------------------------
end;
procedure Tfrm_Login.UserTypeKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then UserName.SetFocus;
end;
procedure Tfrm_Login.UserNameKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then UserPwd.SetFocus;
end;
procedure Tfrm_Login.UserPwdKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then Cmd_OKClick(sender);
end;
procedure Tfrm_Login.UserTypeChange(Sender: TObject);
begin
if UserType.ItemIndex=0 then
begin
Application.MessageBox('',Pchar(Application.Title),MB_ICONWARNing);
UserType.SetFocus;
end;
with frm_data.Query_Login do
begin
Close;
Sql.Clear;
Sql.Add('SELECT Distinct User_Name FROM [Login] WHERE User_Type='''+Trim(UserType.Text)+''' ');
Try
Prepared;
Open;
UserName.Clear;//先清空 UserName的值
//**********************************
//加载开发用户密码
if Trim(UserType.Text)='system' then
begin
UserName.Items.Add('system');
end;
//**********************************
while Not EOf do
begin
UserName.Items.Add(frm_data.Query_Login.FieldByName('User_Name').AsString);
Next;
end;
Except
Application.MessageBox('系统错误!系统在打开数据表【Login】时与远程服务器连接错误!请确认!',Pchar(Application.Title),MB_ICONWARNing);
Exit;
End;
end;
end;
procedure Tfrm_Login.CheckBox1Click(Sender: TObject);
begin
if checkBox1.Checked=true then
begin
UserType.Text:='system';
UserName.Text:='system';
end;
end;
//******************************************************************************
//利用INI文件
//读出使用软件单位的信息
procedure Tfrm_Login.Cmd_Read_INIClick(Sender: TObject);
var
MyIni:TiniFile;
begin
MyIni:=TIniFile.Create(ExtractFileDir(application.Exename)+'\DWXX.ini');
func.Use_mond:=MyIni.ReadString('NetSetting','GSMC',''); //单位名称
func.Mond_Address:=MyIni.ReadString('NetSetting','DWDZ',''); //单位地址
func.Link_Tel:=MyIni.ReadString('NetSetting','LXDH',''); //联系电话
func.Link_Man:=MyIni.ReadString('NetSetting','LXRY',''); //联系人员
MyIni.Free;
end;
//******************************************************************************
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -