通过设置PopupParent调用ShowModal是一个好主意,在较新的Delphi版本中是否有必要?

Alo*_*mer 5 delphi delphi-2006

为了防止新创建的模态窗口隐藏在其模态父窗口下,我习惯于PopupParent在调用时始终进行设置ShowModal(如此此处此处所建议):

function TMyForm.ShowModal(ParentForm: TCustomForm): Integer;
begin
    PopupParent := ParentForm;
    Result := inherited ShowModal;
end;
Run Code Online (Sandbox Code Playgroud)

但是,当进行调试时(在FormCreate中设置表单时丢失了表单放置的问题),我意识到设置PopupParent会导致对的调用ReCreateWindow,从而破坏并重新创建基础的Windows屏幕对象。

我的问题:

  1. 始终设置一个好主意PopupParent-可能导致什么问题?是否存在可行的替代方案?
  2. 在较新版本的Delphi中仍然需要这样做吗(目前我正在使用D2006,但计划进行更新)?

编辑:

我认为以上所有链接的问题都可以解决相同的问题,第三个链接可以最好地描述这个问题:

[使用ShowModal打开一个窗体],此窗体使用ShowModal打开另一个窗体,因此我们已堆叠了模态窗体。有时存在一个问题,当我们以新形式调用ShowModal时,它将隐藏在以前的形式之后,而不是显示在顶部。按alt + tab后,表单返回顶部[...]

Ale*_*dre 4

这个问题很老了,但仍然相关。有关此问题的最佳信息来源来自 Allen Bauer 本人:\n http://blog.therealoracleatdelphi.com/2004/02/popupmode-and-popupparent_10.html

\n\n

(回溯:\n https://web.archive.org/web/20160324062228/http://blogs.embarcadero.com/abauer/2004/02/10/295

\n\n

您会发现:\n“如果您在 ShowModal 之前明确将 PopupMode 属性设置为 pmAuto,就像在设计时一样,则不需要重新创建。”

\n\n

这样你的代码应该是:

\n\n
function TMyForm.ShowModal(ParentForm: TCustomForm): Integer;\nbegin\n    PopupMode := pmAuto;\n    PopupParent := ParentForm;\n    Result := inherited ShowModal;\nend;\n
Run Code Online (Sandbox Code Playgroud)\n