分配 TCustomForm.PopupParent 会导致 RecreateWnd 并重置 Top/Left 属性

问题描述 投票:0回答:1

我发现如果您分配 TCustomForm.PopupParent,则会重新创建窗口(函数 RecreateWnd)。这将重置创建表单后分配的左/上/宽/高参数。

如何避免这种情况?

我只想出了这段代码:

saveLeft := formForShow.Left;
saveTop := formForShow.Top;
saveWidth := formForShow.Width;
saveHeight := formForShow.Height;

formForShow.PopupParent := PopUpParentForModal;

formForShow.HandleNeeded; // create window handle
formForShow.SetBounds(saveLeft, saveTop, saveWidth, saveHeight);
Result := formForShow.ShowModal;

这样做正确吗?还有更漂亮的方法吗?

delphi
1个回答
0
投票

来自 TCustomForm.PopupMode 文档

当 PopupMode 属性自动设置为 pmAuto 时 调用 ShowModal 方法。但是,这会导致窗口句柄 被重新创建,这通常是不可取的。为了避免重新创建 的窗口句柄,您可以显式地将 PopupMode 属性设置为 pmAuto 在调用 ShowModal 方法之前(例如在设计时)。

因此,我建议您遵循文档中的建议并相应地设置

PopupMode
属性。

© www.soinside.com 2019 - 2024. All rights reserved.