- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 OSX 中运行我的 Firemonkey 应用程序时,搜索框会自动出现在我标记为“帮助”的最后一个菜单项上。到目前为止一切顺利,因为带有搜索框的帮助菜单是 OSX 的标准配置。
接下来,我需要添加一个帮助文件。我购买了一个令人印象深刻的实用程序 Help Crafter我用它非常快速、轻松地制作了一本 Apple HelpBook。我将 HelpBook 包放入我的主应用程序的 Resources 文件夹中。然后我在 IDE 中使用 Project|Options|Version Info 来编辑 Info.plist 文件。我向 Info.plist 添加了两个键 CFBundleHelpBookFolder 和 CFBundleHelpBookName 以指向我的 HelpBook。
运行我的应用程序,我现在发现我有两个“帮助”菜单项——一个是我编程的项目,另一个显然是由 Mac OS 自动创建的,还有一个子菜单项可以调出我的帮助手册。令我惊讶的是,我现在无需任何编码即可获得工作帮助。
接下来,我想删除我创建的帮助菜单项以消除重复。但是搜索框仍然位于我的“帮助”菜单项下,而不是在操作系统创建的“帮助”菜单项上。当我删除我的帮助菜单项时,搜索框重新定位到我现在创建的最后一个菜单项。
如何指定搜索框应位于操作系统创建的帮助菜单项?
或者,我可以指定操作系统不应该自动创建一个帮助菜单项(以便我可以自己创建)?在那里面情况下,我还需要知道如何编程加载帮助手册。
出现自Apple documentation HelpBook 注册后,操作系统会提供帮助和搜索功能。但是这两个功能应该在同一个菜单项上。我想知道这是否可能是他们被拆分的 Firemonkey 错误。
最佳答案
我上面的问题分为三个部分。我对 1 和 3 不太满意,但我对 2 有部分解决方案。
要防止操作系统自动创建帮助菜单,只需删除Info.plist中的CFBundleHelpBookFolder和CFBundleHelpBookName键即可。然后在 FormCreate 中完成 HelpBook 的注册:
var
{$IFDEF MACOS}
HelpBundle: NSBundle;
AppBundle: NSBundle;
Path: string;
HelpReg: Boolean;
{$ENDIF}
begin
{$IFDEF MACOS}
HelpMgr := TNSHelpManager.Create; // HelpMgr declared as a global variable
AppBundle := TNSBundle.Wrap(TNSBundle.OCClass.mainBundle);
Path := AppBundle.bundlePath.UTF8String +
'/Contents/Resources/MyAppHelp.help';
HelpBundle := TNSBundle.Wrap(TNSBundle.OCClass.bundleWithPath(StrToNSSTR(Path)));
HelpReg := HelpMgr.registerBooksInBundle(HelpBundle);
if not(HelpReg) then
ShowMessage('Failed to register Help Book');
{$ENDIF}
为了打开 HelpBook,我将以下代码放在相应子菜单项(即帮助 | MyApp 帮助)的 OnClick 事件中:
HelpMgr.openHelpAnchor(StrToNSSTR('Page0'),
StrToNSSTR('com.mycompany.myapp.help'));
这种方法导致了 Spotlight for Help字段被自动添加到“帮助”菜单中。遗憾的是,Spotlight for Help 不再为我的 HelpBook 编制索引。使用我第一次尝试的方法(使用我原始帖子中描述的 Info.plist),Spotlight for Help 确实为我的 HelpBook 建立了索引,但据我报告,Spotlight 字段是在我的最后一个菜单项上创建的帮助位于操作系统自动创建的新菜单项上,虽然功能不标准。
关于macos - TMainMenu - 管理帮助和搜索菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46209639/
在我的系统上,主菜单是完全动态的,是根据数据库中的数据构建的。 我有一个特定的情况,一些菜单项需要在显示之前组装。 假设我的菜单包含以下主要项目: 文件 - 客户 - 报告 - 关于 当我点击 Rep
在 OSX 中运行我的 Firemonkey 应用程序时,搜索框会自动出现在我标记为“帮助”的最后一个菜单项上。到目前为止一切顺利,因为带有搜索框的帮助菜单是 OSX 的标准配置。 接下来,我需要添加
使用标准 VCL。如果菜单项在 TMainMenu有 RadioItem和 GroupItem已分配,通常它使用 点 表示Checked属性 - 检查其中一个 radio 项目,并由 指示点 . Ra
我想在单击 TMainMenu 项目前打勾或“x”。有什么办法吗? 最佳答案 启用菜单项的AutoCheck属性(property)。链接引用将其描述为: AutoCheck Indicates wh
我有一个包含两个 TForm 类的程序,每个类都添加了一个 TMainMenu。然后我尝试在运行时动态合并它们。 我的问题是,当他们合并 TMainMenu 中合并的菜单项时,现在以合并后的形式显示存
例如,当我将 TPanel 添加到表单并使用 alTop 对齐它,然后将 TMainMenu 添加到同一表单时,主菜单位置会覆盖面板位置,以便主菜单保持在窗体的最顶层,面板显示在其下方。 是否可以覆盖
我正在开发一个相当大的项目,该项目使用自定义表单,并且想自己绘制这些表单的非客户区域。我无法使用 vcl-styles,因为许多表单需要有一个标题栏和边框,其颜色是在运行时选择的,据我所知,样式的设计
我对编程比较陌生,我的问题是表单上的 TMainMenu。我研究了很多 (很多)网站来寻找解决方案,但没有找到任何可以解决这个问题的网站。 即使我使用 Screen.MenuFont.Size 更改字
有没有办法让 Delphi TMainMenu 中的标题在没有图像时一直显示在左侧?如果没有图像,则会留下一 block 空白区域来代替图像。我的意思的一个很好的屏幕截图是 here 。我还没有看到解
在 Delphi 2007 程序中,我使用 TMainMenu 引用 TAction 列表中的操作。我在所有主要字幕的热键前面都加上了一个 & 符号: &File | &Edit | Ev&aluat
我在一个旧项目中,表单上有标准菜单。菜单项由我使用 TActionManager 创建的 TActions 填充。 我正在更新这个旧项目,现在想将菜单的外观更改为 TActionManager 设置的
我正在一个相当大的具有多种形式的应用程序中自定义绘制我的标题栏,并决定尝试用老式的方式来完成它,通过自己处理一些消息并在处理 WM_NCPAINT 时进行绘图。 这幅画本身进展顺利并且基本上有效。但其
Delphi 2010,Win32 VCL。我需要为我的应用程序创建一个具有最标准外观的主菜单。 TMainMenu 在所有 Windows 版本中看起来都不错,唯一的缺点是当它显示 Enabled=
我有一个带有图标的 TMainMenu。一切都很好,直到我在表格上放置了 TMemo。当我运行程序时,图标消失了。发生了什么以及如何解决这个问题? 我使用 Delphi 2010 作为 IDE。 最佳
我正在开发一个编辑器,可以在停靠或 float 时创建和使用多个窗口。困难在于,如果 float 窗口获得焦点,则单击主窗体的 TMenu 会从 float 窗口获取焦点。大约一年前讨论过一个与此非常
我正在尝试在 Delphi XE3 中创建一个应用程序菜单和工具栏,如下所示(来 self 拥有的程序): 我可以通过执行以下操作来复制此外观的一部分: 创建新的 VCL Forms 应用程序 添加T
我想在 TImageList 中加载具有透明背景的 PNG 并在 TMainMenu 中使用它(通过 TAction)。 然而,在 Delphi 中,背景只是黑色。 This家伙说这对他有用,但用的是
我使用此代码从表单的非客户区域中删除 vcl 样式。 type TFormStyleHookNC= class(TMouseTrackControlStyleHook) protected
我在 Delphi Seattle 中创建了一个多设备应用程序,并添加了一个带有 MenuItem1 和 MenuItem2 的 TMainMenu(没有别的)。为 OSX 构建和运行,仅显示 Men
我正在阅读 documentation for menus in Firemonkey desktop applications .它解释了有两种完全不同的菜单组件,一种用于 Windows (TMe
我是一名优秀的程序员,十分优秀!