takashiさん、こんにちは。福士と申します。
原因をちょっと調べてみました。
> 3.F10キーを押します。
> 4.F1キーを押します。
> 「状況依存型ヘルプがインストールされていません」
> ダイアログが表示されます。
この[F10]キーなのですが、Windows的には
Windows のキーボード ショートカット - Windows Help
https://support.microsoft.com/ja-jp/help/12445/windows-keyboard-shortcuts
にあるように、メニューをアクティブにするという機能が割り当て
られています。ですので[F10][F1]というキー入力は、そのフォームの
メニューを有効にして、そのメニュー項目のコンテキストヘルプを
表示する、という意味になります。
そこで、Delphi側の実装なのですが、WM_HELPメッセージハンドラの
(おそらく)バグで、メニュー項目のヘルプに関してはコンテキストが
存在するかどうかのチェックを怠っていて、コンテキストの有無に
関わらずヘルプを呼び出そうとしてしまい、エラーになります。
解決策ですが、DEKOさんの回答の他に、
(1)Application.OnHelpイベントでCanHelpをFalseとして返す。
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnHelp := DoHelp;
end;
function TForm1.DoHelp(Command: Word; Data: THelpEventData;
var CallHelp: Boolean): Boolean;
begin
CallHelp := False;
Result := False;
end;
(2)TApplicationEventsを置いて、そのOnHelpイベントでCanHelpを
Falseとして返す。
function TForm1.ApplicationEvents1Help(Command: Word; Data: NativeInt;
var CallHelp: Boolean): Boolean;
begin
CallHelp := False;
Result := False;
end;
という方法があります(どちらの場合も本当はContextIDが入っている
パラメータDataが0なら、という条件が必要なのですが、ヘルプファイルが
ないのなら問題ないと思います)。
参考にしてください。
---
東洋テクニカルシステム株式会社 システム開発部 福士 光
Hikaru Fukushi (Toyo Technical System Inc.)
mailto:
fuk...@tts-inc.co.jp