C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как вызвать CHM файл
DVV
Отправлено: 21.07.2003, 10:22


Не зарегистрирован







Хочу к своей проге написать CHM хелп. Написал, пытаюсь вызвать из проги. Почитал, что есть такая API функция HTMLHelp().
Перед вызовом функции вставляю строку #include

Компиляция проходит нормально, а при линковке выдает ошибку:
[Linker Error] Unresolved external 'HtmlHelpA' referenced from UNIT1.OBJ

Помогите вызвать хелп.

Иван
Отправлено: 21.07.2003, 11:17


Машинист паровоза

Группа: Участник
Сообщений: 207



Попробуй использовать эту ф-ю:ShellExecute()
с ее помощью ,по-моему, можно что хочешь вызвать

void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShellExecute(0,"open","filename.chm",NULL,NULL,SW_MINIMIZE);
}

Описание этой ф-ии есть в help-е.

Отредактировано Иван — 22/07/2003, 18:38
DVV
Отправлено: 21.07.2003, 14:34


Не зарегистрирован







Иван, идея в принципе понятна.

Непонятным остаются два момента:

1) Как открыть хелп на нужном месте. Я пробовал по разному, не получается:
ShellExecute(0,"open","filename.chm","index.htm",NULL,SW_NORMAL);
ShllExecute(0,"open","filename.chm","::/index.htm",NULL,SW_NORMAL);
ShllExecute(0,"open","filename.chm","::index.htm",NULL,SW_NORMAL);
ShllExecute(0,"open","filename.chm::/index.htm",NULL,NULL,SW_NORMAL);
НИКАК.

2) Если хелп уже открыт, и пользователь повторно нажимает на F1.
Как в этом слусае открыть хелп на нужном месте и в том же окне?
Иван
Отправлено: 21.07.2003, 20:03


Машинист паровоза

Группа: Участник
Сообщений: 207



Есть такая ф-я BOOL MoveWindow ,она-то тебе и нужна

BOOL MoveWindow(
HWND hWnd,
int X,//пози-
int Y,//ция
int nWidth,//раз-
int nHeight,//мер
BOOL bRepaint
);

Пример:

void __fastcall TForm1::Button2Click(TObject *Sender)
{
HWND H;
H=FindWindow(NULL,"имя_окна");//Достаем handle нужного окна
MoveWindow(H,20,20,100,100,true);/*Двигаем его куда надо ,изменяя размеры*/

А если справка уже открыта:
1)определяем если окно открыто
2)Двигаем куда надо

DVV
Отправлено: 22.07.2003, 12:39


Не зарегистрирован







Иван, спасибо. Я тут еще по инету полазил и нашел то что искал.
Проверил — работает. По моему это более изящий способ.


Как подключать файл помощи формата *.chm и делать контекстные справки, используя этот файл в C++Builder ?

A (Lom):

Качаем Microsoft HTMLHelp Workshop

Устанавливаем

Ищем в Windows\System hhctrl.ocx

Делаем библиотеку для него: implib hhctrl.lib hhctrl.ocx

Подключаем эту библиотеку к своему проекту

Вызовы осуществляем так, как написано в MS хелпе

Сам chm либо делаем руками (набиваем где-нибудь html странички и компилируем их Workshop'ом), либо берем какую-нибудь программу для компиляции хелпов — их достаточно есть на всяких сайтах с софтом. Еще можно поискать компонент на Torry.

PS DVV
1- hhctrl.lib нужно подключать в Project Manager

2 — Вызов выглядит так:
HWND hwnd =HtmlHelp(GetDesktopWindow(),"C:\\WINDOWS\\Help\\calc.chm::/calc_transfer.htm",HH_DISPLAY_TOPIC,NULL);
Иван
Отправлено: 22.07.2003, 13:29


Машинист паровоза

Группа: Участник
Сообщений: 207



Твое предложение попробую,но не меньше ли мороки первым способом,и потом: как
на счет позиции окна, и повторного вызова справки?
Guest
Отправлено: 23.07.2003, 10:27


Не зарегистрирован







Иван, насчет позиции окна на экране просто не интересовался.
При вызове помощи появляется окно, при повторном вызове его позиция и размеры сохраняются. Мне этого достаточно.
Повторно справку можно вызывать она нормально открывается, в том числе и в уже открытом окне.

Класс!

Вернуться в Вопросы программирования в C++Builder