Простая реализация связи между программой Delphi и справкой Chm Автор: Ли Синь [email protected] Вопрос: 1348513 Справка по формату Chm — это новый формат, появившийся только после Windows98. По сравнению с форматом .hlp он имеет более простой метод редактирования и более богатый. графика. Его получают путем компиляции файлов веб-страниц с помощью инструмента создания Chm, поэтому теоретически вы можете сделать файл справки таким же красивым, как веб-страницу. Самый простой метод создания: сначала используйте FronPage для создания файла справки, а затем используйте HTMLHelpWorkshop для его компиляции и получения файла справки *.chm. HTMLHelpWorkshop можно загрузить с веб-сайта Microsoft. Справку в приложениях можно разделить на контекстно-зависимую и неконтекстную. Контекстно-зависимый означает, что после того, как пользователь нажимает клавишу F1, для разных объектов появляется экран справки, связанный с объектом, находящимся в фокусе (например, формой, текстовым полем, раскрывающимся списком); Неассоциативная справка означает, что после нажатия клавиши F1 в любом месте программы появляется тот же экран справки. Давайте поговорим об этих двух методах и простых методах реализации в Delphi. 1. Несвязанная справка chm. В Delphi вы можете напрямую вызвать файл справки chm через функцию ShellExecute следующим образом:
.......var HWndHelp:Hwnd; i:integer;begin //Проверяем, существует ли окно справки HWndHelp:=FindWindow(nil,conHelpTitle); if HwndHelp<>0 then //Если оно существует, закрываем SendMessage( HwndHelp, WM_CLOSE, 0,0 я: = ShellExecute (дескриптор, 'open',Pchar(strCurExePath+'/help.chm''),nil, nil, sw_ShowNormal); if i<>42 then Showmessage('Файл справки help.chm поврежден!');end 2. Контекстно-зависимый; chm Чтобы реализовать контекстно-зависимую справку chm в Delphi, вы можете вызвать функцию HtmlHelpA в элементе управления HHCTRL.OCX в системном каталоге Windows System32. Требуются следующие шаги: 1. Установите свойство HelpContext соответствующего элемента управления. Например, основная форма frmMain::10100, текстовое поле edtInput: 10101, диалоговое окно dlgReport: 10200, поле со списком cbReportEdit: 102012, объявите функцию HtmlHelpA HtmlHelpA (hwndcaller:Longint; lpHelpFile:string; wCommand: Longint;dwData :строка): HWND;stdcall; external 'hhctrl.ocx'3 Ответ клавиши F1 //Открытая функция ShowChmHelp отображает различные экраны справки. PROcedure ShowChmHelp(sTopic:string); var i:integer;begin i:=HtmlHelpA(application.Handle,Pchar(ExePath+'/help.chm'),HH_DISPLAY_TOPIC,sTopic); если i=0, то начать Showmessage(' help. файл справки chm поврежден! '); выход; конец;….функция TfrmMain.FormHelp(Команда: Word; Данные: Целое число; var CallHelp: Boolean): Boolean;begin case Данные 10100: ShowChmHelp(frmMain.htm); 10101: ShowChmHelp('edtInput.htm');… else ShowChmHelp(default. хтм'); конец;конец;функция TdlgReport.FormHelp(Команда: Word; Данные: Целое число; var CallHelp: Boolean): Boolean;begin Case Данные 10200: ShowChmHelp('dlgReport.htm'); 10201: ShowChmHelp(cbReportEdit.htm');… else ShowChmHelp(default) .htm'); конец;конец;