Страница: 1 |
Страница: 1 |
Вопрос: Не удается вывести нужную страницу помощи
Добавлено: 20.08.04 17:35
Автор вопроса: П.С. | Web-сайт:
Проблема с помощью в программе, созданной на Visual Basic 6.0:
Указываю имя файла справки в свойствах проекта (например, help.chm), указываю в свойстве формы HelpContextID номер раздела справки (например, 10), но при нажатии F1 открывается всегда начальная страница справочной системы.
Файл справки создан в программе HelpWorkShop 1.1. Пробовал подключать "сторонние" файлы справок, но
тоже выдается только главная страница.
В чем тут дело? Помогите, пожалуйста, если не затруднит.
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #1
Добавлено: 20.08.04 20:14
По моему VB6 с HTML Help не работает. Попробуй использовать специальные API для него.
Номер ответа: 2
Автор ответа:
vb_lord
Вопросов: 7
Ответов: 45
Профиль | | #2
Добавлено: 20.08.04 21:54
Привет. Мой ответ не по теме, но может заинтересуешся?
Что думаешь о создании хелпа в виде HTML(HTM)? Многим нравится, и программы никакие не нужны, и метод HelpContextID можно реализовать как угодно.
Удачи
Номер ответа: 3
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #3
Добавлено: 20.08.04 23:23
А ты в своём файле справки создавал секции ALIAS и MAP ? Чтобы выбирать произвольный раздел справки, необходимо определить alias'ы тем. Без этого не получится. В файле .hhp должны быть такие вещи:
[ALIAS]
IDH_Тема_1=Название файла темы №1.htm
IDH_Тема_2=Название файла темы №2.htm
[MAP]
#Define IDH_Тема_1 1
#Define IDH_Тема_2 2
Номер ответа: 4
Автор ответа:
П.С.
ICQ: 225019134
Вопросов: 36
Ответов: 41
Web-сайт:
Профиль | | #4
Добавлено: 21.08.04 15:42
Спасибо, все сделал, как написано, скомпилировал заново файл справки, только возникла новая проблема,
как вывести справочный файл формата *.chm с нужной рубрикой? При нажатии F1 выполняется строка:
nRet = OSWinHelp(Me.hwnd, App.Path & "\" & App.HelpFile, 3, 0), но эта строка может выводить
только справку формата *.hlp (попробовал), а при *.chm ничего не происходит вообще.
Функция OSWinHelp была создана мастером создания приложений и описана так:
Private Declare Function OSWinHelp% Lib "user32" Alias "WinHelpA" (ByVal hwnd&, ByVal HelpFile$, ByVal wCommand%, dwData As Any)
Когда я попробовал описать эту функцию с помощью API Text Viewer, то получилось следующее:
Public Declare Function WinHelp Lib "user32" Alias "WinHelpA" (ByVal hwnd As Long, ByVal lpHelpFile As String, ByVal wCommand As Long, ByVal dwData As Long) As Long
Но программа на эту строку вообще ругается.
До обращения на форум я использовал строку:
Shell "hh.exe help.chm", vbNormalFocus
Но нужный раздел справки она естественно не выведет.
Что можно сделать? Подскажите, пожалуйста.
Номер ответа: 5
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #5
Добавлено: 21.08.04 17:14
Вот нашёл у себя на винте. Кстати cresta отвечал кому то в теме "Как *chm-фаил(справку) вызывать в VB проект?".
Declare Function HtmlHelpLongArg Lib "hhctrl.ocx" _
Alias "HtmlHelpA" (ByVal hwndCaller As Long, _
ByVal pszFile As String, ByVal uCommand As Long, _
ByVal dwData As Long) As Long
Public Const HH_HELP_CONTEXT = &HF
On Error Resume Next
 im iRetCode As Long
iRetCode = HtmlHelpLongArg(Me.hwnd, App.Path & "\Справка.chm", HH_HELP_CONTEXT, Me.ActiveControl.HelpContextID)
PS: На самом деле настоящее название внешней функции идёт после Alias, а то что в объявленни - это псевдоним. Псевдоним может быть какой хочешь.
Например в этом случае настоящим именем будет Alias "HtmlHelpA", а псевдонимом HtmlHelpLongArg.
Ты можешь объявить и так:
Declare Function ЛюбоеНовоеИмя Lib "hhctrl.ocx" Alias "HtmlHelpA" ...
Номер ответа: 6
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #6
Добавлено: 21.08.04 18:40
В коде, что состряпал визард, замени
Private Declare Function OSWinHelp% Lib "user32" Alias "WinHelpA" (ByVal hwnd&, ByVal HelpFile$, ByVal wCommand%, dwData As Any)
на то, что написал CyRax.
И ещё: Me.ActiveControl.HelpContextID - это должно быть значение, которое ты определил в секции MAP, например для #Define IDH_Тема_1 должна быть цифра 1.
Номер ответа: 7
Автор ответа:
П.С.
ICQ: 225019134
Вопросов: 36
Ответов: 41
Web-сайт:
Профиль | | #7
Добавлено: 21.08.04 22:15
Спасибо огромное!
Я так и сделал. Все получилось. Еще написал код для определения либо активного элемента, либо активного окна (MDI-приложение) в случае отсутствия фокуса у элемента, а также номер раздела по умолчанию.