加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 04:05:18 所属栏目:大数据 来源:网络整理
导读:在 Windows平台上,使用VCL,当我们想在菜单中添加分隔符时,我们添加一个带有标题的TMenuItem:=’ – ‘; 使用FireMonkey,我们添加一个带有Text:=’ – ‘的TMenuItem; 它在Windows平台上按预期工作,带有Text =’ – ‘的项目显示为分隔符. 但是,当我在OSX上
在 Windows平台上,使用VCL,当我们想在菜单中添加分隔符时,我们添加一个带有标题的TMenuItem:=’ – ‘;

使用FireMonkey,我们添加一个带有Text:=’ – ‘的TMenuItem;

它在Windows平台上按预期工作,带有Text =’ – ‘的项目显示为分隔符.

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

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

我尝试过使用TMainMenu和TMenuBar(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}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读