Delphi-int.ru: портал программистов

Вход Регистрация | Забыли пароль?

События

Сегодня:
Вопросы0    Ответы0    Мини-форумы0


Последние:
Вопрос09.08, 09:39 / #6696
Ответ29.03, 23:32 / #6682
Новости8 июля 2023


Сейчас онлайн:
На сайте — 27
На IRC-канале — 2

Ссылки

Работа с 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 »

Рейтинг статьи: 4.00 Голосов: 7 Ваша оценка:

Зарегистрируйтесь/авторизируйтесь,
чтобы оценивать статьи.

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

Ссылка для форумов (BBCode):

Быстрая вставка ссылки на статью в сообщениях на сайте:
{{a:3}} (буква a — латинская) — только адрес статьи (URL);
{{статья:3}} — полноценная HTML-ссылка на статью (текст ссылки — название статьи).

Поделитесь ссылкой в социальных сетях:


Комментарии читателей к данной статье

Пока нет комментариев к данной статье. Оставьте свой и он будет первым.

Оставлять комментарии к статьям могут только зарегистрированные пользователи.