Тверской государственный университет
Опубликован: 13.09.2006 | Доступ: свободный | Студентов: 2728 / 260 | Оценка: 4.03 / 3.74 | Длительность: 19:48:00
Специальности: Программист, Менеджер
Лекция 9:

Создание справочной системы. Часть 2

< Лекция 8 || Лекция 9: 12345678910
Первое окно открытия файла

Рис. 9.14. Первое окно открытия файла

В этом окне уже появилась кнопка Browse. Нажмем ее.

Второе окно открытия файла

Рис. 9.15. Второе окно открытия файла

Теперь прошу обратить особое внимание на два факта. Первый - в качестве шаблона для поиска файлов указан шаблон "*.h", Второй факт - в открытой папке HelpToWGC не найдено ни одного файла с таким уточнением. Могу Вас заверить, что заголовочные файлы с уточнением h присутствуют в этом каталоге. Прежде чем обсуждать данные факты, продолжим работу. Естественно я ввел известное мне имя заголовочного файла в поле имени и нажал кнопку "Открыть". В результате я получил ответ, что найти файл в каталоге не удалось:

Третье окно открытия файла

Рис. 9.16. Третье окно открытия файла

После этого мне осталось ничего другого, как вернуться к окну Include File (см. рис. 14) и там попытаться задать имя заголовочного файла. Диалог был продолжен и я получил следующее сообщение:

Четвертое окно открытия файла

Рис. 9.17. Четвертое окно открытия файла

После моего утвердительного ответа было сформировано предложение #include, составляющее секцию MAP. Для тех, кто знает язык C, понятно, что предложение #include обрабатывается препроцессором и вставляет заголовочный файл в текст компилируемого модуля. Несмотря на то, что это предложение, в конечном итоге, было сформировано правильно, я понимаю, что система не видит заголовочный файл, а, следовательно, не может построить нужное отображение и в нужный момент открыть требуемый раздел справки

Даже, если бы все работало корректно, то весь этот длинный процесс открытия файла представляется мне примером неудачного, я бы даже сказал, непрофессионального решения.

Несколько слов о том, почему не виден файл с уточнением ".h". Он и не должен быть виден, поскольку это текстовый файл, и он будет отображаться, когда шаблоном будет служить уточнение ".txt". Другое дело, что в грамотной реализации нужно вначале найти все текстовые файлы и отобрать среди них те файлы, которые имеют уточнение h. Подводя итог, следует сказать, что хотя формально секция MAP была создана, но фактически процесс ее создания потерпел неудачу и файл, указанный в этой секции не будет виден системой. Выход из этой ситуации есть, но об этом чуть позже. Аналогичная ситуация с заголовочными файлами возникает и при работе с двумя другими вкладками в процессе создания секций ALIAS и TEXT POPUPS.

Прежде, чем формировать секцию ALIAS, в справочном руководстве HHW рекомендуется построить еще один заголовочный файл, задающий отображение межу символическими идентификаторами и именами файлов, содержащих соответствующие разделы справочного руководства. Я напомню, что алиасом или алиасным именем называется псевдоним, второе имя объекта. В данном случае речь идет о символических идентификаторах, являющихся псевдонимами файлов. Строки заголовочного файла, задающего алиасные имена, имеют следующий синтаксис:

Символьный идентификатор> = <Имя файла>

В нашем примере этот заголовочный файл выглядит следующим образом:

IDH_Man = Man.htm
IDH_Wolf = Wolf.htm
IDH_Goat = Goat.htm
IDH_Cabbage = Cabbage.htm
IDH_River = River.htm
IDH_LeftBank = LeftBank.htm
IDH_RightBank = RightBank.htm
IDH_Shark = Shark.htm
IDH_Boat = Boat.htm
IDH_Island = Island.htm

Перейдем теперь к формированию секции ALIAS. При выборе одноименной вкладки в отличие от вкладки MAP появляются две возможности создания секции.

Создание секции ALIAS

Рис. 9.18. Создание секции ALIAS

Командная кнопка ADD позволяет создавать секцию ALIAS строку за строкой. Это более долгий и утомительный процесс, в особенности, для больших файлов. Единственное и немаловажное его преимущество состоит в том, что в этом случае удается избежать использования заголовочного файла

Нажатие кнопки INCLUDE позволяет создать секцию ALIAS за один шаг, используя подготовленный в текстовом редакторе заголовочный файл. В этом случае открывается уже знакомое окно "Include File" (рис. 14) и повторяется процесс, так подробно описанный выше.

Как сделать так, чтобы все работало правильно

Я построил hhp-проект, в секциях MAP и ALIAS которого использовались заголовочные файлы. Но тестирование этого проекта показало, что заголовочные файлы реально не видны и нужное отображение не строится. Взгляните, как выглядит сообщение, полученное мной при тестировании одного из примеров:

"Неуспех" при тестировании проекта с заголовочными файлами

Рис. 9.19. "Неуспех" при тестировании проекта с заголовочными файлами

Я напомню, для тестирования проекта после его компиляции из пункта меню Test главного меню системы HHW следует выбрать команду HTML Help API. В открывшемся окне из списка Command следует поочередно выбрать и протестировать две команды: HH_DISPLAY_TOPIC и HH_HELP_CONTEXT. Первая из них отображает разделы, при задании имени файла, содержащего данный раздел. С этой командой особых трудностей обычно не возникает. Чтобы успешно работала вторая команда, где задается числовой идентификатор, требуется успешное создание раздела MAP. В нашем примере успеха нет и причина этого нам известна - заголовочные файлы не работают так, как нужно.

Как справиться с возникшей проблемой? На самом деле это не сложно. Вот что нужно сделать:

  1. Открыть hhp-файл проекта в текстовом редакторе "Блокнот".
  2. Руками выполнить операцию Include, копируя соответствующие тексты заголовочных файлов и явно подставляя их в разделы MAP и ALIAS вместо предложения Include.
  3. Сохранить скорректированный файл.
  4. Открыть файл проекта в HHW и заново скомпилировать chm-файл.
  5. Повторить тестирование, чтобы убедиться в работоспособности проекта.

Вот как выглядят теперь результаты тестирования для предыдущего примера, когда я проделал всю указанную работу:

Успешное получение раздела справки по его числовому идентификатору

Рис. 9.20. Успешное получение раздела справки по его числовому идентификатору

То, что, в конечном счете, удается успешно создать числовые и символьные идентификаторы разделов, имеет крайне важно, поскольку эти идентификаторы широко используются при выдаче контекстных справок в самых разных ситуациях, о которых мы еще поговорим. А теперь пора перейти к проблеме, успешное решение которой мне так и не удалось найти. Но прежде хочу обратить Ваше внимание еще на одну ошибку, которая может возникать в процессе работы с hhp-проектом. Если возникает необходимость провести редактирование разделов MAP и ALIAS, то делать это нужно в текстовом редакторе "Блокнот". Попытка провести редактирование этих разделов в HHW приводит к непоправимой ошибке и снятию приложения.

< Лекция 8 || Лекция 9: 12345678910