允许在顶部绘制Mainform的非模态子窗口 - Delphi

时间:2009-06-03 20:34:16

标签: delphi non-modal

在Delphi(2009 Pro)中 - 我有一个可以创建非模态子窗口的主窗体。我希望无论哪种形式都有焦点在顶部绘制 - 即使它是具有焦点的主窗口。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

多个窗口无法同时拥有焦点。我假设您的意思是说,当只有MainForm具有焦点时,您希望非模态子窗体位于顶部。您是否尝试将子Form的FormStyle属性设置为fsStayOnTop?