一个登录窗体,一个MDI主窗体,设置了MDI主窗体为主窗体,然后在主窗体的SHOW事件中
procedure Tfrm_main.FormShow(Sender: TObject);
begin
frm_login.ShowModal ;
statusbar1.Panels[1].Text :='操作员:['+user_id+']';
end;
先显示登录窗体。登录窗体确定按纽代码:
procedure Tfrm_login.BitBtn1Click(Sender: TObject);
var sqlstr:string ;
begin
sqlstr:='select * from users where id='''+edit1.text+''' and pwd='''+edit2.text+'''';
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add(sqlstr);
adoquery1.Open ;
if adoquery1.RecordCount <>0 then
begin
user_id:=edit1.text;
frm_main.Show ;
frm_login.Close ;
end else
begin
showmessage('用户名或密码错误,请重新输入。');
edit1.clear;
edit2.clear;
edit1.SetFocus ;
end;
end;
发现一个问题密码录入错误,执行了到showmessage那步,登录窗体显示一个对话框“用户名或密码错误,请重新输入。”后,直接进入显示主窗体了,哪位高手能指导下不,密码错误应当执行用户名得到焦点并继续,
procedure Tfrm_main.FormShow(Sender: TObject);
begin
frm_login.ShowModal ;
statusbar1.Panels[1].Text :='操作员:['+user_id+']';
end;
先显示登录窗体。登录窗体确定按纽代码:
procedure Tfrm_login.BitBtn1Click(Sender: TObject);
var sqlstr:string ;
begin
sqlstr:='select * from users where id='''+edit1.text+''' and pwd='''+edit2.text+'''';
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add(sqlstr);
adoquery1.Open ;
if adoquery1.RecordCount <>0 then
begin
user_id:=edit1.text;
frm_main.Show ;
frm_login.Close ;
end else
begin
showmessage('用户名或密码错误,请重新输入。');
edit1.clear;
edit2.clear;
edit1.SetFocus ;
end;
end;
发现一个问题密码录入错误,执行了到showmessage那步,登录窗体显示一个对话框“用户名或密码错误,请重新输入。”后,直接进入显示主窗体了,哪位高手能指导下不,密码错误应当执行用户名得到焦点并继续,
解决方案 »
- 隐藏窗体的问题??????????????
- 求救:有没有什么工具将整个项目的类层次关系、函数名等打印出来?
- 請 lihuasoft(学习低调做人) 老大 進來領 分
- 请教高手???如何做这样的这样的曲线????
- 高手上们帮忙看看这样的效果怎么解决啊?
- 不在SQL语句里计算,不遍历数据集,可以得到当前数据集某个字段的最大和最小值吗?
- 大家帮我看看这句SQL语句什么地方出错了
- 怎么禁止局域网中的某一台机器访问某些站点?
- 使用数据模块发生的错误,请各位指导,在线等待。
- 如何在2006中安装的ACTIVEX控件
- 请问下怎么样异步http下载网页,或访问webservice
- delphi xe7 內建 fastreport 导出PDF加密的问题
2、经查看其它代码基本无错。只要在IED是,重新设置主窗体即可。
procedure TfrmMain.FormCreate(Sender: TObject);
begin
IsLogon := false ;
IsFristLogon := true;
end;procedure TfrmMain.FormActivate(Sender: TObject);
begin
if not IsFristLogon then
begin
Exit;
end;
frmLogonSys := TfrmLogonSys.Create(Application);
frmLogonSys.Position := poMainFormCenter ;
frmLogonSys.ShowModal ;
if IsLogon then //登录成功
begin
IsFristLogon := False ;
//do something.....
end
else
begin //登录失败,关闭主窗体
postmessage(frmMain.handle, WM_CLOSE, 0, 0); //好像在 FormShow 里面, 执行 postmessage 会出错。所以我登录放在 FormActivate 响应了。
end;
end;// frmLogonSys (登录框主要内容)
将登录判断放到 frmLogonSys 窗体里面做。 只返回 IsLogon 的值就OK了。//点击登录按钮函数。
procedure TfrmLogonSys.btnLogonClick(Sender: TObject);
begin
var sqlstr:string ;
begin
sqlstr:='select * from users where id='''+edit1.text+''' and pwd='''+edit2.text+'''';
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add(sqlstr);
adoquery1.Open ;
if adoquery1.RecordCount <>0 then
begin //登录成功
IsLogon := true;
//保存登录用户等信息到全局变量, 供系统运行时操作日志等用
frmLogonSys.ModalResult := mrOK ;
frmLogonSys.Close ;
end
else
begin //登录失败。
sysCtrl.IsLogon := False ;
Showmessage('Logon system failture: User name or password error.');
edtRdId.SetFocus ;
end;//点击了退出按钮
procedure TfrmLogonSys.btnExitClick(Sender: TObject);
begin
if MessageDlg('Are you sure exit? ',mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
sysCtrl.IsLogon := False ;
Close ;
end;
end;
Application.CreateForm(TFmLogin, FmLogin);
if FmLogin.ShowModal() then //此处重载了 Form.ShowModal
begin
FmLogin.Free;
Application.CreateForm(TFmMain, FmMain);
Application.Run;
end
else FmLogin.Free;
....
出错:cannot create form.no MDI ARE CURRENTLY ACTIVE.
调用子窗体的代码是:
procedure Tfrm_main.SpeedButton1Click(Sender: TObject);
begin
//Application.CreateForm(TFRM_GHS, FRM_GHS);
frm_ghs:=tfrm_ghs.Create(application);
end;