delphi - 当 Delphi VCL 样式处于事件状态时,CHM 文件无法正确显示

标签 delphi chm vcl-styles

我的 Delphi 应用程序包含一个帮助文件,用户可以从应用程序中的任何位置调用该文件(嗯......也就是说,对于我迄今为止编写的所有部分......)

它还包括用户从列表中从常规样式切换到另一种 VCL 样式的功能。

当没有应用样式时,帮助文件正常显示如下:

Help file readable

但是一旦 VCL 样式处于事件状态,帮助文件就不再正确显示,如下所示:

help file messed-up by the VCL

这是由于我在主表单创建时声明 HelpFile 的方式所致(路径是指向主 exe 文件夹的全局变量):

Application.HelpFile := path+'Help\D.R.A.M.A. 2.0 Help.chm';

或者这是一个无法解决的已知问题?

旁注:如果需要重点提及,则在 helpContext 上调用帮助,并将 HtmlHelpViewer 添加到 use 子句中。

最佳答案

此答案取自https://forums.embarcadero.com/thread.jspa?threadID=227785我已经确认效果非常好。

TApplicationEvents 组件拖放到应用程序主窗体上。

按如下方式实现该组件的 OnHelp 事件:

function TfmMain.ApplicationEvents1Help(Command: Word; Data: NativeInt; var CallHelp: Boolean): Boolean;
begin
  CloseHelpWnd;

  Result := ShellExecute(0,'open','hh.exe',
                         PWideChar('-mapid '+IntToStr(Data)
                                   +' ms-its:'+Application.HelpFile),
                         nil,SW_SHOW) = 32;

  CallHelp := false;
end;

在主窗体上,实现 CloseHelpWnd 方法,如下所示:

procedure TfmMain.CloseHelpWnd;
var
  HlpWind: HWND;
const
  HelpTitle = 'Your help file title';
begin
  HlpWind := FindWindow('HH Parent',HelpTitle);
  if HlpWind <> 0 then PostMessage(HlpWind,WM_Close,0,0);
end;

您可以将“您的帮助文件标题”替换为您的帮助文件的标题。这是直接打开帮助文件时的窗口标题。

在主窗体的 FormDestroy 事件中,包含对

的调用
CloseHelpWnd;

到目前为止,我们还没有发现上述方法有任何问题,并且由于我们在单独的进程中运行帮助文件,因此它不受 Delphi 10.2 Tokyo 中明显的 VCL 样式问题的影响。

注意:它不必是应用程序的主窗体,但它必须是在需要帮助系统之前创建的窗体,并且在应用程序运行时保持实例化。在我们的例子中,我们在通用资源表单上完成了此操作,然后我们使用新表单重建的所有程序都解决了帮助问题。

注意:您仍然需要照常设置 Application.HelpFile 属性,但不需要包含 HtmlHelpViewer 单元在 Uses 子句中。

关于delphi - 当 Delphi VCL 样式处于事件状态时,CHM 文件无法正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44378837/

相关文章:

德尔福2006 : Run-time assignment of PNG to TImage loses alpha transparency

arrays - 是否可能:记录中的数组

delphi - 为什么randseed(randomize)默认不初始化?

windows - 打开 CHM 文件产生 : "navigation to the webpage was canceled"

delphi - VCL-Styles菜单热键不一致

delphi - 调整表单大小,即使它是无边框的 - 删除斜角边缘

delphi - FirebaseOptions.fromResource 返回 null 使得所有 Firebase 框架无法工作

html - 如何使用超链接打开chm文件

java - 如何打开可执行jar中的帮助文件

delphi - 如何使 TTreeView 在禁用时不突出显示所有节点?