В последнее время очень популярным форматом справочной документации и электронных книг стал формат CHM. Это связано с удобством этого формата по сравнению с форматом HLP, а также с продвижением этого формата самой MICROSOFT. В данной статье, я хочу рассказать, как создать файлы справки CHM с помощью программ, написанных на Delphi, но без помощи таких общеизвестных утилит, как hhc.exe и hha.dll.
Способ первый: С помощью компоненты TCHMFile
TCHMFile – это единственная VCL компонента для компиляции и декомпиляции нескольких HTML документов в один CHM-файл.
Разберём процесс компиляции CHM документа на примере следующего кода:
procedure Compile;
var
F: TChmFile;
begin
F := TChmFile.Create(c:\test.chm, omCreateWrite);
with TChmHeader.Create do
begin
Toolbar := True;
ToolbarCaptions :=True;
Buttons := [cbHome, cbBack];
Title := Test;
Default file := index.htm;
TocFile := Table of Contents.hhc;
IndexFile := Ind.hhk;
PaneVisible := True;
PaneTocTab := True;
PaneFavTab := True;
PaneIndexTab := True;
PaneTabPos := ctpTop;
WndName:=main;
PaneWidth:=200;
Left:=100;
Top:=100;
Height:=500;
Width:=800;
Write(F);
Free;
end;
F.AddFile(index.htm, C:\test\index.htm);
F.AddFile(images\pic.jpg, C:\test\images\pic.jpg);
F.Free;
end.
Эта процедура создаёт CHM-файл, путь которого c:\test.chm, а его свойства устанавливаются с помощью TChmHeader:
Toolbar – параметр, с помощью которого в CHM-файле показывается панель управления;
ToolbarCaptions – параметр, указывающий, что необходимо отображать подписи к кнопкам;
Buttons – здесь указываются кнопки, которые будут отображаться на панели управления. Возможные варианты кнопок: cbExpand (Скрыть), cbBack (Назад), cbForward (Далее), cbStop (Остановить), cbRefresh (Обновить), cbHome (Домашняя страница), cbZoom (Размер), cbOptions (Параметры), cbPrint (Печать), cbJump1 (Первая пользовательская кнопка), cbJump2 (Вторая пользовательская кнопка);
Title – название справочной системы, которое будет отображаться в заголовке главного окна;
Default file – имя страницы по умолчанию, которая открывается сразу после загрузки файла;
TocFile – имя файла Содержания справочной системы;
IndexFile – имя файла Индекса справочной системы;
PaneVisible – параметр, указывающий отображать панели;
PaneTocTab – параметр, указывающий на создание панели Содержание;
PaneFavTab – параметр, указывающий на создание панели Избранное;
PaneIndexTab – параметр, указывающий на создание панели Указатель;
PaneTabPos – местоположение вкладок на панели навигации. Возможные варианты: ctpTop (Сверху), ctpLeft (Слева), ctpBottom (Снизу);
Свойства главного окна:
WndName – название окна, в котором откроется справка во время просмотра. Желательно задавать значение main;
PaneWidth – ширина навигационной панели в пикселях (по умолчанию это значение равно 250);
Left – положение главного окна справки слева, указывается в пикселях;
Top – положение главного окна справки сверху, указывается в пикселях;
Height – высота главного окна справки, указывается в пикселях;
Width – ширина главного окна справки, указывается в пикселях;
Далее идёт процесс записи файла на диск (собственно создание файла CHM) и добавление в справочную систему всех необходимых файлов (HTML документов, рисунков, относящихся к этим документам и др.).
Способ второй: С помощью динамической библиотеки kkyyhhd.dll
kkyyhhd.dll была найдена мною на просторах интернета. Для компиляции справки CHM Вам понадобится файл проекта (HHP). Обычно этот формат выглядит так:
[OPTIONS]
Compatibility=1.1 or later
Compiled file=Справка.chm
Contents file=Table of Contents.hhc
Default window=main
Default topic=index.htm
Full-text search=Yes
Index file=Ind.hhk
Language=0x419 Русский
[WINDOWS]
main=Название,Table of Contentc.hhc,Ind.hhk,index.htm,home.htm,,,,,132128,200,8198,[119,78,769,534],0,0,,,,1,0
[FILES]
C:\test\index.htm
C:\test\home.htm
C:\test\lis1.htm
Чтобы создать файл CHM необходимо выполнить следующий код в Вашей программе:
procedure AddLog(Memo: TMemo; SStr: PChar; Addn:bool=false);
begin
Memo.Text := Memo.Text + SStr;
if Addn then Memo.Text := Memo.Text + #13#10;
end;
procedure pLogString(pMsg: PChar); stdcall;
begin
AddLog(Form1.Memo1,pMsg);
end;
function pProgress(pFile: PChar):bool; stdcall;
begin
AddLog(Form1.Memo2,pFile,true);
Result := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Had: HWND;
hhp: function(pszHhpFile: PCHAR; pLogString: Pointer; pProgress: Pointer):bool;stdcall;
begin
Had := LoadLibrary(kkyyhhd.dll);
if Had <> 0 then
begin
@hhp := GetProcAddress(Had, CompileHHP);
if @hhp <> nil then
hhp(PCHAR(Путь к файлу HHP),@pLogString,@pProgress);
FreeLibrary(Had);
end;
end;
При этом в папке с файлом проекта HHP появится справка CHM, а в самой программе в TMemo Вы увидите детальный log, примерно такой же как в программе Microsoft HTML Help Workshop.
На этом пожалуй всё. Надеюсь эта статья многим поможет быстро создавать и использовать документацию в формате CHM.
Свежие комментарии