как правильно работать с CHM
От: Аноним  
Дата: 18.05.05 20:14
Оценка:
Добрый день.
Как правильно использовать файл справки chm, т.е. программно осуществлять в нём навигацию по отдельным пунктам.
Собирал chm файл с помощью HTML Help WorkShop.
"исходники" хелпа (html) имеются.
Как правильно работать с CHM
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 19.05.05 03:38
Оценка:
#Имя: FAQ.delphi.chm
Здравствуйте, Аноним, Вы писали:

А>Как правильно использовать файл справки chm, т.е. программно осуществлять в нём навигацию по отдельным пунктам.

А>Собирал chm файл с помощью HTML Help WorkShop.
А>"исходники" хелпа (html) имеются.

Delphi and C++ Builder HH Kit
Re: как правильно работать с CHM
От: Gamma  
Дата: 19.05.05 06:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как правильно использовать файл справки 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)

if(!FHtmlHelp)
ShowMessage("Невозможно отобразить файл помощи (HHCTRL.OCX)");
CallHelp = false; return false;

if(Command != HELP_CONTEXT) CallHelp = false; return false;

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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.