📄 login.pas
字号:
unit login;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Buttons, StdCtrls ,DB, TinyDB, RXCtrls, IniFiles;
type
TFrmLogin = class(TForm)
EdtPwd: TEdit;
Image1: TImage;
Label1: TLabel;
Label2: TLabel;
ChbSavePwd: TCheckBox;
ChbHideme: TCheckBox;
CbxName: TComboBox;
LabDate: TLabel;
Bevel1: TBevel;
Bevel2: TBevel;
BtnOK: TBitBtn;
BtnClose: TBitBtn;
BtnRegiste: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure BtnCloseClick(Sender: TObject);
procedure BtnRegisteClick(Sender: TObject);
procedure EdtPwdKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure CbxNameChange(Sender: TObject);
procedure BtnOKClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmLogin: TFrmLogin;
bCanClose:boolean=False;
implementation
uses user_reg, Var_Share, main, dm_share, by_user;
{$R *.dfm}
//创建用户列表数据库
function CreateDbUser:boolean;
var
DbUser:TTinyDatabase;
sDbFileName:string;
begin
Result:=True;
try
sDbFileName:=ExtractFilePath(Application.ExeName)+'users.dat';
DbUser:=TTinyDatabase.Create(FrmMain_QQ);
DbUser.DatabaseName:=sDbFileName;
DbUser.Password:='icando';
DbUser.CreateDatabase(sDbFileName,True,clNormal,'ZIP',True,'Blowfish','icando',True);
DbUser.CreateTable('UsersList',[
FieldItem('QQNumber',ftString,20),
FieldItem('UserName',ftString,20),
FieldItem('Password',ftString,16),
FieldItem('FaceID',ftInteger,3),
FieldItem('IP',ftString,15),
FieldItem('IsSavePwd',ftBoolean),
FieldItem('IsHideSelf',ftboolean),
FieldItem('RegTime',ftDateTime),
FieldItem('Memo',ftMemo)
]);
DbUser.CreateIndex('UsersList','ByQQNumber',[],['QQNumber']);
DbUser.CreateIndex('UsersList','ByUserName',[],['UserName']);
except
DeleteFile(sDbFileName);
Result:=False;
end;
end;
procedure TFrmLogin.FormCreate(Sender: TObject);
var
sDbFileName,sLastUser:string;
i:integer;
MyIni:TIniFile;
begin
//删除数据库--为测试版
// DeleteFile(ExtractFilePath(Application.ExeName)+'users.tdb');
LabDate.Caption:=FormatDateTime('yyyy''年''mm''月''dd''日''dddd',Now);
g_sIP:=GetLocalIP;
sDbFileName:=ExtractFilePath(Application.ExeName)+'users.dat';
if not FileExists(sDbFileName) then //创建用户列表数据库
begin
if not CreateDbUser then
begin
MessageBox(Application.Handle,'错误','创建用户数据库时出错!',MB_OK+MB_ICONERROR);
Abort;
end;
DMShare.TblUsers.DatabaseName:=sDbFileName;//数据库创建好后给DMShare.TblUsers设置属性
DMshare.TblUsers.TableName:='UsersList';
DMShare.TblUsers.Password:='icando';
// BtnRegiste.SetFocus;
end
else //读取数据库中用户列表
begin
DMShare.TblUsers.DatabaseName:=sDbFileName;
DMshare.TblUsers.TableName:='UsersList';
DMShare.TblUsers.Password:='icando';
DMShare.TblUsers.Open;
DMShare.TblUsers.First;
if DMShare.TblUsers.RecordCount<>0 then BtnOK.Enabled:=True;//使登陆按钮生效
for i := 0 to DMShare.TblUsers.RecordCount-1 do
begin
CbxName.Items.Add(DMShare.TblUsers.FieldValues['UserName']);
DMShare.TblUsers.Next;
end;
//读取INI文件中上次登陆用户名
MyIni := TIniFile.Create(ExtractFilePath(Application.ExeName)+'setup.ini');
try
sLastUser:=MyIni.ReadString('Info','LastUser','');
finally
MyINI.Free;
end;
if sLastUser<>'' then
begin
CbxName.ItemIndex:=CbxName.Items.IndexOf(sLastUser);
end
else
begin
CbxName.ItemIndex:=0;
end;
// EdtPwd.SetFocus;
end;
if DMShare.TblUsers.RecordCount<>0 then
begin
DMShare.TblUsers.First;
sUserName:=CbxName.Text;
DMShare.TblUsers.Locate('UserName',sUserName,[loCaseInsensitive]);
sQQNumber:=DMShare.TblUsers.FieldValues['QQNumber'];
sPassword:=DMShare.TblUsers.FieldValues['Password'];
iFaceID:=DMShare.TblUsers.FieldValues['FaceID'];
BtnOK.Enabled:=True;
end
else
begin
BtnOK.Enabled:=False;
end;
//是否自动登陆
{ if DMShare.TblUsers.FieldValues['IsSavePwd'] then
begin
EdtPwd.Text:=sPassword;
BtnOK.Click;
end;
}
end;
procedure TFrmLogin.BtnCloseClick(Sender: TObject);
begin
self.Hide;
self.Close;
if not bLogined then
begin
Application.ShowMainForm:=False;
Application.Terminate;
DMShare.TblUsers.Close;
end;
end;
procedure TFrmLogin.BtnRegisteClick(Sender: TObject);
begin
bIsReg:=False;
with TFrmReg.Create(Application) do
begin
try
ShowModal;
Update;
finally
Release;
end;
end;
if bIsReg then
begin
CbxName.Items.Add(sUserName);
CbxName.ItemIndex:=CbxName.Items.IndexOf(sUserName);
EdtPwd.Text:=sPassword;
BtnOK.Enabled:=True;
BtnOK.SetFocus;
end;
end;
procedure TFrmLogin.EdtPwdKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (BtnOK.Enabled) and (Key=Vk_Return) then
begin
BtnOK.Click;
end;
end;
procedure TFrmLogin.CbxNameChange(Sender: TObject);
begin
EdtPwd.Clear;
EdtPwd.SetFocus;
sUserName:=CbxName.Text;
DMShare.TblUsers.First;
DMShare.TblUsers.Locate('UserName',sUserName,[loCaseInsensitive]);
sQQNumber:=DMShare.TblUsers.FieldValues['QQNumber'];
sPassword:=DMShare.TblUsers.FieldValues['Password'];
iFaceID:=DMShare.TblUsers.FieldValues['FaceID'];
//“保存密码”选项
ChbSavePwd.Checked:=DMShare.TblUsers.FieldValues['IsSavePwd'];
end;
procedure TFrmLogin.BtnOKClick(Sender: TObject);
var
sDbFileName:string;
MyIni:TIniFile;
begin
if EdtPwd.Text<>sPassword then
begin
MessageBox(GetActiveWindow(),'密码错误!请核对后再行输入。','错误',MB_OK+MB_ICONERROR);
EdtPwd.Clear;
EdtPwd.SetFocus;
Abort;
end;
if not (DirectoryExists(ExtractFilePath(Application.ExeName)+sQQNumber))
or not (FileExists(ExtractFilePath(Application.ExeName)+sQQNumber+'\friends.dat')) then
begin
while DMShare.TblUsers.RecordCount<>0 do
begin
MessageBox(GetActiveWindow(),'用户数据库遭到破坏,重新注册可解决此问题!','错误',MB_OK+MB_ICONERROR);
DMShare.TblUsers.Locate('QQNumber',sQQNumber,[]);
DMShare.TblUsers.Delete;
CbxName.Items.Delete(CbxName.ItemIndex);
CbxName.ItemIndex:=0;
EdtPwd.Clear;
Abort;
end;
end;
//设定好友相关数据库的属性
sDbFileName:=ExtractFilePath(Application.ExeName)+sQQNumber+'\friends.dat';
with DMShare.TblFriends do
begin
if not Active then
begin
DatabaseName:=sDbFileName;
TableName:='Friends';
Password:='icando';
Open;
end;
end;
with DMShare.TblChatLog do
begin
if not Active then
begin
DatabaseName:=sDbFileName;
TableName:='ChatLog';
Password:='icando';
Open;
end;
end;
with DMShare.TblSystemMsg do
begin
if not Active then
begin
DatabaseName:=sDbFileName;
TableName:='SystemMsg';
Password:='icando';
Open;
end;
end;
//设定全局变量的值
sUserName:=CbxName.Text;
DMShare.TblUsers.First;
DMShare.TblUsers.Locate('UserName',sUserName,[loCaseInsensitive]);
sQQNumber:=DMShare.TblUsers.FieldValues['QQNumber'];
sPassword:=DMShare.TblUsers.FieldValues['Password'];
iFaceID:=DMShare.TblUsers.FieldValues['FaceID'];
g_sIP:=GetLocalIP;
bLogined:=True;
//判断“保存密码”选项
DMShare.TblUsers.Edit;
DMShare.TblUsers.FieldValues['IsSavePwd']:=ChbSavePwd.Checked;
DMShare.TblUsers.Post;
//关闭用户列表数据库
DMShare.TblUsers.Close;
//将上次登陆用户名写进 INI 文件
MyINI:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'setup.ini');
try
MyINI.WriteString('Info','LastUser',sUserName);
finally
MyIni.Free;
end;
bCanClose:=True;//使此窗体能够被Close
Close;
end;
procedure TFrmLogin.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=bCanClose;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -