понедельник, 4 июня 2012 г.

Урок 47. Подскажите как...? Пожалуйста - Справочная система.

Программа "Расходы", о разработке которой я рассказывал последнее время, обросла уже достаточным функционалом, чтобы решать поставленные перед ней задачи. И даже немного больше - я показал, как сделать локализацию интерфейса. А те, кто "следил за развитием событий", надеюсь, нашли для себя что-то новое и интересное. Дописывать и оптимизировать программу можно далее до бесконечности, например: для удобства учета данных из разных источников можно придумать БД и написать механизм импорта из нее в основной массив данных; можно озадачиться и решить вопрос с учетом кредитов и других долговых обязательств.

Но вряд ли при этом будет интересно повторять здесь описание одних и тех же приемов или толковать еще раз о тех компонентах, о которых уже говорилось.



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

Чего в первую очередь недостает программе "Расходы"? Что происходит в других программах при нажатии кнопки "F1"?

Вызывается справочная система.

Забегая вперед, покажу, что для программы "Расходы" такая система тоже создана, и выглядит она как любая другая:


Например, страничка описывающая интерфейс, о котором велась речь на прошлом уроке, выглядит вот так:


Любознательные спросят: в чем прок? Программа анонсировалась как программа для учета домашних расходов, стало быть - для себя любимого. Зачем же самому себе Help писать?

Самому себе, конечно, незачем, верно. Но при разработке больших систем без описания, руководства пользователя и справочной системы не обойтись. 

Поэтому придется поупражняться в текстовом редакторе.

Наберите текст в том же MS Word (или Open Office, Google Docs), включите в него рисунки, сделайте красивое форматирование, выделив заголовки разных уровней, списки и т.п.

Сохраните файл в формате rtf.

На следующем шаге нужно придать документу (rtf) определенную структуру: разбить на разделы, снабдить служебными сносками, установить перекрестные ссылки. Таким образом, файл будет подготовлен к компиляции в программе Microsoft Help Workshop, которую можно бесплатно скачать на сайте производителя.

Раздел справки представляет собой фрагмент справочной системы, отображаемой в окне программы Winhelp.

Текст каждого раздела должен находиться на определенной странице документа (заканчиваться символом "разрыв станицы").

После того как текст разделов будет набран, нужно, используя сноски, пометить заголовки разделов справочной информации (сноски используются компилятором справочной системы в процессе преобразования rtf-файла в hlp-файл справки). 

Для того чтобы пометить заголовок раздела сноской, нужно установить курсор перед первой буквой заголовка раздела и из меню Вставка выбрать команду Сноска. В открывшемся диалоговом окне "Сноски" в группе "Вставить сноску" нужно установить переключатель в положение обычную, а в группе "Нумерация" - в положение другая. В поле ввода номера сноски следует ввести символ # и нажать кнопку ОК.
Сноска
Назначение
#
Задает идентификатор раздела справки, который может использоваться в других разделах для перехода к помеченному этой сноской разделу.
$
Задает имя раздела, которое будет применятся для идентификации раздела справки в списке поиска  и в списке просмотренных тем во время использования справочной системы.
K
Задает список ключевых слов, при выборе которых из списка диалога поиска осуществляется переход к разделу справки, заголовок которой помечен этой сноской.
Лучше, чтобы идентификатор раздела справки начинался с префикса IDH_. В этом случае во время компиляции rtf-файла будет проверена корректность ссылок на разделы справки и выведена информация о несоответствиях.

Должно получаться примерно так:




Во время подготовки текста справочной информации, слово-ссылку, при выборе которой происходит переход к другому разделу справки, следует подчеркнуть двойной линией. Сразу за ссылкой, без пробела, поместить идентификатор раздела справки, к которому должен быть выполнен переход (например "Далее" и "Назад"). 



Вставленный идентификатор необходимо оформить как скрытый текст. При этом рисунки, как и текст, можно использовать для ссылки на другой раздел. Для этого рисунок соответствующим образом подчеркивается, а контекст раздела помещается сразу после рисунка. На предыдущим рисунке приведен вид окна редактора текста во время подготовки файла справочной информации. Слово "Назад" помечено как ссылка на другой (предыдущий) раздел справки,  обозначенный сноской # и имеющий идентификатор IDH_000.

Теперь откройте программу HCW.EXE скачанную из даунлод центра корпорации Майкрософт.



Основным файлом компилятора является файл проекта.

Для того чтобы приступить к созданию справочной системы, нужно из меню File выбрать команду New, затем в открывшемся диалоговом окне New указать тип создаваемого файла - Help Project.



Далее следует выбрать папку, где находится программа, для которой создается справочная система, и где уже должен находится файл документа справочной системы (rtf-файл). Затем в поле Имя файла нужно ввести имя файла проекта справочной системы. Файлу проекта присваивается расширение HPJ.


В папке с проектом у меня уже имеется файл проекта готовой справочной системы RashodHelp.hpj. Поэтому, чтобы проиллюстрировать процесс создания такого файла, я не буду "ломать" и "комкать" уже имеющийся файл, а создам новый - RashodNew.hpj. В окне программы будет выведено следующее сообщение:


Нажмите справа кнопку "Files", и затем - кнопку "Add", чтобы добавить созданный ранее файл rtf:



В результате этих действий в окне проекта появится раздел [FILES], в котором будет указано имя файла справочной информации. Если справочная информация распределена по нескольким файлам, то операцию добавления файла нужно повторить. Для того чтобы задать характеристики главного окна справочной системы, надо в окне проекта нажать кнопку Windows. Появится окно Create a window. В поле Create a window named надо ввести main.


Нажмите "ОК" и заполните свойства окна (Window Properties), как показано ниже:


Затем перейдите на вкладку "Position" и нажмите кнопку "Auto Sizer", позиционируйте окно, как считаете нужным, и нажмите "ОК". Проверьте вкладку "Color", используя которую, Вы можете поменять цвет фона будущего окна справки.


Файл проекта таким образом пополнится еще одним разделом:


Чтобы программа, использующая справочную систему, могла получить доступ к конкретному разделу справочной информации, нужно определить числовые значения для идентификаторов разделов, т.е. установить соответствия между номерами контекстов управляющих элементов приложения и разделами справочной системы. Чтобы это сделать, надо в окне проекта справочной системы нажать кнопку Map, в результате чего откроется диалоговое окно Map. 

В этом окне с помощью кнопки "Add" добавляется новое соответствие, а кнопкой "Rеmove" - производится удаление существующего. Соответствия отображаются построчно в виде пар значений, разделенных знаком равенства. Слева находится контекст раздела справочного файла (сноска, обозначенная символом #), а справа - номер контекста управляющего элемента приложения.

В результате должна получиться вот такая картина:


Чтобы посмотреть, как будет выглядеть готовая справка, воспользуйтесь меню File - Compile вместо кнопки "Save and Compile", установив отметку Automatically display help file in WinHelp when done (Автоматически показывать созданную справочную систему по завершении компиляции).

Если все сделано правильно, на экран будет выведено окно справочной системы, а в окне программы Microsoft Help Workshop - сообщение о результатах обработки.

Можно было бы поставить точку, но лучше потратить еще немного времени и сделать "Содержание". Для этого создайте новый файл, на сей раз - Help Contents  (Cnt), укажите соответствующий ему только что полученный файл hlp  и заголовок. А затем, используя кнопки справа, добавьте заголовки и топики:


После создания cnt-файла его нужно добавить в проект справки. Для этого надо открыть ранее созданный проект справочной системы, нажать кнопку Options и в открывшемся окне на вкладке Files в поле Contents file ввести имя cnt-файла.




* * *

Ну, а теперь - о главном: как все это использовать в программе.

В модуле формы Main укажите:

uses
..., WinHelpViewer, ...;

и добавьте для начала обработчик пункта меню "Справка":

procedure TMainFrm.N12Click(Sender: TObject);
begin
  WinHelp(MainFrm.Handle,'RASHODHELP.HLP',HELP_CONTEXT,0);
end;

Таким образом, при выборе пункта меню "Справка" или нажатии на экран будет выводиться файл справки в том виде, в котором он представлен на самом первом изображении.

Все это хорошо, но наша конечная цель отстоит на один шаг дальше - нам нужна контекстно-зависимая справка. Что это значит? Это означает, что когда фокус (курсор) находится на определенном элементе управления, нам интересно прочитать в справке именно про этот элемент, а не получать на экран стартовую страницу или перечень заголовков в виде содержания.

Поэтому, предлагаю открыть в конструкторе любой пункт меню, например: "Отчетные формы - Оборотная ведомость" и... в инспекторе объектов, в свойстве HelpContxt указать номер контекста (в моем случае это номер 15, см. раздел [MAP] файла *.hlp)


Чтобы убедиться, что мы на правильном пути, нужно компилировать проект Rashod, открыть пункт меню  "Отчетные формы - Оборотная ведомость" и нажать F1. Результат - справка по работе с оборотной ведомостью:


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








Комментариев нет:

Отправить комментарий