Help...как же я ненавижу всю работу, связанную с созданием всякого рода хелпов. И ведь никуда от это работы не деться. Без полноценного, качественного help'a, контекстных справок, hint'ов и т.д. любая сколь угодно функциональная программа с "интуитивно понятным" интерфейсом может превратиться в нечто непостижимое для пользователя. Понятно, что редко кто читает Help к медиаплееру или текстовому редактору. Но совсем другое дело, когда пишется какая-то специализированная программа, например, ГИС или, как приходилось писать мне - программы расчёта приземных концентраций загрязняющих веществ - тут хочешь-не хочешь, а на пальцах всё объяснить пользователю за пять минут не получится - большое количество переменных, задаваемых пользователем, работа с БД - все эти моменты приходится прописывать в справку. До сих пор я обходился в работе простыми html-файлами, но рано или поздно надо было переходить на использование возможностей Windows. И видимо сегодня этот день настал :).
Как Вы знаете, для хранения справочной информации Windows активно использует chm-файлы. Достаточно удобный и легкий в плане работы формат. Именно такую справку мы и будем писать сегодня.
Для компиляции и работы с chm-файлами воспользуемся тем, что предлагает нам Microsoft - программой "HTML Help Workshop" скачать которую можно, перейдя по ссылке. Там же скачайте и всю документацию по API работы со справочной системой - она нам пригодиться на будущее.
И первое, что мы сделаем - это установим "HTML Help Workshop" (HHW) и создадим новый проект, содержащий всего один файл.
Жмем в главном меню HHW File-->New и в открывшемся окне выбираем "Project" - запустится мастер создания нового проекта.

Первый шаг можно пропустить т.к. мы ничего не конвертируем. Далее нас попросят задать расположение файла проекта на диске - указываем и остальные шаги пропускаем. В конце жмем "Готово" и hhw сгенерирует нам новый пустой проект справки:

Можете установить новые свойства вашего проекта - для этого надо сделать двойной щелчок по секции "Options" или нажать одноименную кнопку в левой части окна.
Теперь создадим наш первый (и единственный) в проекте файл справки. Для этого жмем в главном меню File-->New-->HTML File. В открывшемся окне пишем название нового раздела справки, например, "Hello World!" и HHW создаст для нас "скелет" нового документа:

Так как никаких визуальных средств для разработки hhw не использует, кроме редактора в стиле "а-ля блокнот", то будем писать весь HTML-код ручками.
Для начала запишем следующее:
<h1>Заголовок первого уровня</h1> <h2>Заголовок второго уровня</h2> Это наш первый html-файл для супер-спраки для супер-программы Hello World!
Жмем кнопку Save в верхнем тулбаре, задаем имя файла, например, index и сохраняем файл на диск.
Теперь прицепим этот файл к проекту. Для нажимаем кнопку "Add/Remove topic files", затем в открвшемся окне кнопку "Add" и добавляем наш файл index.html к проекту:

Теперь надо наш проект скомпилировать. Для этого в главном меню программы необходимо выбрать File-->Compile и в открывшемся окне указать путь к файлу проекта (по умолчанию поле ввода содержит путь к текущему файлу проекта). В результате компиляции hhw выдаст нам в главном окне лог компиляции и создаст chm-файл справки.
Если Вы делали все как написано в посте, то Вы должны были получить в результате работы три файла: *.chm, *.hhp и *.html. Теперь можете открыть получившийся chm-файл и убедиться, что наш текст из index.htm в нем присутствует:
.
Теперь нам остается научиться вызывать этот файл из своей Delphi-программы.
В Сети вы можете встретить массу статей, касающихся запуска chm-фалов из своих программ. Обчно в этих статьях Вам сначала предлагают импортировать библиотеку, обявить вызов функции HtmlHelp и уж потом работать со справкой. Но дело в том, что модуль Windows.pas в Delphi 2010 уже содержит все необходимые типы данных и функции для работы с chm.
Создайте новый проект Delphi и поместите на главную форму всего одну кнопку. Убедитесь, что в uses подключен модуль windows и в событии onClick кнопки напишите всего одну строку:
HtmlHelp(handle,'Путь_к_файлу/help.chm',HH_DISPLAY_TOPIC,0);
Убедитесь, что файл справки запускается корректно. Теперь разберемся, что мы написали.
handle - первый параметр функции содержит всегда HWND окна вызывающего приложения.
Второй параметр - путь к файлу справки. В этом же параметре можно указать конкретный раздел справки, который необходимо открыть, название окна и т.д.
Третий параметр (HH_DISPLAY_TOPIC) - команда API. В конкретно нашем случае мы попросили открыть топик справки.
И последний параметр - ноль. Этот параметр используется, например, для команды вызова pop-up окна справки (об этом поговорим позже), в остальных случаях четвертый параметр должен быть равен нулю.
В следующий раз поговорим более подробно о структуре справочной системы и попробуем использовать другие возможности для работы со справкой, используя всё туже единственную функцию HtmlHelp.
Если хотите удивить своих родных и близких на какой-нибудь праздник - купите им оригинальные подарки. В отличие от банальных мягких игрушек, такие подарки могут вызвать настоящий восторг и неподдельную радость.
------------------------
| Делись! | Загружай! | Плюсуй! |
| | |









25 Июн 2010 в 7:42 пп
Уух не знаю Влад. Мне например проще набросать хелп в ворде и потом конвертнуть в chm с помощью html2chm. Скорее всего дело привычки…
25 Июн 2010 в 9:20 пп
Егор, тут дело даже не в подборе инструмента — их валом, другое дело использовать API на максимум возможностей. А HHW — это просто «родной» инструмент M$ поэтому его и взял за основу, а так есть HelpNDoc — хорошая штука с визуальным редактором и дружит с компилятором hhw :)
З.Ы. Жду от вас продолжения статей по защите программ. Первая получилась супер.
26 Июн 2010 в 3:43 дп
> А HHW – это просто “родной” инструмент M$ поэтому его и взял за основу, а так есть HelpNDoc
Мы этой весной искали по работе инструмент для создания хэлпа. Так вот как оказалось, большая часть доступных бесплатных — либо глючат либо работают с ограничениями. В этом плане HHW — получается действительно лучшим. Впрочем, я завтра напишу об этом в блоге.
26 Июн 2010 в 7:32 дп
Рад, что вам понравилось Влад! Вторая часть уже на блоге :)
>> HelpNDoc – хорошая штука с визуальным редактором и дружит с компилятором hhw :)
Вот кстати не знал ( Сыплю пепел на свою голову паралельно качая HelpNDoc…
26 Июн 2010 в 11:18 дп
«Путь_к_файлу/help.chm», лучще сразу на Application.HelpFile менять.
зы: справки к проге делал только один раз в Help And Manual. очень хороший инструмент для разработки. платный правда.
26 Июн 2010 в 12:15 пп
Честно говоря я (и не только я) устал уже от постоянных смен формата хелпов. *.hlp, *.chm и т.д. На этой винде они запускаются, на другой — не запускаются.
Сейчас уже многие просто делают ссылки на страницы в Инете вместо хелпа.
Все-равно те, кто реально покупает софт — имеют доступ к Инету…
Разверстал страницу и вперед.
26 Июн 2010 в 1:16 пп
Александр Божко, не всегда те кто покупает софт имеют доступ в Инет. Редко, но метко встречаются и такие у кого на работе даже локалки нету :)
27 Июн 2010 в 2:55 пп
Vlad спасибо за статью!
29 Июн 2010 в 2:35 дп
Вот тут описано как мы в офисе искали программу для создания справки. (сорри за рекламу, просто думаю, что это действительно будет интересным и твоим читателям)
29 Июн 2010 в 9:12 пп
+1 за Help&Manual. Чудесная вещь.
29 Июн 2010 в 11:25 пп
> +1 за Help&Manual.
Ага. 2 Help&Manual-a по цене равны одной Delphi :D
29 Июн 2010 в 11:26 пп
Хм…лучше уж пока ручками поковырять файлики :)
30 Июн 2010 в 9:37 дп
> 2 Help&Manual-a по цене равны одной Delphi.
Во-первых, 350 + 350 = 700 < 900
Во-вторых, тебе зачем 2 Help&Manual-а?
Три с половиной сотни $ — не так уж много за продукт такого уровня.
P.S. Vlad, в последнее время твой сайт тормозит с прокруткой в Google Chrome.
22 Дек 2010 в 12:29 дп
>> HelpNDoc – хорошая штука с визуальным редактором и дружит с компилятором hhw :)
Чего-то она русские названия топиков кракозябрами после компиляции пишет :(
Есть решение?
22 Дек 2010 в 12:49 пп
Решение одно — отказаться от юникода :) Кракозябры исчезнут сами собой
22 Дек 2010 в 1:05 пп
Позовите Майкла Каплана, он их пристрелит за кривую поддержку юникода :D
22 Дек 2010 в 1:13 пп
Да ладно, пусть живут. Я HHW юзаю в чистом виде :)
07 Фев 2011 в 12:47 пп
Здравствуйте, Влад. У меня благодаря вашей статье получился очень хороший и красивый справочный файл. Но проблема, файл через сеть не открывается. После некоторых настроек в системе, правда, получается. Но это не рационально, не могу я настраивать все ПК клиентов. Посоветуйте, пожалуйста.
07 Фев 2011 в 12:57 пп
хм..так если Вам нужен хелп, который работает через Сеть, то зачем Вам chm? По-моему в этом случае удобнее сделать простую html-справку и разместить её в сети. Так, с одной стороны, доступ к хэлпу будет у всех и, с другой стороны — никаких настроек на машинах клиентов делать не надо. По-крайней мере я бы сделал так :)
07 Фев 2011 в 2:24 пп
Файл по сети и не должен открываться. Ибо это уязвимость.
Файл нужно скопировать локально (и вообще-то, этим должен заниматься установщик программы).
Если же при ручном копировании файл не открывается, то щёлкаем по нему правой и заходим в свойства. На первой вкладке будет кнопка «Разблокировать».