【发布时间】:2015-01-14 11:34:46
【问题描述】:
我在我的应用程序中使用嵌入式表单,我正在尝试这样的事情:
在设计时,表单是一个正常的表单,对嵌入/对接一无所知。 使用 ButtonClick,我可以通过调用表单的 Show() 方法使表单可见。 在运行时,表单可能会停靠到另一个表单并成为嵌入式表单。 当我按下按钮再次显示表单(现在是嵌入的)时,什么也没有发生,因为 我现在必须为包含嵌入表单的表单调用 Show()。
我正在寻找一种在调用嵌入表单的 Show() 方法时强制显示父表单的方法。我可以通过在调用 Show() 之前检查父表单的存在来处理这个问题,但我不想包含这个特定的处理。
我更愿意在父表单中进行此处理,当表单停靠时会收到通知。
Show() 方法仅将 Visible 属性设置为 true(RAD Studio 帮助),所以我认为不会触发消息...?
你知道实现这种东西的方法吗?
编辑
我想提供一些关于我的应用程序的信息,因为我猜这更像是一个设计问题而不是编程问题。
应用程序使用多个插件来适应连接的硬件。该 exe 提供了一个拖放环境,并包含一个可停靠表单的基类。插件对对接实现没有任何了解。通过创建可停靠表单并从插件嵌入表单,插件表单变得可停靠。这就是为什么我希望在某处调用嵌入表单的 Show() 方法时显示父表单的原因。
【问题讨论】:
-
调用
Show不会做你想做的事。您想要做的事情需要通过父链找到顶层表单,并在上面调用Show。您希望显示顶级表单,但希望避免遍历父链。您是否已为您所要求的可能无法完成做好准备? -
一旦嵌入孩子,父母可以通过子类化并检查 WM_SHOW 等消息来挂钩到孩子窗体 WindowProc。 (最好使用
GetParentForm <> nil并简单地显示它)。 -
@DavidHeffernan 是的,我为此做好了准备 :) 我希望 vcl 有一个我还不知道的机制。
-
@kobik:即使没有触发 OnShow,WM_SHOW 也会被触发吗?
标签: delphi c++builder vcl tform