Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Ошибка в CHM-файле для Delphi XE2: двойное определение ALink приводит к зависанию

Delphi , Файловая система , Help файлы

Пользователи, работающие с приложениями, созданными в среде Delphi XE2, могут столкнуться с проблемой, когда приложение замораживает из-за двойного определения ALink в CHM-файле помощи. Это может произойти, если в одном и том же CHM-файле присутствуют два одинаковых ALink для одного и того же ключевого слова. В данной статье мы рассмотрим, как эта проблема возникает и как её можно решить.

Проблема

При вызове HTML-помощи через A-link в приложении для Delphi XE2 используется следующий код:

var
  aLink: THH_AKLink;
begin
  ZeroMemory(@aLink, SizeOf(aLink));
  aLink.cbStruct := SizeOf(aLink);
  {$WARNINGS OFF}
  aLink.pszKeywords := PChar(AnsiString(AKeyword));
  {$WARNINGS ON}
  aLink.fIndexOnFail := False;
  HtmlHelpW(Handle, Application.HelpFile, HH_ALINK_LOOKUP, DWORD_PTR(@aLink))
end;

Однако, если ключевое слово AKeyword описано в CHM-файле дважды, приложение может зависнуть. Это указывает на проблему с самой библиотекой Delphi или системными библиотеками. Однако, проблема не в них, а в неправильном использовании CHM-файла.

Решение проблемы

Прежде всего, необходимо убедиться, что в CHM-файле нет повторяющихся ALink. Для этого можно использовать HTML Help Workshop для проверки содержимого CHM-файла.

Шаги по устранению проблемы:

  1. Откройте HTML Help Workshop, который идет в комплекте с Microsoft SDK для разработчиков Windows.
  2. Откройте ваш CHM-файл в Workshop.
  3. Проверьте все файлы .htm на предмет наличия дублирующихся ALink.
  4. Исправьте или удалите дублирующиеся ALink.
  5. Сохраните изменения и перекомпилируйте CHM-файл.

Важные моменты:

  • ALink используется для отображения тем, а не для перехода на сам ALink. Это означает, что ALink предназначен для отображения списка связанных тем, а не для прямого перехода на конкретную тему.
  • KLink отображает темы, в которых присутствует KLink, и также может использоваться для перехода на соответствующую статью.
  • При использовании HH_ALINK_LOOKUP сначала необходимо вызвать команду HH_DISPLAY_TOPIC, чтобы гарантировать создание окна помощи перед вызовом HH_ALINK_LOOKUP.

Пример кода для ALink:

<Object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
    <param name="ALink Name" value="UsingtheMenus">
</Object>

Пример кода для KLink:

<Object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
    <param name="Keyword" value="lookupKeyword">
</Object>

Обратите внимание, что 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




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Help файлы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 15:46:06/0.0036771297454834/0