用Delphi制作另类密码窗口
软件世界
通常的密码窗口是通过键盘输入字符来验证密码,这里向大家介绍一种另类密码窗口,它是通过图形组合来实现密码验证的,程序运行如(图1)所示。具体操作步骤如下:

1.准备两幅16×16的位图,分别命名为“no.bmp”和“ok.bmp”, 如(图2)所示,然后放入当前程序目录中。

2.在新建窗体中加入“PaintBox”和“Button”两个控件,将“PaintBox”的尺寸调整为80×80,然后输入代码:
unit Unit1;
……
var
Form1: TForm1;
Okbmp,Nobmp:TBitmap;
implementation
{$R *.dfm}
type
Myarray=array[1..5,1..5]of Integer; //定义一个二维数组类型
var
Array2:Myarray;
const
Array1:Myarray=((0,0,1,0,0),(0,1,0,1,0),(1,0,0,0,1),(0,1,0,1,0),(0,0,1,0,0));//为密码数组赋值
procedure TForm1.FormCreate(Sender: TObject);
var
I,J:Integer;
Currdir:array[0..255]of char;
begin
GetCurrentDirectory(250,@Currdir);//取当前程序目录然后载入图片
Okbmp:=Tbitmap.Create;
Okbmp.LoadFromFile(strpas(Currdir)+'\'+'ok.bmp');
Nobmp:=Tbitmap.Create;
Nobmp.LoadFromFile(strpas(Currdir)+'\'+'no.bmp');
for I:=1 to 5 do
for J:=1 to 5 do
begin
PaintBox1.Canvas.Draw((I-1)*16,(J-1)*16,Nobmp);
Array2[I,J]:=0; //将PaintBox1初始化为矩阵形式
end;
end;
procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
var
I,J:Integer;
begin
I:=Y Div 16+1;
J:=X Div 16+1; //根据鼠标的位置计算当前数组的位置
if Array2[I,J]=0 then // 判断数组的状态然后进行转换
begin
PaintBox1.Canvas.Draw((J-1)*16,(I-1)*16,Okbmp);
Array2[I,J]:=1;
end
else
begin
PaintBox1.Canvas.Draw((J-1)*16,(I-1)*16,Nobmp);
Array2[I,J]:=0;
end;
end;
procedure TForm1.OkClick(Sender: TObject);
var
I,J:Integer;
begin
for I:=1 to 5 do
for J:=1 to 5 do
if Array1[I,J]<>Array2[I,J] then //通过两个数组对比进行密码验证
begin
Application.MessageBox('密码错误!请重新组合。','警告',0);
exit;
end;
Application.MessageBox('密码组合成功。','恭喜',0);
end;
end.
说明:程序录入完成后,还需将Form1的OnPaint设置为FormCreate,这样才能完成画板的初始化;图片和密码图形可随意制定;PaintBox的鼠标事件没有区分左右键;还有许多功能等待你来扩展。该程序在Windows98、Delphi6.0中通过。