当我在用Embarcadero C++Builder 10.4编写的项目中添加辅助窗口(TForm)时,遇到了辅助窗口总是在主窗口前面的问题,也就是说,当单击主窗口时,辅助窗口失去焦点,但仍在主窗口的顶部。
我试过修改BorderStyle
属性、PopupMode
属性,甚至试过在主窗口激活时调用辅助窗口的SendToBack()
方法,但没有任何变化。
辅助窗口由NULL
所有者创建,并通过其Show()
方法显示。
问题很简单:如何使活动窗口(TForm)位于其他窗口(TForm)之上?
(当主要TForm处于活动状态时,主要TForm不应位于次要TForm之后。)
1条答案
按热度按时间nxowjjhe1#
这是预期行为。
如果
Application->MainFormOnTaskBar
设置为true
,则当辅助TForm
正在创建其窗口,并且该窗体的FormStyle
为fsNormal
,并且该窗体未显示为模态时,则忽略其PopupMode
,并将其所有者窗口(用Win32 API术语,而不是VCL术语)设置为Application->MainForm
窗口。当一个窗口被分配了一个所有者窗口时,它永远不能移到它的所有者窗口之后。
要完成您的要求(不切换到MDI设计),您需要让隐藏的
TApplication
窗口成为您的辅助窗口的所有者,然后您就可以在两个窗口之间自由切换。要实现这一点,您可以:Application->MainFormOnTaskBar
设置为false
(不建议在Vista+系统上使用,因为它还会禁用许多其他VCL行为,而这些行为是正确的Vista+交互所必需的)TApplication::OnGetMainFormHandle
事件提供所需的所有者窗口,在本例中为Application->Handle
TForm
类覆盖虚拟CreateParams()
方法并将Params.WndParent
设置为Application->Handle
。