Firemonkey应用程序添加帮助文件的解决方案咨询
解决Firemonkey应用关联帮助文件的替代方案
直接调用Windows API启动帮助文件
Firemonkey虽未封装HelpFile属性,但可直接调用Windows原生API实现帮助文件调用,无需额外VCL启动器。
CHM格式帮助文件调用示例
如果使用CHM格式帮助,可借助HtmlHelp函数:
uses Winapi.Windows, Winapi.HtmlHelp; // 打开指定主题的CHM帮助 procedure OpenHelp(const AHelpFile: string; ATopicID: DWORD = 0); begin HtmlHelp(0, PChar(AHelpFile), HH_DISPLAY_TOPIC, ATopicID); end; // 调用示例:打开主帮助页 OpenHelp('MyAppHelp.chm'); // 调用示例:打开指定ID的主题 OpenHelp('MyAppHelp.chm', 1001);
HLP格式帮助文件调用示例
针对传统HLP格式,使用WinHelp函数:
uses Winapi.Windows; procedure OpenHelp(const AHelpFile: string; ATopicID: DWORD = 0); begin WinHelp(0, PChar(AHelpFile), HELP_CONTEXT, ATopicID); end;
封装全局帮助管理类
可以自己实现一个全局帮助管理类,模拟VCL的HelpFile属性逻辑,让调用更简洁:
unit HelpManager; interface uses Winapi.Windows, Winapi.HtmlHelp; type THelpManager = class private FHelpFile: string; public property HelpFile: string read FHelpFile write FHelpFile; procedure OpenHelp(ATopicID: DWORD = 0); end; var GlobalHelpManager: THelpManager; implementation { THelpManager } procedure THelpManager.OpenHelp(ATopicID: DWORD); begin if FHelpFile <> '' then HtmlHelp(0, PChar(FHelpFile), HH_DISPLAY_TOPIC, ATopicID); end; initialization GlobalHelpManager := THelpManager.Create; finalization GlobalHelpManager.Free; end.
使用时,在应用启动阶段设置GlobalHelpManager.HelpFile := 'MyAppHelp.chm';,后续需要调用帮助的地方直接执行GlobalHelpManager.OpenHelp(1001);即可。
跨平台兼容方案(多平台应用适用)
如果应用需要支持Windows以外的平台(如macOS),可通过平台分支处理:
- Windows:沿用上述
HtmlHelp/WinHelpAPI - macOS:调用系统
NSWorkspace打开对应格式的帮助文件
示例代码:
uses System.SysUtils, {$IFDEF MSWINDOWS} Winapi.Windows, Winapi.HtmlHelp; {$ENDIF} {$IFDEF MACOS} Macapi.AppKit, Macapi.Foundation; {$ENDIF} procedure OpenHelp(const AHelpFile: string; ATopicID: DWORD = 0); begin {$IFDEF MSWINDOWS} HtmlHelp(0, PChar(AHelpFile), HH_DISPLAY_TOPIC, ATopicID); {$ENDIF} {$IFDEF MACOS} var LWorkspace := TNSWorkspace.Wrap(TNSWorkspace.OCClass.sharedWorkspace); var LURL := TNSURL.Wrap(TNSURL.OCClass.fileURLWithPath(NSSTR(AHelpFile))); LWorkspace.openURL(LURL); {$ENDIF} end;
以上方案均无需额外启动器,直接在Firemonkey应用内部完成帮助文件调用,比启动器方案更简洁高效。
内容的提问来源于stack exchange,提问作者Sergio Bonfiglio
相关产品推荐
相关产品推荐

