В 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
Последняя строка кода выше открывает окно вспомогательной справки (но без содержимого), а затем оба окна справки зависают.
Мой вопрос такой:
Можно ли одновременно отобразить два окна HTMLHelp, и если да, то какую процедуру следует выполнить?
Если нет, есть ли способ узнать, открыто ли уже окно справки приложения, и затем программно закрыть его перед отображением другого окна справки?
(я использую Delphi 2007 с файлами HTMLHelp в Windows Vista)
ОБНОВЛЕНИЕ: 2008-09-18
Открытие двух файлов справки одновременно работает, как и ожидалось, с использованием приведенного выше кода. Кажется, проблема связана с реальными файлами справки, которые я использовал, а не с кодом.
Я пробовал один и тот же код с разными файлами справки, и он работал нормально.
Как ни странно, два файла справки, которые я использовал каждый, прекрасно работают сами по себе - только когда вы пытаетесь открыть оба одновременно, они зависают, и только если вы открываете их из кода (в проводнике Windows я могу открыть оба одновременно без проблем).
В любом случае, проблема определенно связана с файлами справки, а не с кодом, поэтому исходные вопросы теперь в значительной степени недействительны.
ОБНОВЛЕНИЕ 2: 2008-09-18
В конце концов я нашел причину зависания окна справки. Я опубликую ответ ниже и приму его как правильный для дальнейшего использования. Я также изменил название вопросов.
Упс ... Кажется, я не могу принять свой собственный ответ ...
Пожалуйста, проголосуйте, чтобы оно оставалось наверху.