Добрый день.
Как правильно использовать файл справки chm, т.е. программно осуществлять в нём навигацию по отдельным пунктам.
Собирал chm файл с помощью HTML Help WorkShop.
"исходники" хелпа (html) имеются.
Здравствуйте, Аноним, Вы писали:
А>Как правильно использовать файл справки chm, т.е. программно осуществлять в нём навигацию по отдельным пунктам. А>Собирал chm файл с помощью HTML Help WorkShop. А>"исходники" хелпа (html) имеются.
Здравствуйте, Аноним, Вы писали:
А>Как правильно использовать файл справки chm, т.е. программно осуществлять в нём навигацию по отдельным пунктам.
Динамическое подключение справки в формате chm к проекту
Borland Builder C++
Допустим, есть файл справки MyHelp.chm, включающий топики baisik.htm, props.htm и about.chm.
1. Создаем включаемый файл help_id.h, который будет содержать следующие строки:
#define chmBasik 10
#define chmProps 20
#define chmAbout 30
Замечание: ни одна константа не должна быть равна 0
2. далее, в конструкторе формы Props устанавливаем
HelpContext = chmProps
а в конструкторе формы About
HelpContext = chmAbout
3. В заголовочном файле главной формы приложения определяем тип указателя на функцию:
#include <htmlhelp.h>
typedef HWND (WINAPI *HTMLHELPPROC)(HWND, LPCSTR, UINT, DWORD);
в классе главной формы объявляем переменную — указатель на функцию:
private:
HTMLHELPPROC FHtmlHelp;
4. Определяем обработчик главной формы OnHelp такого, примерно, содержания:
bool __fastcall TfrmMain::FormHelp(WORD Command, int Data, bool &CallHelp)
switch(Data)
case chmAbout:
FHtmlHelp(Application->Handle, "MyHelp.chm:/about.htm",
HH_DISPLAY_TOPIC, 0); break;
case chmProps:
FHtmlHelp(Application->Handle, "MyHelp.chm:/props.htm",
HH_DISPLAY_TOPIC, 0); break;
default:
FHtmlHelp(Application->Handle, "MyHelp.chm:/basik.htm",
HH_DISPLAY_TOPIC, 0);
return true;
5. В конструкторе главной формы устанавливаем
Application->OnHelp = FormHelp;
6. В конструкторе главной формы загружаем библиотеку HHCTRL.OCX
FHtmlHelp = 0;
HINSTANCE h = LoadLibrary("hhctrl.ocx"); if(h)
FHtmlHelp = (HTMLHELPPROC)GetProcAddress(h, ATOM_HTMLHELP_API_ANSI); if(!FHtmlHelp) //нет такого метода в библиотеке.
FreeLibrary(h);
Итак, в случае успешной загрузки, приложение будет отображать соответствующие темы справки при нажатии клавиши F1 в соответствующих формах,
или справку basik.htm в других случаях.
Если же на комьютере установлен старый интернет эксплорер (версия меньше 4), то вместо справки будет выдано сообщение
"Невозможно отобразить файл помощи (HHCTRL.OCX)"
Чтобы добавить новую тему справки к программе, достаточно определить соответствую константу в файле help_id.h, установить в нужном месте HelpContext и написать соответствующий case в обработчике справки. Естественно, соответствующий файл в формате xtml должен быть включен в файл MyHelp.chm