以上代码不知错在哪, 无论用户验证对错, 都可以进入主界面. (50分)

  • 主题发起人 主题发起人 krisjim
  • 开始时间 开始时间
K

krisjim

Unregistered / Unconfirmed
GUEST, unregistred user!
以上代码不知错在哪, 无论用户验证对错, 都可以进入主界面.
.........
Application.Initialize;
Application.CreateForm(Tadomrp, adomrp);
Application.CreateForm(TFrm_E_Login, Frm_E_Login);
Frm_E_Login.showmodal;
if Frm_E_login.ModalResult =1 then
begin
Frm_E_Login.Free;
.....
Application.CreateForm(TFrm_MainPage, Frm_MainPage);
Application.Run;
end;

procedure TFrm_E_Login.OKBtnClick(Sender: TObject);
begin
XuserID:=Edit1.text;
XuserPassword:=Edit2.Text;
if times<=3 then
with adoMrp.JH_user do
begin
Close;
Parameters.ParamByName('UserID').value:=xUserID;
prepared;
open;
if fieldbyname('userPassword').asstring='...' then
modalresult:=mrok
else
begin
showmessage('用户密码输入错误,无法登录!!'+inttostr(times));
times:=times+1;
edit2.SetFocus;
end;
end
else
application.Terminate;
以上代码不知错在哪, 无论用户验证对错, 都可以进入主界面.
 
application.Terminate;
因为Application主窗体还没有建立,此时使用这个是不能退出的。
使用其他的吧。
或者根据这个传递回来布尔变量,决定是否创建主窗体。
if Frm_E_Login.ShowModal=mrOk then
Application.CreateForm(TFrm_MainPage, Frm_MainPage);
 
还是不行,
原本应该在密码输入错误后, 就返回登录界面的. 可怎么就是不行????
Frm_E_Login // 登录界面;
Frm_MainPage// 主界面;
 
如果正确的话,就使用ModalResult:=mrOk关闭窗体,注意这句话后面不需要使用Close.
如果错误,直接Close就可以的。没问题。
 
如果你把okbutton的modalresult没有设为none,请设置,并测试;
如果设置了仍然不行,请参考下面的代码:
var
prewindow:hwnd;
begin
prewindow:=findwindow('tmainform','xxxxxx');
if prewindow<>0 then
begin
setforegroundwindow(prewindow);
application.Terminate;
end;

logdlg:=tlogdlg.Create(application);
if logdlg.ShowModal= 1 then
begin
Application.Initialize;
Application.Title := 'xxxx';
Application.CreateForm(Tmainform, mainform);
Application.Run;
end;
end.
procedure TlogDlg.OKBtnClick(Sender: TObject);
var
myreg:tregistry;
begin
logdlg.lognum :=logdlg.lognum +1;//logdlg为登陆窗口,lognum为记录密码错误次数的变量,错三次退出
if logdlg.lognum <=3 then
begin
if logdlg.checkinput then
begin
myreg:=tregistry.Create;
try
myreg.RootKey:=HKEY_CURRENT_USER;
myreg.OpenKey('software/autom/login',true);
if logdlg.getpsw(logdlg.logpsw)<>myreg.ReadString(logdlg.loguser) then
begin
if logdlg.lognum<3 then
//如果不是第三次继续
begin
application.MessageBox(pchar('身份验证未通过,无法登陆!'),pchar('通知'));
logdlg.Edit1.Clear;
logdlg.Edit1.SetFocus;
end
else
//如果是第三次错误关闭系统
application.Terminate;
end
else
begin
myreg.WriteString('login user',logdlg.loguser);
myreg.WriteString('login time',datetimetostr(now));
modalresult:=mrok;
end;
myreg.CloseKey;
finally
myreg.Free;
end;
end;
end
else
application.Terminate;
end;
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部