Создание CHM-файлов с помощью Delphi

© 2006 Youri Sh.

В последнее время очень популярным форматом справочной документации и электронных книг стал формат 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:

Свойства главного окна: Далее идёт процесс записи файла на диск (собственно создание файла 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

Подробное описание параметров данного формата, а также форматов HHC и HHK, Вы можете посмотреть здесь.

Чтобы создать файл 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.

Copyright© 2006 Youri Sh.  Специально для Delphi Plus


Пожалуйста, оцените статью
Отлично
Хорошо
Средне
Плохо
Очень плохо