程序启动前须输入密码 (100分)

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

xie_kx

Unregistered / Unconfirmed
GUEST, unregistred user!
1、我想在我的主程序启动前须输入密码。我制作了一个密码Form2,
主程序Form1(只有密码Form2放在Auto-Create Forms)如果密码输入正确,那么:
Form1:=Tform1.create(self); Form1.showmodal;
但密码Form2 还存在,我用了Form2.hide; form2,free;form2.close;都不行,密码Form1
还存在屏幕上。之后我又把主程序Form1与密码Form2都放在(Auto-Create Forms),
在Form1的Onshow中运行密码Form2.Showmodal;这样倒是能行,但如果我们没输密码,
而是按Ctrl+F4,就可跳过密码直接进入主程序Form1。由于在下刚刚接触Delphi,所以
再没有更好的办法来解决,恳请各位大虾能不吝赐教。
2、我在对数据库操作时,我想在删除记录时,将被删的记录放在另一个库中,如何做?
最好能得到大虾的详细指导,本人不胜感激。
谢谢!
xie_kx@163.com
 
问题1、Form2是Auto-Create的,那就是主窗口了,你可以先隐藏它,再显示别的窗口
问题2、先插入到另一个表,再删除原表的记录
 
1.那样当然不行啦。因为你这样的话,Form2就是主窗体了。
2.先将要删除的记录放到另一个库中,然后删除不就行了吗。
 
密码正确后,直接用 close 语句就可以把密码form关掉的了。[:)]
 
application.create(TFORM2,FORM2);
FORM2.SHOWMODAL;
后一个问题先插入,后删除不就行了吗?
 
你可以form2.showmodal即使form1开着也没关系的,或者更彻底的在project的源码中让form2
比form1先显示,这可参考如何做闪屏,很多书都有介绍。
 
对。应该是REKELFLY的方法最好。在project.dpr中直接修改
 
比较简单的做法是:在Form2的oncreate事件中加入Form2.showmodal;这时Delphi将
先于主窗口显示该界面。(这和初始化时各窗体中不同事件的触发次序有关。)
然后根据密码正确如否,选择是否进入主界面了。如果密码正确的话,在相应的
触发事件中加入form2.close就可以达到目的了。不过,如果,密码不正确,要退出的话,
需要用到一些技巧了,否则form2关闭后,主窗口会闪一下的。
还有一个做法是,修改工程文件。即仿照做闪屏的方法,也可。这种做法不会出现
上述闪一下的毛病。因为这时主窗体还没实际的被生成。
 
1.我以前是在第一个窗体的onpaint事件中启动密码检查的.
做法是在 private定义是否通过密码检验
ispass:boolean;
在onpaint事件中先检查是否通过密码检验,如果没有通过密码,再检查是否存密码检验
窗体.
if ispass=false then
begin
if not assigned(frmpass) then
begin
try
frmpass:=Tfrmpass.create(application);
frmpass.showmodal;
finally
frmpass.free;
end;
end;
end;
我的做法好像不是很附合你的要求,你只能参考一下.
2.第二个问题,我的做法和楼上YNTW这位朋友的做法差不多,想不出其他更好的办法了.
 
修改dpr文件。

program main;
uses Forms,
SysUtils,
{$R *.RES}

begin
Pass := Tpass.Create(Application);
Pass.ShowModal;
if Pass.ModalResult = 1 then
begin
Pass.Hide;
Application.Initialize;
Application.CreateForm(TDMFORM, DMFORM);
Application.CreateForm(TMAINFORM, MAINFORM);
Pass.Free;
Application.Run;
end;
end.
 
1。密码窗口不用auto create,在主窗口的OnCreate事件中加入:
Form2 := TForm2.Create(nil);
Form2.ShowModal;
2。如果是Sql Server或者Oracle,可通过触发器来解决。
 
我把口令验证写到一个函数里面了,调用这个函数后就会把窗口显示出来
function login_sys(var id:string):boolean;
begin
result:=false;
if frm_login=nil then
begin
frm_login:=Tfrm_login.Create(nil);
frm_login.btn_ok.tag:=0;
if frm_login.ShowModal=mrok then
begin
result:=true;
id:=frm_login.edt_id.Text;
frm_login.free;
frm_login:=nil;
end
else
begin
result:=false;
frm_login.free;
frm_login:=nil;
end;
end;
end;

if login_sys(common.user_id) then
begin
Application.Title := 'Ô¤ËãÍâ×ʽð¼à¹Üϵͳ';
Application.CreateForm(Tdtmdl_main, dtmdl_main);
Application.CreateForm(Tfrm_main, frm_main);
Application.Run;
end;

 
{$R *.RES}
begin
if password then
begin
Application.Initialize;
Application.CreateForm(FormMain, FormMain);
Application.Run;
end;
end.
这是我的代码,password是我在dll中定义的函数密码正确,返回true
你只要在form2 中定义password就可以了
在password创建form2,释放form2
 
Form1和Form2可以都放在Auto-Create Froms中!
再在Form1中添加如下代码!
procedure TForm1.FormShow(Sender: TObject);
begin
if frmlogin.showmodal <> mrOk then
application.terminate;
end;
 
1、修改工程文件
program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};

{$R *.RES}

begin

form2:=Tform2.create(application);
form2.showmodal;
if form2.modalResult=1 then
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
form2.free
end
else
form2.free;
end.
2、在FORM2上放置一个EDIT,两个BUTTON,BUTTON1的MODALRESULT设为MRNONE,BUTTON2的MODALRESULT
设为MRCANCEL

procedure TForm2.Button1Click(Sender: TObject);
begin
if edit1.text='你的密码' then modalresult:=mrok else edit1.text:=''
end;
你也可以在过程中加入例如最多可有几次输入错误的代码
 
谢谢各位的热情帮助,并对大家的认真表示敬意。
 

Similar threads

回复
0
查看
742
不得闲
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部