Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Delphi: Общие вопросы > Создание файлов CHM


Автор: andrew.virus 13.02.08, 11:00
люди добрые!!!
столкнулся с проблемой генерации файлов справки CHM, а компонентов для работы не нашел ...
может у кого есть компонент TChmFile - а то автор собака не хочет делиться ... согласен и на старую версию, но нужны сорцы на дельфях ...
заранее спасибо если кто что найдет ... ;)

Добавлено
кстати вспомнил ... про dll-ы с исходников знаю ... :whistle: они не нужны

Автор: Selya 13.02.08, 12:24
Генерация файлов справки CHM делается старинной (бесплатной) программой HTML Help Workshop. Легко нахОдится на сайте билла. Не без недостатков, но достойной альтернативы не нашёл, имхо.
Причём тут TChmFile не понял.
Кстати, начиная с Delphi2006 файлы справки .chm подключаются к программе почти так же легко, как и .hlp.
Спросите меня "как".

Автор: Lumen 13.02.08, 17:29
В принципе сам формат не очень сложный. Вот описание формата. Хотя где-то у меня и валялся этот компонент вроде, постараюсь поискать...

Автор: freesend7 13.02.08, 20:14
Очень хороший инструмент для составления различных справок CHM и HLP
или декомпиляции их в исходники
Help & Manual 4.5
сама программа качается с
http://www.helpandmanual.com/

если при компиляции проекта убрать галочку "Удалять исходники", то в каталоге Source останутся файлы проекта, которые потом можно компилировать и другими программами.

Не все файлы декомпилируются полноценно - это особенности справочных форматов.

Ну а если хочется из своей программы - то надо сформировать html файлы статей, скриптов js (для всплывающих подсказок по наведению курсора) и файлы проекта hhp, hhk, hhc...
и запустить Микрософтовский HTML Help Workshop через командную строку ShellExecuteEx(@SEInfo)
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    procedure TForm1.btCompileClick(Sender: TObject);
    var
    SEInfo: TShellExecuteInfo;
    ExitCode: DWORD;
    ExecuteFile, ParamString, LogString, StartInString: string;
    begin
      ParamString:='C:\notepad\notepad.hhp'; // проект
      LogString:='C:\notepad\notepad.log'; //файл отчета/ошибок
      StartInString:='C:\Program Files\HTML Help Workshop'; //каталог компилятора
      ExecuteFile := 'C:\Program Files\HTML Help Workshop\hhc.exe '; // компилятор
      FillChar(SEInfo, SizeOf(SEInfo), 0);
      SEInfo.cbSize := SizeOf(TShellExecuteInfo);
      with SEInfo do
        begin
        fMask := SEE_MASK_NOCLOSEPROCESS;
      Wnd := Application.Handle;
      lpFile := PChar(ExecuteFile);
      {ParamString can contain theapplication parameters.}
       lpParameters := PChar(ParamString);
      {StartInString specifies thename of the working
      directory.If ommited, the current
      directory is used.}
       lpDirectory := PChar(StartInString);
      nShow := SW_SHOWNORMAL;
    end;
    if ShellExecuteEx(@SEInfo) then
    begin
      repeat
      Application.ProcessMessages;
      GetExitCodeProcess(SEInfo.hProcess, ExitCode);
    until (ExitCode <> STILL_ACTIVE) or
    Application.Terminated;
    ShowMessage('Компиляция закончена'); //Не обязателен
    end
    else
      ShowMessage('Error starting Компиляции!');
     
      RichEdit2.Clear;
      RichEdit2.Lines.LoadFromFile(LogString); //Вывод лога от компилятора
    end;

Автор: Profi 14.02.08, 06:40
Цитата Selya @
Спросите меня "как".

Если имееться в виду HTMLHelpViewer, то у меня он почему-то не смог подхватить справку скомпилированную в Help&Manual. Я изпользую StoHtmlHelp.

Автор: andrew.virus 14.02.08, 09:17
Спасибо большое за советы с ПО особенно от "макрософта" но нужен именно компонент с исходниками хочется ручками дойти ... самому ...

Автор: Selya 14.02.08, 10:08
Profi
А чем принципиально отличается CHM, собранный в Help&Manual от собранного в HTML Help Workshop? У меня прекрасно всё получилось подцепить с помощью HTMLHelpViewer в Delphi 2007, и справка вызывается как из меню, так и по F1 в контексте.
Единственное была проблема:
При вызове справки из пункта меню вместо
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Application.HelpSystem.ShowTableOfContents;

надо использовать
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Application.HelpShowTableOfContents;

А при вызове топика справки по индексу вместо
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Application.HelpSystem.ShowContextHelp(IDH_About, '');

надо использовать
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Application.HelpContext(IDH_About);
    // или Application.HelpContext(0); // т.к. IDH_About=0 (в файле с индексами map.h)

Так же прекрасно работает и
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    MessageDlg('Click Help',mtWarning,[mbOk,mbHelp],IDH_Feedback); // где IDH_Feedback имеет индекс 2 в map.h

Автор: Profi 14.02.08, 11:01
Selya
Interface not supported.

Автор: Selya 14.02.08, 12:16
Ну вот, я же писал выше, что лучшей альтернативы HTML Help Workshop я так и не нашёл, несмотря на все его глюки вылеты и "Win3.1" интерфейс :)

Автор: Profi 14.02.08, 13:33
Цитата Selya @
Ну вот, я же писал выше, что лучшей альтернативы HTML Help Workshop я так и не нашёл, несмотря на все его глюки вылеты и "Win3.1" интерфейс :)

Так Help&Manual и использует HTML Help Workshop в кочестве компилятора для chm.

Автор: Selya 14.02.08, 15:57
И ещё такой момент, какой у тебя стоит Internet Explorer? Попробовал сейчас дома сляпать CHM демо проект - не получилось :o Internet Explorer 7
На работе ослика не обновлял - там всё нормально компилится!

Автор: Rennigth 14.02.08, 15:57
Цитата Profi @
Help&Manual

Бывший коллега делал все в Help&Manual, и я без проблем прицеплял chm-ину к проету. Может версия e тебя старая, или не регестрированная. Помню точно были проблемы с Trial версией, пришлось "купить" :)

Автор: Selya 15.02.08, 08:03
Вот написал демо проект Delphi&CHM, всё прекрасно работает. Пользуйте на здоровье и помяните меня добрым словом. ;)

Автор: andrew.virus 15.02.08, 10:46
Selya спасибо за исходничок ;) но нужно не только работать с CHM-файлами но и компилить их самостоятельно без внешнего ПО ... если есть что-то по этой тематике то напиши .... :whistle:

Автор: Selya 15.02.08, 11:12
kkyyhhd.dll была найдена мною на просторах интернета. Для компиляции справки CHM Вам понадобится файл проекта (HHP). Обычно этот формат выглядит так:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    [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 необходимо выполнить следующий код в Вашей программе:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ocedure 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.

Взято с www.interface.ru

Автор: andrew.virus 15.02.08, 12:19
Спасибо ...

Автор: Profi 15.02.08, 15:40
Ошибку нашел: оказываться у меня StoHtmlHelp был в двух местах объявлен, а я только в одном убирал, вот они с HTMLHelpViewer и конфликтовали. Но все равно, StoHtmlHelp мне больше нравится, хоть я и приверженец стандартных компонентов и модулей.

Автор: andrew.virus 17.02.08, 12:36
компилятся файлы прекрасно ... но есть один минус ... я так и не разобрался с технологией компиляции ... скиньте что-нибудь из кодов с описанием сборки ....

Автор: Selya 18.02.08, 06:19
См. мой предыдущий пост. Нам есть ссылка на описание стандарта CHM.

Автор: andrew.virus 21.02.08, 12:29
... описание хорошо а исходник лучше .. как устроен формат знаю но не могу его написать ручками ... :huh:

Автор: Ю_рий 30.11.08, 10:28
Люди! помогите, пожалуйста найти описание формата этой части:
[WINDOWS]
main="Название","Table of Contentc.hhc","Ind.hhk","index.htm","home.htm",,,,,132128,200,8198,[119,78,769,534],0,0,,,,1,0

Меня интересует: ,,132128,
У меня в таком формате: 0x131228
комбинируя разные цифры выводил даже кнопку "журнал", избранное и другие. Но в слепую не могу получить что нужно (например кнопку шрифт).

Автор: tabula rasa 19.12.08, 09:29
Подскажите, пожалуйста, программу для редактирования (исправления и расширения) *.CHM - файлов «на лету».

Автор: Selya 19.12.08, 12:43
Нет такой программки. Максимум, что можно вытащить из CHM-файла при его декомпиляции это собственно html-контент (*.html, *.css и т.д.) и *.hhc - таблица содержимого (Table of contents). Файл CHM-проекта (*.hhp) придётся создать заново, но это не сложно.
Собственно декомпиляцию CHM-файла можно сделать с помощью стандартного Microsoft HTML Help Workshop.

Автор: zender555 28.02.09, 03:33
Наверно часто задают вопрос!!!! Про TCHMFile Но я нигде не могу его найти... Может поможете !!1 Заранее спасибо...

Автор: Selya 08.10.09, 10:24
Вот его домашняя страничка, но он платный.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)