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

📄 login.pas

📁 一个QQ的界面源码
💻 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 + -