В этой главе мы рассмотрим принципы, по которым подключается файл справки к
вашему приложению.
CLX не обеспечивает прямую поддержку отображения файла справки. Он обеспечивает
механизм, с помощью которого запросы об отображении справки вызывают внешние
программы, отображающие справочные файлы не, как Man, Info или HyperHelp). Кроме
того, для работы этого механизма на разработчика возлагается задача по созданию
класса, который поддерживает интерфейс ICustomHeipviewer (и, по желанию, один
из интерфейсов-потомков ICustomHeipviewer). После чего необходимо зарегистрировать
экземпляр данного класса с помощью глобального менеджера помощи (global Help
Manager).
Менеджер помощи содержит список всех зарегистрированных в системе программ для
отображения файлов помощи и передает ему запросы вашего приложения. Запросы
передаются в две фазы:
запрашивается каждая из программ списка на возможность поддержки ключевых слов
или содержания;
запрос от приложения передается на выполнение той программе, которая подтвердила
поддержку данного запроса.
Примечание
Если более чем одна программа поддерживает данный формат ключевых слов или содержания,
то менеджер помощи отобразит окно, с помощью которого пользователь сам сможет
выбрать приложение для просмотра файла справки. В противном случае, файл справки
отобразится в первой из программ, поддерживающих данный формат ключевых слов.
Итак, CLX обеспечивает связь между вашим приложением и программой просмотра файлов справки с помощью интерфейсов. Эти интерфейсы описаны в файле Helplntfs.pas, который также содержит код, реализующий менеджер помощи (см. Приложение 1):
IcustomHelpviewer обеспечивает поддержку отображения помощи по заданному ключевому слову, а также отображения оглавления файла справки;
lExtendedHeipviewer обеспечивает поддержку отображения помощи по номеру контекста справки, а также отображения тем. В большинстве справочных систем функция темы в обеспечении ключевых слов высшего уровня (например, в справочной системе Kylix слово intTostr является ключевым СЛОВОМ, НО строка String manipulation routines является названием темы);
IspecialwinHeipViewer обеспечивает поддержку ответа на специализированные сообщения WinHelp в случае, если приложение запущено под Windows. В поддержке данного интерфейса нуждаются только те приложения, которые работают в среде Windows. Более того, это необходимо, когда приложение использует нестандартные сообщения WinHelp;
IHeipManager обеспечивает механизм для обратной связи программы просмотра файлов помощи с менеджером помощи вашего приложения. Этот механизм необходим, если программа просмотра помощи нуждается в дополнительной информации;
IHeipSystem обеспечивает механизм, с помощью которого TApplication отсылает запросы в систему помощи. TApplication получает экземпляр объекта, который Поддерживает два интерфейса IHelpSystemH IHeipManager;
IHeipSelector обеспечивает механизм, с помощью которого система помощи может
использовать пользовательский интерфейс для того, чтобы узнать у пользователя,
какую программу необходимо применить для просмотра файлов справки, если более
чем один просмотрщик файлов справки может отображать данный файл.
Интерфейс IcustomHelpviewer содержит три типа методов:
методы, использующиеся для связи информации системного уровня с менеджером помощи;
методы для показа файла помощи, основанной на ключевых словах;
методы для отображения содержания файла справки.
Интерфейс IcustomHelpviewer обеспечивает три функции, которые используются
для связи менеджера помощи и системной информации:
ICustomHelpViewer. GetViewerName: String; - Вызывается, когда менеджер помощи
должен узнать имя программы для показа файлов справки (например, когда приложение
запрашивает список всех зарегистрированных в системе программ просмотра файлов
помощи). Данная функция возвращает информацию в строковой форме (string);
ICustomHelpViewer.NotifylD(const ViewerlD: Integer); - вызывается немедленно после регистрации программы для просмотра файлов помощи, чтобы присвоить ей уникальный идентификационный номер;
IfclCustomHelpViewer.shutDown; - вызывается из менеджера помощи для уведомления программы - просмотрщика помощи в том, что менеджер отключается и ресурсы, занятые просмотрщиком помощи, должны быть освобождены.
Интерфейс IHeipManager позволяет просмотрщику помощи передавать четыре запроса:
запрос о дескрипторе окна активного оконного компонента;
запрос об имени файла помощи, который необходим для данного оконного компонента;
запрос о пути к файлу справки;
запрос на подтверждение о том, что просмотрщик помощи завершил свое выполнение.
Рассмотрим методы, позволяющие выполнить все вышеописанное:
IHeipManager. GetHandle : Longlnt; - вызывается просмотрщиком файлов помощи,
если он нуждается в дескрипторе текущего оконного компонента;
IHeipManager. GetHelpFile: String; - Вызывается просмотрщиком помощи, если ему
необходимо узнать имя файла помощи, который назначен активному оконному компоненту;
IHeipManager. GetHelpPath: String; - Вызывается просмотрщиком помощи, если ему
нужно узнать путь к файлу справки. Данная информация не предоставляется по умолчанию,
т. к. многие из внешних систем помощи способны самостоятельно определить путь
с помощью переменных среды или другими способами;
IHeipManager.Release; - вызывается для уведомления менеджера помощи об отключении
просмотрщика помощи. Данный метод никогда не должен вызываться в ответ на запрос,
приходящий из icustomHeipViewer. shutDown. Метод используется только для уведомления
менеджера помощи о неожиданном разрыве соединения.
Запросы на отображение разделов справки обычно идут по ключевому слову, в этом
случае просмотрщик помощи обеспечивает помощь, основанную на строке текста.
Второй вариант основан на контексте справки, в этом случае просмотрщик обеспечивает
помощь, основанную на числовом идентификаторе. Последний вариант является обычным
вариантом предоставления справки в приложениях, работающих в среде Windows и
использующих систему WinHelp. Несмотря на то, что CLX поддерживает данный вариант,
он не рекомендуется, т. к. большинство справочных систем Linux не поддерживают
его.
Интерфейс lCustomHeipViewer необходим для обеспечения поддержки помощи по ключевому
слову. Интерфейс lExtendedHelpviewer необходим для поддержки контекстно-зависимой
помощи.
Интерфейс ICustomHeipViewer предоставляет три метода для работы со справкой
по ключевому слову:
ICustomHeipViewer.CanShowKeyword(const HelpString: String): Integer; - метод,
который вызывается менеджером помощи. Данный метод опрашивает каждый из зарегистрированных
в системе просмотрщиков помощи на возможность отображения справки по ключевому
слову. Ожидается, что просмотрщик даст ответ в виде целого числа, которое указывает,
сколько различных страниц справки может отобразить данный просмотрщик в ответ
на запрос менеджера помощи. Просмотрщик может использовать любые методы для
определения этого числа. Если просмотрщик не поддерживает помощь по данному
ключевому слову, он возвращает нулевое значение. Отрицательные значения, возвращаемые
просмотрщиками, в настоящее время расцениваются как нулевые, но в будущем могут
использоваться для каких-либо других целей;
ICustomHeipViewer.GetHelpStrings(const HelpString: String):
TStringList; - вызывается менеджером помощи если более одного просмотрщика способны
отобразить помощь для данного ключевого слова. При вызове данного метода ожидается,
что просмотрщик возвратит значение типа TStringList. Строки возвращаемого списка
должны указывать на страницы, которые содержат данное ключевое слово, но характеристики
данного списка могут отличаться у разных просмотрщиков. В случае, когда ответ
приходит от просмотрщика HyperHelp, список строк всегда содержит всего одну
ссылку на каждую из страниц, в которой есть ключевое слово;
ICustomHeipViewer.ShowHelp(const HelpString: String); - вызывается менеджером
помощи, если необходим просмотрщик помощи для отображения справки по ключевому
слову.
Интерфейс ICustomHeipViewer обеспечивает два метода, связанных с отображением
содержания файла справки:
CanShowTableOfContents;
ShowTableOfContents.
Теоретически их работа схожа с работой методов просмотра помощи по ключевому
слову: менеджер помощи сначала запрашивает все просмотрщики с помощью метода
ICustomHelpViewer.CanShowTableOfContents: Boolean;, затем вызывает конкретную
программу-просмотрщик с помощью вызова метода ICustomHeipViewer.ShowTableOfContents.
Для того чтобы менеджер помощи мог работать с интерфейсами ICustomHeipViewer,
lExtendedHelpviewer, ISpecialWinHelpViewer И
IhelpSelector, необходимо осуществить регистрацию объекта справочной системы.
Модуль, который содержит описание данного объекта, должен иметь в списке пользуемых
модулей модули Heipintfs и QForms. Экземпляр объекта долен быть объявлен в секции
var раздела реализации (implementing) модуля.
Вместе со средой Kylix поставляются файлы, помогающие создавать систему лощи
для ваших приложений. Эти файлы находятся в каталоге
/kylix/demos/helpviewers/.
Здесь располагаются три основных файла:
HelpViewers.dpk
ManViewer.pas
WinHelpViewer.pas
Прежде чем рассмотреть эти три файла, отметим, что справочная система имеет
подключаемую архитектуру, которая работает через интерфейс IhelpSystem.
Модуль winHelpViewer обеспечивает связь между приложением и HyperHelp (эмулятором
WinHelp под Linux).
Модуль ManViewer обеспечивает связь между приложением и системой Linux man.
Пакет Help Viewers представляет собой пример пакета, который содержит Модуль
ManViewer. Этот пакет зарегистрирован как пакет времени разработки в IDE и обеспечивает
связь IDE со страницами man. Данный пакет не может быть использован во время
работы приложения. Листинги всех трех файлов приводятся в конце книги, в Приложении
2.