http://www.delphibbs.com/delphibbs/dispq.asp?lid=906881
-------------------------------------------------------------
问题:密码输入三次的问题?? ( 积分:100, 回复:18, 阅读:162 )
分类:数据库-文件型 ( 版主:cAkk, 吴剑明 )
来自:小城月光, 时间:2002-2-4 21:41:00, ID:906881 [显示:小字体 | 大字体]
[
]各位大虾,我编的程序密码输入窗口放在主窗口的onpaint事件中,但老出错,主窗口dyform关不掉,请教!!!
procedure Tdyform.FormPaint(Sender: TObject);
var i,bn:integer;
begin
i:=1;
if password=false then //密码窗口是否显示
begin
password:=true;
repeat
bn:=formdl.ShowModal ;//第二次执行就出错??
if bn=mrok then //确定
if formdl.kl.text='zgc' then
i:=100
else
begin
i:=i+1;
if i>3 then
dyform.Close
else
messagedlg('您输入的密码不正确,请重新输入!!',mtwarning,[mbok],0);
end
else if bn=mrcancel then
begin
i:=100;
dyform.Close ;
end;
until i>3;
end;
来自:tseug, 时间:2002-2-4 21:49:00, ID:906895
每当dyForm关闭时,又会触发OnPaint事件的!
来自:crazycock, 时间:2002-2-4 22:00:00, ID:906913
begin
i:=1;
if password=false then //密码窗口是否显示
begin
password:=true;
repeat
bn:=formdl.ShowModal ;//第二次执行就出错??_____________________当然要出错了,已经执行过一次了。
if bn=mrok then //确定
if formdl.kl.text='zgc' then
i:=100
else
begin
i:=i+1;
if i>3 then
dyform.Close
else
messagedlg('您输入的密码不正确,请重新输入!!',mtwarning,[mbok],0);
end
else if bn=mrcancel then
begin
i:=100;
dyform.Close ;
end;
until i>3;
end;
对于要求密码输入的窗体,最好放到OnShow里面或者在OnCreate里写比较好。
来自:ugvanxk, 时间:2002-2-4 22:01:00, ID:906916
你干脆用个 确定按钮为enable=false,当输入正确 enable=true
或 用全局变量 当错误时,k1.text:=''提示重新输入
来自:小城月光, 时间:2002-2-4 22:58:00, ID:907033
[?]各位大虾我换了的写法放在确定按钮中,但还有问题,请教!!
procedure Tformdl.qdButtonClick(Sender: TObject);
var i:integer;
begin
i:=0;
repeat
//程序第二次执行repeat时好像停不下来,所以连续三次出现出错提示???
if kl.text='zgc' then
begin
formdl.close;
dyform.show;
end
else
begin
i:=i+1;
if i>3 then
close
else
begin
messagedlg('您输入的密码不正确,请重新输入!!',mtwarning,[mbok],0);
kl.text:='';
kl.SetFocus ;
end
end;
until i>3;
来自:tseug, 时间:2002-2-4 23:25:00, ID:907074
if kl.text='zgc' then
begin
formdl.close; //改成 formdl.Hide试试
dyform.show;
end
else
来自:Yakuu, 时间:2002-2-4 23:45:00, ID:907105
Hide
正确了再free掉
来自:小城月光, 时间:2002-2-5 11:30:00, ID:907838
楼上的大虾:小弟我按照你们的办法作了可还是不行,问题在于第一次出错提示后程序并没
有等待kl.text的第二次输入,而是直接执行repeat下面的语句所以连续三次出现messagelg
提示信息,怎么办?请教!!!
来自:tseug, 时间:2002-2-5 11:31:00, ID:907840
把代码发给我看看吧. tseug@263.net
来自:catbrother, 时间:2002-2-5 11:40:00, ID:907877
改在onshow里面也可以啊,密码不对用exit就行了!
来自:LiWD, 时间:2002-2-5 11:40:00, ID:907878
我有作过这方面的程序,不过,处理方法和你的不一样,如果需要,可发给你.lwd@netease.com
来自:小城月光, 时间:2002-2-5 14:54:00, ID:908321
tseug:代码已发送,请查收!!
liwd:很希望看到你的代码,如果密码有用户验证权限设置更好,谢谢!
我的地址:moontowns@163.com
来自:jrq, 时间:2002-2-5 15:29:00, ID:908400 | 编辑
procedure TForm3.BitBtn1Click(Sender: TObject);
begin
//combobox1输入用户名 edit1输入密码
if (edit1.text='') and (combobox1.text='')
then
begin
messagedlg('没有输入信息,请您输入信息!',mtinformation,[mbok],0);
combobox1.SetFocus;
exit;
end
else
begin
if (edit1.text='') then
begin
messagedlg('请您输入密码!',mtinformation,[mbok],0);
edit1.SetFocus;
exit;
end
else
if (combobox1.text='') then
begin
messagedlg('请您输用户名!',mtinformation,[mbok],0);
combobox1.SetFocus; exit;
end
end;
if (edit1.text<>'')and(combobox1.text<>'')
then
begin
table2.open; //以超级用户身份打开
if edit1.text=Table2.FieldByName('超级密码').AsString then
begin
form1.show;
form3.close;
table2.Close;
end
else
begin
table1.open; // 以普通用户身份打开
if edit1.text=Table1.FieldByName('密码').AsString then
begin
form1.show; //口令正确,进入系统
form3.close;
table1.Close;
end
else
if number<=1 then //密码不正确
begin
number:=number+1;
messagedlg('密码输入错误!请您再输入一次!请注意“用户名”与“口令”是否匹配!',mtinformation,[mbok],0);
edit1.text:='';
edit1.SetFocus;
//table1.Close; //注意此时不能用 table1.Close语句关掉table1表,因为还要用到
end
else
if number>1 then //密码输入次数为三次时,取消进入系统
begin
messagedlg('口令输入错误!您没有权限登录系统!系统禁止您进入!请按“ OK ”按钮退出系统!',mtError,[mbok],0);
ComboBox1.text:='';
Edit1.text:='';
table1.Close;
form3.close;
form3.free;
application.Terminate; //退出系统
end;
end;
end;
end;
这是我很久以前学习delphi时写的一段小程序~
翻了半天终于找到(看来养成保存资料的习惯是多么的重要~ :)
你看看能否帮上忙?
来自:tseug, 时间:2002-2-5 16:27:00, ID:908612
这样该就可以了, 没有初始化nCheck变量, 你自己加吧.
unit yhdl;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
Tformdl = class(TForm)
Label1: TLabel;
kl: TEdit;
qdButton: TButton;
qxButton: TButton;
procedure qxButtonClick(Sender: TObject);
procedure qdButtonClick(Sender: TObject);
procedure qdButtonKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
nCheck : Integer;
public
{ Public declarations }
end;
var
formdl: Tformdl;
s:char;
f:text;
implementation
uses mainform
{$R *.DFM};
procedure Tformdl.qxButtonClick(Sender: TObject);
begin
formdl.close;
end;
procedure Tformdl.qdButtonClick(Sender: TObject);
begin
Inc(nCheck);
if nCheck < 3 then
begin
if kl.text='zgc' then
begin
formdl.close;
dyform.show;
end
else
begin
messagedlg('您输入的密码不正确,请重新输入!!',mtwarning,[mbok],0);
kl.text:='';
kl.SetFocus ;
end;
end
else
begin
Close;
end;
end;
procedure Tformdl.qdButtonKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=$70 then
begin
formdl.release;
dyform.show;
end
end;
end.
来自:cfx, 时间:2002-2-5 16:29:00, ID:908618
为什么放在ONPAINT
里面
应该放在ONCREATE或者ONSHOW里面的
来自:小城月光, 时间:2002-2-5 19:59:00, ID:909126
1.放在onpaint里是我从王小华的《delphi5应用程序设计实例》中学来的,我发现源程序可能有错,是否正确??作者不要生气哦
2.以下是我改进的代码,有两个问题请高手回答!!!
3.谢谢tseug,小弟是初学者,Inc(nCheck)看不懂???
4.form.realease与form.close form.free有何区别??
unit yhdl;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
Tformdl = class(TForm)
Label1: TLabel;
kl: TEdit;
qdButton: TButton;
qxButton: TButton;
procedure qxButtonClick(Sender: TObject);
procedure qdButtonClick(Sender: TObject);
procedure qdButtonKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
formdl: Tformdl;
s:char;
f:text;
i:integer;//i在这儿定义但如何赋值为0???又不能放在Tformdl.qdButtonClick中
implementation
uses mainform
{$R *.DFM};
procedure Tformdl.qxButtonClick(Sender: TObject);
begin
formdl.close;
end;
procedure Tformdl.qdButtonClick(Sender: TObject);
begin
if kl.text='zgc' then
begin
formdl.free;//在这句前我加上formdl.close结果dyform窗体出不来,为什么??
dyform.show;
end
else
begin
i:=i+1;
if i>2 then
begin
messagedlg('你是非法用户!!,退出系统!!',mtwarning,[mbok],0);
formdl.close;
formdl.free;
end
else
begin
if i=1 then
messagedlg('您输入的密码不正确,请重新输入!!',mtwarning,[mbok],0)
else if i=2 then
messagedlg('您输入的密码不正确,还有一次机会!!',mtwarning,[mbok],0);
kl.text:='';
kl.SetFocus ;
end
end;
end;
来自:zhumoo, 时间:2002-2-5 21:59:00, ID:909353
听课。
来自:tseug, 时间:2002-2-6 9:00:00, ID:909882
Inc(nCheck) 相当于 nCheck := nCheck + 1; 只不过效率高些
来自:小城月光, 时间:2002-2-6 11:47:00, ID:910601
谢谢各位大虾,小弟送分!!