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

2024-02-02

On Windows平台,与VCL,当我们想要添加一个分隔器在菜单中,我们添加一个TMenuItem with a Caption := '-';

With 火猴,我们添加一个TMenuItem with a Text := '-';

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

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

我还没有找到任何财产TMenuItem指定它是一个分隔器...

我尝试过TMainMenu and a 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}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何添加在 OSX 上按预期工作的菜单项分隔符? 的相关文章

  • 如何远程获取系统的网络共享和连接?

    我正在寻找一种远程获取类似于以下控制台应用程序的信息的方法 net use 净份额 网络统计 ano 但是 我需要能够在系统上运行第三方应用程序的情况下执行此操作 这有效地排除了使用 psexec 远程执行命令 因为 psexec 将作为服
  • 如何使用 NPAPI 将 Delphi VCL 表单嵌入到 HTML 页面中?

    使用 Delphi 编写 ActiveX 插件的方法有很多 但 ActiveX 本身在 IE 以外的浏览器中存在很多限制 所以我在想 如何编译一个 NPAPI 格式的插件 原生兼容 Chrome Firefox 该插件的目的是允许将 VCL
  • Delphi 有通用的“对象池”实现吗?

    我在寻找 Delphi 的数据库连接池实现时遇到了这个问题 对象池需要两个方法 get 从池中获取一个对象 如果池为空或者其大小尚未达到最大大小 这将创建一个新实例 此方法必须是线程安全的 以便两个线程不能同时获取一个对象同一时间 如果所有
  • 读写文本文件的最佳方法

    我正在使用最新版本的 Lazarus IDE 并且我有一个Memo1在我的 TForm1 上 我必须加载一个文本文件Memo1然后编辑备忘录的每一行 我使用Memo1 Lines Strings i 最后 我必须将编辑后的备忘录保存在特定路
  • 可以解析Delphi XMLDoc格式并构建在线帮助的工具

    API 文档的 XMLDoc 工具解释如下 http edn embarcadero com article 32770 http edn embarcadero com article 32770 是否有任何免费或商业工具可用于创建基于
  • 有没有办法获取正在运行或新打开的资源管理器窗口的 IExplorerBrowser 接口以供后续 BrowseToXXX 调用?

    这么问是因为在上一个问题 https stackoverflow com questions 6220899 answer 6221898我是指向 IExplorerBrowser 的指针 但是它创建了一个子窗口 而我想模拟资源管理器的 查
  • Delphi:平滑折叠/展开形式

    需要你的帮助 我一直在寻找 我在德尔福西雅图 试图平滑调整表单底部的大小 就我而言 调整大小 只是有点折叠 展开 如下所示 我怎样才能意识到这一点 我尝试过使用 TTimer procedure TForm1 Timer1Timer Sen
  • 如何发送/接收 JSON?

    我知道这是一个愚蠢的问题 但我通常不进行 Web 编程 并且被要求发送一些 JSON 数据并接收一些回报 我用谷歌搜索 很清楚如何编码和解码 JSON 数据 但我对此很陌生 我不知道如何与给定的 URL 进行通信并说 这里有一些数据 请发回
  • 德尔福:idHttp+SSL

    请解释一下如何使用 SSL https 从服务器下载文件 我在互联网上没有找到合适的答案 每个人都说 TIdSSLIOHandlerSocket 但我只有 TIdSSLIOHandlerSocketOpenSSL 如果我使用 TIdSSLI
  • 如何隐藏 WebBrowser 直到网站完成加载/下载过程?

    我想知道我该如何隐藏WebBrowser直到网站加载过程完成 另外 我使用 Panel1 和WebBrowser在它的上面 为什么 好吧 这样 我可以完全像我想要的 WebBrowser 一样设置 Panel1 的大小和位置 然后将 Web
  • Delphi 窗体在显示时总是会触发 OnResize 吗?

    如果我创建一个新的 Delphi 表单 挂钩其 OnResize 事件并运行该应用程序 则在显示窗口之前会触发 OnResize 我不知道对于任何窗口来说 这种情况是否总是会发生 对于熟悉 Windows API 的人来说 我已将其追溯到
  • 作为属性的类引用

    谷歌对于这类搜索毫无用处 因为你会得到数亿个结果 其中没有一个与特定问题相关 问题很简单 Delphi 中是否可以有类引用属性 如果是这样 怎么办 这是我尝试过的 type TMyObject class end TMyObjectClas
  • Firemonkey - 更新视觉组件

    我们从版本 1 开始就使用 Firemonkey 但仍然发现更新当前在屏幕上可见的组件很困难 在 Firemonkey 中请求重画的 方式 有很多 也许太多了 应用样式 ApplyStyle 事件 主要是当它在屏幕上可见时 请求 repai
  • 使用 Java 中的 JTextfield (Netbeans) 使用点分隔符使输入字段自动格式化数字

    我是 Java 新手 在我的第一个 Java 程序 使用 Netbeans 中 我想添加带有点 的输入字段自动格式编号 使用 JTextfield 分隔符 这是我的简短代码 private void PayTransKeyReleased
  • DELPHI win32 的 ORM [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道 Delphi Win32 的 ORM 或类似的东西吗 Marco Cantu 是 Insta
  • 在主表单之前显示登录表单

    我在表单之间导航时遇到问题 我使用 Delphi XE5 创建了一个 Android Firemonkey 移动应用程序 我目前有一个登录表单和主表单 现在我想要有关如何处理登录表单以显示在主表单之前的建议 在 项目选项 中的表单下 选择要
  • 如何使用 jQuery 和“长轮询”通过 Indy HTTP 服务器动态更新 HTML 页面?

    我读过这篇文章使用 JavaScript 和 jQuery 的简单长轮询示例 http techoctave com c7 posts 60 simple long polling example with javascript and j
  • 使用 StretchDIBits 使用 Delphi 6 处理条形码图像 - 输出中缺少条形线

    我的应用程序是在 Delphi 6 中开发的 由于后台处理和大量数据 它消耗大约 60MB 120MB 物理内存 这是一个资源密集型应用程序 该应用程序的功能之一是在进行某些处理后创建条形码图像 如果用户继续生成条形码 那么至少十分之一的条
  • Delphi - 相当于C#的三元运算符? [复制]

    这个问题在这里已经有答案了 可能的重复 Delphi 中是否存在或者将来是否存在条件运算符 https stackoverflow com questions 2108609 is there or is there ever going
  • Delphi - 将物理路径(设备文件句柄)转换为虚拟路径

    我怎样才能转换像这样的路径 设备 HarddiskVolume3 Windows 进入其相应的虚拟路径 如本例中的 c Windows 我个人更喜欢原生方式 function GetHDDDevicesWithDOSPath TString

随机推荐

  • PHP:使用 DOMPDF 自动将动态 PDF 保存到远程服务器

    我正在使用 dompdf 库创建基于表格的 PDF 我可以在线查看它 也可以将其下载到选择的用户文件夹中 但我想做的是将其保存到远程服务器 我不需要将其保存到用户电脑 就像一个自动上传脚本 它会创建文件然后将其上传到远程服务器 所以我稍后可
  • 为什么 UnderscoreJS 对许多原生 Javascript 函数有包装函数?

    我注意到UnderScoreJS http underscorejs org isArray有很多围绕原生 Javascript 函数的包装函数 举个例子 isArray isBoolean isNaN 这有什么原因吗 或者这些只是为了确保
  • 将值从BackgroundWorker DoWork 传递到BackgroundWorker Completed

    我如何传递一个值BackgroundWorker DoWork to BackgroundWorker Completed Since BackgroundWorker Completed不被调用BackgroundWorker DoWor
  • 获取 javascript 对象中的最后一项

    如果我有一个像这样的对象 a apple b banana c carrot 如果我事先不知道列表会上升到 c 除了循环遍历对象之外 是否有办法获取对象中的最后一项 例如 carrot 是的 有一种方法可以使用Object keys obj
  • setProgressDrawable 填充整个seekBar

    正如我在标题中所说 当我使用 setProgressDrawable 时 它 会填充整个 SeekBar 如果进度为 34 则进度显示 100 但拇指显示正确的百分比为 34 我不明白可能是什么问题 done setProgressDraw
  • 异步/等待上传任务

    我如何等待 uploadTask 以便在将下载 url 和文档插入到 firestore 之前先上传图像 文件并跟踪其进度 以下代码是我的示例 Vue 项目 它工作正常 但请参阅if portraitFile 必须满足我必须上传图片的条件
  • Amazon S3:SDK 或 REST API [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我必须使用 Amazon S3 以 Java 编程方式上传一些静态内容 当我开始阅读时 我发现这样做的方法是通过他们的 SDK REST API
  • DART 中可能有配置文件吗?

    我有这个 JavaScript 类 use strict global conf var properties PROPERTIES CHANNEL sport VIEW ELEMENTS LOADER CLASS loader SPLAS
  • MySQL 是否应该将时区设置为 UTC?

    跟进问题https serverfault com questions 191331 should servers have their timezone set to gmt utc https serverfault com quest
  • Jersey 客户端 API - 身份验证

    我正在使用 Jersey 客户端 API 向 JAX WS Web 服务提交 SOAP 请求 默认情况下 Jersey 在受到质询时以某种方式使用我的 Windows Nt 凭据进行身份验证 谁能解释一下 Jersey 在代码中的位置 它可
  • Java组合(has-a)关系澄清

    我很难理解构图的概念 我需要创建一个制造商类和一个产品类并使用组合 我是否在产品内部创建 has a 引用 并在创建新产品时仅添加制造商对象 这正是我们的目的 也是有道理的 制造商是产品的一个完全合理的属性 并且在对象中引用制造商似乎是合理
  • 如何使用其自己的 DataTemplate DependencyProperty 实现 WPF 控件?

    我是一名中级 WPF 开发人员 拥有如何实现依赖属性以及简单的自定义控件的工作知识 我还不明白如何将 DataTemplate 依赖属性添加到自定义控件 并使用它来定义数据集合中每个数据的元素树 完整的故事是 我一直致力于创建一个 WPF
  • 如果 minSdkVersion>10,为什么 WidgetTab 中的图像不显示?

    我一直在尝试创建一个简单的TabActivity有 3 个选项卡 所有作品except如果我把android minSdkVersion 11 在清单文件中 不显示图标 如果我设置 minSdkVersion 10 一切都很好 我左顾右盼
  • 在 IntelliJ IDEA 中关闭选项卡时更改为最近使用的选项卡?

    当我关闭 IntelliJ 中的编辑器选项卡时 接下来会打开直接出现在其右侧的选项卡 相反 我宁愿打开最近使用的选项卡 例如 如果我打开这些选项卡 Foo java currently viewed Bar java 然后我使用CMD SH
  • 寻找 XSLT 库来创建 SVG 图表 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找 XSLT 库来创建 SVG 图表 我需要饼图 条形图 折线图以及所有常见的图表 我希望输入
  • 保护 JavaScript eval 函数的安全

    我们希望让用户能够在我们的应用程序中执行自行创建的 JavaScript 代码 为此我们需要使用eval来评估代码 为了将所有安全问题降至最低 如果不是零 我们的想法是防止使用任何window or document代码中的函数 所以不行X
  • 使用 python 正则表达式仅替换字符的单个实例

    我正在尝试更换单身 带有其他内容的字符 并且想要忽略多个 连续的字符 我不太明白如何 我尝试使用前瞻 s a b c d re sub z s 这给了我 za zb zc zd 当我想要的是 za b c zd 我究竟做错了什么 注意 如果
  • 是否可以使用WCF与Windows内核模式软件进行通信?

    WCF 支持一些互操作性绑定 这些绑定是否允许与内核模式 sw 通信 AFAIK 内核模式 sw 可以打开命名管道 在Local System安全上下文 这些命名管道可以与 WCF 互操作吗 是的 您应该能够使用 WCF 中的命名管道绑定来
  • 如何从 C# 应用程序调用带有 void 指针的 C++ 函数?

    我有一个动态库 dll 用 C 编写 导出我想在 C 应用程序中使用的函数 int SendText void pControl char sText 鉴于它需要一个指向 void 的指针 我该怎么办 for void 你可以使用IntPt
  • 如何添加在 OSX 上按预期工作的菜单项分隔符?

    On Windows平台 与VCL 当我们想要添加一个分隔器在菜单中 我们添加一个TMenuItem with a Caption With 火猴 我们添加一个TMenuItem with a Text 它在 Windows 平台上按预期工