уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

В первой части мы рассмотрели с Вами самый простой случай справки с использованием hhw — создали chm-файл, содержащий всего один топик. Для более-менее серьезной справки этого естественно недостаточно. Хорошая развитая справочная система должна иметь как минимум четкое оглавление, поиск по разделам и контексту, а вызывающая Delphi-программа должна обеспечить для пользователя удобный и быстрый доступ ко всем разделам справки.

Как пользователю дать возможность получать быстрый доступ к интересующей его информации по работе программы или отдельным элементам интерфейса? Здесь вариантов может быть несколько.
Первое что приходит в голову при описании интерфейса программы — это задать каждому элементу интефейса подсказку (Hint), Которая будет отображаться при наведении указателя мыши на элемент (кнопку, label и т.д.). Здесь можно также немного поработать и сделать длинные многострочные хинты (чтоб пользователь глаза сломал, читая их). Но это ведь все не то. Применимо и просто реализуемо, но иногда требуется больше.
К примеру, у нас в приложении есть некая «волшебная» метка (label), нажав на которую пользователю не только откроется новое окно программы, но и проведутся какие-либо другие действия. Засунуть описание такой метки в Hint? Думаю, что выглядеть это будет не совсем удачно. Намного лучше использовать:
1. Показывать пользователю тот раздел справки, в котором описан именно этот жлемент, т.е. использовать контектсную справку.
2. Popup-окно, которое, в отличие от hint может сколь угодно долго быть видимым (у hint тоже можно выставить задержку больше минуты, но, тем неменее это время все равно будет конечно).
Pop-up’ы мы рассмотрим немного позже, а контекстом займемся прямо сейчас.

1. Работа с контекстной справкой. Вариант 1 — использование команды HH_DISPLAY_TOPIC.

Самый простой способ показать пользователю нужный раздел справки. Всё, что от нас по сути требуется — это правильно указать путь к html-файлу с необходимой информацией.
Для демонстрации примера воспользуемся проектом справки, который мы делали в первой части. Добавим в этот проект ещё один html-файл (топик справки) с названием context.htm. Содержимое файла можете сделать по своему усмотрению.
Теперь в тестовый Delphi-проект добавим ещё одну кнопку с названием «Контекстная справка». У меня вид приложения стал таким:

Тестовый Delphi-проект

В событии OnClick новой кнопки пишем следующее:

procedure TForm5.Button1Click(Sender: TObject);
begin
  HtmlHelp(Handle,PChar(ExtractFilePath(Application.ExeName)+'help.chm::context.htm'),HH_DISPLAY_TOPIC,0)
end;

Здесь мы указали точно расположение файла топика, который необходимо показать пользователю. В данной случае файл context.htm лежал в той же директории, что и файл index.htm, используемый по умолчанию.
Чем хорош представленный способ? Способ достаточно прост — указали команду, указали путь и получили результат. Никаких лишних телодвижений в hhw.
Чем мне этот способ не нравится. Как минимум тем, что приходится использовать много строковых констант при работе со справкой большого объема. На мой взгляд более удобно использовать в качестве констант целые числа — идентификаторы разделов. Поэтому рассмотрим второй способ работы с контекстной справкой.

1. Работа с контекстной справкой. Вариант 2 — использование команды HH_HELP_CONTEXT.

Тех, кто только-только начинает использовать hhw данный вариант работы может вогнать в ступор на некоторое время следующее описание использования команды HH_HELP_CONTEXT в функции HtmlHelp:
pszFile — файл, содержащий информацию по разметке.
dwData — числовое значение идентификатора топика. Вы должны создать символические идентификаторы и числовые идентификаторы в разделе [MAP] проекта (.hhp-файл).
Как создать этот MAP-раздел и что за символичесике и числовые идентификаторы нам надо определить?
Начнем по порядку. Вначале создадим символические идентификаторы в hhp-файле. Для этого откроем hhp-файл в любом текстовом редакторе, например в блокноте и создадим вот такой раздел:

[ALIAS]
IDH_HomePage=index.htm
IDH_Test1=context.htm
IDH_Test2=index.htm

Теперь в этом же файле объявим числовые идентификаторы:

[MAP]
#define IDH_HomePage 1000
#define IDH_Test1       1001
#define IDH_Test2       1002

Обратите внимание, что в разделах ALIAS и MAP имена идентификаторов должны полностью совпадать.
Теперь сохраняем файл и открываем его в hhw. Убеждаемся, что разделы MAP и ALIAS успешно добавлены:

Разделы MAP и ALIAS

Теперь, обратившись, например, к идентификатору IDH_Test1 с помощью команды HH_HELP_CONTEXT мы должны получить в ответ топик context.htm и т.д. Пишем в обработчике кнопки «Контекстная справка» следующий код:

HtmlHelp(Handle,PChar(ExtractFilePath(Application.ExeName)+'help.chm'),HH_HELP_CONTEXT,1001)

Запускаем программу и убеждаемся, что все в порядке — отбражается необходимый нам раздел.
Теперь для хранения идентификаторов разделов справки вы можете использовать либо константы в каком-либо модуле проекта, либо использовать свойство визуальных компонентов HelpContext, которое может содержать целочисленные значения.
В рассмотренных выше примерах мы получали справку в окне по умолчанию. В следующий раз научимся создавать окна, содержащие различные элементы управления и использовать эти окна при вызове справки из Delphi-программ.

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии