Четверг, 02.05.2024
Королевство Delphi
Главное меню
Статьи
Наш опрос
Нашли свой исходник?
Всего ответов: 94
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Статьи » Система » Текст

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

Аналогичным образом можно загружать любой необходимый раздел справки.

Получить ссылку на материал

Категория: Текст | Добавил: Барон (20.12.2011)
Просмотров: 803 | Теги: html, справка | Рейтинг: 0.0/0
[ Пожертвования для сайта ] [ Пожаловаться на материал ]

Если вам помог материал сайта кликните по оплаченной рекламе размещенной в центре

Поиск
Категории раздела
ActiveX [10]
CORBA и COM [16]
Kol и MCK [23]
WinAPI [28]
Компоненты [27]
Работа с Bluetooth [4]
Железо [8]
Текст [18]
Разное [98]
Королевство Delphi © 2010-2024
Яндекс цитирования