Вопрос: Help а-ля CHM. С помощью чего и как?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Вопрос: Help а-ля CHM. С помощью чего и как?

Сообщение kotompazb » 20.06.2019 21:23:30

Собственно отрыл тут утраченные (оказалось, что нет) исходники одной моей поделки 2009(!) года.
Проблема в том, что в ней был большущий хелп в виндовом формате hlp (собственно исходники в виде rtf тоже сохранились).
Задача сделать из этого всего справочку по типу chm. Однако хочется сами тексты хранить просто в виде html+css, и иметь возможность переходить в нужное место хелпа по #ссылкам.
Как это ваще делается? Подозреваю, что должны помочь HTMLBrowserHelpViewer и HTMLHelpDatabase с вкладки System. Но с чем их едят не могу понять - ткните носом.
Спасибо.
Аватара пользователя
kotompazb
постоялец
 
Сообщения: 151
Зарегистрирован: 21.06.2012 13:03:39
Откуда: Novosibirsk, xUSSR

Re: Вопрос: Help а-ля CHM. С помощью чего и как?

Сообщение sign » 21.06.2019 07:07:43

Я использую THtmlViewer.
Ссылки и картинки работают.

Справка по продукту:

Код: Выделить всё
function TfShowProduct.SetData(Data: PPrice): Boolean;
var S, sHead, sPic, sBody, sEnd: String;
begin
  Result := False;
  if not Assigned(Data) then Exit(False);
  if Data^.IsTitle then Exit(False);
  sHead :=  '<html>' + sLineBreak +
            '<head>' + sLineBreak +
            '  <meta http-equiv="content-type" content="text/html; charset=utf-8">' + sLineBreak +
            '</head>' + sLineBreak +
            '<body text="#000000" bgcolor="#ffffff" background="">';
  S := CNameDir[Data^.Firm];
  sPic := '';
  if S > '' then begin
    sPic := Format('%s%s\pic\%d.png', [PathToPicture, S, Data^.UNP]);
    if not FileExists(sPic) then begin
      sPic := Format('%s%s\pic\%d.jpg', [PathToPicture, S, Data^.UNP]);
      if not FileExists(sPic) then sPic := '';
    end;
  end;
  if sPic > '' then begin
    sPic := Format('<img src="%s" border=0 align=left hspace=20>', [sPic]);
  end;
  sBody := Data^.Note;
  sEnd :=   '</body>' + sLineBreak + '</html>';
  FText := sHead + sLineBreak + sPic + sLineBreak + sBody + sLineBreak + sEnd;
  HtmlViewer1.LoadFromString(FText);
  Result := True;
end;


Для загрузки html текста THtmlViewer имеет:
Код: Выделить всё
    procedure LoadFromDocument(Document: TBuffer; const Reference: ThtString; DocType: THtmlFileType = HtmlType);
    procedure LoadFromFile(const FileName: ThtString; DocType: THtmlFileType = HtmlType);
    procedure LoadFromStream(const AStream: TStream; const Reference: ThtString = ''; DocType: THtmlFileType = HtmlType);
    procedure LoadFromString(const S: ThtString; const Reference: ThtString = ''; DocType: THtmlFileType = HtmlType);
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Вопрос: Help а-ля CHM. С помощью чего и как?

Сообщение serbod » 22.06.2019 05:48:55

С помощью chmmaker. Он не только создает, но и читает CHM. В принципе там все просто. CHM по сути архив сжатых файлов и внем дополнительно есть:
- оглавление в виде дерева (Table of content, TOC)
- оглавление в виде списка (Index)
- назначение номеров разделам оглавления (Alias)
- полнотекстовый поиск (Search)
- настройки внешнего вида браузера справки (Windows)

Есть кроссплатформенный браузер справки lhelp или стандартный виндовый. А можно и программно читать оглавление, делать поиск, извлекать файлы и отображать их в любом HTML браузере или компоненте. Пример чтения CHM можно посмотреть в главной форме chmmaker, там ничего сложного.

Стандартный лазарусовский lhelp и chmmaker давно не развивается. Самый свежий здесь: https://github.com/serbod/lazhelp
Аватара пользователя
serbod
постоялец
 
Сообщения: 449
Зарегистрирован: 16.09.2016 11:03:02
Откуда: Минск


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 49

Рейтинг@Mail.ru