在 Delphi (2009 Pro) - 我有一个可以创建非模态子窗口的主窗体。我希望无论哪种形式都有焦点在上面绘制 - 即使它是具有焦点的主窗口。
Lee Hill
问问题
1803 次
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 回答