在五月麦田的帮助下做成了,感觉挺好,验证码输入的时候需要大写:

组件: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做验证码登录窗口的更多相关文章

  1. Django做验证码登录

    验证码 关注公众号"轻松学编程"了解更多. 1.作用 在用户登录,注册以及一些敏感操作的时候,我们为了防止服务器被暴力请求,或爬虫爬取,我们可以使用验证码进行过滤,减轻服务器的压力 ...

  2. C# 登录窗口的设计技巧

    记得很久之前要用C#做个需要登录的小东西,自己之前完全没有编写WinForm的经验,整个过程中,自己感觉应该怎么写就怎么写,时常导致许多逻辑性的错误,比如在做这个登录窗口的时候,应该实现的效果是,用户 ...

  3. Delphi用户登录窗口框架

    经常看到一些新手在CSDN上问登录窗口如何写,也看到N多人form1.show/form1.create/…中做form2.show之类.实在看不下去了.这种写法实在不是很好,于是还是把自己理解的登录 ...

  4. 基于WebForm+EasyUI的业务管理系统形成之旅 -- 登录窗口(Ⅱ)

    上篇<基于WebForm+EasyUI的业务管理系统形成之旅 -- 系统设置>,主要是介绍系统浏览器在线下载安装,这些前期准备是非常重要的. 最近忙于将工程管理系统中各个模块,用业务流程方 ...

  5. WPF做验证码,小部分修改原作者内容

    原文地址:http://www.cnblogs.com/tianguook/p/4142346.html 首先感谢aparche大牛的帖子,因为过两天可能要做个登录的页面,因此,需要用到验证码,从而看 ...

  6. JCaptcha做验证码遇到的问题引出的思考

    JCaptcha用来做用户登录时期的验证码的,但是今天将开放的应用系统部署到生产环境的时候,遇到了问题,总是提示验证码不对.后台报出来下面的错误: com.octo.captcha.service.C ...

  7. QUI操作超时弹出登录窗口登录的处理方式

    在使用QUI开发的业务系统中,如果长时间没操作,session过期后,再次操作系统超时会自动跳转到登陆页面,如果当前有一些操作没有保存,需要重新登录后再次填写信息,用户体验很不好! 为了避免超时后页面 ...

  8. 高仿QQ即时聊天软件开发系列之二登录窗口界面

    继上一篇高仿QQ即时聊天软件开发系列之一开端之后,开始做登录窗口 废话不多说,先看效果,只有界面 可能还有一些细节地方没有做,例如那个LOGO嘛,不要在意这些细节 GIF虽短,可是这做起来真难,好吧因 ...

  9. C# WPF 建立无边框(标题栏)的登录窗口

    前言:笔者最近用c#写WPF做了一个项目,此前未曾做过完整的WPF项目,算是一边学一边用,网上搜了不少资料,效率当然是不敢恭维的,有时会在一些很简单的问题上纠结很长时间,血与泪的教训可不少. 不过,正 ...

随机推荐

  1. wireshark基础学习—第一部分wireshark的基础知识

    1.Wireshark主窗口 Wireshark的主窗口如下所示 2.每个面板的内容 Packet List(数据包列表): 最上面的面板用表格显示了当前不惑文件中的所有数据包,其中包括了数据包序号. ...

  2. 动态修改JS对象的值及React setState

    一.在JS里使用(非ES6) 实现场景: 给一个空对象填充某一指定数组内的值 并随机生成数量 const fruit = ['apple', 'banana', 'orange'] let fruit ...

  3. Project Euler 345: Matrix Sum

    题目 思路: 将问题转化成最小费用流 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #incl ...

  4. 20175317 《Java程序设计》第七周学习总结

    20175317 <Java程序设计>第七周学习总结 教材学习内容总结 第七周我学习了教材第八章的内容,学习了许多常用实用类,有以下内容: String类 1. 如何构造String对象 ...

  5. ape 文件 转化为mp3 文件

    试了很多软件,最后才发觉 any-audio-converter最好用. 可以吧ape 按 cue切割好,然后转化成 MP3 官网可以免费下载: https://www.any-audio-conve ...

  6. locust启动命令

    locust运行测试脚本 locust -f .\load_test.py --host=https://www.baidu.com -f 指定性能测试脚本文件. --host 指定被测试应用的URL ...

  7. English trip V2 - 4. Really Wild Teacher:Maple Key:Adjectives of feeling

    In this lesson you will learn how to recognize animals and describe feeling. 课上内容(Lesson) 词汇(Key Wor ...

  8. Monkey工具

    Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括android测试框架.CTS.Monkey. Monkeyrunner.benchmark.其它test too ...

  9. vue项目中使用插件将字符串装化为格式化的json数据(可伸缩)

    插件地址:https://www.npmjs.com/package/vue-json-viewer 第一步:安装vue-json-viewer插件 $ npm install vue-json-vi ...

  10. VUE 创建element项目

    前提:电脑安装git node.js 一.右键Git Bash Here 二.$ vue init webpack element //新建一个element项目,element是文件夹名字 $ cd ...