私たちのソフトウェアでヘルプファイルの設定を取得しようとしています。私は多くの特定のフォーム/フレーム/コントロールのためのHelpContext番号を追加して、それらはすべて正常に動作します。問題は、メインフォームが何の助けももたらさないということです。このすべてについて、私はF1を使用してヘルプを起動しようとしています。ヘルプファイルをDelphi XE2アプリケーションにリンクする - すべてがメインフォーム以外で動作します
私はDelphiやヘルプファイルの専門家ではありませんが、私がやったことや見たところを投稿します。
編集:私は現在、主なフォームがMDIの親であることが原因で問題が発生しています。これはまだ問題を解決しません..それはほとんど私のバグのように思えますが、何らかの理由でそれが意図的である可能性があると思います。 EndEdit
私はこのユニットを含んでいます:ビューア用のHtmlHelpViewer。メインフォームのCreateコンストラクタで、Application.Helpfile:= 'asdf.chm'を追加しました。他のすべてのフォームについては、コンテキスト番号を追加しました。すぐに機能します。私はそれをメインフォームで試したが、何も起こらない。だから私はApplication.OnHelpイベントを追加しようとしましたが、これはメインフォームで呼び出されることはありません(そして、ヘルプが動作している他のすべてのフォームに対しても同様です)。
私が考えることができる最後の手段は、コードの深いところまでトレースし、何が起こっていたかを見ることでした。私はTCustomForm.WMHelpにVcl.Formsの分割が起こっていた場所に持ってきました。
if iContextType = HELPINFO_WINDOW then
begin
Control := FindControl(hItemHandle);
while (Control <> nil) and (not ControlHasHelp(Control)) do
Control := Control.Parent;
if Control = nil then Exit;
GetHelpInfo(Control, HType, ContextID, Keyword);
Pt := Control.ClientToScreen(Point(0, 0));
end
がメインフォームヘルプコントロールがnilになり呼んでいたし、それが終了します:関数はこのループを有することを特徴とします。それ以外はうまくいくでしょう。
私は明らかになぜこれが起こっているのかわかりません。答えは何か非常に基本的なものかもしれません。任意のアイデアをいただければ幸いです!
メインフォーム自体に 'HelpContext'を設定しましたか? –
@DavidHeffernan:そうでした。私はこれを言及すべきだったが、それはちょうどその主要な形であり、その子供ではない。私はフォームに(コンテキストヘルプなしで)ボタンを置いて、フォーカスがあるときにF1キーを押すとメインフォームのヘルプコンテキストが読み込まれます。目に見えるフォーカスがない場合、ヘルプは読み込まれません。 – Sentient
私は、デバッガの下でWMHelpハンドラを見て、FindControlから返されるものを確認します。 –