请问如何实现登陆窗口显示在主窗口之上,我试了试,只能实现在登陆窗口关闭后主窗口才显示。
  如何让登陆窗口显示,并且是当前窗口,在它背后是显示主窗口。

解决方案 »

  1.   

    主窗体启动以后,启动登陆窗体,然后设置主窗体enable=false;登陆窗体的fmstyle为allontop
      

  2.   

    fmstryle:=fsstayontop;
    --------------------------------------------------------------------
    看尽悲伤,庸人自扰不平事。叹尽荒凉,海阔天空谁人知。狂风劲兮,百花飘
    扬乱舞香。捏花一笑,海不扬波断肠心!
    广告:http://delphicode.yeah.net
      

  3.   

    登录窗口用ShowModal的方式显示就肯定没问题了
      

  4.   

    主窗体启动以后,启动登陆窗体,
    然后在主创体执行
      fLogin.ShowModal
    就行
      

  5.   

    我是这样实现的:在主窗体中定义一个变量Islogin:Boolean;
    初值为false
    在主窗体的OnPaint事件中写代码:if not IsLogin then
      begin
        frmLogin.ShowModal;
        IsLogin:=True;
      end;就搞定了。
      

  6.   

    TO楼主:
      登录窗口关闭后主窗体才显示出来,这说明你ShowModal登录窗口的代码是放在主窗体的OnCreate事件里,这个时候主窗体还没有被显示出来,就进入了登录窗口的ShowModal循环了,当然主窗体不能被显示。
      解决方法,一是用楼上的在OnPaint里事件里,这种方法需要一个静态变量来确保代码只执行一次(因为OnPaint事件不断地被激发),二是在主窗体的OnCreate里事件里发送一个自定义消息,等到主窗体成功创建并显示出来后,这个自定义消息才会被处理,当然处理这个自定义消息的代码要你自己来写。第一种方法:{$WRITEABLECONST ON}
    procedure TFormMain.FormPaint(Sender: TObject)
    const
      FirstTime: Boolean = True;
    begin
      if FirstTime then
      begin
        FirstTime := False;
        with TFormLogin.Create(Self) do
        try
          ShowModal;
        finally
          Free;
        end;
      end;
    end;
    {$WRITEABLECONST OFF}第二种方法:const
      WM_MY_MSG = (WM_USER+100)type
      TFormMain = class(TForm)
      ....
      private
        procedure WMMyMsg(var Msg: TMessage); message WM_MY_MSG;
        ...
      end;procedure TFormMain.FormCreate(Sender: TObject);
    begin
      PostMessage(Handle, WM_MY_MSG, 0, 0);
    end;procedure TFormMain.WMMyMsg(var Msg: TMessage);
    begin
      inherited;
      with TFormLogin.Create(Self) do
      try
        ShowModal;
      finally
        Free;
      end;
    end;
      

  7.   

    哪有那么麻烦啊?在主窗体的OnShow事件里让登录窗体创建并ShowModal就搞定了。