想请教大家一个关于主窗体隐藏的问题.

时间:2023-01-19 17:06:10

//工程文件:
  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

#3


直接控制主窗体的Visible

#4


谢谢楼上两位,你们的方法我都试过了,win+D还是不行
开早会的时候我突然想到一个方法,刚才测试可行,大家可以来交流交流.

我的方法利用了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;

#7


在frmMain的formshow事件里写login窗

frmLogon:= tfrmLogon.create(self);
frmLogon.showmodal;
frmLogon.free;

#8


to dinoalex and Jack_Yin:谢谢你们!
我的frmLogon窗体只有传值的功能,所有逻辑处理都在主窗体上进行的,包括检验密码,所以在onshow里写不能满足我(可能我的设计有问题)~~

#1


设置MainFrm.Hide,子窗口设置成showmodal

#2


MainFrm.visable

不要设成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窗体而不显示主窗体.

想请教大家一个关于主窗体隐藏的问题.

#5


自己能解决问题是最好的,这样印象也深刻,顶一下

#6


楼主试试 在project option中 设置不自动创建主窗体
然后在工程文件中写代码 大体的样子如下:
......//此处省略
loginFrm.showmodal;//先显示登录窗体,登录成功后关闭登录窗体,因为是showmodal只有关闭登录窗体
//后,下面的代码才会执行到
Application.CreateForm(TfrmMain, frmMain);
Application.Run;

#7


在frmMain的formshow事件里写login窗

frmLogon:= tfrmLogon.create(self);
frmLogon.showmodal;
frmLogon.free;

#8


to dinoalex and Jack_Yin:谢谢你们!
我的frmLogon窗体只有传值的功能,所有逻辑处理都在主窗体上进行的,包括检验密码,所以在onshow里写不能满足我(可能我的设计有问题)~~