Delphi下用户登录+识别验证码_源码
unit untLogin;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, FlatUtils, FlatBtns, FlatCtrls, DB, ADODB, ExtCtrls,
SkinCaption, WinSkinData;
type
Tlogin = class(TForm)
btn1: TFlatButton;
btn2: TFlatButton;
lbl1: TLabel;
lbl2: TLabel;
con1: TADOConnection;
qry1: TADOQuery;
edt1: TEdit;
edt2: TEdit;
img1: TImage;
edt3: TEdit;
skndt1: TSkinData;
skncptn1: TSkinCaption;
procedure btn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure img1Click(Sender: TObject);
procedure edt1KeyPress(Sender: TObject; var Key: Char);
procedure edt2KeyPress(Sender: TObject; var Key: Char);
procedure edt3KeyPress(Sender: TObject; var Key: Char);
procedure btn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure InterData;//加载数据集
procedure PwdImg(img:Timage);
end;
var
login: Tlogin;
username:string;
pwdimgstr : string;
implementation
{$R *.dfm}
procedure Tlogin.btn1Click(Sender: TObject);
begin
if Edt1.Text=‘‘ then //如果Edit1的文本 // 使edit1的颜色变为红色 clRed
end
else //否则
begin
Edt1.Color:=clWindow; //edit1的的颜色为当前组件的
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
面背景色
end;
if Edt2.Text=‘‘ then
begin
edt2.Color:=clWindow; //clRed
end
else
begin
Edt2.Color:=clWindow;
end;
login.qry1.Active := false; //关闭数据集
login.qry1.SQL.Clear; //清空SQL语句,执行动态SQL查询
login.qry1.SQL.Add(‘select * from login’); //从表gzy(公司职员表)中查询所有用户
login.qry1.SQL.Add(‘ where g_name=‘ + quotedstr(trim(edt1.Text))); //条件是用户名等于edit1的文本 //并且密码等于edit2的文本 //打开数据库
if not login.qry1.Eof then //.Eof的作用为确定当前的指针是否在数据集的末尾 begin
if trim(edt3.Text)<>trim(pwdimgstr) then
begin
showmessage(‘验证码不正确’);
edt3.Clear;
PwdImg(img1);
end
else if not login.qry1.Fields[3].value then //判断Adoquery1字段3的值,值为假则继续执行
begin
if login.qry1.Fields[2].value = ‘超级管理员’ then //如果Adoquery1第二个字段的值
为’超级管理员’
begin
ShowMessage(‘登录成功,您是超级管理员~’);
edt2.Text:=‘‘;
edt3.Text:=‘‘;
PwdImg(img1);
end;
if login.qry1.Fields[2].Value = ‘管理员’ then //否则如果Adoquery1第二个字段
的值为’管理员’
begin
ShowMessage(‘登录成功,您是管理员~’);
edt2.Text:=‘‘;
edt3.Text:=‘‘;
PwdImg(img1);
end;
if login.qry1.Fields[2].Value = ‘普通用户’ then //否则如果Adoquery1第二个字
段的值为’普通用户’
begin
ShowMessage(‘登录成功,您是普通用户~’);
edt2.Text:=‘‘;
edt3.Text:=‘‘;
PwdImg(img1);
end;
username:=Edt1.Text; //把edit1的值赋给username
end
else
begin
showmessage(‘用户已禁用~~’); //显示信息
end;
end
else
begin
showmessage(‘用户名、密码或验证码错误~~’);
Edt1.SetFocus;
edt1.Clear;
edt2.Clear;
edt3.Clear;
end;
end;
procedure Tlogin.InterData;///初始化目录树////
var
DataName:string;
begin
DataName := ExtractFilePath(Application.ExeName) + ‘\data.mdb’; if
FileExists(DataName) then
begin
con1.Connected := False;
con1.ConnectionString := ‘Provider=Microsoft.Jet.OLEDB.4.0;’ + ‘Data
Source=‘ + DataName + ‘;Persist Security Info=False’; con1.LoginPrompt :=
false;
con1.KeepConnection := True;
con1.Connected := True;
end
else
begin
MessageBox(Application.Handle,’数据库文件不存在!’,’错误’, MB_OK);
exit;
end;
qry1.Close;
qry1.SQL.Clear;
qry1.SQL.Add(‘select * from login’);
qry1.Open;
end;
procedure Tlogin.FormCreate(Sender: TObject);
begin
InterData;
PwdImg(img1);
end;
procedure Tlogin.PwdImg(img:Timage);
var
I,j,k: Integer;
vPoint: TPoint;
vLeft: Integer;
arrStr:array [1..36]of string ;
begin
pwdimgstr:=‘‘;
arrStr[1]:=‘0’; arrStr[2]:=‘1’; arrStr[3]:=‘2’; arrStr[4]:=‘3’;
arrStr[5]:=‘4’; arrStr[6]:=‘5’; arrStr[7]:=‘6’; arrStr[8]:=‘7’;
arrStr[9]:=‘8’; arrStr[10]:=‘9’; arrStr[11]:=‘A’; arrStr[12]:=‘B’;
arrStr[13]:=‘C’; arrStr[14]:=‘D’; arrStr[15]:=‘E’; arrStr[16]:=‘F’;
arrStr[17]:=‘G’; arrStr[18]:=‘H’; arrStr[19]:=‘I’; arrStr[20]:=‘J’;
arrStr[21]:=‘K’; arrStr[22]:=‘L’; arrStr[23]:=‘M’; arrStr[24]:=‘N’;
arrStr[25]:=‘O’; arrStr[26]:=‘P’; arrStr[27]:=‘Q’; arrStr[28]:=‘R’; arrStr[29]:=‘S’;
arrStr[30]:=‘T’; arrStr[31]:=‘U’; arrStr[32]:=‘V’; arrStr[33]:=‘W’; arrStr[34]:=‘X’;
arrStr[35]:=‘Y’; arrStr[36]:=‘Z’; for j:=1 to 4 do
begin
Randomize;
k:=strtoint(Format(‘%.1d’,[Random(36)]));
pwdimgstr:=pwdimgstr+trim(arrStr[k])
end;
vLeft:=10;
img.picture:=nil;
for I:= 1 to Length(pwdimgstr) do
begin
with Img do
begin
Canvas.Font.Size := Random(10)+ 9;
Canvas.Font.Color := RGB(Random(256) and $C0, Random(256) and
$C0,Random(256) and $C0);
if Random(2)=1 then
Canvas.Font.Style := [fsBold]
else Canvas.Font.Style := [];
begin
Canvas.Font.Name := Screen.Fonts[10];
vPoint.X := Random(4)+ vLeft;
vPoint.Y := Random(5);
Canvas.TextOut(vPoint.X,vPoint.Y,pwdimgstr[I]); vLeft := vPoint.X +
Canvas.TextWidth(pwdimgstr[I]); end;
end;
end;
end;
procedure Tlogin.img1Click(Sender: TObject);
begin
PwdImg(img1);
end;
procedure Tlogin.edt1KeyPress(Sender: TObject; var Key: Char); begin
if key=#13 then //#13为回车键
begin
edt2.SetFocus; //焦点跳至Button1
end;
end;
procedure Tlogin.edt2KeyPress(Sender: TObject; var Key: Char); begin
if key=#13 then //#13为回车键
begin
edt3.SetFocus; //焦点跳至Button1
end;
end;
procedure Tlogin.edt3KeyPress(Sender: TObject; var Key: Char); begin
if key=#13 then //#13为回车键
begin
btn1.SetFocus; //焦点跳至Button1
end;
end;
procedure Tlogin.btn2Click(Sender: TObject);
begin
Application.Terminate;
end;
end.