各位,我做了一个管理程序,用户的所有操作都已经完成,我觉得应该增加一个密码确认窗口,只有输入正确的帐号和密码,才能打开管理程序。于是我新建了一个密码确认窗口,但是,我不知道怎样才能让整个程序,先运行密码确认窗口。我记得以前看dpk文件时,上面有关于窗口create的事件(比如Application.createform(...));但是现在我无论如何也打不开dpk文件,只要指定打开它,系统总是弹出最先设计的Form1窗口。请问如何处理,才能让密码确认窗口和Form1主窗口同时显示,并且只有密码确认窗口激活,主窗口要在密码正确后方能激活?谢谢。
请指教。谢谢。
这样应该可以吧。
全部form指动态生成的。
Ctrl + Shift + F11 -> Forms上设置。第二种方法:在.dpr文件中设置先后顺序。第三种方法:在主窗口的OnCreate中这样写
with TLoginForm.Create
try
ShowModal;
finally
Free;
end;
主窗体总是最先创建,且是自动创建的;主窗体关闭时程序终止,所以不能将Form_login
作为主窗体,将formlogin 放在 project/option/auto_create forms 中
项目文件如下:
begin
Application.Initialize;
Application.CreateForm(TForm_main, Form_main);
Application.CreateForm(TForm_login, );
form_login.ShowModal;
Application.Run;
end;
运行程序最先弹出的是formlogin ,在登陆按钮判断密码是否正确
if 通过验证 then
begin
flag:=true; (flag在Form_login中定义,private flag:boolean;
在Form_login的oncreate事件中将flag出始为false;
用于确定是关闭Form_login然后打开mainform,还是
关闭整个应用程序)
Form_login.close; (不用写:mainform.showmodal;如果Form_login被关闭且程序没有
application.terminate mainform会自动showmodal )
end else
begin
showmessage('密码错误!请重新输入!');
edit1.clear;
edit1.setfocus;
exit;
end;
在Form_login的onclose事件中写:
if flag=false then
application.terminate; (如果没有通过用户验证flag=false,当点击Form_login
的关闭按钮时,application.terminate)
(如果flag=true 说明用户点击了登陆按钮且密码正确
则关闭Form_login显示Form_main)
把AUTOCREATE列表清得只剩下一个启动窗口..
然后用类生成实例对像来搞...
这样你就可以控制了..
1、现在,我通过file->open,已经不能单独打开dpr文件,每次打开它,系统总是弹出FormMain窗口(FormMain主窗口和dpr文件是在初次建立工程时出现的);2、在project->option->forms,对auto-create forms(放置FormMain、FormLog和一个数据模块DataModule)和Available forms(放置了一些通过点击FormMain窗口菜单弹出的窗口)进行一番调整后,按F9运行,FormMain窗口弹出,显示正常,点击菜单,想要弹出其他菜单,此时系统就弹出警告:
“...Access violation at address 0048EE0F in module'USRNET.exe', read of address 00000000...”请问这是为什么?请指教,谢谢。
上面基本通过,over
2、代码中有问题,贴出来看看?
2、我的代码没有问题,当我在project->option->forms中,将Available forms显示的所有窗口全部调整到auto-create forms中,程序正常运行。我还有最后一个问题:就是我以前看过一个源代码,他的dpr文件中实际create的窗口只有数据模块和主窗口两个(即两个Application.createform()),其他窗口的createform都不知道安排到哪里了。我的dpr文件则是将所有要用的窗口全在dpr文件中create了。现在的问题就是通过project->option->forms移动其他窗口到Available forms框中,将导致程序运行不正常,请问那个源代码是怎样实现的?谢谢。
假定你的密码窗体为 LogInFrm Application.Initialize;
Application.ShowMainForm := False;
...
...
..
...
LogInFrm.ShowModal ;
if LogInFrm.IsPass then // IsPass为自己定义的Public变量,
begin
Application.ShowMainForm := True;
Application.Run;
end
else
Application.Terminate ;
Project-->open source
来晚了
program NXUniCom;uses
Forms,
Windows,
UnitMain in 'UnitMain.pas' {FrmMain},
UnitLogin in 'UnitLogin.pas' {FrmLogin},
UnitDM in 'UnitDM.pas' {DM: TDataModule},
UnitYiBiao in 'UnitYiBiao.pas' {FrmYiBiao},
FYIBIAOQUERY in 'FYIBIAOQUERY.pas' {frmYIBIAOQUERY},
unitddiao in 'unitddiao.pas' {diandiao},
qdiandiao in 'qdiandiao.pas' {queryddiao},
Unitkufang in 'Unitkufang.pas' {kufang},
querykufang in 'querykufang.pas' {qkufang},
Unittranse in 'Unittranse.pas' {transe},
querytranse in 'querytranse.pas' {querychuanshu},
Unit1rizhi in 'Unit1rizhi.pas' {rizhi},
qrizhi in 'qrizhi.pas' {queryrizhi};{$R *.res}begin
Application.Initialize;
Try
Application.CreateForm(TDM, DM);
Dm.DB.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\DB\UniCom.mdb;Mode=Share Deny None;';
Dm.DB.Connected :=True;
Except
Application.MessageBox('不能连接到系统数据库!','错误',MB_OK OR MB_ICONERROR);
Dm.Free;
Application.Terminate;
end;
Application.CreateForm(TFrmMain, FrmMain);
Application.Run;
end.收倒没 不回再说
Ctrl + Shift + F11 -> Forms上设置。