Сообщений 0 Оценка 75 Оценить |
В статье "HHCOLREG. Регистрация HTMLHELP коллекций", рассматривался способ объединения нескольких CHM-файлов при помощи специального текстового файла в HtmlHelp-коллекцию. Способ прост в реализации и достаточно удобен в использовании, за одним-единственным исключением – перед началом работы с коллекцией ее надо зарегистрировать на машине пользователя. Нередки, однако, случаи, когда справка должна находится на внешнем носителе (например, на CD) и при работе с ней не предполагается вносить какие-либо изменения в конфигурацию системы пользователя, возможно, у пользователя даже нет на это прав. В этом случае можно применить другой, однако более трудоемкий способ объединения CHM–файлов на основе CHM-мастер-файла.
Попробуем объединить 2 chm-файла: first.chm:
Рисунок 1. First.chm - содержание
Рисунок 2. First.chm - индекс
и second.chm:
Рисунок 3. Second.chm - содержание
Рисунок 4. Second.chm - индекс
В свойствах проекта каждого из объединяемых CHM (включая мастер-файл) должно быть разрешено создание Binary Index. Чтобы эта возможность стала доступной, свойство Compatibility необходимо установить в 1.1 or later: |
Рисунок 5
Создадим новый HtmlHelp-проект, master.hpp, с одной единственной страничкой, после чего скомпилируем его. Результат этих действий приведён на рисунках 6 и 7:
Рисунок 6. Master.chm – содержание заготовки
Рисунок 7. Master.chm – индекс заготовки
В свойствах проекта мастер-файла обязательно должна быть снята галочка Create a binary TOC, иначе объединения содержаний не произойдет: |
Рисунок 8
Открываем проект master.hpp на закладке Contents, вызываем контекстное меню, выбираем Insert File, и в появившемся окошке вводим first.chm::\first.hhc, аналогично добавляем к мастер-проекту содержание second.chm:
Рисунок 9. Объединение содержаний CHM-файлов в проекте мастер-файла.
После компиляции проекта можно открыть master.chm и убедиться в объединении содержания всех трех chm-файлов:
Рисунок 10. Master.chm – объединенное содержание master.chm, first.chm и second.chm
Как видно из рисунка, HTML Help Workshop помещает включаемые содержания внутрь содержания мастер-файла, хотя в дизайнере (вкладка Contents) они находятся на одном уровне. Если необходимо, чтобы содержания мастер-файла и включаемых файлов располагались на одном уровне, придется вручную (во всяком случае, других способов я не знаю) в текстовом редакторе отредактировать файл master.hhc – вынести информацию о включаемых содержаниях из тегов <UL> содержания мастер-файла:
по умолчанию
<UL>
...содержание мастер файла...
...подключаемые содержания...
...еще содержание мастер файла...
</UL>
|
должно быть:
<UL> ...содержание мастер файла... </UL> ...подключаемые содержания... <UL> ...еще содержание мастер файла... </UL> |
После перекомпиляции проекта содержание мастер-файла будет иметь следующий вид:
Рисунок 11. Master.chm – объединенное содержание master.chm, first.chm и second.chm после "ручного" редактирования master.hhc.
Включение содержаний (INCLUDE: xxxxx.chm::\xxxxx.hhc) производится рекурсивно, т.е. включаемое содержание в свою очередь также может включать в себя содержание еще одного CHM-файла и т.д. |
Открываем свойства проекта master.hpp на закладке Merge Files и добавляем в список first.chm и second.chm:
Рисунок 12. Изменение свойств проекта для объединения индексов и базы для поиска
ПРЕДУПРЕЖДЕНИЕ Не нужно добавлять в этот список файл master.chm |
После перекомпиляции проекта открываем master.chm и убеждаемся, что произошло объединение индексов всех трех файлов:
Рисунок 13. Master.chm – объединенный индекс
Если необходимо, чтобы при открытии любого из объединямых таким образом CHM-файлов (в данном примере – first.chm, second.chm) был доступен общий индекс и поиск по всем файлам, необходимо повторить эту операцию для проектов каждого из CHM-файлов. При этом необходимо следить за тем, чтобы CHM-файл не попал в список Merge Files своего собственного проекта. |
ПРИМЕЧАНИЕ Объединение индексов, в отличие от объединения содержаний, не является рекурсивной операцией. Для каждого CHM-файла необходимо указывать все другие CHM-файлы, чьи индексы должны быть доступны. |
Если необходимо, чтобы при открытии любого из объединенных CHM-файлов, показывалось общее содержание, необходимо в настройках каждого из проектов перейти к настройке типов окон (Add/Modify Window Definitions) и на закладке Files исправить имя "родного" hhc-файла с содержанием на путь к содержанию мастер-файла в формате master.chm::\master.hhc:
Рисунок 14. Добавление общего содержания для каждого из CHM-файлов.
Операцию нужно повторить для каждого CHM, кроме мастер-файла.
После перекомпиляции можно убедиться, что для любого из CHM выводится объединенное содержание:
Рисунок 15. Second.chm – общее содержание
Если результат объединения ваших файлов отличается от приведенного выше, внимательнее сверьте ваши файлы с файлами в демонстрационном проекте.
Иногда рекомендуют при распространении CHM-файлов на защищенном от записи носителе распространять вместе с ними CHW-файлы, создающиеся в одном каталоге с CHM при первом обращении к индексной информации. Однако эксперименты в Windows XP показывают, что при работе с созданной нами объединенной справкой с компакт-диска (CD) необходимые CHW-файлы успешно создаются на локальном диске в каталоге .\Documents and Settings\Your_Name\Application Data\Microsoft\HTML Help. |
Сообщений 0 Оценка 75 Оценить |