【发布时间】:2013-05-02 11:42:03
【问题描述】:
我正在使用包含 TMainMenu 的 Delphi 表单。在特定情况下,我想在另一个表单中显示此表单的父级和客户端对齐。这工作正常,但没有出现父窗体的主菜单。我在this SO question 中看到一条评论,指出“子窗口不能有菜单”。我可以做些什么来覆盖此行为并显示 TMainMenu 吗?
顺便说一句:我刚刚注意到这一点,因为我以前使用过这个原理,我一直在使用 Developer Express 菜单组件,并且很高兴以子窗体显示。
后期编辑: 使用下面 TLama 中的代码,这是可行的(但子菜单不是主题,我很简单): 这有效:
procedure TForm65.FormShow(Sender: TObject);
begin
Winapi.Windows.SetParent(ChildForm.Handle, Handle); // <<<<<<<<
ChildForm.BorderStyle := bsNone;
ChildForm.Align := alClient;
ChildForm.Show;
end;
此代码不起作用。为什么?
procedure TForm65.FormShow(Sender: TObject);
begin
ChildForm.Parent := Self; // <<<<<<<<<
ChildForm.BorderStyle := bsNone;
ChildForm.Align := alClient;
ChildForm.Show;
end;
【问题讨论】:
-
在表单中显示表单有点奇怪(如果没有 MDI 接口)。如果您将表单替换为 Frame 会怎样?
-
我无法重现这个。我尝试使用代码
like this,但放在ChildForm上的主菜单仍然可以正常工作(Delphi 2009)。 -
@whosrdaddy:但这很酷!有时我让我的标准控件(例如按钮)有窗口框架只是为了好玩。
-
@TLama:您的代码确实有效,但菜单非常简单(缺少主题?)。我想知道为什么我的父母分配失败了,但你的(几乎)有效。
-
@Brian 调用 SetParent 不会使窗口成为子窗口。这在 SetParent 的文档中进行了解释。我的回答是准确的。毕竟,MSDN 上的文档再清楚不过了。
标签: delphi menu childwindow