Пользователи, работающие с приложениями, созданными в среде Delphi XE2, могут столкнуться с проблемой, когда приложение замораживает из-за двойного определения ALink в CHM-файле помощи. Это может произойти, если в одном и том же CHM-файле присутствуют два одинаковых ALink для одного и того же ключевого слова. В данной статье мы рассмотрим, как эта проблема возникает и как её можно решить.
Проблема
При вызове HTML-помощи через A-link в приложении для Delphi XE2 используется следующий код:
Однако, если ключевое слово AKeyword описано в CHM-файле дважды, приложение может зависнуть. Это указывает на проблему с самой библиотекой Delphi или системными библиотеками. Однако, проблема не в них, а в неправильном использовании CHM-файла.
Решение проблемы
Прежде всего, необходимо убедиться, что в CHM-файле нет повторяющихся ALink. Для этого можно использовать HTML Help Workshop для проверки содержимого CHM-файла.
Шаги по устранению проблемы:
Откройте HTML Help Workshop, который идет в комплекте с Microsoft SDK для разработчиков Windows.
Откройте ваш CHM-файл в Workshop.
Проверьте все файлы .htm на предмет наличия дублирующихся ALink.
Исправьте или удалите дублирующиеся ALink.
Сохраните изменения и перекомпилируйте CHM-файл.
Важные моменты:
ALink используется для отображения тем, а не для перехода на сам ALink. Это означает, что ALink предназначен для отображения списка связанных тем, а не для прямого перехода на конкретную тему.
KLink отображает темы, в которых присутствует KLink, и также может использоваться для перехода на соответствующую статью.
При использовании HH_ALINK_LOOKUP сначала необходимо вызвать команду HH_DISPLAY_TOPIC, чтобы гарантировать создание окна помощи перед вызовом HH_ALINK_LOOKUP.
Обратите внимание, что lookup'ы чувствительны к регистру и разделяются точкой с запятой.
Альтернативные подходы
Если проблема сохраняется, можно попробовать использовать HH_KEYWORD_LOOKUP вместо HH_ALINK_LOOKUP. Однако, важно понимать, что HH_KEYWORD_LOOKUP работает по-разному и может отображать ALink в поле поиска вместо статьи.
Заключение
Удаление всех дублированных ALink из CHM-файла и убедительная проверка отсутствия дубликатов является подтвержденным ответом на данный момент. Это поможет избежать зависаний приложения при работе с HTML-помощью в Delphi XE2.
Пользователи, использующие Delphi XE2, сталкиваются с зависанием приложения из-за двойного определения ALink в CHM-файле, что приводит к ошибке при вызове HTML-помощи.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS