我的程序有两个窗体,主窗体用form2.show显示第二个窗体,我想让第二个窗体总在最前,怎么办?

解决方案 »

  1.   

    设置 form2.FormStyle为 fsStayOnTop 即可
      

  2.   

    楼主是不是想ShowModal?
      

  3.   

    一般窗口,是通过FormStyle的属性,为fsStayOnTop,让该窗口置顶。
    但,这只能在一个EXE中,相对其它窗口而言。
    如果,对于其它软件有EXE文件中的窗口,也要置顶。这是发凉改变系统的规范,需要对系统进行操作了,但不提倡如此。
      

  4.   

    一般来说,最后showmodel的在最前面
      

  5.   

    不想用showmodel,但是主窗体可以设置成在所有程序前面,不是主窗体就不行。
      

  6.   

    没看到你描述说要在桌面的最顶上。如果要桌面置顶,可以用 SetWindowPos 这个api
      

  7.   

    窗体有个CreateParams方法,创建窗体时可以设置窗体的属性为在最前面,可以查一下Help或者百度。
      

  8.   

    SetWindowPos设置窗体显示最前
      

  9.   

    setwindowpos没有用,createparams没试过,怎么设?
      

  10.   

    实测是可以用的  Application.NormalizeTopMosts;
      Form2.Show;
      SetWindowPos(Form2.Handle,HWND_TOPMOST,Form2.left,Form2.top,Form2.width,Form2.Height,0);
      

  11.   

    createparams 是这么重载type
      TForm2 = class(TForm)
      private
        { Private declarations }
        procedure CreateParams(var params: TCreateParams); override;
      public
        { Public declarations }
      end;var
      Form2: TForm2;implementation{$R *.dfm}procedure TForm2.CreateParams(var params: TCreateParams);
    begin
      inherited;
      with Params do
      begin
        ExStyle :=ExStyle or WS_EX_TOPMOST;
      end;
      //Form2的父窗口是desktop
      Params.WndParent := GetDesktopWindow();
    end;
      

  12.   

    可以先让主窗体的Enabled:=false,再调用Form2.show,用完了再恢复主窗体的Enabled
      

  13.   

    createparams 是这么重载type
      TForm2 = class(TForm)
      private
        { Private declarations }
        procedure CreateParams(var params: TCreateParams); override;
      public
        { Public declarations }
      end;var
      Form2: TForm2;implementation{$R *.dfm}procedure TForm2.CreateParams(var params: TCreateParams);
    begin
      inherited;
      with Params do
      begin
        ExStyle :=ExStyle or WS_EX_TOPMOST;
      end;
      //Form2的父窗口是desktop
      Params.WndParent := GetDesktopWindow();
    end;

    这个在什么时候调用?
      

  14.   

    createparams 是这么重载type
      TForm2 = class(TForm)
      private
        { Private declarations }
        procedure CreateParams(var params: TCreateParams); override;
      public
        { Public declarations }
      end;var
      Form2: TForm2;implementation{$R *.dfm}procedure TForm2.CreateParams(var params: TCreateParams);
    begin
      inherited;
      with Params do
      begin
        ExStyle :=ExStyle or WS_EX_TOPMOST;
      end;
      //Form2的父窗口是desktop
      Params.WndParent := GetDesktopWindow();
    end;

    这个在什么时候调用?
    这个是属于窗体自己生命周期里维护的,不需要显式调用。delphi的帮助里是这么说The CreateWnd method calls CreateParams to initialize the parameters it passes to CreateWindowHandle. Override CreateParams to customize the way a control creates its Windows representation. When overriding CreateParams, always call the inherited method first to set the default values, then make any desired adjustments. 
      

  15.   

    用win32 的api的置顶函数就可以了 就这个setwindowpos
      

  16.   

      //窗口置顶
      Windows.BringWindowToTop(aForm.handle);
      SetWindowPos(aForm.handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE  or  SWP_NOSIZE);Win7x64中测试完美通过,不明白你的为什么不行