【发布时间】:2010-10-31 03:07:35
【问题描述】:
在 Delphi (2009 Pro) - 我有一个可以创建非模态子窗口的主窗体。我希望无论哪种形式都有焦点绘制在顶部 - 即使它是具有焦点的主窗口。
【问题讨论】:
在 Delphi (2009 Pro) - 我有一个可以创建非模态子窗口的主窗体。我希望无论哪种形式都有焦点绘制在顶部 - 即使它是具有焦点的主窗口。
【问题讨论】:
多个窗口不能同时获得焦点。我假设您的意思是,当只有 MainForm 具有焦点时,您希望您的非模态子表单位于顶部。您是否尝试过将子窗体的 FormStyle 属性设置为 fsStayOnTop?
【讨论】:
在 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;
【讨论】: