Статьи по Delphi - Help файлы, Работа с Help файлами |
Здравствуйте, гость ( Вход | Регистрация )
Here You Can Support Our Work and .:LavTeaM:. Services |
![]() ![]() |
Статьи по Delphi - Help файлы, Работа с Help файлами |
![]()
Сообщение
#1
|
|
![]() Черный человек ![]() Группа: Модераторы Пользователь №: 9425 Сообщений: 729 Регистрация: 20.01.2005 Из: Междуреченск Загружено: байт Скачано: байт Коэффициент: --- Спасибо сказали: 11 раз(а) ![]() |
Вариант использования HTML Help в Делфи
Код // 1) После Uses... добавляешь: const HH_DISPLAY_TOPIC = $0000; HH_HELP_FINDER = $0000; // WinHelp equivalent HH_GET_WIN_HANDLE = $0006; HH_DISPLAY_TEXT_POPUP = $000E; // display string resource id or text in a popup window HH_HELP_CONTEXT = $000F; // display mapped numeric value in dwData HH_HELP_CONTEXTMENU = $0010; // text popup help // 2) Перед секцией Implementation добавляешь: function HtmlHelp( hwndCaller: HWND; pszFile: string; uCommand: Integer; dwData: integer): HWND; stdcall; external 'hhctrl.ocx' name 'HtmlHelpA'; // 3) В разделе Private у класса формы добавляешь: procedure WMHelp(var aMessage: TWMHelp); message WM_HELP; // 4) В разделе implementation пишешь: // Если смотрим помощь по пунктам меню function GetMenuHelpContext(Menu: TMenu; aMessage: TWMHelp): Integer; begin Result := 0; if (Menu <> nil) then begin Result := Menu.GetHelpContext(aMessage.HelpInfo.iCtrlId, true); if (Result = 0) then Result := Menu.GetHelpContext(aMessage.HelpInfo.hItemHandle, false); end; end; procedure TForm1.WMHelp(var aMessage: TWMHelp); // Предполагается, что класс // формы называется TForm1 var Control: TWinControl; ContextId: integer; hlp: HWND; begin if (aMessage.HelpInfo.iContextType = HELPINFO_WINDOW) then begin Control := FindControl(aMessage.HelpInfo.hItemHandle); // Ищем активный компонент while ((Control <> nil) and (Control.HelpContext = 0)) do Control := Control.Parent; if (Control = nil) then Exit; ContextId := Control.HelpContext; // Смотрим у него HelpContext end else begin ContextId := GetMenuHelpContext(Menu, aMessage); // Для меню if (ContextId = 0) then ContextId := GetMenuHelpContext(PopupMenu, aMessage); end; hlp := HtmlHelp(Handle, 'c:\WINDOWS\Help\joy.chm', HH_HELP_CONTEXT, ContextId); if (hlp = 0) then ShowMessage('Помощь не найдена!'); end; // 5) вместо 'c:\WINDOWS\Help\joy.chm' - подставляешь свой CHM - файл. Пример использования: F1 в запущенной программе Сообщение отредактировал yuansw - 28.09.2005 - 07:41 |
![]() |
|
![]()
Сообщение
#2
|
|
![]() Черный человек ![]() Группа: Модераторы Пользователь №: 9425 Сообщений: 729 Регистрация: 20.01.2005 Из: Междуреченск Загружено: байт Скачано: байт Коэффициент: --- Спасибо сказали: 11 раз(а) ![]() |
Вывод справочной информации
Чтобы вывести справочную информацию, которая находится в СНМ-файле, нужно воспользоваться ActiveX-компонентом (элементом управления) Hhopen, который входит в состав Windows и представляет собой специальную динамическую библиотеку (файл Hhopen.ocx). Первое, что следует сделать, — установить компонент Hhopen на одну из вкладок палитры компонентов. Для этого надо из меню Component выбрать команду Import ActiveX Control. На экране появится окно Import ActiveX, в котором будут перечислены все зарегистрированные в реестре Windows компоненты. В окне Import ActiveX, в списке зарегистрированных компонентов, нужно выбрать строку hhopen OLE Control module и щелкнуть на кнопке Install. В результате этого на экране появится диалоговое окно Install, в котором программист может выбрать пакет (package — пакет, библиотека компонентов), в который будет добавлен устанавливаемый компонент. Компоненты, добавляемые программистом, "по умолчанию" добавляются в пакет dclusr. В результате щелчка на кнопке ОК выбранный компонент добавляется в пакет, и на экране появляется окно Package и запрос подтверждения процесса перекомпиляции пакета. По завершении процесса компиляции на экране появится окно, информирующее о том, что компонент добавлен в пакет и зарегистрирован . Значок компонента ньореп будет добавлен на вкладку ActiveX. В процессе компиляции будет создан файл представления компонента -- модуль HHOPENLib_TLIB.pas, который содержит описание методов, свойств и событий компонента. Модуль представления можно увидеть, загрузив его в редактор кода из каталога \Delphi 7\Lib. Пролистав в окне редактора кода модуль HHOPENLib_TLIB.pas, который представляет собой интерфейс для доступа к элементу управления, можно найти описание класса THhopen Код THhopen = class(Telecontrol) private FIntf: _DHhopen; function GetControlInterface: _DHhopen; protected procedure CreateControl; procedure InitControlData; override; public function OpenHelp(const HelpFile: WideString; const HelpSection: WideString): Integer; procedure CloseHelp; property ControlInterface: _DHhopen read GetControlInterface; property DefaultInterface: _DHhopen read GetControlInterface; published property isHelpOpened: WordBool index 1 read GetWordBoolProp write SetWordBoolProp stored False; end; Класс THhOpen предоставляет два метода: OpenHelp и CloseHelp. Метод OpenHelp обеспечивает вывод справочной информации, метод close-Help — закрывает окно справочной системы. У метода OpenHelp два параметра — имя файла справочной информации и имя раздела, содержимое которого будет выведено. В качестве имени раздела надо использовать имя HTML-файла, который применялся программой HTML Help Workshop в процессе создания СНМ-файла. Следует обратить внимание на то, что оба параметра должны быть строками widechar. Следующая программа, ее диалоговое окно приведено на рис. 14.10, а текст — в листинге 14.2, демонстрирует использование ActiveX-компонента Hhopen для вывода справочной информации. Компонент Hhopen добавляется в форму обычным образом. Так как во время работы программы он не отображается, то его можно поместить в любое место формы. Код interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, OleCtrls, HHOPENLibJTLB, StdCtrls; type TForm1 = class(TForm)Label1: TLabel; Editl: TEdit; // файл справки Edit2: TEdit; //раздел справки (имя HTML-файла) Button1: TButton; // кнопка Справка Hhopen1: THhopen; // ActiveX-компонент Hhopen Label2: TLabel; Label3: TLabel; procedure ButtonlClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} // щелчок на кнопке Справка procedure TForm1.Button1Click(Sender: TObject); var HelpFile: string; // файл справки HelpTopic: string; // раздел справки pwHelpFile: PWideChar; // файл справки (указатель на строку WideChar) pwHelpTopic: PWideChar; // раздел (указатель на строку WideChar) begin HelpFile := Edit1.Text; HelpTopic := Edit2.Text; // выделить память для строк WideChar GetMemfpwHelpFile, Length(HelpFile) * 2); GetMemfpwHelpTopic, Length(HelpTopic) * 2); // преобразовать Ansi-строку в WideString-строку pwHelpFile := StringToWideChar(HelpFile, pwHelpFile, MAX_PATH * 2) pwHelpTopic := StringToWideChar(HelpTopic, pwHelpTopic, 32); // вывести справочную информацию Form1.Hhopen1.OpenHelp(pwHelpFile, pwHelpTopic); end; end. Вывод справочной информации выполняет процедура обработки события OnClick на кнопке Справка. Так как параметры метода OpenHelp должны быть строками widechar, то сначала выполняется преобразование ANSI-строки В строку WideChar. Сообщение отредактировал yuansw - 28.09.2005 - 07:41 |
![]() |
|
![]()
Сообщение
#3
|
|
![]() Черный человек ![]() Группа: Модераторы Пользователь №: 9425 Сообщений: 729 Регистрация: 20.01.2005 Из: Междуреченск Загружено: байт Скачано: байт Коэффициент: --- Спасибо сказали: 11 раз(а) ![]() |
Доступ к справочной информации
Для того чтобы во время работы программы пользователь, нажав клавишу , мог получить справочную информацию, надо чтобы свойство HelpFile главного окна приложения содержало имя файла справочной системы, а свойство HelpContext числовой идентификатор нужного раздела. Вспомните, идентификаторы разделов справочной системы перечислены в разделе [MAP] файла проекта справочной системы. Файл справочной системы приложения лучше поместить в ту папку, в которой находится файл исполняемой программы. Для каждого компонента формы, например поля ввода, можно задать свой раздел справки. Раздел справки, который появляется, если фокус находится на компоненте, и пользователь нажимает клавишу , определяется значением свойства Heipcontext этого компонента. Если значение свойства HelpContext элемента управления равно нулю, то при нажатии клавиши появляется тот раздел справки, который задан для формы приложения. Если в диалоговом окне есть кнопка Справка, то справочная информация выводится по-другому — для кнопки создается процедура обработки события onclick, которая обращением к функции winheip запускает программу Windows Help (файл Winhlp32.exe). При вызове функции winheip в качестве параметров указываются: идентификатор окна, которое запрашивает справочную информацию; имя файла справочной системы; константа, определяющая действие, которое должна выполнить программа Windows Help и уточняющий параметр. Примечание Идентификатор окна — это свойство Handle формы приложения. Свойство Handle доступно только во время работы программы, поэтому в списке свойств в окне Object Inspector его нет. Если необходимо вывести конкретный раздел справки, то в качестве параметра, определяющего действие, используется константа HELP_CONTEXT. Уточняющий параметр в этом случае задает раздел справки, который будет выведен на экран. Ниже, в качестве примера, приведена процедура обработки события Onclick для кнопки Справка (Button4) диалогового окна программы решения квадратного уравнения. Код // щелчок на кнопке Справка procedure TForm1.Button4Click(Sender: TObject); begin winhelp(Form1.Handle, 'sqroot.hip', HELP_CONTEXT, 1); end; HTML Help Workshop Современные программы выводят справочную информацию в Internet-стиле — окно, которое используется для вывода справки, напоминает окно Internet Explorer. И это не удивительно, так как для вывода справочной информации используются компоненты, составляющие основу Microsoft Internet Explorer. Система отображения справочной информации является частью операционной системы, поэтому никакие дополнительные средства для вывода справочной информации не нужны. Физически справочная информация находится в файлах с расширением chm. СНМ-файл — это так называемый компилированный HTML-документ. СНМ-файл получается путем компиляции (объединения) файлов, составляющих HTML-документ, который, как правило, состоит из нескольких HTML-файлов. Процесс преобразования HTML-документа в справочную систему называют компиляцией. Исходной информацией для компилятора справочной системы являются HTML-файлы, файлы иллюстраций и файл проекта. В результате компиляции получается СНМ-файл, содержащий всю справочную информацию. Наиболее просто создать справочную систему можно при помощи программы Microsoft HTML Help Workshop. Чтобы создать справочную систему, нужно: * подготовить файлы справочной информации; * создать файл проекта; * создать файл контекста (содержания); * выполнить компиляцию. Последние три из перечисленных выше шагов выполняются в программе HTML Help Workshop. Закрытие файла помощи При закрытии моего приложения окно помощи (если оно в это время открыто) автоматически не закрывается! Как мне сделать так, чтобы оно также закрывалось автоматически? Попробуйте так: Код Application.HelpCommand(HELP_QUIT, 0); Использование справки HTML Help Код unit uHtmlHelp;
interface uses Windows; function HtmlHelpA(hwndCaller: HWND; pszFile: PAnsiChar; uCommand: UInt; dwData: DWORD): HWND; stdcall; external 'hhctrl.ocx'; implementation end. unit SDIMAIN; // Main Window interface uses........., uHtmlHelp, .....; const HH_CLOSE_ALL = $0012; ...... ...... function TSDIAppForm.FormHelp(Command: Word; Data: Integer; var CallHelp: Boolean): Boolean; begin HtmlHelpA(handle, PChar(m_HelpFile), 15, Data); CallHelp := true; end; procedure TSDIAppForm.FormClose(Sender: TObject; var Action: TCloseAction); begin ........... HtmlHelpA(handle, PChar(m_HelpFile), HH_CLOSE_ALL, 0); end; end. Сообщение отредактировал yuansw - 28.09.2005 - 07:40 |
![]() |
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 29.07.2025 - 08:58 |