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 |
|
Не зарегистрирован
|
Иван, насчет позиции окна на экране просто не интересовался.
При вызове помощи появляется окно, при повторном вызове его позиция и размеры сохраняются. Мне этого достаточно.
Повторно справку можно вызывать она нормально открывается, в том числе и в уже открытом окне.
Класс!
|
|
|