[delphi-users:4779] 状況依存型ヘルプがインストールされていません

283 views
Skip to first unread message

snail3

unread,
Oct 31, 2017, 9:40:09 AM10/31/17
to delphi...@freeml.com
試している環境は XE7 です。

1.新規 VCLフォームアプリを作成します。
2.コンパイルして実行
3.F10キーを押します。
4.F1キーを押します。
 「状況依存型ヘルプがインストールされていません」
  ダイアログが表示されます。

このメッセージを消す方法はありませんか?
--
takashi <taka...@csjpn.com>


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
Powered by freeml -- http://www.freeml.com/ --
------------------------------------------------------[freeml byGMO]--

あなたの街のチラシがいつでも無料で見放題!
チラシをクリックしてチラシが拡大されたらポイントゲット♪
まずはかんたん登録♪ -ポイントタウン-
http://www.pointtown.com/ptu/rd.cgi?cid=8912
----------------------------------------------------------------------

snail3

unread,
Oct 31, 2017, 10:47:54 AM10/31/17
to delphi...@freeml.com
Delphi XE2 XE6 でも試してみましたが同様に F10 を押した後 F1 キーで
「状況依存型ヘルプがインストールされていません」
メッセージが表示されてしまいます。最初から F1 だとだと
表示されないので F10 押すことで何かが変わってしまうようですが
何が変わるのかがわかりません。

DEKO

unread,
Oct 31, 2017, 4:26:25 PM10/31/17
to delphi...@freeml.com
こんにちは。
以下のいずれかの方法で無効化できると思います。

[その1]
uses に Vcl.WinHelpViewer を追加すると *.hlp が、
Vcl.HTMLHelpViewer を追加すると *.chm がアプリケーションヘルプとして使われるのですが、
Vcl.WinHelpViewer を指定すると F1 での状況依存型ヘルプが起動しなくなると思います。

[その2]
フォームの OnHelp イベントハンドラを記述します。

function TForm1.FormHelp(Command: Word; Data: NativeInt;
 var CallHelp: Boolean): Boolean;
begin
 CallHelp := False;
end;

See also:

[VCL アプリケーションにおける F1 ヘルプのデフォルトの処理 (DocWiki)]
http://docwiki.embarcadero.com/RADStudio/ja/VCL_%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B_F1_%E3%83%98%E3%83%AB%E3%83%97%E3%81%AE%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%AE%E5%87%A6%E7%90%86

--
by DEKO
-----------------------------
http://ht-deko.com/
de...@ht-deko.minim.ne.jp
-----------------------------

Fukushi

unread,
Oct 31, 2017, 10:04:53 PM10/31/17
to delphi...@freeml.com
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

snail3

unread,
Nov 1, 2017, 5:19:14 AM11/1/17
to delphi...@freeml.com
ありがとうございます。

> [その1]
> uses に Vcl.WinHelpViewer を追加すると *.hlp が、
> Vcl.HTMLHelpViewer を追加すると *.chm がアプリケーションヘルプとして使われるのですが、
> Vcl.WinHelpViewer を指定すると F1 での状況依存型ヘルプが起動しなくなると思います。
ご指摘の通り Vcl.WinHelpViewer 追加で回避することができました。
ありがとうございました。

--
takashi <taka...@csjpn.com>

snail3

unread,
Nov 1, 2017, 5:24:44 AM11/1/17
to delphi...@freeml.com
色々調べていただいてありがとうございます。

一番簡単な DEKOさんの Vcl.WinHelpViewer 追加で回避することにします。
今回のプログラムは VB の焼き直しでF10 と F1利用が必須だったので助かりました。

ありがとうございました。
--
takashi <taka...@csjpn.com>

snail3

unread,
Nov 9, 2017, 6:57:49 AM11/9/17
to delphi...@freeml.com
> 一番簡単な DEKOさんの Vcl.WinHelpViewer 追加で回避することにします。
この方法では駄目でした。エラーば出なくなったのですが、キー入力で支障が出
ました。

> (1)Application.OnHelpイベントでCanHelpをFalseとして返す。
>(2)TApplicationEventsを置いて、そのOnHelpイベントでCanHelpを
これもキー入力で支障が出ました。

結局 FormKeyDown で

if Key = VK_F10 Then
begin
Key := 0;
Exit;
end;

少し試したところでは問題がでていません。
Reply all
Reply to author
Forward
0 new messages