Firemonkey的多个表单在Windows菜单中显示多个项目

时间:2011-12-13 12:29:24

标签: forms delphi firemonkey

我正在尝试使用Firemonkey并遇到过这个问题。 在我的应用程序中有多个表单时,我得到相同数量的项目 在我的Windows菜单栏中为一个应用程序(见截图)。

在常规VCL应用程序中,只有一个项目标识应用程序 (所以我的截图只包含'Form2'项目。)

有人知道如何实现与VCL应用程序相同的行为, 所以我的多格式应用程序只有一个项目???

multiple items

提前致谢!

泰斯

编辑:我设法显示第二个表单,底部菜单中只有一个项目,但表单的属性“透明度”必须为真!因此,为了使第二种形式可见,需要将TRectangle放置在第二种形式中(没有带有标题和按钮的框架可见)...

1 个答案:

答案 0 :(得分:3)

我找到了解决方法。

当您使用所有者创建表单时,FireMonkey应该将所有者传递给Windows CreateWindowEx函数,但它不会。

在单位FMX.Platform.Win中,在CreateWindow()功能中,更改此内容:

  Wnd := CreateWindowEx(ExStyle, WindowClass.lpszClassName, PChar(AForm.Caption), Style,
    Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT),
    GetDesktopWindow, 0, hInstance, nil);

对此:

  // If there's an owner, and it's a form, then create the window as a child
  if (AForm <> nil) and (AForm.Owner <> nil) and (AForm.Owner is TForm) then
  begin
    // Child window
    Wnd := CreateWindowEx(ExStyle, WindowClass.lpszClassName, PChar(AForm.Caption), Style,
      Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT),
      HandleToHWND(TForm(AForm.Owner).Handle), 0, hInstance, nil);
  end
  else
  begin
    // Desktop window
    Wnd := CreateWindowEx(ExStyle, WindowClass.lpszClassName, PChar(AForm.Caption), Style,
      Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT),
      GetDesktopWindow, 0, hInstance, nil);
  end;

因此,如果您要创建一个子项,尤其是模态表单,请确保在创建父表单时将其指定为所有者:

MyModalForm := TMyModalForm.Create(MyParentForm);
MyModalForm.ShowModal;

然后,在修复之后,一切都会按预期工作。

不要忘记从项目设置中的自动创建表单列表中删除子表单。