如何让一个窗体总在最前?

weixin_42121263 2018-05-02 08:47:59
我的程序有两个窗体,主窗体用form2.show显示第二个窗体,我想让第二个窗体总在最前,怎么办?
...全文
1811 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
doloopcn 2018-11-13
  • 打赏
  • 举报
回复
//窗口置顶
Windows.BringWindowToTop(aForm.handle);
SetWindowPos(aForm.handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE);

Win7x64中测试完美通过,不明白你的为什么不行
一只鬼 2018-11-13
  • 打赏
  • 举报
回复
用win32 的api的置顶函数就可以了 就这个setwindowpos
天行归来 2018-05-08
  • 打赏
  • 举报
回复
引用 15 楼 weixin_42121263 的回复:
[quote=引用 12 楼 lynmison 的回复:] [quote=引用 10 楼 weixin_42121263 的回复:] setwindowpos没有用,createparams没试过,怎么设?
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;
[/quote] 这个在什么时候调用?[/quote] 这个是属于窗体自己生命周期里维护的,不需要显式调用。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.
weixin_42121263 2018-05-08
  • 打赏
  • 举报
回复
引用 12 楼 lynmison 的回复:
[quote=引用 10 楼 weixin_42121263 的回复:] setwindowpos没有用,createparams没试过,怎么设?
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;
[/quote] 这个在什么时候调用?
lyhoo163 2018-05-06
  • 打赏
  • 举报
回复
天行归来 2018-05-04
  • 打赏
  • 举报
回复
引用 10 楼 weixin_42121263 的回复:
setwindowpos没有用,createparams没试过,怎么设?
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;
天行归来 2018-05-04
  • 打赏
  • 举报
回复
引用 10 楼 weixin_42121263 的回复:
setwindowpos没有用,createparams没试过,怎么设?
实测是可以用的 Application.NormalizeTopMosts; Form2.Show; SetWindowPos(Form2.Handle,HWND_TOPMOST,Form2.left,Form2.top,Form2.width,Form2.Height,0);
weixin_42121263 2018-05-04
  • 打赏
  • 举报
回复
setwindowpos没有用,createparams没试过,怎么设?
xxfly 2018-05-04
  • 打赏
  • 举报
回复
可以先让主窗体的Enabled:=false,再调用Form2.show,用完了再恢复主窗体的Enabled
天行归来 2018-05-03
  • 打赏
  • 举报
回复
引用 2 楼 weixin_42121263 的回复:
天行归来,不行,我试过,主窗体可以,但不是主窗体不行,会被别的程序盖住。
没看到你描述说要在桌面的最顶上。如果要桌面置顶,可以用 SetWindowPos 这个api
weixin_42121263 2018-05-03
  • 打赏
  • 举报
回复
不想用showmodel,但是主窗体可以设置成在所有程序前面,不是主窗体就不行。
boylafong 2018-05-03
  • 打赏
  • 举报
回复
一般来说,最后showmodel的在最前面
xiaocongzhi 2018-05-03
  • 打赏
  • 举报
回复
SetWindowPos设置窗体显示最前
lyhoo163 2018-05-03
  • 打赏
  • 举报
回复
一般窗口,是通过FormStyle的属性,为fsStayOnTop,让该窗口置顶。 但,这只能在一个EXE中,相对其它窗口而言。 如果,对于其它软件有EXE文件中的窗口,也要置顶。这是发凉改变系统的规范,需要对系统进行操作了,但不提倡如此。
ooolinux 2018-05-03
  • 打赏
  • 举报
回复
楼主是不是想ShowModal?
weixin_42121263 2018-05-03
  • 打赏
  • 举报
回复
天行归来,不行,我试过,主窗体可以,但不是主窗体不行,会被别的程序盖住。
ooolinux 2018-05-03
  • 打赏
  • 举报
回复
窗体有个CreateParams方法,创建窗体时可以设置窗体的属性为在最前面,可以查一下Help或者百度。
天行归来 2018-05-02
  • 打赏
  • 举报
回复
设置 form2.FormStyle为 fsStayOnTop 即可

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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