我正在尝试使用Firemonkey并遇到过这个问题。 在我的应用程序中有多个表单时,我得到相同数量的项目 在我的Windows菜单栏中为一个应用程序(见截图)。
在常规VCL应用程序中,只有一个项目标识应用程序 (所以我的截图只包含'Form2'项目。)
有人知道如何实现与VCL应用程序相同的行为, 所以我的多格式应用程序只有一个项目???
提前致谢!
泰斯
编辑:我设法显示第二个表单,底部菜单中只有一个项目,但表单的属性“透明度”必须为真!因此,为了使第二种形式可见,需要将TRectangle放置在第二种形式中(没有带有标题和按钮的框架可见)...
答案 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;
然后,在修复之后,一切都会按预期工作。
不要忘记从项目设置中的自动创建表单列表中删除子表单。