//工程文件:
Application.ShowMainForm := False;
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
//主窗体
procedure TfrmMain.timOpenLogonFormTimer(Sender: TObject);
begin
(Sender as TTimer).Enabled := False;
frmLogon := TfrmLogon.Create(nil);
frmLogon.Show;
end;
procedure ....
begin
if not xxx then
begin
//'失败'
Self.Hide;
frmLogon := TfrmLogon.Create(nil);
frmLogon.Show;
end
else
begin
//'成功'
end;
end;
{========================================================================}
//frmLogon窗体
procedure TfrmLogon.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if bol_Logon then
begin
Action := caFree;
frmMain.Show;
end
else
begin
Application.Terminate;
end;
end;
以上就是主要代码
我的问题是:当我运行程序到frmLogon窗体时,按下windows的快捷键win+D显示桌面,再去点windows任务栏上的图标还原窗体,这时候主窗体与frmLogon窗体一起显示到桌面上了.
而我要的结果是:只显示frmLogon窗体,不显示主窗体.
请问大家这个该如何去做呢?
8 个解决方案
#1
设置MainFrm.Hide,子窗口设置成showmodal
#2
MainFrm.visable
不要设成mdi
不要设成mdi
#3
直接控制主窗体的Visible
#4
谢谢楼上两位,你们的方法我都试过了,win+D还是不行
开早会的时候我突然想到一个方法,刚才测试可行,大家可以来交流交流.
我的方法利用了TrayIcon(我很笨,没有自己写托盘,直接用了TRzTrayIcon)和CreateParams
1.TrayIcon将主窗体隐藏(它的OnDblClick事件里不写任何代码,TRzTrayIcon是将RestoreOn属性设成ticNone),然后显示logon窗体
2.CreateParams是在呼出主窗体时直接显示在任务栏上
3.在logon窗体中加CreateParams,这样logon窗体也有自己的任务栏了.
经测试,win+D显示桌面后,再点任务栏上的图标,只显示logon窗体而不显示主窗体.
开早会的时候我突然想到一个方法,刚才测试可行,大家可以来交流交流.
我的方法利用了TrayIcon(我很笨,没有自己写托盘,直接用了TRzTrayIcon)和CreateParams
1.TrayIcon将主窗体隐藏(它的OnDblClick事件里不写任何代码,TRzTrayIcon是将RestoreOn属性设成ticNone),然后显示logon窗体
2.CreateParams是在呼出主窗体时直接显示在任务栏上
3.在logon窗体中加CreateParams,这样logon窗体也有自己的任务栏了.
经测试,win+D显示桌面后,再点任务栏上的图标,只显示logon窗体而不显示主窗体.
#5
自己能解决问题是最好的,这样印象也深刻,顶一下
#6
楼主试试 在project option中 设置不自动创建主窗体
然后在工程文件中写代码 大体的样子如下:
......//此处省略
loginFrm.showmodal;//先显示登录窗体,登录成功后关闭登录窗体,因为是showmodal只有关闭登录窗体
//后,下面的代码才会执行到
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
然后在工程文件中写代码 大体的样子如下:
......//此处省略
loginFrm.showmodal;//先显示登录窗体,登录成功后关闭登录窗体,因为是showmodal只有关闭登录窗体
//后,下面的代码才会执行到
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
#7
在frmMain的formshow事件里写login窗
frmLogon:= tfrmLogon.create(self);
frmLogon.showmodal;
frmLogon.free;
frmLogon:= tfrmLogon.create(self);
frmLogon.showmodal;
frmLogon.free;
#8
to dinoalex and Jack_Yin:谢谢你们!
我的frmLogon窗体只有传值的功能,所有逻辑处理都在主窗体上进行的,包括检验密码,所以在onshow里写不能满足我(可能我的设计有问题)~~
我的frmLogon窗体只有传值的功能,所有逻辑处理都在主窗体上进行的,包括检验密码,所以在onshow里写不能满足我(可能我的设计有问题)~~
#1
设置MainFrm.Hide,子窗口设置成showmodal
#2
MainFrm.visable
不要设成mdi
不要设成mdi
#3
直接控制主窗体的Visible
#4
谢谢楼上两位,你们的方法我都试过了,win+D还是不行
开早会的时候我突然想到一个方法,刚才测试可行,大家可以来交流交流.
我的方法利用了TrayIcon(我很笨,没有自己写托盘,直接用了TRzTrayIcon)和CreateParams
1.TrayIcon将主窗体隐藏(它的OnDblClick事件里不写任何代码,TRzTrayIcon是将RestoreOn属性设成ticNone),然后显示logon窗体
2.CreateParams是在呼出主窗体时直接显示在任务栏上
3.在logon窗体中加CreateParams,这样logon窗体也有自己的任务栏了.
经测试,win+D显示桌面后,再点任务栏上的图标,只显示logon窗体而不显示主窗体.
开早会的时候我突然想到一个方法,刚才测试可行,大家可以来交流交流.
我的方法利用了TrayIcon(我很笨,没有自己写托盘,直接用了TRzTrayIcon)和CreateParams
1.TrayIcon将主窗体隐藏(它的OnDblClick事件里不写任何代码,TRzTrayIcon是将RestoreOn属性设成ticNone),然后显示logon窗体
2.CreateParams是在呼出主窗体时直接显示在任务栏上
3.在logon窗体中加CreateParams,这样logon窗体也有自己的任务栏了.
经测试,win+D显示桌面后,再点任务栏上的图标,只显示logon窗体而不显示主窗体.
#5
自己能解决问题是最好的,这样印象也深刻,顶一下
#6
楼主试试 在project option中 设置不自动创建主窗体
然后在工程文件中写代码 大体的样子如下:
......//此处省略
loginFrm.showmodal;//先显示登录窗体,登录成功后关闭登录窗体,因为是showmodal只有关闭登录窗体
//后,下面的代码才会执行到
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
然后在工程文件中写代码 大体的样子如下:
......//此处省略
loginFrm.showmodal;//先显示登录窗体,登录成功后关闭登录窗体,因为是showmodal只有关闭登录窗体
//后,下面的代码才会执行到
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
#7
在frmMain的formshow事件里写login窗
frmLogon:= tfrmLogon.create(self);
frmLogon.showmodal;
frmLogon.free;
frmLogon:= tfrmLogon.create(self);
frmLogon.showmodal;
frmLogon.free;
#8
to dinoalex and Jack_Yin:谢谢你们!
我的frmLogon窗体只有传值的功能,所有逻辑处理都在主窗体上进行的,包括检验密码,所以在onshow里写不能满足我(可能我的设计有问题)~~
我的frmLogon窗体只有传值的功能,所有逻辑处理都在主窗体上进行的,包括检验密码,所以在onshow里写不能满足我(可能我的设计有问题)~~