Подписка

добавить на Яндекс

Наши проекты

Delphi+Google

Google API

Google API в Delphi - проект с открытым исходным кодом.

Chrono

Chrono

Хронометр - программа для ведения списка задач.

ODFProc

ODFProc

ODFProc - работа с документами OpenOffice в Lazarus и FreePascal.

Поддержка блога

А тут я коплю на лицензию Delphi XE на iPad =).
Сумма пожертвования не фиксирована.

Публикации

Год назад

Случайный пост

Последние

Сообщения форума

Комментарии

Социальные сети

Google

Facebook

Twitter

Опрос

Вы сейчас или в ближайшем обозримом будущем планируете разрабатывать кроссплатформенное приложение с использованием Firemonkey?



Loading ... Loading ...

Блоги и сообщества

Статьи по Delphi DelphiFeeds.ru - Все Delphi-блоги Рунета Сообщество умных людей VR-Online.RU Бесплатный журнал для программистов и всех, кто интересуется IT Статьи и уроки по Delphi Новостной блог о высоких технологиях
Система Orphus
Опубликовал Vlad 25 июня 2010 в 16:42.
Категории: Основы Delphi.


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.

------------------------
Если хотите удивить своих родных и близких на какой-нибудь праздник - купите им оригинальные подарки. В отличие от банальных мягких игрушек, такие подарки могут вызвать настоящий восторг и неподдельную радость.
------------------------
Понравилась статья? Тогда:
Делись! Загружай! Плюсуй!
   Отправить PDF на   
Читай ещё статьи на WebDelphi.ru

Комментарии (20)

WP_Cloudy
  • Егор пишет:

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

  • Vlad пишет:

    Егор, тут дело даже не в подборе инструмента — их валом, другое дело использовать API на максимум возможностей. А HHW — это просто «родной» инструмент M$ поэтому его и взял за основу, а так есть HelpNDoc — хорошая штука с визуальным редактором и дружит с компилятором hhw :)
    З.Ы. Жду от вас продолжения статей по защите программ. Первая получилась супер.

  • Алексей Тимохин пишет:

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

  • Егор пишет:

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

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

  • ter пишет:

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

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

  • Александр Божко пишет:

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

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

  • Vlad пишет:

    Александр Божко, не всегда те кто покупает софт имеют доступ в Инет. Редко, но метко встречаются и такие у кого на работе даже локалки нету :)

  • nmd пишет:

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

  • Алексей Тимохин пишет:

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

  • Александр пишет:

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

  • Алексей Тимохин пишет:

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

  • Vlad пишет:

    Хм…лучше уж пока ручками поковырять файлики :)

  • Александр пишет:

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

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

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

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

  • DremLIN пишет:

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

  • Vlad пишет:

    Решение одно — отказаться от юникода :) Кракозябры исчезнут сами собой

  • Александр пишет:

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

  • Vlad пишет:

    Да ладно, пусть живут. Я HHW юзаю в чистом виде :)

  • Юль пишет:

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

  • Vlad пишет:

    хм..так если Вам нужен хелп, который работает через Сеть, то зачем Вам chm? По-моему в этом случае удобнее сделать простую html-справку и разместить её в сети. Так, с одной стороны, доступ к хэлпу будет у всех и, с другой стороны — никаких настроек на машинах клиентов делать не надо. По-крайней мере я бы сделал так :)

  • Александр пишет:

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

Ваш ответ

Внимание: Все комментарии модерируются, и это может вызвать задержку их публикации. Отправлять комментарий заново не требуется.

Пожалуйста, заключайте исходный код в тэги [code][/code].
Если код большой, то воспользуйтесь Вставкой кода на отдельной странице и оставьте в комментарии ссылку на исходник