Я работаю над установкой файла справки для нашего программного обеспечения. Я добавил номера HelpContext для множества конкретных форм/рамок/элементов управления, и все они работают нормально. Проблема в том, что основная форма вообще не вызывает никакой помощи. Для всего этого я использую только F1, чтобы попытаться вызвать помощь.
Я совсем не эксперт по Delphi или файлам справки, но я опубликую, что я сделал и где я искал.
Изменить: Благодаря некоторой помощи я теперь вижу, что проблема связана с тем, что основная форма является родителем MDI. Это все равно не решает проблему..мне это почти кажется ошибкой, но я полагаю, что по какой-то причине это могло быть преднамеренным. EndEdit
Я включаю этот модуль: HtmlHelpViewer для средства просмотра. В конструкторе создания основных форм я добавил файл 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
Когда вызывалась главная форма, элемент управления справки был равен нулю, а затем завершался. Все остальное пойдет нормально.
Очевидно, я не знаю, почему это происходит. Ответ может быть чем-то очень простым. Любые идеи были бы хорошы!