3

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

4

2 回答 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;
于 2009-06-04T05:52:42.710 回答
0

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

于 2009-06-03T23:21:27.160 回答