Работа с HTML-справкой в программах

Удобно вендрять данную систему в самом начале разработки программы. Но я опишу способ внедрения в целом.

В раздел глобальных переменных добавьте следующие переменные для работы со справкой:


_HHwinHwnd: HWND = 0; HHCtrlHandle: THandle = 0; mHelpFile: String;  

Сразу после раздела глобальных переменных и перед implementation вставьте следующие строки кода:


var  
  HtmlHelpA: function(hwndCaller: HWND; pszFile: PAnsiChar; uCommand: UInt; dwData: DWORD): HWND; stdcall;  
  HtmlHelpW: function(hwndCaller: HWND; pszFile: PWideChar; uCommand: UInt; dwData: DWORD): HWND; stdcall;  
  HtmlHelp: function(hwndCaller: HWND; pszFile: PChar; uCommand: UInt; dwData: DWORD): HWND; stdcall;  
   
const  
  hhctrlLib = 'hhctrl.ocx';  
  HH_DISPLAY_TOPIC = $0000;  
  HH_HELP_CONTEXT = $000F;  
  HH_CLOSE_ALL = $0012;  

Где-нибудь в самом начале раздела implementation вставьте код:


const hhPathRegKey = 'CLSID\{adb880a6-d8ff-11cf-9377-00aa003b7a11}\InprocServer32';  
   
function GetPathToHHCtrlOCX: string;  
var Reg: TRegistry;  
begin  
  result := ''; //default return  
  Reg := TRegistry.Create;  
  Reg.RootKey := HKEY_CLASSES_ROOT;  
  if reg.OpenKeyReadOnly(hhPathRegKey) then  
    begin  
    result := Reg.ReadString(''); Reg.CloseKey;  
    if (result <> '') and (not FileExists(result)) then result := '';  
  end;  
  Reg.Free;  
end;  
   
procedure LoadHtmlHelp;  
var OcxPath: string;  
begin  
  if HHCtrlHandle = 0 then  
  begin  
    OcxPath := GetPathToHHCtrlOCX;  
    if (OcxPath <> '') and FileExists(OcxPath) then  
    begin  
      HHCtrlHandle := LoadLibrary(PChar(OcxPath));  
      if HHCtrlHandle <> 0 then  
      begin  
        @HtmlHelpA := GetProcAddress(HHCtrlHandle, 'HtmlHelpA');  
        @HtmlHelpW := GetProcAddress(HHCtrlHandle, 'HtmlHelpW');  
        @HtmlHelp := GetProcAddress(HHCtrlHandle, 'HtmlHelpA');  
      end;  
    end;  
  end;  
end;  
   
procedure UnloadHtmlHelp;  
begin  
  if HHCtrlHandle <> 0 then  
  begin  
    FreeLibrary(HHCtrlHandle);  
    HHCtrlHandle := 0;  
  end;  
end;  

В OnCreate главной формы приложения добавьте:


mHelpFile := ExtractFilePath(ParamStr(0)) + 'Help.chm';  
mHelpFile := ExpandFileName(mHelpFile);  
LoadHtmlHelp;  
if HHCtrlHandle = 0 then  
  ShowMessage('HTML-справка не поддерживается системой');  

В обработчике пункта меню для загрузки справки (например, Справка - Содержание) пишем:


if HHCtrlHandle = 0 then  
  showmessage('Справка не поддерживается')  
else  
  HtmlHelp(Handle,PChar(mHelpFile+'::/Pages/topic1.htm'),HH_DISPLAY_TOPIC,0);  

При выходе из программы необходимо закрыть все открытые окна справки, поэтому в OnClose главной формы добавляйте строку:


HtmlHelp(0, nil, HH_CLOSE_ALL, 0);  

Часто в программах делают другие пункты меню, соответствующие разделам справки. Вот как их загружать:


HtmlHelp(Handle,PChar(mHelpFile+'::/путь/страница.htm'),HH_DISPLAY_TOPIC,0);  

Аналогичным образом можно загружать любой необходимый раздел справки.
Теги:
HTML-справка
Добавлено: 02 Августа 2018 07:41:59 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...