非模态子窗口允许主窗体置于顶层 - Delphi

3
在Delphi(2009 Pro)中,我有一个主窗体,可以创建非模态子窗口。我希望无论哪个窗体具有焦点,都可以在最上层绘制 - 即使是具有焦点的主窗口。
2个回答

7

在Delphi 2007/2009中,VCL在关于窗体的父级方面改变了其行为。在Delphi 1-2006中,窗体的父级是隐藏的应用程序窗口(Application.Handle)。在Delphi 2007/2009中,窗体的父级是主窗体,而主窗体的父级是桌面。

如果你想改变这个行为,你可以通过更改*.dpr文件中的Application.MainFormOnTaskbar行为为False来恢复旧的行为,但这样做会使你的应用程序在Vista和Windows 7中看起来很奇怪。或者你可以覆盖所有非模态子窗体的虚拟CreateParams方法,并将Params.WndParent字段设置为桌面(HWND_DESKTOP)或仍然存在的Application.Handle

type
  TMyChildForm = class(TForm)
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.WndParent := Application.Handle;
end;

0

多个窗口不能同时拥有焦点。我猜你的意思是说,当只有主窗体有焦点时,你希望非模态子窗体处于顶部。你尝试过将子窗体的FormStyle属性设置为fsStayOnTop吗?


他不是想要完全相反的吗?主窗体应该能够像Delphi 2007和2009一样置于其他窗口之上。 - Andreas Hausladen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接