Не так давно я писал в блоге о разработке chm-справки для своих Delphi-программ. Сегодня рассмотрим те возможности, которые предоставляет нам Lazarus для разработки справочной системы программы. В целом, поработав некоторое время в различных операционных системах невольно приходит на ум мысль вообще забыть про всякого рода chm, hlp и прочие файлы справок, а сделать простую справку из набора html-файлов, избавив себя тем самым от головной боли типа “А запуститься справка на том компьютере? А на этом?”, если нет, то “Какой формат справки сделать?” и т.д.
С одной стороны простые html-файлы значительно проигрывают в удобстве той же справке сделанной в виде chm – нет удобного поиска, индекса и т.д. и т.п. Но с другой стороны – нет проблем с запуском. И как раз для работы с HTML-справкой в LCL (Lazarus Component Library) есть два довольно простых компонента:THTMLHelpDatabase и THTMLBrowserHelpViewer. Первый предназначен для хранения информации по справочной системы, а второй — для её (информации) представления пользователю.
В начале рассмотрим довольно простой пример как быстро и без особых хлопот внедрить справочную систему в программу, созданную в Lazarus.
1. Подготовка справки
В принципе материал этой части статьи больше относится к работе с HTML, чем к Lazarus и FreePascal. Все, что от Вас требуется – это создать в директории с Вашим проектом ещё одну, например, с названием help и в этой директории разместить все html-файлы справочной системы. Что содержит справка – сейчас совершенно не важно.
2. Работа с THTMLHelpDataBase
Компонент THTMLHelpDataBase управляет содержимым. В качестве содержимого может выступать как набор HTML-файлов (как в нашем случае) так и XML-файлы, созданные утилитой fpdoc или chm-файлы.
THTMLHelpDataBase имеет всего 5 свойств из которых 2 (Name и Tag) не требуют от нас какого-либо пристального изучения – про них мы и так знаем. Три остальных – это:
AutoRegister: boolean – если значение этого свойства True, то справочная система создается автоматически и отпадает необходимость впоследствии выполнять метод RegisterSelf для создания необходимых элементов справочной системы.
BaseURL: string – путь к файлам справочной системы. В нашем путь можно задавать как относительно директории приложения, например, так: file://help/, так и задавать абсолютный пусть, например, C:\myprog\help. Так же, можно указывать и URL’ы.
KeywordPrefix: string – определяет с какой подстроки должны начинаться ключевые слова (свойство HelpKeyword компонентов).
Теперь создадим новое приложение, разместим на форме компонент THTMLHelpDataBase и установим для него следующие свойства:
AutoRegister = true
BaseURL = ‘file://help/’
KeywordPrefix = ‘help/’
Сохраним проект и в директории с проектом создадим ещё одну с названием help в которую поместим несколько html-файлов, которые будем отображать в зависимости от запросов пользователя.
3. Работа с THTMLBrowserHelpView.
По большому счёту необходимость использования этого компонента может потребоваться только для того, чтобы сократить время на разработку и буквально в два клика мышкой создать просмотрщик HTML-файлов, основанный на работе с Web-браузером, установленным в системе. При желании, можно обойтись и без этого компонента, создав свой просмотрщик на основе базового класса THelpViwer. Но так как сегодня мы рассматриваем способ быстрого создания справочной системы, то воспользуемся этим компонентом.
У THTMLBrowserHelpView определены следующие свойства:
AutoRegister: boolean — как и в случае с предыдущим компонентом, если это свойство равно True, то просмотрщик автоматически регистрируется в системе.
BrowserParams: string – параметры командной строки для браузера. По умолчанию свойство равно %s. Т.е. это означает, что при запуске браузера ему будет передаваться в параметрах строка – URL или путь до HTML-файла.
BrowserPath: string – путь до исполняемого файла браузера. Вообще не желательно указывать этот путь сразу же в свойствах компонента, т.к., сами понимаете, браузер может быть установлен и не ам где Вы ожидаете его увидеть на компьютере пользователя. Поэтому к этому свойству мы ещё вернемся.
Размещаем компонент THTMLBrowserHelpView на форме нашего приложения и устанавливаем свойство AutoRegister равным True. И теперь займемся работой со свойством BrowserPath. Вообще-то у компонента определен один замечательный метод:
FindDefaultBrowser(out Browser, Params: string);
Который возвращает путь и параметры запуска браузера по умолчанию. Но вот сейчас его попробовал использовать и метод возвращает в browser пустую строку. Раньше работал :) Не работает и бог с ним, воспользуемся более грубым, но тем, не менее рабочим способом. Если на компьютере используется ОС Windows, то в BrowserPath необходимо указать путь до rundll32.exe, например:
C:/windows/system32/rundll32.exe
а в параметрах следующую строку:
url.dll,FileProtocolHandler %s
Всё, что по большому счёту необходимо – это определить путь до Windows. В случае с Ubuntu (Linux) строка для BrowserPath может выглядеть как:
usr/bin/xdg-open
а в BrowserParams:
%s
Теперь вне зависимости от того сколько браузеров есть у пользователя на компьютере все HTML-файлы справки будут запускаться в браузере по умолчанию.
И остается только продемонстрировать как работает наша простая справочная система. Для этого достаточно установить следующие свойства главной формы:
HelpType = htKeyword
HelpKeyword = ‘help/index.html’
Теперь запустите приложение и нажмите F1 – в браузере откроется страничка Index.html (если она у Вас, конечно была в директории help). Аналогичным образом можно настроить и показ справки для других компонентов, расположенных на формах Вашего приложения.
Так, буквально за пять минут мы создали с вами простейшую справочную систему для приложения. Как я уже сказал в начале, эта система не лишена некоторых недостатков, но, для первого раза сойдет :).
Нифига не работает, лучше написал бы какое событие для кнопки сделать, а вообще в папке с лазарус есть htmlhelp_ipro, в examples. Там пиздатая справочная система.