コンポーネントにして、HTMLヘルプを表示するには?


十五夜  2005-09-28 17:39:57  No: 17722

お世話になります。

前回、ダイアログで質問させていただきました
十五夜です。とっくに過ぎましたが・・(−−;

MessageDlg と同様の動きをさせるための
MessageDlgEx がすでにコンポーネントとして作っています。

この MessageDlgEx で前回のヘルプキーを追加して、
HTMLヘルプを表示させるのですが、

このコンポーネントは複数(現在は3つ)のアプリで使われています。
この場合、そのアプリの数だけヘルプファイルが存在しています。
たとえば、A.chm、B.chm、C.chm とします。

アプリだけでなく、表示したいヘルプ内容に対して
その表示箇所にジャンプして表示させたいのですが、
どのようにすれば変更が簡単にできるのでしょうか

現状で考えているのは
使用されているところをすべて変更しなければ対応できないような
気がするのですが、

呼び出し側のアプリケーションの起動時にだけちょこっと処理を追加して
後はMessageDlgEx の変更修正ですむといったような方法
ありませんか?

MessageDlgEx が各アプリケーションで数百箇所使用していて
各箇所でリターン値を見てヘルプが押されて戻ってきたら
それぞれの MessageDlgEx の行の後で、HTMLヘルプを表示させる
といった方法しか思いつきません。
しかも、前回教えてもらった方法で、
[OK][Help]のメニューの場合、この処理でいいのですが、
[Yes][No][Help]のメニューの場合はヘルプで確認した後に
Yes または No のボタンを押してメニューを閉じるようにしたいのです。
この場合、ヘルプの場合はループで MessageDlgEx を表示し、
Yes、No の場合はループを抜ける処理に変更しなければならなくなり
非常に手間がかかってしまいます。


えーと  2005-09-29 00:38:08  No: 17723

質問内容を整理すると

1.ダイアログごとにトピックスを指定して検索したい
2.[Yes][No][Help]の場合はダイアログを表示した時、ヘルプも表示して
  [Yes][No]でダイアログとヘルプを消したい

という事ですか?


十五夜  2005-09-29 01:14:34  No: 17724

やりたいことを長々と書いて結局わかってもらえない
文章になっていたようで、すみません。

「目的」
  複数のプログラムがある。
  複数のプログラムの分だけHTMLファイルがある。
  それぞれのプログラムを起動し、
  ダイアログ表示したところに該当するヘルプを表示できる
  コンポーネントにしたい。

「ダイアログの動作」
  1.[Yes][No][Help]等の場合(選択)
    ダイアログはそのままでヘルプを表示、
    [Yes]または[No]がクリックされたらダイアログのみ閉じる
    または、ダイアログとヘルプ画面を閉じる
    ※すみません、どちらにするかまだ決めてません
  2.[Ok][Help]等の場合(確認)
    [Help]が押されたら、ヘルプ画面を出してダイアログを閉じる

「質問」
  現状のコンポーネントは押されたボタンがリターン値として
  返ってくるよう([Help]ボタンは未対応)になっているので、
  各アプリでダイアログを呼び出しているところを
  [Help]が返ったときにヘルプ表示するように対応するしか
  手段が思いつかないのですが。

  例>コンポーネントに何らかの形でヘルプのヘッダ情報を渡し、
      コンポーネント内で、どこから押されたかを判断(これが問題)
      できるような対応をすればヘッダファイルを作成するだけで
      新規のアプリにも対応できるし、現状出来上がっている
      アプリに対しても、各ダイアログを呼び出している
      部分すべてを変更しなくてすむのですが、

  簡単に修正でき、間違いが少なく、デバッグに時間がかからない
  方法はないでしょうか?
  ということを聞きたかったのですが。
  わかっていただけたでしょうか?

  そういってしまうと、Delphi の文法じゃないと言われそうなのですが
  すみません。


えーと  2005-09-29 03:36:22  No: 17725

> 該当するヘルプを表示
ShellExecuteでは無理だったような気がします。

私はTHtmlHelpコンポーネントを使っています。
http://www.stbbs.net/~junichi/adelieworks/hhwd/download.html#thtmlhelp
これはWinHelpとHtmlHelpを置き換える便利なコンポーネントです。
これを使った場合のコードは以下のようになります。

procedure TForm1.Button1Click(Sender: TObject);
var
  dlg: TForm;
  res: Word;
begin
  dlg := CreateMessageDialog('Test', mtInformation,
                             [mbYes, mbNo, mbHelp]);
  dlg.HelpContext := 2002;
  res := dlg.ShowModal;
  dlg.Free;
  Application.HelpCommand(HELP_QUIT, 0); //要改造
end;

> または、ダイアログとヘルプ画面を閉じる
THTMLHelpでは改造しないとヘルプ画面を消す事ができません。

awhhelp.passで
constにHH_CLOSE_ALL          = $0012;
OnApplicationHelpの中に以下を追加しましょう。

HELP_QUIT:
begin
  hRet := HtmlHelp(hOwner,PChar(helppath),HH_CLOSE_ALL,Data);
end;

以上で
Application.HelpCommand(HELP_QUIT, 0);でヘルプが消えます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加