Delphiでは、アプリケーションのメインヘルプファイルはTApplication.HelpFileプロパティを介して割り当てられます。次に、アプリケーションのヘルプシステムへのすべての呼び出しは、このプロパティを(CurrentHelpFileと組み合わせて)使用して、ヘルプ呼び出しのルーティング先となるヘルプファイルを決定します。
TApplication.HelpFileに加えて、各フォームにはTForm.HelpFileプロパティもあります。このプロパティを使用して、特定のフォームから発信されたヘルプ呼び出し用に異なる(個別の)ヘルプファイルを指定できます。
ただし、アプリケーションのメインヘルプウィンドウが既に開いていて、セカンダリヘルプファイルからヘルプを表示するためにヘルプ呼び出しが行われると、両方のヘルプウィンドウがハングします。これで、どちらのヘルプウィンドウにもアクセスできなくなり、どちらも閉じることができなくなります。ヘルプウィンドウを削除する唯一の方法は、アプリケーションを閉じることです。これにより、両方のヘルプウィンドウも自動的に閉じられます。
例:
Application.HelpFile := 'Main Help.chm'; //assign the main help file name
Application.HelpContext(0); //dispays the main help window
Form1.HelpFile := 'Secondary Help.chm'; //assign a different help file
Application.HelpContext(0); //should display a second help window
上記のコードの最後の行は、セカンダリヘルプウィンドウを開き(ただし、コンテンツはありません)、両方のヘルプウィンドウがハングします。
私の質問はこれです:
2つのHTMLHelpウィンドウを同時に表示することは可能ですか?その場合、従うべき手順は何ですか?
そうでない場合は、アプリケーションのヘルプウィンドウがすでに開いているかどうかを確認し、プログラムで閉じてから別のヘルプウィンドウを表示する方法はありますか?
(私はWindowsVistaのHTMLHelpファイルでDelphi2007を使用しています)
更新:2008-09-18
2つのヘルプファイルを同時に開くと、実際には上記のコードを使用して期待どおりに機能します。問題は、私が使用していた実際のヘルプファイルにあるようです-コードではありません。
同じコードを別のヘルプファイルで試しましたが、正常に機能しました。
不思議なことに、私が使用していた2つのヘルプファイルは、それ自体で正常に機能します。両方を同時に開こうとした場合にのみ、コードから開いた場合にのみ機能します(Windowsエクスプローラーでは両方を開くことができます。同時に問題なく)。
とにかく、問題は間違いなくヘルプファイルにあり、コードにはありません。そのため、元の質問はほとんど無効になっています。
更新2:2008-09-18
やがてヘルプウィンドウがぶら下がっている原因を見つけました。以下に回答を掲載し、今後の参考のために正しい回答として受け入れます。質問のタイトルも変更しました。
おっと...私は自分の答えを受け入れることができないようです...
トップにとどまるように投票してください。