Работа с 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);
Аналогичным образом можно загружать любой необходимый раздел справки.
Статья добавлена: 1 июня 2005
Следующая статья: Создание непрямоугольных форм в Delphi »
Зарегистрируйтесь/авторизируйтесь,
чтобы оценивать статьи.
Для вставки ссылки на данную статью на другом сайте используйте следующий HTML-код:
Ссылка для форумов (BBCode):
Быстрая вставка ссылки на статью в сообщениях на сайте:
{{a:3}} (буква a — латинская) — только адрес статьи (URL);
{{статья:3}} — полноценная HTML-ссылка на статью (текст ссылки — название статьи).
Поделитесь ссылкой в социальных сетях:
Комментарии читателей к данной статье
Пока нет комментариев к данной статье. Оставьте свой и он будет первым.
Оставлять комментарии к статьям могут только зарегистрированные пользователи.