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

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-код ручками.
Для начала запишем следующее:

Заголовок первого уровня

Заголовок второго уровня

Это наш первый 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.

4.5 2 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
30 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
Егор
25/06/2010 19:42

Уух не знаю Влад. Мне например проще набросать хелп в ворде и потом конвертнуть в chm с помощью html2chm. Скорее всего дело привычки…

Алексей Тимохин

> А HHW – это просто “родной” инструмент M$ поэтому его и взял за основу, а так есть HelpNDoc
Мы этой весной искали по работе инструмент для создания хэлпа. Так вот как оказалось, большая часть доступных бесплатных — либо глючат либо работают с ограничениями. В этом плане HHW — получается действительно лучшим. Впрочем, я завтра напишу об этом в блоге.

Егор
26/06/2010 07:32

Рад, что вам понравилось Влад! Вторая часть уже на блоге :)

>> HelpNDoc – хорошая штука с визуальным редактором и дружит с компилятором hhw :)
Вот кстати не знал ( Сыплю пепел на свою голову паралельно качая HelpNDoc…

ter
ter
26/06/2010 11:18

«Путь_к_файлу/help.chm», лучще сразу на Application.HelpFile менять.

зы: справки к проге делал только один раз в Help And Manual. очень хороший инструмент для разработки. платный правда.

Александр Божко

Честно говоря я (и не только я) устал уже от постоянных смен формата хелпов. *.hlp, *.chm и т.д. На этой винде они запускаются, на другой — не запускаются.

Сейчас уже многие просто делают ссылки на страницы в Инете вместо хелпа.
Все-равно те, кто реально покупает софт — имеют доступ к Инету…
Разверстал страницу и вперед.

nmd
nmd
27/06/2010 14:55

Vlad спасибо за статью!

Алексей Тимохин

Вот тут описано как мы в офисе искали программу для создания справки. (сорри за рекламу, просто думаю, что это действительно будет интересным и твоим читателям)

Александр
29/06/2010 21:12

+1 за Help&Manual. Чудесная вещь.

Алексей Тимохин

> +1 за Help&Manual.
Ага. 2 Help&Manual-a по цене равны одной Delphi :D

Александр
30/06/2010 09:37

> 2 Help&Manual-a по цене равны одной Delphi.

Во-первых, 350 + 350 = 700 < 900
Во-вторых, тебе зачем 2 Help&Manual-а?

Три с половиной сотни $ — не так уж много за продукт такого уровня.

P.S. Vlad, в последнее время твой сайт тормозит с прокруткой в Google Chrome.

DremLIN
DremLIN
22/12/2010 00:29

>> HelpNDoc – хорошая штука с визуальным редактором и дружит с компилятором hhw :)
Чего-то она русские названия топиков кракозябрами после компиляции пишет :(
Есть решение?

Александр
22/12/2010 13:05

Позовите Майкла Каплана, он их пристрелит за кривую поддержку юникода :D

Юль
Юль
07/02/2011 12:47

Здравствуйте, Влад. У меня благодаря вашей статье получился очень хороший и красивый справочный файл. Но проблема, файл через сеть не открывается. После некоторых настроек в системе, правда, получается. Но это не рационально, не могу я настраивать все ПК клиентов. Посоветуйте, пожалуйста.

Александр
07/02/2011 14:24

Файл по сети и не должен открываться. Ибо это уязвимость.
Файл нужно скопировать локально (и вообще-то, этим должен заниматься установщик программы).
Если же при ручном копировании файл не открывается, то щёлкаем по нему правой и заходим в свойства. На первой вкладке будет кнопка «Разблокировать».

Александр Троицкий
Александр Троицкий
27/09/2012 00:44

Хотелось бы добавить несколько слов по поводу вызова справки в формате CHM.
В составе Delphi (начиная с какой — не помню, в 2006 точно есть) идет модуль HTMLHelpViewer.
Его надо подключить к проекту и реализовать интерфейс IHtmlHelpTester (например в главном окне приложения). В нем есть всего 7 функций, назначение которых вполне очевидно. После этого все будет работать «автоматом», без явного вызова HtmlHelp. Если кому то интересно, могу привести пример использования.

saha
saha
13/01/2013 17:00

у меня программно не вызывается справка. в юсес все подключено но ругается якобы
[Error] Unit1.pas(30): Undeclared identifier: ‘HtmlHelp’
[Error] Unit1.pas(30): Undeclared identifier: ‘HH_DISPLAY_TOPIC’
что делать подскажите?

saha
saha
13/01/2013 17:14

у меня программно не вызывается справка. в юсес все подключено но ругается якобы
[Error] Unit1.pas(30): Undeclared identifier: ‘HtmlHelp’
[Error] Unit1.pas(30): Undeclared identifier: ‘HH_DISPLAY_TOPIC’
как исправить?

saha
saha
13/01/2013 17:14

тока что проверил на эмбракадэро все работает а на седьмом делфи выдает такие ошибки

saha
saha
13/01/2013 17:40

да я пробовал эмбракадеро но она создает кучу ненужных модулей и много всего другого. и проекты сделанные на эмбре с трудом запускаются на более старых версиях т.к в старых попросту нет таких модулей и проходится многое исправлять. так что я сошелся на том что 7 более оптимальный выбор для меня. т.к мне часто приходится иметь дело со страрыми версиями делфи. ну придется искать другой способ подключения возможно через shellexecute.все равно спасиб)

saha
saha
13/01/2013 17:48

действительно окзалось намного проще подключить хэлп с помощью shellexecute)

skyppy
skyppy
02/06/2015 15:30

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

Суть программы:
Нужно что бы в окне программы выводилась информация которая находится на листе эксель.
Строк примерно 25 . колонок 3. Лист 1
Примечание.
1.В экселе информация в этик сроках обновляется каждые 5 минут и программа должна также показывать обновленное инфо.
2. Возможно ли наложить пароль для доступа к инфо ограниченный по времени (допустим на сутки или неделю или месяц)

Спс большое за ранее жду ответов. За мной не заржавеет обещаю.
С уважением Skyppy
Если что пишите на мыло: kartvelit@gmail.com

Никита
Никита
22/12/2016 20:31

Красавцы помогли сильно