You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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/WinHelp API
  • 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 23:27:10