我的要求就是很多系统的一样.
一打开程序,就出现登陆窗口,如果用户输入的用户密码正确,登陆窗口消失(HIDE,还是CLOSE),如果输入不正确就提示重新输入,如果连续输入三次,关闭登陆窗口我现在的方式是:生成主窗口,在显示主窗口事件中显示出登陆窗口,如果密码正确就断续显示主窗口,不然关闭所有窗口,终止程序;但现在出现的问题是:就算密码输入错,也马上进入主窗口以下是我在系统的各种重要设置
在系统的PROJECT--OPTIONS中
在auto-create forms中各个窗口顺序为:
FRM_MAIN(主窗口)
FRM_USER在主窗口显示前
procedure Tfrm_main.FormShow(Sender: TObject);
begin
frm_user.ShowModal;
end;在登陆窗口中的确认键代码为:
procedure Tfrm_user.BitBtn1Click(Sender: TObject);
begin
if frm_datam.userr.Locate('name;password',vararrayof([dbtext1.Caption,edit1.Text]),[]) then
begin
//frm_main:=Tfrm_main.Create(self);
frm_main.Show;
end
else
begin
frm_main.hide;//加了这一句,运行后提示出错
pass1:=pass1+1;
showmessage('口令错误,请重新输入');
edit1.Text:='';
edit1.SetFocus;
if pass1=3 then
begin
showmessage('系统无法识别你的身份.');
frm_main.Close;
end;
end;
end;提示错误:
cannot change visible in onshow or on hide
一打开程序,就出现登陆窗口,如果用户输入的用户密码正确,登陆窗口消失(HIDE,还是CLOSE),如果输入不正确就提示重新输入,如果连续输入三次,关闭登陆窗口我现在的方式是:生成主窗口,在显示主窗口事件中显示出登陆窗口,如果密码正确就断续显示主窗口,不然关闭所有窗口,终止程序;但现在出现的问题是:就算密码输入错,也马上进入主窗口以下是我在系统的各种重要设置
在系统的PROJECT--OPTIONS中
在auto-create forms中各个窗口顺序为:
FRM_MAIN(主窗口)
FRM_USER在主窗口显示前
procedure Tfrm_main.FormShow(Sender: TObject);
begin
frm_user.ShowModal;
end;在登陆窗口中的确认键代码为:
procedure Tfrm_user.BitBtn1Click(Sender: TObject);
begin
if frm_datam.userr.Locate('name;password',vararrayof([dbtext1.Caption,edit1.Text]),[]) then
begin
//frm_main:=Tfrm_main.Create(self);
frm_main.Show;
end
else
begin
frm_main.hide;//加了这一句,运行后提示出错
pass1:=pass1+1;
showmessage('口令错误,请重新输入');
edit1.Text:='';
edit1.SetFocus;
if pass1=3 then
begin
showmessage('系统无法识别你的身份.');
frm_main.Close;
end;
end;
end;提示错误:
cannot change visible in onshow or on hide
Project->View Sourcefrm_user.ShowModal;
放在
Application.Initialize;
.....
application.run 语句之前!
1、在工程选项的自动创建窗体中,加入主窗体和登录窗体。如果是MDI的,登录窗体的FORMSTYLE属性必须是FSNORMAL,不能用FSMDICHILD。
2、工程单元中,
登录窗体.ShowModal;
Application.Run;
3、验正正确,close登录窗体。你可以试一下。
示例:
主窗体什么都不放
代码只有
procedure TForm1.FormActivate(Sender: TObject);
begin
if form2.ShowModal=mrno then
close;
end;
登录窗体上放两个按钮
代码:
procedure TForm2.Button1Click(Sender: TObject);
begin
form2.ModalResult:=mrno;
end;procedure TForm2.Button2Click(Sender: TObject);
begin
form2.ModalResult:=mrok;
end;
执行就是结果,WHILE循环自己加,不过还要一个全局变量,保存是否是第一次FormActivate,因为每次主窗体的FormActivate都会执行这个操作,也可以检测当前用户是否有效来进行标识,但这样还是要多设一个用户名的变量
Application.CreateForm(TDM_Login_Manage, DM_Login_Manage);
if DM_Login_Manage.TerminateAPP then
begin
application.run;
application.Terminate;
Exit;
end; Application.CreateForm(TFrm_Main, Frm_Main);
Application.Run;在data module的oncreate事件中打开登录窗体把项目的options的auto_create窗体设为只有data module
不明白你的具体做法,
你在什么时候运行登陆窗口的,在什么事件中?
FRM_MAIN又应在什么时候生成显示
program HTBA;uses
Forms,
Controls,
mainform in 'MAINFORM.PAS' {Main},
SplashForm in 'SplashForm.pas' {Splash},
JBQKForm in '基本信息\JBQKForm.pas' {JBQK},
login in 'LOGIN.PAS' {Login_Form},
XXQKForm in '基本信息\XXQKForm.pas' {XXQK},
CXForm in '查询\CXForm.pas' {CX},
TJForm in '统计\TJForm.pas' {TJ},{$R *.res}begin
Application.Initialize;
Login_Form:=TLogin_Form.Create(application);
Login_form.ShowModal;
if Login_Form.ModalResult =2 then
begin
application.Terminate;
end;
Splash:=TSplash.Create(Application);
if Splash.ShowModal=mrOK then
Application.Run;
end.
多谢你,你应该是讲得很白的了,但我还是不明白,能不能发你的USER窗口和MAIN窗口的PAS文件过来让我参考[email protected]
主窗体在运行后是不能改的呀
to cyp207(cyp207) :
你的主窗体是那一个,怎么一个是Splash,一个是Login_Form
procedure Tfrm_user.BitBtn1Click(Sender: TObject);
begin
if frm_datam.userr.Locate('name;password',vararrayof([dbtext1.Caption,edit1.Text]),[]) then
begin
//frm_main:=Tfrm_main.Create(self);
frm_main.Show;
release;//加入
end
else
begin
frm_main.hide;//加了这一句,运行后提示出错
pass1:=pass1+1;
showmessage('口令错误,请重新输入');
edit1.Text:='';
edit1.SetFocus;
if pass1=3 then
begin
showmessage('系统无法识别你的身份.');
release;//加入
application.
end;
end;
end;