进入系统的登录程序怎么答错一次就退出(设计三次的)(50分)

  • 主题发起人 主题发起人 xinjia
  • 开始时间 开始时间
X

xinjia

Unregistered / Unconfirmed
GUEST, unregistred user!
{edit1.text接收密码}
{用sql取密码czymm}
procedure Tloginin.BitBtn1Click(Sender: TObject);
if srcs<=3 then
begin
if edit1.text=czymm then
modalresult:=mrok
else
begin
ShowMessage('密码输入错误!,请再输入一次。');
edit1.setfocus;
end
end
else
begin
ShowMessage('密码输入三次错误,不能进入系统!');
application.Terminate;
end
 
srcs是什么,要不要初始化?

//edit1.setfocus;
srcs := srcs+1;
end
 
你的判断不起作用!仔细检查一下。
 
前面有srcs:=1用于记录循环次数。
 
看看BitBtn1的Default是不是为true,
如是改为false.
 
你把循环记录放在buttonclick中
 
看看BitBtn1的ModalResult,
如是mrOK, mrClose, mrCancel...改为mrNone
 
改按钮的default和modalresult都不行。
单步调试时执行到edit1.setfocus就退出了。
 
把里面的那个if...end块单独用begin...end包起来.
 
用f8单步执行看看。
 
...
BitBtn1.ModalResult:=mrNone;
LoginForm.ShowModal;
...
srcs:=1;
...
procedure Tloginin.BitBtn1Click(Sender: TObject);
begin
if srcs<=3 then begin
if edit1.text=czymm then
LoginForm.modalresult:=mrok
else begin
ShowMessage('密码输入错误!,请再输入一次。');
edit1.setfocus;
srcs:=srcs+1;
end
end
else begin
ShowMessage('密码输入三次错误,不能进入系!');
application.Terminate;
end;
end;
 
判断不起作用!think over it!
 
BitBtn1的 Kind 是否为 bkClose? 改为 bkCustom

srcs没有加一,因此不会出现超过3次的情况,这是另一个你还没发现的问题
 
想当然,没调试过,仅供参考!

edit1.text接收密码}
{用sql取密码czymm}
procedure Tloginin.BitBtn1Click(Sender: TObject);
begin
srcs := 0;
while true do
begin
if srcs = 2 then
begin
ShowMessage('密码输入三次错误,不能进入系统!');
application.Terminate;
end;
if edit1.text=czymm then
begin
modalresult:=mrok;
break;
end
else
begin
srcs:=srcs+1;
ShowMessage('密码输入错误!,请再输入一次。');
edit1.setfocus;
end
end;

end;

 
用OnFormCreare初始化srcs
procedure TForm1.FormCreate(Sender: TObject);
begin
......
srcs:=1;
......

end;
另在
procedure Tloginin.BitBtn1Click(Sender: TObject);
begin
if srcs<=3
then begin
if edit1.text=czymm
then modalresult:=mrok
else begin
srcs:=srcs+1; ''''''''''''''''''''''(莫忘)
ShowMessage('密码输入错误!,请再输入一次。');
edit1.setfocus;
end
end
else begin
ShowMessage('密码输入三次错误,不能进入系统!');
application.Terminate;
end
end;

 
赶快把分分了吧,这么多人指点,还没找到原因.
 
lsyz说的对,srcs在登录form的onactivate事件中初始化也可以,srcs的定义应为全局的,可在有关form unit的private下定义.另外,请问Dephi是否支持c/c++中的静态变量,若支持此问题就简单多了.
 
>请问Dephi是否支持c/c++中的静态变量,若支持此问题就简单多
procedure ...
const i:integer=0;
begin
showmessage(inttostr(i));
inc(i);
end;
 
Thank you amo! then program is :
procedure Tloginin.BitBtn1Click(Sender: TObject);
var
const int srcs:=1;//three times
begin
if srcs<=3 then
begin
if edit1.text=czymm then
modalresult:=mrok
else
begin
inc(srcs);//***
ShowMessage('密码输入错误!,请再输入一次。');
edit1.setfocus;
end
end
else
begin
ShowMessage('密码输入三次错误,不能进入系统!');
application.Terminate;
end
end
这样保护了变量scrs,不需要在其他地方定义与初始化了

 
实现方法很多,可以试试下面的方法:
设srcs为全局变量;
var
srcs:integer;

.
.
//初始化时给变量赋初值;
srcs:=3;
.
.
procedure Tloginin.BitBtn1Click(Sender: TObject);
begin

case srcs of
2,3:begin
if edit1.text=czymm then
begin
srcs:=3;
modalresult:=mrok;

end
else
begin
dec(srcs);
ShowMessage('密码输入错误!,请再输入一次。');
edit1.setfocus;
end;

end
1:begin
if edit1.text=czymm then
begin
srcs:=3;
modalresult:=mrok;

end else
begin
dec(srcs);
ShowMessage('密码输入三次错误,不能进入系统!');
application.Terminate;
end;
end;
else srcs:=3;
end;//end case;
end;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
472
import
I
后退
顶部