Данная статья использует материалы книги С. Брауна "Visual Basic 5 с самого начала" (С. Браун. Visual Basic 5 с самого начала - СПб: Питер, 1998 - 320 с.: ил.), а также собственный опыт автора.
Для начала хочу ответить на вопрос "Зачем эта статья?". Во-первых, практически отсутствует информация по созданию справочных документов (будь то форматы *.hlp, *.chm, *.pdf и т.д.). А ведь для программиста - любителя такая информация является очень важной: как создать документ, как привязать его к программе и т.д. Но такая информация в большинстве случаев отсутствует. Автору удалось найти такую информацию в вышеуказанной книге, на основе которой и будет строиться данная статья. Во-вторых, создание справки в формате HLP трудоемкий процесс, которые будет рассмотрен подробно в данной статье. Создать справку без дополнительной теоритической наглядной базы будет сложно. Именно поэтому написана данная статья.
Книга, которая лежит в основе данной публикации, посвящена программированию в среде Microsoft Visual Basic, поэтому в дополнение, автор расскажет как привязывать справку к программам, написанным с помощью Borland Delphi 7.
− Использование справочных файлов в приложениях
В состав готового приложения должна входить электронная справка. Она становится средством "первой помощи" [а иногда и единственным средством - прим. автора] в тех случаях, когда пользователю что-то непонятно или он нуждается в инструкциях. Справочный файл должен быть тщательно проработан и интегрирован с основным приложением. Контекстная справка обеспечивает вызов справочной системы практически из любого элемента любой формы, а также выводит справочную информацию по текущему элементу. Создадим простейший справочный файл, в котором объясняется... как создавать справочный файл. Пользуйтесь им, когда в будущем вам придется работать над собственной справочной системой.
Существует немало коммерческих и условно-бесплатных программ, предназначенных для создания справочных файлов, однако в этом уроке воспользуемся инструментами Visual Basic [обладатели Borland Delphi 7 не отчайвайтесь, создать HLP-файл можно и средствами Delphi - примечание автора статьи].
Для создания справочного файла вам понадобится текстовой редактор, который позволяет создавать сноски и сохранять файлы в формате RTF (Rich Text Format). Многие разработчики применяют для этой цели Word for Windows, мы тоже воспользуемся этим редактором. Если у вас нет Word, работайте в другом редакторе. Методику создания справочных файлов нетрудно понять и приспособить для вашего любимого редактора. Вам также понадобится компилятор, генерирующий HLP-файл по исходному файлу в формате RTF (а также по файлам растровых изображений, если они используются). Visual Basic обладает собственным компилятором справки. Мы воспользуемся программой Help Workshop, находящейся на компакт-диске Visual Basic.
Для паскалистов, Borland Delphi 7 также предоставляет возможность создавать HLP-файлы. Для этого вам необходимо открыть следующий файл help/tools/hcw.exe директории, в которой находится Delphi 7. Единственным минусом является то, что данная программа создана в 1997 году (если смотреть Help|Version...), но это не означает, что программа лишена каких-либо возможностей по созданию HLP-справки.
− Создание первого справочного файла
Чтобы создать справочный файл, необходимо сначала подготовить файлы содержания, разделов и проекта. Файл содержания хранится в формате ASCII и определяет структуру и внешний вид вкладки Contents
. Файл разделов содержит текст и графику, из которых складывается итоговый документ. Наконец, файл проекта объединяет файлы разделов и содержания, а также все прочие файлы, входящие в проект. Он же определяет макет, внешний вид и размещение окна справки при запуске.
− Проектирование и создание файла содержания
Многие руководства советуют начинать с файла разделов, автор книги предпочитает сначала задавать общую структуру справочной системы в файле содержания. Help Workshop отображает графическое представление структуры разделов по аналогии с редактором меню Visual Basic IDE. Во время работы с Help Workshop список разделов выглядит точно также, как и обычная вкладка Contents
в справочной системе приложения. Это заметно облегчает работу над проектом справочного файла.
При проектировании файла содержания стоит записать идентификаторы и заголовки разделов. Идентификаторы разделов используются компилятором справки для "стыковки" справочного файла с приложением. Они могут пригодиться при создании сносок в файле разделов. Начнем с файла содержания:
Skill11.hlp
.Создание справочного файла
.Создание справочного файла
.Создание файла содержания
. Завершив ввод, нажмите кнопку OK.Создать файл содержания
, а в поле Topic ID - IDH_CreateContentsFile. Поля Help File и Window Type следует оставить пустыми.Идентификатор раздела | Заголовок раздела |
IDH_AddHeadings | Добавить заголовки |
IDH_AddTopics | Добавить разделы |
Создание файлов разделов
и нажмите кнопку OK.Создание файлов разделов
:
Идентификатор раздела | Заголовок раздела |
IDH_WriteTopics | Написать текст разделов |
IDH_AddFootnotes | Добавить сноски |
IDH_SaveRTF | Сохранить файл |
Создание файла проекта
и нажмите кнопку OK.Создание файла проекта
:
Идентификатор раздела | Заголовок раздела |
IDH_CreateProjectFile | Создать файл проекта |
IDH_SetOptions | Задать параметры проекта |
IDH_SaveRTF | Сохранить файл |
IDH_AddFiles | Добавить файлы в проект |
IDH_DefineWindow | Определить параметры окна |
IDH_Compile | Сохранить и откомпилировать проект |
IDH_Test | Протестировать полученный справочный файл |
Первый файл содержания готов, можно приступать к файлу разделов. Надеюсь, вы не забыли записать идентификаторы и заголовки разделов - они понадобятся при создании сносок в файле разделом. Если вы не записали их, сделайте это сейчас.
После того, как будет создан файл содержания, можно переходить к файлу разделов. Он представляет собой документ RTF (Rich Text Format) и содержит текст, графику, ссылки и макросы, которые воспроизводятся в справочном файле. В этом примере автор книги использовал Microsoft Word, но приведенные команды можно адаптировать для любого текстового редактора.
Создать файл содержания
.
Начинать следует с файла содержания. Help Workshop обладает специальными
графическими средствами, облегчающими эту задачу. Происходящее напоминает
работу с редактором меню в Visual Basic - вы строите иерархический список
заголовков и разделов.
Выполните в Help Workshop команду File|New.
Выберите строку Help Contents и нажмите кнопку OK.
Создать файл содержания
.Создать файл содержания
.auto
. Тем самым вы приказываете Windows Help создать в данном файле автоматическую последовательность просмотра.Давайте остановимся и посмотрим, что мы сделали. Во-первых, мы создали заголовок - по нему пользователь определяет, о чем идет речь в данном разделе. В нашем примере раздел посвящен созданию файла содержания. Затем мы ввели основной текст раздела. На этом этапе можно создать графические изображения и ссылки (в нашем справочном файле такая возможность не используется). Если эта тема вас заинтересовала, в электронной документации по Help Workshop вы найдете более чем исчерпывающую информацию.
Наконец, мы вставили в текст несколько сносок. Они необходимо для правильной компиляции файла. В нашем примере сносок было три, однако существуют и другие сноски, используемые для других эффектов. Первая сноска определяла идентификатор раздела. После нее была добавлена сноска с названием раздела и в конце - сноска, определяющая последовательность просмотра. Если вам трудно запомнить эти символы, попробуйте рассуждать так: первой идет сноска с идентификатором, в ней используется знак фунта (#). Большинство идентификатором имеет числовое значение, и хотя о нашем этого не скажешь, обычно идентификаторы все же ассоциируются с числами. Для названия используется знак доллара ($). Разумеется, с точки зрения программиста названия является строкой, а в Visual Basic символ $ используется для обозначения строк. Наконец, сноска со знаком "плюс" (+) определяет последовательность просмотра. Достаточно вспомнить, что во многих программах символы + и - используются для перебора чисел, чтобы связать знак + с перемещением по справочному файлу.
Ниже перечислены основные правила включения сносок в разделы справки:
auto
, чтобы возложить все хлопоты на компилятор.Обязательно сохраняйте работу перед вводом нового раздела. Теперь вы знаете основные принципы использования сносок, и мы можем закончить создание справочного файла:
Добавить заголовки
Для добавления заголовков применяются кнопки Add Above и Add Below. Когда на экране появится диалоговое окно Edit Contents Tab Entry, установите переключатель Heading, после чего введите описание заголовка.
С помощью заголовков можно классифицировать разделы справочного файла. Например, данный файл имеет три заголовка - по одному для каждого этапа работы над справочным файлом. В каждый заголовок мы добавим разделы, описывающие отдельные операции, составляющие различные этапы.
# | IDH_AddHeadings |
$ | Добавить заголовки |
+ | auto |
Добавить разделы
Для каждой темы, рассматриваемой в справочном файле, создается свой раздел. Текст, который вы набираете, является разделом.
Чтобы добавить раздел, нажмите кнопку Add Below или Add Above, после чего установите в диалоговом окне Edit Contents Tab Entry переключатель Topic.
Для каждого раздела необходимо указать как минимум идентификатор. Для Help Workshop желательно задавать идентификаторы разделов, начинающиеся с префикса IDH_. Обратите внимание, что в нашем примере были использованы именно такие имена. Префикс упрощает компиляцию файла разделов.
Кроме того, для раздела необходимо задать название. Оно указывается в поле Title. В этом упражнении можно не обращать внимания на другие поля: они нужны при выполнении макросов или использовании нескольких справочных файлов с одним файлом содержания.
# | IDH_AddTopics |
$ | Добавить разделы |
+ | auto |
Написать текст разделов
Следующим шагом должно стать написание текста разделов. Для этого вам понадобится редактор, который умеет сохранять текст в формате RTF (Rich Text Format).
Начните с создания нового документа.
Каждый раздел должен начинаться на отдельной странице. Если вы пишите сразу несколько разделов, разделяйте их жесткими разрывами страниц. В Word для этого используется комбинация клавиш CTRL+ENTER.
Закончив составление текста, вставьте сноски, которые служат для объединения разделов.
# | IDH_WriteTopics |
$ | Написать текст разделов |
+ | auto |
Добавить сноски
Составив разделы, необходимо создать на каждой странице сноски. Обязательной является только сноска для идентификатора раздела. Чтобы задать идентификатор, следует вставить сноску и выбрать в качестве ее знака символ фунта (#).
Создание сноски для идентификатора раздела:
Установите курсор в начале странице (сноски должны находиться перед текстом раздела). В Word выполните команду Вставка|Сноска и выберите # в качестве знака сноски. Вместо текста сноски введите идентификатор раздела с префиксом IDH_, упрощающим обработку файла компилятором.
# | IDH_AddFootnotes |
$ | Добавить сноски |
+ | auto |
Сохранить файл
Когда все разделы и сноски будут введены, сохраните файл в формате RTF. После этого можно вернуться к работе с Help Workshop и создать файл проекта.
# | IDH_SaveRTF |
$ | Сохранить файл |
+ | auto |
Создать файл проекта
Последним компонентом справочного файла является файл проекта. Он определяет различные характеристики справочного файла, содержит ссылки на файл разделов и файл содержания и прочую информацию, необходимую для построения справочного файла.
В Help Workshop выполните команду File|New. Выберите строку Help Contents и нажмите кнопку OK.
Введите имя справочного файла в поле Help File. В нашем примере использовано имя Skill11.hlp.
# | IDH_CreateProjectFile |
$ | Создать файл проекта |
+ | auto |
Задать параметры проекта
Нажмите кнопку Options, чтобы задать различные параметры проекта.
Вкладка General
Введите в поле Help Title описание справочного файла.
Вкладка Compression
Установите переключатель Custom и флажок Hall Compression. Это обеспечивает также возможность поиска по ключевым словам в справочном файле.
Вкладка Files
Выберите из первого списка созданный ранее файл разделов (в формате RTF). В поле Contents File введите имя файла содержания.
# | IDH_SetOptions |
$ | Задать параметры проекта |
+ | auto |
Добавить файлы в проект
Задав параметры проекта, следует добавить в него файлы разделов и содержания, а также графику.
# | IDH_AddFiles |
$ | Добавить файлы в проект |
+ | auto |
Определить параметры окна
Чтобы в справочном окне присутствовали кнопки просмотра, следует задать для него нестандартный стиль.
Нажмите кнопку Window. В диалоговом окне Window Properties нажмите кнопку Add. Введите имя стиля окна и укажите, что окно должно создаваться на базе стандартного окна Procedure.
Затем перейдите на вкладку Buttons и установите флажок Browser - тем самым вы добавляете кнопки просмотра в справочное окно.
Наконец, закройте диалоговое окно кнопкой OK.
# | IDH_DefineWindow |
$ | Определить параметры окна |
+ | auto |
Сохранить и откомпилировать проект
Перед тем как двигаться дальше, необходимо сохранить проект и файл содержания. Для этого можно нажать на кнопку Save and Compile в нижней части диалогового окна проекта.
Компилятор справки обрабатывает файлы разделов, содержания и проекта. Результаты отображаются в окне. Если компиляция прошла без ошибок, можно переходить к тестированию справочного файла.
# | IDH_Compile |
$ | Сохранить и откомпилировать проект |
+ | auto |
Протестировать полученный справочный файл
Последний и самый важный шаг. Протестируйте справочный файл и убидитесь, что он позволяет успешно перемещаться по ссылкам. Проверьте возможные опечатки и ошибки макета. Справочный файл следует тестировать так, как обычно тестируются приложения.
Когда все будет работать нормально, справочный файл можно подключать к приложению.
# | IDH_Test |
$ | Протестировать полученный справочный файл |
+ | auto |
Вы только что создали свой первый файл разделов. Помните - это был обычный файл, который лишь показывает общую схему действий. После того как вы введете все разделы и сноски, этот процесс надолго останется в вашей памяти. Как известно, практика - лучший учитель. Давайте перейдем к последней стадии работы над справочным файлом - созданию файла проекта.
Чтобы связать воедино файлы содержания и разделов, необходимо создать файл проекта:
Создание справочного файла
в поле Help Title.Skill11.hlp
.Main
в поле Create a Window Named. Выберите из списка Based on this Standard Window строку Procedure. Когда настройка параметров будет завершена, нажмите кнопку OK.Идентификатор раздела | Идентификатор контекста |
IDH_CreateContentsFile | 100 |
IDH_AddHeadings | 200 |
IDH_AddTopics | 300 |
IDH_WriteTopics | 400 |
IDH_AddFootnotes | 500 |
IDH_SaveRTF | 600 |
IDH_CreateProjectFile | 700 |
IDH_SetOptions | 800 |
IDH_AddFiles | 900 |
IDH_DefineWindow | 1000 |
IDH_Compile | 1100 |
IDH_Test | 1200 |
Справочный файл следует немедленно протестировать, чтобы убедиться, что он работает нормально. Для этого выполните следующие действия:
Вот и все, что требуется сделать для создания простейшего справочного файла. Открывайте полученный файл Skill11.hlp каждый раз, когда вам необходимо будет создавать файл справки в формате HLP.
− Подключение справочного файла к приложению
− Подключение справочного файла в Visual Basic
frmMain
, а свойству Caption - значение Приложение со справкой
.... | ... |
Меню Help | |
Caption: | &Help |
Name: | mnuHelp |
Команды меню Help | |
Caption: | &Contents Files |
Name: | mnuHelpContentsFile |
Caption: | &Topic Files |
Name: | mnuHelpTopicFiles |
Caption: | &Project Files |
Name: | mnuHelpProject |
dlgHelp
. Этото элеамент будет использоваться для вызова справочного файла.End
.dlgHelp.HelpFile = App.HelpFile
Private Sub mnuHelpContentsFile_Click()
dlgHelp.HelpContext = "100"
dlgHelp.HelpCommand = cdlHelpContext
dlgHelp.ShowHelp
End Sub
Private Sub mnuHelpContentsFile_Click()
dlgHelp.HelpContext = "400"
dlgHelp.HelpCommand = cdlHelpContext
dlgHelp.ShowHelp
End Sub
Private Sub mnuHelpProject_Click()
dlgHelp.HelpContext = "700"
dlgHelp.HelpCommand = cdlHelpContext
dlgHelp.ShowHelp
End Sub
Внимание! Из-за отсутствия у автора данного сайта Microsoft Visual Basic вышеприведенный пример не был протестирован.
− Подключение справочного файла в Delphi
Подключить файл справки HLP в Borland Delphi 7 можно несколькими путями.
Первый путь осуществляется через использование ShellAPI (поэтому вначале надо в модуле подключить ее), например следующим образом:
// Подключаем ShellAPI к модулю формы
uses
Windows, ..., ShellAPI;
...
// Объявляем функцию
function ExecuteFile(const pFileName, pParams, pDir: String;
ShowCmd : Integer): THandle;
var
FileName, Params, Dir: array[0..79] of Char;
begin
Result := ShellExecute(Application.MainForm.Handle, nil,
StrPCopy(FileName, pFileName),
StrPCopy(Params, pParams),
StrPCopy(Dir, pDir), ShowCmd);
end;
// Объявляем процедуру вызова файла справки
procedure TMain.mnuHelp_ContentsClick(Sender: TObject);
var
needs : string;
begin
needs :=
'skill11.hlp';
if ExecuteFile(needs, '', '', SW_SHOW) <= 32 then
MessageDlg('Невозможно открыть файл:' + #13#10 + needs,
mtError, [mbOK], 0)
else
// Нет действия
end;
Данный код позволяет загружать содержание справки, а не конкретный раздел справочного файла. Чтобы загрузить конкретный раздел справки необходим другой код (источником данного кода является книга Том Свана "Основы программирования в Delphi для Windows 95" (К.: "Диалектика", 1996. - 480 с., ил.)).
Путь второй. Создав файл *.hlp, присвойте его имя свойству HelpFile объекта Application. Это можно выполнить только во время работы программы (например, в обработчике события OnCreate формы). Для этого в обработчик введите оператор, подобный следующему:
Application.HelpFile := 'skill11.hlp';
Чтобы присвоить определенный раздел справки определенному объекту приложения или формы, необходимо например следующее:
Application.HelpContext(Button1.HelpContext);
Другой способ перехода к нужной теме заключается в использовании метода HelpJump, которому в качестве параметра нужно передать контекстно-зависимую строку:
Application.HelpJump('Subject');
В зависимости от того, имеет ли объект Application связанный с ним файл справочной системы, метод HelpJump возвращает True или False. Используя эту особенность, можем вывести сообщение об ошибке, если HelpJump вовращает False:
if not Application.HelpJump('Subject') then
ShowMessage('Unable to open help file');
Третий путь взят из книги Рубенкинга (Рубенкинг Н. Программирование в Delphi для "чайников". - К.: "Диалектика", 1996. - 304 с., ил):
Пункт меню | Обработчик события OnClick |
Содержание | Application.HelpCommand(HELP_CONTENTS, 0); |
Поиск справки о... | Application.HelpCommand(HELP_PARTIALKEY, 0); |
Использование справки | Application.HelpCommand(HELP_HELPONHELP, 0); |
Тем или иным способом, но вы сможете подключить справочный файл к вашему Delphi-приложению весьма просто.
Вы можете скачать в одном архивном файле четыре документа: skill11.cnt, SKILL11.HLP, skill11.hpj, skill11.rtf, которые являются наглядным пособием данной статьи.
Скачать правила создания HLP-справки (15 KB).
Следует отметить, что авторские права на материалы, которые позаимствованы из книг, сохранены за истинными авторами; Иван Чередниченко никоим образом не пытался посягнуть на чужую интеллектуальную собственность.
Автор надеется, что данной статьи достаточно, чтобы вы смогли создавать свои справочные файлы, а также связывать (подключать) их к приложениям на Visual Basic и Borland Delphi 7. Также информацию о создании HLP-справки вы можете узнать из книг в списке литературы.