Delphi做验证码登录窗口
在五月麦田的帮助下做成了,感觉挺好,验证码输入的时候需要大写:
组件:LabelEdit 3个 Button 2个 image 1个。

代码如下:
unit Unit1; interface uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls; type
TForm1 = class(TForm)
Image1: TImage;
LabeledEdit1: TLabeledEdit;
LabeledEdit2: TLabeledEdit;
LabeledEdit3: TLabeledEdit;
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Image1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function DrawImg(img: TImage): string;
public
{ Public declarations }
end; var
Form1: TForm1;
var
str:string;
implementation {$R *.dfm} function TForm1.DrawImg(img: TImage): string; //画出验证码函数
var
I,j,k: Integer;
vPoint: TPoint;
vLeft: Integer;
arrStr:array [..]of string ;
strResult: string;
begin
strResult := '';
arrStr[] := ''; arrStr[]:=''; arrStr[]:=''; arrStr[]:='';
arrStr[] := ''; arrStr[]:=''; arrStr[]:=''; arrStr[]:='';
arrStr[] := ''; arrStr[]:=''; arrStr[]:='A'; arrStr[]:='B';
arrStr[] := 'C'; arrStr[]:='D'; arrStr[]:='E'; arrStr[]:='F';
arrStr[] := 'G'; arrStr[]:='H'; arrStr[]:='I'; arrStr[]:='J';
arrStr[] := 'K'; arrStr[]:='L'; arrStr[]:='M'; arrStr[]:='N';
arrStr[] := 'O'; arrStr[]:='P'; arrStr[]:='Q'; arrStr[]:='R';
arrStr[] := 'S'; arrStr[]:='T'; arrStr[]:='U'; arrStr[]:='V';
arrStr[] := 'W'; arrStr[]:='X'; arrStr[]:='Y'; arrStr[]:='Z';
For j:= to do
begin
Randomize;
k := strtoint(Format('%.1d',[Random()]));
strResult := strResult + trim(arrStr[k])
end;
vLeft := ;
img.picture := nil;
for I := to Length(strResult) do
begin
with Img do
begin
Canvas.Font.Size := Random()+ ;
Canvas.Font.Color := RGB(Random() and $C0,
Random() and $C0, Random() and $C0);
if Random()= then
Canvas.Font.Style := [fsBold]
else Canvas.Font.Style := [];
begin
Canvas.Font.Name := Screen.Fonts[];
vPoint.X := Random()+ vLeft;
vPoint.Y := Random();
Canvas.TextOut(vPoint.X, vPoint.Y,strResult[I]);
vLeft := vPoint.X + Canvas.TextWidth(strResult[I]);
end;
end;
end;
result := strResult; //返回值
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
str := DrawImg(Image1);
end; procedure TForm1.Image1Click(Sender: TObject);
begin
str := DrawImg(Image1);
end; procedure TForm1.Button1Click(Sender: TObject);
begin
if (LabeledEdit1.Text = 'Hello') and (LabeledEdit2.Text = 'world') and (LabeledEdit3.Text = str) then
MessageBox(Handle, '登陆成功!', '提示', MB_OK); if LabeledEdit1.Text <> 'Hello' then
begin
MessageBox(Handle, '用户名错误,请重新输入!', '提示', MB_OK);
LabeledEdit1.Text := '';
LabeledEdit2.Text := '';
LabeledEdit3.Text := '';
str := DrawImg(Image1);
end else if LabeledEdit2.Text <> 'world' then
begin
MessageBox(Handle, '密码错误,请重新输入!', '提示', MB_OK);
LabeledEdit1.Text := '';
LabeledEdit2.Text := '';
LabeledEdit3.Text := '';
str := DrawImg(Image1);
end else if LabeledEdit3.Text <> str then
begin
MessageBox(Handle, '验证码错误,请重新输入!', '提示', MB_OK);
LabeledEdit1.Text := '';
LabeledEdit2.Text := '';
LabeledEdit3.Text := '';
str := DrawImg(Image1);
end;
end; procedure TForm1.Button2Click(Sender: TObject); //退出
begin
close;
end; end.
其实也可以这样写:

代码如下:
unit Unit1; interface uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls; type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);
var
arrStr:array [..]of string ;
begin
arrStr[] := ''; arrStr[]:=''; arrStr[]:=''; arrStr[]:='';
arrStr[] := ''; arrStr[]:=''; arrStr[]:=''; arrStr[]:='';
arrStr[] := ''; arrStr[]:=''; arrStr[]:='A'; arrStr[]:='B';
arrStr[] := 'C'; arrStr[]:='D'; arrStr[]:='E'; arrStr[]:='F';
arrStr[] := 'G'; arrStr[]:='H'; arrStr[]:='I'; arrStr[]:='J';
arrStr[] := 'K'; arrStr[]:='L'; arrStr[]:='M'; arrStr[]:='N';
arrStr[] := 'O'; arrStr[]:='P'; arrStr[]:='Q'; arrStr[]:='R';
arrStr[] := 'S'; arrStr[]:='T'; arrStr[]:='U'; arrStr[]:='V';
arrStr[] := 'W'; arrStr[]:='X'; arrStr[]:='Y'; arrStr[]:='Z';
Image1.Canvas.TextOut( ,,arrStr[random()]);
Image1.Canvas.TextOut(,,arrStr[random()]);
Image1.Canvas.TextOut(,,arrStr[random()]);
Image1.Canvas.TextOut(,,arrStr[random()]);
end; end
Delphi做验证码登录窗口的更多相关文章
- Django做验证码登录
验证码 关注公众号"轻松学编程"了解更多. 1.作用 在用户登录,注册以及一些敏感操作的时候,我们为了防止服务器被暴力请求,或爬虫爬取,我们可以使用验证码进行过滤,减轻服务器的压力 ...
- C# 登录窗口的设计技巧
记得很久之前要用C#做个需要登录的小东西,自己之前完全没有编写WinForm的经验,整个过程中,自己感觉应该怎么写就怎么写,时常导致许多逻辑性的错误,比如在做这个登录窗口的时候,应该实现的效果是,用户 ...
- Delphi用户登录窗口框架
经常看到一些新手在CSDN上问登录窗口如何写,也看到N多人form1.show/form1.create/…中做form2.show之类.实在看不下去了.这种写法实在不是很好,于是还是把自己理解的登录 ...
- 基于WebForm+EasyUI的业务管理系统形成之旅 -- 登录窗口(Ⅱ)
上篇<基于WebForm+EasyUI的业务管理系统形成之旅 -- 系统设置>,主要是介绍系统浏览器在线下载安装,这些前期准备是非常重要的. 最近忙于将工程管理系统中各个模块,用业务流程方 ...
- WPF做验证码,小部分修改原作者内容
原文地址:http://www.cnblogs.com/tianguook/p/4142346.html 首先感谢aparche大牛的帖子,因为过两天可能要做个登录的页面,因此,需要用到验证码,从而看 ...
- JCaptcha做验证码遇到的问题引出的思考
JCaptcha用来做用户登录时期的验证码的,但是今天将开放的应用系统部署到生产环境的时候,遇到了问题,总是提示验证码不对.后台报出来下面的错误: com.octo.captcha.service.C ...
- QUI操作超时弹出登录窗口登录的处理方式
在使用QUI开发的业务系统中,如果长时间没操作,session过期后,再次操作系统超时会自动跳转到登陆页面,如果当前有一些操作没有保存,需要重新登录后再次填写信息,用户体验很不好! 为了避免超时后页面 ...
- 高仿QQ即时聊天软件开发系列之二登录窗口界面
继上一篇高仿QQ即时聊天软件开发系列之一开端之后,开始做登录窗口 废话不多说,先看效果,只有界面 可能还有一些细节地方没有做,例如那个LOGO嘛,不要在意这些细节 GIF虽短,可是这做起来真难,好吧因 ...
- C# WPF 建立无边框(标题栏)的登录窗口
前言:笔者最近用c#写WPF做了一个项目,此前未曾做过完整的WPF项目,算是一边学一边用,网上搜了不少资料,效率当然是不敢恭维的,有时会在一些很简单的问题上纠结很长时间,血与泪的教训可不少. 不过,正 ...
随机推荐
- 浏览器输入URL后,HTTP请求返回的完整过程
1.Redirect,跳转 浏览器记录里这个地址永久跳转的新地址,浏览器先去判断需不需要跳转 2.Application cache ,应用缓存 浏览器看请求的资源是否有缓存 3.DNS解 ...
- [评测]低配环境下,PostgresQL和Mysql读写性能简单对比(欢迎大家提出Mysql优化意见)
[评测]低配环境下,PostgresQL和Mysql读写性能简单对比 原文链接:https://www.cnblogs.com/blog5277/p/10658426.html 原文作者:博客园--曲 ...
- C#socket编程之实现一个简单的TCP通信
TCP(TransmissionControl Protocol)传输控制协议. 是一种可靠的.面向连接的协议(eg:打电话).传输效率低全双工通信(发送缓存&接收缓存).面向字节流.使用TC ...
- 基于vue 、vue-router 、firebase的todolist小项目
第一次写博客,都不知道改怎么写的好. 本着一颗学习的心,也希望一段时间后再回来在看看自己写的代码,会不会让自己有种不忍直视的念头 *-* 还是先上图吧~ 这是首页,主要是展示所有的列表页面,可以通过输 ...
- Jmeter 获取系统时间,和对系统时间进行增减时间
今天做了一个测试,比如发送短信验证码之后的, 验证90s被验证码有效的问题 那如何测试开发的代码,判断了90s内有效呢1. 验证码获取时间距离现在89秒,验证通过2. 验证码获取时间距离现在90秒,验 ...
- 记录Sql2012附加Sql2008的数据库出错的解决方案
只需要对要附加的数据文件[右键]->[属性]->[安全]->(选择“Authenticated Users”用户)[编辑]->让“Authenticated Users”用户具 ...
- 用node+webpack+vue新建vue项目步骤
1. 安装node,命令行输入node-v命令查看是否安装成功. 2. 安装vue:npm install vue-cli -g(全局安装). 3. 在想要创建vue项目的目录下,按住shift+右键 ...
- 解决Git Revert操作后再次Merge代码被冲掉的问题
转:https://blog.csdn.net/paul_wei2008/article/details/77477932 https://blog.csdn.net/cxn945/article/d ...
- 【C#】【对象转XML】xml序列化
笔记:xml序列化 /// <summary> /// xml序列化 /// </summary> /// <param nam ...
- python 读取文件read.csv报错 OSError: Initializing from file failed
小编在用python 读取文件read.csv的时候 报了一个错误 OSError: Initializing from file failed 初始化 文件失败 检查了文件路径,没问题 那应该是我文 ...