Delphi做系统登录

YmirBoy 2008-04-03 07:12:17
我在用delphi 做个软件的登录时,当系统登录成功的时候需要将主窗体加载上去并且要释放登录窗体的资源,为什么我这个操作无法事项?

假设两个窗体,一个主窗体FrmMain,一个登录窗体FrmLogin,系统以FrmLogin做为主启动程序

//登录成功

If IsLoginSucc then
Begin
Application.CreateForm(TFrmMain,FrmMain);
FrmMain.Show;
FrmLogin.Close;
End;

//

为什么FrmMain窗体也一起被Close掉了呢?
...全文
625 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
myboor 2009-04-22
  • 打赏
  • 举报
回复
不要自动创建任何窗体,在dpr中
application.initialize;
Loginform:=Tloginform.create(application);
Loginform.showmodal;

在loginform的按钮事件中:
if isLogined then
begin
application.createform(TfrmMain,frmMain);
close;
end;

以上在delphi7+winxp下测试成功。其实6楼的代码是对的,关键是在连接字符串中放入密码太不灵活了,万一数据库的密码改动了,你的程序就挂了
UltraBejing 2008-04-30
  • 打赏
  • 举报
回复
好像没那么简单,呵呵.
UndefinedCoder 2008-04-16
  • 打赏
  • 举报
回复
谁让你用Application.CreateForm创建登录窗体的,SB。
daidai_____DD 2008-04-16
  • 打赏
  • 举报
回复
可以看得出来,在你的代码中FrmLogin是第一个生成的窗体,delphi会认为第一个生成的窗体为主窗体,主窗体关闭,程序关闭,这就是你碰到的问题。
解决的办法是先生成frmmain,需要登录的时候生成FrmLogin
7年 2008-04-16
  • 打赏
  • 举报
回复
11楼的,我CNM
coolbobo 2008-04-06
  • 打赏
  • 举报
回复
主窗体关闭了,子窗体肯定会关闭的。
gjw310 2008-04-04
  • 打赏
  • 举报
回复
可能就是因为第一个登陆窗体frmLogin是主窗体,是属于自动创建的窗体
而你的主界面是在这个frmlogin中创建的,好比“老子资源”都没了,依附它的“儿子资源”当然没了,呵呵
onlyzy 2008-04-04
  • 打赏
  • 举报
回复
学习。。。
dl110 2008-04-04
  • 打赏
  • 举报
回复
使用时请去掉[]及其内容.
该bbs不认识标记嵌套.
dl110 2008-04-04
  • 打赏
  • 举报
回复
***编辑你的应用程序.dpr.
给你个完整的:(此部分代码实现的关键,见红色部分)

//MdiApp.dpr文件内容
program Mdiapp;
uses
Forms, Controls,
Main in 'Main.pas' {MainForm},
about in 'about.pas' {AboutBox},
UniGYS in 'UniGYS.pas' {frmGYS},
UniDB in 'UniDB.pas' {DataModule2: TDataModule},
UniCS in 'UniCS.pas' {frmCS},
UniSF in 'UniSF.pas' {frmSF},
UniGYSCX in 'UniGYSCX.pas' {frmGYSCX},
UniLB in 'UniLB.pas' {frmLB},
UniCP in 'UniCP.pas' {frmCP},
UniCGJH in 'UniCGJH.pas' {frmCGJH},
UniInfo in 'UniInfo.pas' {frmInfo},
UniGYSXX in 'UniGYSXX.pas' {frmGYSXX},
UniModiCGJH in 'UniModiCGJH.pas' {frmModiCGJH},
UniSearch in 'UniSearch.pas' {frmSearch},
UniTJBB in 'UniTJBB.pas' {frmTJBB},
UniCode in 'UniCode.pas' {frmCode},
UniPWD in 'UniPWD.pas' {frmPWD},
UniLogin in 'UniLogin.pas' {frmLogin};

{$R *.RES}

begin
Application.Initialize;
Application.Title:= '小型商业销售计划管理';
frmLogin:= TfrmLogin.Create(Application);
if frmLogin.ShowModal=mrOK then
begin

Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TAboutBox, AboutBox);
Application.CreateForm(TDataModule2, DataModule2);
Application.CreateForm(TfrmCS, frmCS);
Application.CreateForm(TfrmSF, frmSF);
Application.CreateForm(TfrmGYSCX, frmGYSCX);
Application.CreateForm(TfrmInfo, frmInfo);
Application.CreateForm(TfrmGYSXX, frmGYSXX);
Application.CreateForm(TfrmModiCGJH, frmModiCGJH);
Application.CreateForm(TfrmSearch, frmSearch);
Application.CreateForm(TfrmPWD, frmPWD);
frmLogin.Free;
Application.Run;
end
else
begin
frmLogin.Free;
Application.Terminate;
end;

end.

//登录窗体部分代码
var
Count: byte;

procedure TfrmLogin.btnLoginClick(Sender: TObject);//登录按钮事件
begin
inc(Count);
aQuery.ConnectionString:= 'Provider=Microsoft.Jet.OLEDB.4.0;'+
'User ID=Admin;Data Source='+ExtractFilePath(Application.ExeName)+
'msdb.dll;Password="";Persist Security Info=True;'+
'Jet OLEDB:Database Password=msmw';
aQuery.SQL.Clear;
aQuery.SQL.Add('Select * From UserMag Where UID='''+edtUID.Text+
''' And PWD='''+edtPWD.Text+'''');
aQuery.Open;
if aQuery.RecordCount>0 then
begin
aQuery.Close;
self.ModalResult:= mrOK;
end;
aQuery.Close;
if Count>=3 then
begin
ShowMessage('由于您已经超过了登录次数, 程序现在退出.');
self.ModalResult:= mrAbort;
end;
edtUID.Text:= '';
edtPWD.Text:= '';
edtUID.SetFocus;
end;

procedure TfrmLogin.btnCancelClick(Sender: TObject);//取消登录按钮事件
begin
Application.Terminate;
end;

kaikai_kk 2008-04-04
  • 打赏
  • 举报
回复
上面说错了
FrmMain.Show; //这个是多余的

YmirBoy 2008-04-04
  • 打赏
  • 举报
回复
恩,估计是主窗体没有了,他所创建的窗体也销毁的原因!
kaikai_kk 2008-04-04
  • 打赏
  • 举报
回复
FrmLogin.Close; //是多余的
Application.CreateForm(TFrmMain,FrmMain); //执行这句的时候FrmMain已经Show出来了

至于为什么FrmMain窗体也一起被Close掉了呢?

我想你应该是以FrmLogin为主窗体!!
主窗体关闭了,其它窗体当然也跟着关闭了
GDTOPONE 2008-04-03
  • 打赏
  • 举报
回复

Application.Initialize;
Application.Title := '程序标题';
if IsLoginSucc then begin
Application.CreateForm(TFrmMain,FrmMain);
FrmMain.Show;
FrmLogin.Close;
Application.Run;
end else Application.Terminate;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧