gpt4 book ai didi

delphi - 如何添加在 OSX 上按预期工作的菜单项分隔符?

转载 作者:行者123 更新时间:2023-12-03 14:48:59 26 4
gpt4 key购买 nike

Windows平台上,使用VCL,当我们想在菜单中添加分隔符时,我们添加一个TMenuItem 带有 Caption := '-';

使用 FireMonkey,我们添加一个带有 Text := '-'; 的 TMenuItem;

它在 Windows 平台上按预期工作,带有 Text='-' 的项目显示为分隔符。

但是,当我在 OSX 上运行相同的应用程序时,我看到减号可见......

我没有在 TMenuItem 上找到任何属性来指定它是分隔符...

我尝试过使用 TMainMenuTMenuBar (UseOSMenu := True|False;),但仍然遇到此问题。

有办法创建一个真正的分隔符吗?(否则,我会检查操作系统并删除它(如果是 OSX...)

最佳答案

这是 FireMonkey 中的一个错误。我相信他们会解决这个问题。但同时您可以使用下面的代码。在主窗体的 OnActivate 事件中调用过程 FixSeparatorItemsForMac。

不要忘记使用列表中的 mac 特定文件。

uses
...
{$IFDEF MACOS}
,Macapi.ObjectiveC,MacApi.AppKit,MacApi.Foundation,FMX.Platform.Mac
{$ENDIF}

{$IFDEF MACOS}

Procedure FixSeparatorItemsForMenuItem(MenuItem:NSMenuItem);
var i:Integer;
subItem:NSMenuItem;
begin
if (MenuItem.hasSubmenu = false) then exit;
for i := 0 to MenuItem.submenu.itemArray.count -1 do
begin
subItem := MenuItem.submenu.itemAtIndex(i);
if (subItem.title.isEqualToString(NSSTR('-'))= true) then
begin
MenuItem.submenu.removeItemAtIndex(i);
MenuItem.submenu.insertItem(TNSMenuItem.Wrap(TNSMenuItem.OCClass.separatorItem),i);
end else begin
FixSeparatorItemsForMenuItem(subItem);
end;
end;
end;

Procedure FixSeparatorItemsForMac;
var NSApp:NSApplication;
MainMenu:NSMenu;
AppItem: NSMenuItem;
i: Integer;
begin
NSApp := TNSApplication.Wrap(TNSApplication.OCClass.sharedApplication);
MainMenu := NSApp.mainMenu;
if (MainMenu <> nil) then
begin
for i := 0 to MainMenu.itemArray.count -1 do
begin
AppItem := mainMenu.itemAtIndex(i);
FixSeparatorItemsForMenuItem(AppItem);
end;

end;
end;
{$ENDIF}

关于delphi - 如何添加在 OSX 上按预期工作的菜单项分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7505581/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com