Создание help-файла (справки) в формате CHM для Delphi-приложения в Dr.Explain
Установка
Скачайте дистрибутив программы Dr.Explain в разделе «Загрузить» официального сайта продукта по адресу http://www.drexplain.ru/ и пройдите стандартную процедуру установки программного обеспечения для начала его использования.
Доступно использование бесплатной незарегистрированной версии программного обеспечения без ограничения по времени. Функционал для бесплатной и лицензионной версий Dr.Explain совпадает, однако все изображения в итоговом сформированном в бесплатной версии файле справки будут помечены специальным водяным знаком.
Рис. 1. Мастер установки Dr.Explain
Создание и настройка нового проекта
Рис. 2. Стартовое окно программы Dr.Explain
Рис. 3. Окно «Настройки проекта»
После применения настроек для каждой уже созданной темы и каждой новой создаваемой в дальнейшем теме будет автоматически присвоен уникальный цифровой идентификатор HelpID.
Создание тематических разделов в файле справки
Удобная структура файла справки достигается путем создания тематических разделов на формы и объекты описываемого приложения.
Рис. 4. Дерево проекта Dr.Explain
В дереве проекта укажите название созданных тем и определите их порядок, используя соответствующие пункты меню.
Перейдите в нужную тему в дереве проекта и в окне редактора введите содержимое раздела в свободной форме. В окне редактора имеется стандартный функционал для форматирования текста.
Во вкладке «Ключевые слова» укажите набор ключевых слов для поиска по файлу справки. Для того, чтобы ассоциировать ключевое слово с определенной темой, выберите тему в дереве проекта и установите флаг напротив выбранного ключевого слова.
Рис. 5. Ключевые слова
Для создания описания конкретного объекта Delphi-приложения (в том числе и формы в приложении) также можно воспользоваться кнопкой «Схватить экран».
Рис. 6. Окно «Захват проекта»
В открывшемся диалоговом окне нажмите на пиктограмму «Accessible-объект» или «Win32-окно», после чего перейдите в окно приложения Delphi и выберите описываемый в разделе объект одним из указанных способов:
В результате выделения объекта в редакторе раздела будет автоматически создана тема, содержащая скриншоты как самого объекта, так и зависящих от него объектов приложения. Интерфейс редактора позволяет удалять информацию об объектах раздела и менять их местами, не выходя из редактора нажатием одной кнопки.
Рис. 7. Результат выполнения захвата объекта
Настройка значений Help ID
В Dr.Explain существует возможность редактирования значения Help ID. Для изменения значения идентификатора выберите желаемую тему и нажмите на ячейку «Help ID» в окне свойств страницы. Введите свое значение и уберите фокус мыши с поля для применения значения.
Рис. 8. Изменение значения Help ID в окне «Свойства страницы»
Перейдите в пункт меню «Инструменты –> проверка проекта на ошибки» для проверки уникальности измененного Help ID. В случае совпадения этого значения у нескольких тем будет выдано сообщение о дублированных значениях. Для корректного создания и привязки к проекту Delphi файла справки CHM устраните дублирование, изменив одно или несколько значений Help ID, не выходя из окна «Проверка проекта» нажатием на ячейку в поле Значение.
Рис. 9. Окно «Проверка проекта». Дублированные значения Help ID
Экспорт проекта в CHM-файл
Рис. 10. Окно «Экспорт в CHM»
Установка пути к CHM-файлу в проекте Delphi
Для загрузки файла справки CHM в проекте Delphi требуется указать путь к этому файлу. Для этого выполните одну из следующих операций (доступно для версий выше Delphi 7):
Примечание: В случае указания полного пути к файлу приложение Delphi, запускаемое на произвольной машине, будет искать файл справки именно в указанной директории, которая может отсутствовать на машине с установленным приложением. Поэтому оптимальное решение – указывать относительный путь к файлу справки.
Рис. 11. Установка относительного пути к файлу справки CHM с помощью GUI Delphi
Рис. 12. Программная установка относительного пути к файлу справки CHM
Привязка темы файла справки CHM к форме приложения Delphi
В проектах Delphi имеется возможность указания индивидуального файла справки для каждой из форм проекта. Для этого выполните одно из следующих действий:
· В коде проекта введите строку
Рис. 13. Программная установка относительного пути к файлу справки CHM для объекта TForm
· В инспекторе объектов для формы укажите соответствующее значение в поле «HelpFile»
Рис. 14. Установка относительного пути к файлу справки CHM для объекта TForm в окне «Инспектор объекта»
Привязка темы файла справки CHM к объектам приложения Delphi
Формат файла CHM и приложения Delphi позволяют назначить каждому объекту проекта свою тему файла справки, которая будет открываться при нажатии клавиши F1 в случае наличия фокуса на данном объекте. Для этого в Инспекторе объекта в поле «HelpContext» укажите HelpID из созданного файла CHM. В случае, если в файле справки отсутствует тема с HelpID, равным указанному значению «HelpContext», в файле справки будет открыта тема, ассоциированная с родительской формой.
Дополнительные способы вызова CHM-файла из приложения Delphi
Существует несколько альтернативных вариантов вызова справки из приложения Delphi:
· Выполните команду ShellExecute(Application.Handle, ‘open’, ’Help/drexplain.chm’, nil, nil, 0); по нажатию кнопки или другому действию на форме. Предварительно пропишите в блоке Uses расширение ShellAPI. Данное действие откроет главную страницу файла справки. При таком способе вызова файла справки не обязательно осуществлять предварительную ассоциацию файла справки с приложением.
Рис. 15. Вызов файла справки с использованием команды ShellExecute
· Выполните команду Application.HelpCommand(HELP_FINDER,0); по нажатию кнопки или другому действию на форме.
Рис. 16. Вызов файла справки с использованием команды Application.HelpCommand
Особенности интеграции файла справки в приложениях Delphi 7
Для использования файла справки CHM в проектах Delphi версии 7 или ниже необходимо воспользоваться расширениями сторонних разработчиков.
Скачайте и разместите в директории вашего проекта файл *.pas одного из выбранных расширений:
Укажите название подключаемого расширения в любом разделе Uses проекта Delphi.
Рис. 17. Подключение стороннего расширения к проекту Delphi 7
Дальнейшая работа с файлом справки в приложениях Delphi версии 7 или ниже осуществляется описанными выше способами аналогично другим версиям Delphi.
Источник
Создаем полноценный Help для Delphi-программ. Часть 2: Контекстная справка.
В первой части мы рассмотрели с Вами самый простой случай справки с использованием hhw – создали chm-файл, содержащий всего один топик. Для более-менее серьезной справки этого естественно недостаточно. Хорошая развитая справочная система должна иметь как минимум четкое оглавление, поиск по разделам и контексту, а вызывающая Delphi-программа должна обеспечить для пользователя удобный и быстрый доступ ко всем разделам справки.
Как пользователю дать возможность получать быстрый доступ к интересующей его информации по работе программы или отдельным элементам интерфейса? Здесь вариантов может быть несколько.
Первое что приходит в голову при описании интерфейса программы – это задать каждому элементу интефейса подсказку (Hint), Которая будет отображаться при наведении указателя мыши на элемент (кнопку, label и т.д.). Здесь можно также немного поработать и сделать длинные многострочные хинты (чтоб пользователь глаза сломал, читая их). Но это ведь все не то. Применимо и просто реализуемо, но иногда требуется больше.
К примеру, у нас в приложении есть некая “волшебная” метка (label), нажав на которую пользователю не только откроется новое окно программы, но и проведутся какие-либо другие действия. Засунуть описание такой метки в Hint? Думаю, что выглядеть это будет не совсем удачно. Намного лучше использовать:
1. Показывать пользователю тот раздел справки, в котором описан именно этот жлемент, т.е. использовать контектсную справку.
2. Popup-окно, которое, в отличие от hint может сколь угодно долго быть видимым (у hint тоже можно выставить задержку больше минуты, но, тем неменее это время все равно будет конечно).
Pop-up’ы мы рассмотрим немного позже, а контекстом займемся прямо сейчас.
1. Работа с контекстной справкой. Вариант 1 – использование команды HH_DISPLAY_TOPIC.
Самый простой способ показать пользователю нужный раздел справки. Всё, что от нас по сути требуется – это правильно указать путь к html-файлу с необходимой информацией.
Для демонстрации примера воспользуемся проектом справки, который мы делали в первой части. Добавим в этот проект ещё один html-файл (топик справки) с названием context.htm. Содержимое файла можете сделать по своему усмотрению.
Теперь в тестовый Delphi-проект добавим ещё одну кнопку с названием “Контекстная справка”. У меня вид приложения стал таким:
В событии OnClick новой кнопки пишем следующее:
Здесь мы указали точно расположение файла топика, который необходимо показать пользователю. В данной случае файл context.htm лежал в той же директории, что и файл index.htm, используемый по умолчанию.
Чем хорош представленный способ? Способ достаточно прост – указали команду, указали путь и получили результат. Никаких лишних телодвижений в hhw.
Чем мне этот способ не нравится. Как минимум тем, что приходится использовать много строковых констант при работе со справкой большого объема. На мой взгляд более удобно использовать в качестве констант целые числа – идентификаторы разделов. Поэтому рассмотрим второй способ работы с контекстной справкой.
1. Работа с контекстной справкой. Вариант 2 – использование команды HH_HELP_CONTEXT.
Тех, кто только-только начинает использовать hhw данный вариант работы может вогнать в ступор на некоторое время следующее описание использования команды HH_HELP_CONTEXT в функции HtmlHelp:
pszFile – файл, содержащий информацию по разметке.
dwData – числовое значение идентификатора топика. Вы должны создать символические идентификаторы и числовые идентификаторы в разделе [MAP] проекта (.hhp-файл).
Как создать этот MAP-раздел и что за символичесике и числовые идентификаторы нам надо определить?
Начнем по порядку. Вначале создадим символические идентификаторы в hhp-файле. Для этого откроем hhp-файл в любом текстовом редакторе, например в блокноте и создадим вот такой раздел:
Теперь в этом же файле объявим числовые идентификаторы:
Обратите внимание, что в разделах ALIAS и MAP имена идентификаторов должны полностью совпадать.
Теперь сохраняем файл и открываем его в hhw. Убеждаемся, что разделы MAP и ALIAS успешно добавлены:
Источник
Создаем полноценный Help для Delphi-программ. Часть 3: Создание окон справочной системы.
Сегодня рассмотрим работу с окнами справочной системы – попробуем создать несколько окон с различными элементами управление и использовать эти окна пр вызове справки из своих Delphi-программ.
Вначале расмотрим, что представляет из себя главное окно справочной системы и какие элементы управления оно содержит. Возьмем, например, справку к HHW.
Главное окно справочной системы
Главное окно справочной системы как минимум должно содержать панель навигации, список разделов, поиск по контексту и предметный указатель.
На данный момент (если Вы читали первую и вторую часть) у нас имеется проект содержащий два топика справки. Давайте настроим наше главное окно справки и добавим в него список разделов. Для этого необходимо перейти в HHW на вкладку Contents:
Здесь и создается список таким, каким мы его хотели бы видеть. Вначале добавляем новый раздел. Для этого жмем кнопку “Insert heading” откроется окно настройки нового раздела:
Задаем название раздела, а также, если необходимо – страницу, которая будет открываться при выборе раздела. Также на вкладке “Advanced” можно настроить вид иконки, указать окно в котором будет открываться раздел, оставить комментарий и т.д.
Теперь добавим новый топик в созданный раздел. Для этого жмем кнопку “Insert a page”. Откроется точно такое же окно, как и при создании раздела – заполняем необходимые поля, указываем страницу топика и эжмем “Ok”.
Теперь можете скомпилировать проект и убедиться, что теперь наша справка имеет удобное содержание:
Справочная система с содержанием
Примерно также создается и предметный указатель. А мы тем временем перейдем непосредственно к основной теме поста – созданию новых окон.
Переходим в HHW на вкладку “Project”, жмем кнопку “Add/Modify window definitions” и начинаем создание новго окна:
Окно содержит несколько вкладок, каждая из которых отвечает за определенные элементы нового окна:
General – основные свойства окно, такие как тип окна: произвольная строка, задаваемая пользователем. Используется при вызове окна. Заголовок окна (Title Bar Text).
Buttons – на этой вкладке можно выбрать те кнопки, которые будут отображаться в навигационной панели окна.
Position – здесь мы можем задать положение окна (свойства Left и Top), а также размеры окна (свойства Height и Width)
Navigation Pane – если мы хотим, чтобы новое окно содержало навигационной панель и содержание, то на этой вкладке необходимо включить опцию (единственную на вкладке)
Styles – свойства окна, такие как показ окна в развернутом виде, перекрытие дочерних окон нашим окном и т.д.
Extended Styles – расширенные стили окна. Здесь можно указать такие дополнительные свойства как, например, выравнивание текста заголовка по правому краю, показ окна поверх других окон и т.д.
Files – на этой вкладке мы должны указать файлы, используемые для отображения навигации в окне, индексный файл, файл открываемый по умолчанию и т.д. Большинство свойств на этой вкладке заполняются автоматически из свойств Вашего проекта.
Итак, после недолгих манипуляций со свойствами нового окна у меня получилось вот такое новое окно с названием “Context” и заголовком “Title New Window”:
Аналогичным образом Вы можете настроить сколь угодно большое количество различных по содержанию окон своей справочной систему, а мы пока продолжим и перейдем к использованию окон в своей Delphi-программе.
Вспомним как вызывался произвольный топик справочной системы:
Источник