【问题标题】:How do I attach an OnHelp event handler to the Application object?如何将 OnHelp 事件处理程序附加到 Application 对象?
【发布时间】:2020-08-05 16:41:55
【问题描述】:

在 Embarcadero Delphi XE7 中,我使用了一个带有帮助按钮的组件。 在组件(显示消息对话框)中,我指定了帮助上下文编号。如果用户点击按钮,应该会显示帮助,但我会收到错误消息:

项目 ... 引发异常类 $C00000FD 并带有消息“堆栈溢出在 0x006f089e”。

用户点击按钮时执行的命令是:

Application.HelpContext(HelpContextNumber);

Launch HTML Help as Separate Process 上,我读到我应该将OnHelp 事件处理程序附加到Application 对象。

我保存了帮助单元,但如何附加它?

Application.OnHelp := ....?

【问题讨论】:

  • 请使用edit按钮为您的问题添加一些相关标签。我假设它是德尔福?
  • 我知道如何将 htmlhelp 文件附加到我的应用程序中。在我的应用程序的其他点上,帮助显示正确。只是不是来自这个组件。这就是为什么我想尝试stackoverflow.com/questions/30336018/… 中的解决方案,但我不知道如何将帮助文件附加到应用程序。
  • 我不太明白你的问题是什么。您想知道如何创建一个可以分配给Application.OnHelp 的函数,还是想知道该过程应该做什么?

标签: delphi chm


【解决方案1】:

TApplication.OnHelp 事件被声明为THelpEvent

THelpEvent = function(Command: Word; Data: THelpEventData; var CallHelp: Boolean): Boolean of object;  

因此,您需要在表单中声明一个方法,如下所示:

type
  TMyForm = class(TForm)
    ...
  private
    function MyOnHelpHandler(Command: Word; Data: THelpEventData; var CallHelp: Boolean): Boolean;
    ...
  end;

然后您可以在运行时将该处理程序分配给TApplication.OnHelp 事件,例如:

procedure TMyForm.FormCreate(Sender: TObject);
begin
  Application.OnHelp := MyOnHelpHandler;
end;

procedure TMyForm.FormDestroy(Sender: TObject);
begin
  Application.OnHelp := nil;
end;

function TMyForm.MyOnHelpHandler(Command: Word; Data: THelpEventData; var CallHelp: Boolean): Boolean;
begin
  Result := ...;
end;

或者,您可以在设计时将TApplicationEvents 组件拖放到您的表单中,然后使用对象检查器为其创建一个OnHelp 事件处理程序。

【讨论】:

  • 我是通过 TApplicationEvent 完成的。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
相关资源
最近更新 更多