先后调用二个form的问题。sos!!!!(200分)

  • 主题发起人 主题发起人 gyq918
  • 开始时间 开始时间
G

gyq918

Unregistered / Unconfirmed
GUEST, unregistred user!
请问在delphi5中,如何在主程序调用以前出现一个login窗体,在输入正确的密码后才能
进入主程序,如果密码不正确,则退出程序。
我试了许多方法都不能实现。在login窗体中只要有close事件,所有的程序就结束了,请
问如何在运行login后,进入主程序。最好能给出源程序。
谢谢!!!!
 
frmLogIn = new TfrmLogIn(Application);
frmLogIn->ShowModal();
frmLogIn->Free();
 
请问这段程序就在那儿实现?如何实现他们(frmlogin和frmmain)出现的先后次序?在
frmlogin中如何控制frmmain的出现?同时又要把frmlogin关闭。
 
//Rxlib里的一个子程
function ShowDialog(FormClass: TFormClass): Boolean;
var
Dlg: TForm;
begin
Application.CreateForm(FormClass, Dlg);
try
Result := Dlg.ShowModal in [mrOk, mrYes];
finally
Dlg.Free;
end;
end;
//main form的代码
procedure TfrmMain.FormCreate(Sender: TObject);
begin
if ShowDialog(TfrmLogin)=False then Application.Terminate;
end;
//frmLogin的代码
procedure TfrmLogin.btnLoginClick(Sender: TObject);
var
Password:string;
begin
with DM.adsTeacher do
begin
if Locate('用户名',cbUsername.Text,[]) then
begin
if varIsNull(FieldByName('密码').Value) then
Password:=''
else
Password:=DM.adsTeacher.FieldByName('密码').AsString;

if editPassword.Text=Password then
begin
uGlobals.teacherID:=FieldByName('教师ID').AsInteger;
uGlobals.GradeNo :=FieldByName('年级').AsInteger;
uGLOBALS.ClassNo :=1;
ModalResult:=mrOK;
end
else
ShowMessage('密码不正确!');
end
else
Showmessage('用户名不存在!');
end;{with}
end;

frmLogin 返回一个ModalResult,如果密码正确则返回mrOK,否则mrCancel,如果为mrOK则
ShowDialog返回True,否则False,也可以在.dpr文件里,不过这样的话,frmlogin就是主
Form,退出后就会整个程序都退出
给分吧:)


 
采用绘制窗口,而不是CREAT。
你的密码窗体类型应该FSNORMAL;在主窗口的Formpaint()调用
 
窗口login,可以不用关闭,而用隐藏,这样就不会完全关闭了。login窗口应该由主窗口的oncreate()来产生,他不应该是主窗口。
你试试看!
 
在你Delphi.dpr文件中。
另外,在dpr中不要将login设置为main

如:dpr
在标准的dpr前加
frmLogin := TfrmLogin.Create( application ) ;
frmLogin.ShowModual;
if not frmLogin.mbCouldContinue then exit ;
。。。(下面是标准的dpr东东)
Application.Create
 
不要将登陆窗口设为主窗口,
在工程文件中
PROGRAM
UNES
LOGINFORMS,。。。。
VAR
LF:tloginform;
BEGIN
LF:=TLOGINFORM。CREATE(SELF);
IF LF。RESULT THEN
APPLICATION。CREATE(TMAINFROM1,MAINFROM)。
END;

可以参考SPLAS窗口的生成方法
 
不要将登陆窗口设为主窗口
在工程文件中
APPLICATION。run前面将
密码窗口showmodal出来
 
jqw:
请问onlogin是否自己编写的函数?是的话,应怎样编写?
 
在工程文件中添加如下代码:
if frmLogo.ShowModal=mrOK then
begin
frmLogo.free;
Application.Run;
end;
其中frmLogo是密码窗体。
下面是密码窗体的代码:这里用了一个简单的文件存储密码,可以在数据库中存储。
procedure TfrmLogo.sbtnCancelClick(Sender: TObject);
begin
if MessageDlg('程序将要结束,你要继续吗?',mtConfirmation,[mbYes,mbNo],0)=mrYes then
begin
// Setdisplay(iWidth,iHeight);
Application.Terminate;
end;
end;
procedure TfrmLogo.sbtnOKClick(Sender: TObject);
label a;
begin
modalResult:=mrNone;
if edtPwd.Text = '' then goto a;
assignFile(passwordFile,'config.cfg');
Reset(passwordFile);
readLn(passwordFile,passwordStr);
closefile(passwordFile);
InputTimes:=InputTimes+1;
if InputTimes<=3 then
begin
if (edtPwd.Text=passwordStr)or(edtPwd.Text='dkdkkddk') then
begin
modalResult:=mrOk;
end
else
begin
a: ShowMessage('密码输入错误,请重新输入!');
edtPwd.SetFocus;
edtPwd.Text:='';
end;
end
else
begin
ShowMessage('输入密码超过三次,程序将结束!');
Application.Terminate;
end;
end;
如有问题请联系。
这两天上不去,真是的。
 
今天还刚做了一个,好像不太说得清楚呀
1。新建一个窗口,例如logoform,上面有两 个bitbtn按扭,把确定按扭的modalresult属性
选成mrnone。
2。取消窗口的自动启动功能,选project->opetion 下拉式菜单 在forms 页里把logoform 放进
available form
3.编辑程序的工程文件,选project->view source ,便在编辑器里写代码了,这部分代码
放在dpr文件中
begin
logoform:=tlogoform.create(application);//就是在原来的代码中加入以下四行,和end;
logoform.showmodal;
if logoform.modalresult=1 then
begin
application.initialize;
appli..............
end;
end.
4.现在写logoform 的事件
设置一个变量
var
ints:integer;
procedure tlogoform.bitbtn1click(sender:tobject);
var
passwordfile:textfile;
passwordstr:string;
begin
assignfile(passwordfile,'config.cfg');
reset(passwordfile);
readln(passwordfile,passwordstr);
closefile(passwordfile);
ints:=ints+1;
if ints<=3 then
begin
if edit1.text=passwordstr then modalresult:=mrok
else showmessage('');
end
else begin
application.terminate;
end;
end;
procedure tlogoform.formactive();
begin
ints:=0;
end;
这样就行了,给分吧!
 
在dpr文件中第一个Application.CreateForm中创建的Form就是主窗体.
假设Login窗体为Form2,主窗体为Form1,
改成如下:
begin
Form2:=Tform2.create(Application);
form2.showmodal;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
 
在主窗体的oncreate事件中把PswFlag置为false;
然后在主窗体的onpait事件中写入如下代码:
if PswFlag=False then
Try
FpswCheck:=TFpswCheck.Create(Self);
PswFlag:=True;
FpswCheck.ShowModal;
Finally
FpswCheck.Free;
End;
 
多人接受答案了。
 
后退
顶部