首页 > 解决方案 > 如何将 OnHelp 事件处理程序附加到 Application 对象?

问题描述

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

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

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

Application.HelpContext(HelpContextNumber);

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

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

Application.OnHelp := ....?

标签: delphichm

解决方案


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使用对象检查器为其创建一个事件处理程序。


推荐阅读